From b841584609cde250b3f8f9e87f81b5676d2f9c1c Mon Sep 17 00:00:00 2001 From: xiaoshi <2272816786@qq.com> Date: Thu, 5 Jun 2025 18:14:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=90=8C=E7=B1=BB=E5=9E=8B=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=AD=97=E6=AE=B5=20=E7=BB=AD=E7=AD=BE=E5=90=88?= =?UTF-8?q?=E5=90=8C=E4=B8=8E=E7=BB=AD=E7=AD=BE=E6=9F=A5=E8=AF=A2=20?= =?UTF-8?q?=E5=90=88=E5=90=8C=E7=BB=93=E7=AE=97=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pr/plugin/form/EcContractFromPlugin.java | 17 ++- .../form/EcInFinalsettleJusCustPlugin.java | 24 +++ .../plugin/form/QueryInstancesFromPlugin.java | 94 ++++++++++++ .../form/RenewalContractBillPlugin.java | 144 ++++++++++++++++++ .../zcdev/pr/plugin/utils/PluginUtils.java | 22 +++ 5 files changed, 299 insertions(+), 2 deletions(-) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/QueryInstancesFromPlugin.java create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RenewalContractBillPlugin.java create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/utils/PluginUtils.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContractFromPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContractFromPlugin.java index 1b26233..8946668 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContractFromPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContractFromPlugin.java @@ -2,6 +2,7 @@ package zcgj.zcdev.zcdev.pr.plugin.form; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.sdk.plugin.Plugin; @@ -17,7 +18,6 @@ public class EcContractFromPlugin extends AbstractBillPlugIn implements Plugin { @Override public void afterCreateNewData(EventObject e) { super.afterCreateNewData(e); - } @Override @@ -25,7 +25,20 @@ public class EcContractFromPlugin extends AbstractBillPlugIn implements Plugin { super.propertyChanged(e); String name = e.getProperty().getName(); ChangeData changeData = e.getChangeSet()[0]; - + if (name.equals("contracttype")){ + Object contracttype = this.getModel().getValue("contracttype"); + if (contracttype!=null){ + DynamicObject type = (DynamicObject) contracttype; + String number = type.getString("number"); + if (number.equals("sbzssr")){ + this.getView().setVisible(true,"zcgj_equipment"); + this.getView().setVisible(false,"zcgj_administer"); + } else if (number.equals("hfzl")) { + this.getView().setVisible(true,"zcgj_administer"); + this.getView().setVisible(false,"zcgj_equipment"); + } + } + } Object taxrate = this.getModel().getValue("taxrate"); if (taxrate != null) { DynamicObject taxrateInfo = (DynamicObject) taxrate; diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcInFinalsettleJusCustPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcInFinalsettleJusCustPlugin.java index 61f6daa..0b77367 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcInFinalsettleJusCustPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcInFinalsettleJusCustPlugin.java @@ -4,6 +4,7 @@ import kd.bos.bill.AbstractBillPlugIn; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.form.field.BasedataEdit; import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectListener; @@ -13,8 +14,10 @@ import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.user.UserServiceHelper; import kd.sdk.plugin.Plugin; +import zcgj.zcdev.zcdev.pr.plugin.utils.PluginUtils; import java.util.ArrayList; +import java.util.Date; import java.util.EventObject; import java.util.List; @@ -54,4 +57,25 @@ public class EcInFinalsettleJusCustPlugin extends AbstractBillPlugIn implements } } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String name = e.getProperty().getName(); + if (name.equals("contract")){ + Object objcontract = this.getModel().getValue("contract"); + if (objcontract!=null){ + DynamicObject contract = (DynamicObject) objcontract; + DynamicObject contractInfo = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,billname,zcgj_renewal,zcgj_isrenewal,zcgj_enddate", new QFilter[]{new QFilter("id", QCP.equals, contract.getLong("id"))}); + Date zcgjEnddate = contractInfo.getDate("zcgj_enddate"); + Date nowdate = new Date(); + int timeDays = PluginUtils.getTimeDays(zcgjEnddate, nowdate); +// int endDays = Integer.parseInt(System.getProperty("endDays")); + int endDays = 100; + if (timeDays-endDays<=0){ + this.getView().showTipNotification("当前选择合同距离到期不足"+endDays+"天!"); + } + } + } + } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/QueryInstancesFromPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/QueryInstancesFromPlugin.java new file mode 100644 index 0000000..cb37125 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/QueryInstancesFromPlugin.java @@ -0,0 +1,94 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import kd.bos.bill.BillShowParameter; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType; +import kd.bos.entity.datamodel.events.BizDataEventArgs; +import kd.bos.form.FormShowParameter; +import kd.bos.form.ShowType; +import kd.bos.form.control.EntryGrid; +import kd.bos.form.control.events.CellClickEvent; +import kd.bos.form.control.events.CellClickListener; +import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.util.EventObject; +import java.util.List; +import java.util.Map; + +public class QueryInstancesFromPlugin extends AbstractFormPlugin implements CellClickListener { + + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + Map customParams = this.getView().getFormShowParameter().getCustomParams(); + Object list = customParams.get("list"); + if (list!=null){ + JSONArray jsonArray = JSONArray.parseArray(list.toString()); + DynamicObjectCollection entrys = (DynamicObjectCollection)getModel().getValue("zcgj_entryentity"); + entrys.remove(0); + for (int i = 0; i < jsonArray.size(); i++) { + DynamicObjectType type = entrys.getDynamicObjectType(); + DynamicObject entry = new DynamicObject(type); + JSONObject jsonObject = jsonArray.getJSONObject(i); + entry.set("zcgj_billno",jsonObject.getString("zcgj_billno")); + entry.set("zcgj_billname",jsonObject.getString("zcgj_billname")); + entry.set("zcgj_renewalnum",jsonObject.getString("zcgj_renewalnum")); + entry.set("zcgj_renewalname",jsonObject.getString("zcgj_renewalname")); + entrys.add(entry); + this.getModel().setValue("zcgj_billno",jsonObject.getString("zcgj_billno"),i); + this.getModel().setValue("zcgj_billname",jsonObject.getString("zcgj_billname"),i); + this.getModel().setValue("zcgj_renewalnum",jsonObject.getString("zcgj_renewalnum"),i); + this.getModel().setValue("zcgj_renewalname",jsonObject.getString("zcgj_renewalname"),i); + } + } + } + + + public void registerListener(EventObject e) { + super.registerListener(e); + EntryGrid control = (EntryGrid)getView().getControl("zcgj_entryentity"); + control.addCellClickListener(this); + } + + @Override + public void cellClick(CellClickEvent cellClickEvent) { + String fieldKey = cellClickEvent.getFieldKey(); + if (!fieldKey.equals("0")) { + int row = cellClickEvent.getRow(); + if (fieldKey.equals("zcgj_billno")){ + Object number = getModel().getValue("zcgj_billno", row); + if (number!=null){ + DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("billno", QCP.equals, number.toString())}); + BillShowParameter formShowParameter = new BillShowParameter(); + formShowParameter.setFormId("ec_in_contract"); + formShowParameter.setPkId(contract.getLong("id")); + formShowParameter.getOpenStyle().setShowType(ShowType.Modal); + getView().showForm(formShowParameter); + } + } else if (fieldKey.equals("zcgj_renewalnum")) { + Object number = getModel().getValue("zcgj_renewalnum", row); + if (number!=null){ + DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("billno", QCP.equals, number.toString())}); + BillShowParameter formShowParameter = new BillShowParameter(); + formShowParameter.setFormId("ec_in_contract"); + formShowParameter.setPkId(contract.getLong("id")); + formShowParameter.getOpenStyle().setShowType(ShowType.Modal); + getView().showForm(formShowParameter); + } + } + + } + } + + @Override + public void cellDoubleClick(CellClickEvent cellClickEvent) { + + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RenewalContractBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RenewalContractBillPlugin.java new file mode 100644 index 0000000..9debb45 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RenewalContractBillPlugin.java @@ -0,0 +1,144 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.greenpineyu.fel.common.NumberUtil; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.ListSelectedRow; +import kd.bos.entity.datamodel.ListSelectedRowCollection; +import kd.bos.form.CloseCallBack; +import kd.bos.form.FormShowParameter; +import kd.bos.form.ShowType; +import kd.bos.form.control.events.BeforeItemClickEvent; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.mvc.bill.BillModel; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +public class RenewalContractBillPlugin extends AbstractListPlugin { + + + + @Override + public void afterCopyData(EventObject e) { + BillModel billModel = (BillModel) e.getSource(); + Object billno = billModel.getValue("billno"); + DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,billname,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("billno", QCP.equals, billno)}); + super.afterCopyData(e); + this.getModel().setValue("id", null);//id + this.getModel().setValue("billno", null);//合同编码 + this.getModel().setValue("billname", contract.getString("billname")+"-续签");//合同名称 + this.getModel().setValue("zcgj_startdate", null);//起始日期 + this.getModel().setValue("zcgj_enddate", null);//终止日期 +// DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,zcgj_renewal", new QFilter[]{new QFilter("billno", QCP.equals, billno)}); + this.getModel().setValue("zcgj_renewal", contract);//续签主合同 + this.getModel().setValue("zcgj_isrenewal", true);//是否续签 + } + + + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + // 工具栏注册监听(注意这里是把整个工具栏注册监听,工具栏项是没有运行时控件模型的) + this.addItemClickListeners("tbmain");//监听按钮 + + } + + @Override + public void itemClick(ItemClickEvent evt) { + String itemKey = evt.getItemKey(); +// List objects = new ArrayList<>(); + JSONArray jsonArray = new JSONArray(); +// Map map = new HashMap<>(); + if (itemKey.equals("zcgj_queryinstances")) { + Set setIds = getSelectOrderIds(this.getSelectedRows()); + if (setIds.size() == 0) { + this.getView().showTipNotification("请选择要执行的数据。"); + return; + } else if (setIds.size() > 1) { + this.getView().showTipNotification("只能选择一条数据查看!"); + return; + } + DynamicObject[] receiveApplications = BusinessDataServiceHelper.load("ec_in_contract", "billno,billname,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("id", "in", setIds)}); + DynamicObject receiveApplication = receiveApplications[0]; + String billno = receiveApplication.getString("billno"); + + QFilter qf = new QFilter("zcgj_renewal.billno", QCP.equals,billno); + DynamicObject[] recontracts = BusinessDataServiceHelper.load("ec_in_contract", "id,billno,billname,zcgj_renewal", new QFilter[]{qf}); + for (DynamicObject recontract : recontracts) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("zcgj_billno",billno); + jsonObject.put("zcgj_billname",receiveApplication.getString("billname")); + jsonObject.put("zcgj_renewalnum",recontract.getString("billno")); + jsonObject.put("zcgj_renewalname",recontract.getString("billname")); +// objects.add( )); +// map.put(recontract.getLong("id"),recontract.getString("billno")); + jsonArray.add(jsonObject); + } + if (jsonArray.size()<1){ + this.getView().showTipNotification("该合同暂无续签合同!"); + return; + } + // 如果是弹出动态表单工具栏项被点击,则打开指定的动态表单 + if ("zcgj_queryinstances".equalsIgnoreCase(itemKey)) { + FormShowParameter formShowParameter = new FormShowParameter(); + // 弹窗案例-动态表单 页面标识 + formShowParameter.setFormId("zcgj_ec_renewal"); + // 自定义传参,把当前单据的文本字段传过去 + formShowParameter.setCustomParam("list", jsonArray.toJSONString()); + // 设置回调事件,回调插件为当前插件,标识为zcgj_ + formShowParameter.setCloseCallBack(new CloseCallBack(this, "zcgj_queryinstances")); + // 设置打开类型为模态框(不设置的话指令参数缺失,没办法打开页面) + formShowParameter.getOpenStyle().setShowType(ShowType.Modal); + // 当前页面发送showform指令。注意也可以从其他页面发送指令,后续有文章介绍 + this.getView().showForm(formShowParameter); + } + } + super.itemClick(evt); + } + + @Override + public void beforeItemClick(BeforeItemClickEvent evt) { + super.beforeItemClick(evt); + String itemKey = evt.getItemKey(); + if (itemKey.equals("zcgj_inrenewal")) { + Set setIds = getSelectOrderIds(this.getSelectedRows()); + if (setIds.size() == 0) { + this.getView().showTipNotification("请选择要执行的数据。"); + return; + } else if (setIds.size() > 1) { + this.getView().showTipNotification("只能选择一条数据查看!"); + return; + } + DynamicObject[] receiveApplications = BusinessDataServiceHelper.load("ec_in_contract", "billno,zcgj_renewal,zcgj_isrenewal,contstatus", new QFilter[]{new QFilter("id", "in", setIds)}); + DynamicObject receiveApplication = receiveApplications[0]; + boolean isrenewal = receiveApplication.getBoolean("zcgj_isrenewal"); + if (isrenewal){ + this.getView().showTipNotification("续签合同不能进行续签!"); + evt.setCancel(true); + return; + } + String contstatus = receiveApplication.getString("contstatus"); + if (!contstatus.equals("01")){ + this.getView().showTipNotification("收入合同需执行中才可进行续签!"); + evt.setCancel(true); + return; + } + } + } + + @NotNull + private Set getSelectOrderIds(@NotNull ListSelectedRowCollection selectedRows) { + Set setIds = new HashSet<>(); + for (ListSelectedRow selectedRow : selectedRows) { + setIds.add(NumberUtil.toLong(selectedRow.getPrimaryKeyValue())); + } + return setIds; + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/utils/PluginUtils.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/utils/PluginUtils.java new file mode 100644 index 0000000..e991f21 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/utils/PluginUtils.java @@ -0,0 +1,22 @@ +package zcgj.zcdev.zcdev.pr.plugin.utils; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; + +public class PluginUtils { + + /* + 计算两个时间中的天数 + */ + public static int getTimeDays(Date starDate, Date endDate) { + // 将 Date 转换为 LocalDate + LocalDate localDate1 = starDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate localDate2 = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + // 计算相差的天数 + long daysDifference = Math.abs(localDate2.toEpochDay() - localDate1.toEpochDay()); + + return Math.toIntExact(daysDifference); + } +}