From e434fa401ed6875bbb96cbd63bbd1aa2834de0c9 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Wed, 7 Jan 2026 11:12:06 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=94=B6=E5=85=A5=E6=94=AF=E5=87=BA?= =?UTF-8?q?=E5=90=88=E5=90=8C=E9=A1=B9=E7=9B=AE=E8=B4=9F=E8=B4=A3=E4=BA=BA?= =?UTF-8?q?=E8=B5=8B=E5=80=BC=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pr/plugin/operate/InInvoiceUseCkOp.java | 2 +- .../ContractManagerAssignerTaskPlugin.java | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/ContractManagerAssignerTaskPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InInvoiceUseCkOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InInvoiceUseCkOp.java index a984222..61f4ce5 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InInvoiceUseCkOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InInvoiceUseCkOp.java @@ -65,7 +65,7 @@ public class InInvoiceUseCkOp extends AbstractOperationServicePlugIn { this.addFatalErrorMessage(extendedDataEntity, String.format("当前发票已被入库单%s绑定,不允许反审核!", ecma_materialinbill.getString("billno"))); return; } - DynamicObject zcgj_maintenanceackbill = QueryServiceHelper.queryOne("zcgj_maintenanceackbill", "billno", new QFilter[]{filter});//入库单 + DynamicObject zcgj_maintenanceackbill = QueryServiceHelper.queryOne("zcgj_maintenanceackbill", "billno", new QFilter[]{filter});//设备维修确认单 if (zcgj_maintenanceackbill != null) { this.addFatalErrorMessage(extendedDataEntity, String.format("当前发票已被设备维修确认单%s绑定,不允许反审核!", zcgj_maintenanceackbill.getString("billno"))); return; diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/ContractManagerAssignerTaskPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/ContractManagerAssignerTaskPlugin.java new file mode 100644 index 0000000..3c4fa0e --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/ContractManagerAssignerTaskPlugin.java @@ -0,0 +1,53 @@ +package zcgj.zcdev.zcdev.pr.task; + +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.exception.KDException; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; + +import java.util.Map; + +/** + * 收入支出合同项目负责人赋值定时任务 + */ +public class ContractManagerAssignerTaskPlugin extends AbstractTask { + + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + + QFilter qFilter1 = new QFilter("project", QCP.not_equals, null); + DynamicObject[] ec_in_contracts = BusinessDataServiceHelper.load("ec_in_contract", + "id,project,zcgj_projectmanager", new QFilter[]{qFilter1});//收入合同 + if (ec_in_contracts != null && ec_in_contracts.length > 0) { + for (DynamicObject ec_in_contract : ec_in_contracts) { + String projectNumber = ec_in_contract.getDynamicObject("project").getString("number");//收入合同-项目-项目编号 + QFilter[] qFilter11 = new QFilter[]{new QFilter("billno", QCP.equals, projectNumber)}; + DynamicObject ec_project = BusinessDataServiceHelper.loadSingle("ec_project", "id,zcgj_pm", qFilter11);//项目 + DynamicObject zcgj_pm = ec_project.getDynamicObject("zcgj_pm");//项目-项目负责人 + ec_in_contract.set("zcgj_projectmanager", zcgj_pm);//收入合同-项目负责人 + } + } + if (ec_in_contracts != null) { + SaveServiceHelper.save(ec_in_contracts); + } + QFilter qFilter2 = new QFilter("project", QCP.not_equals, null); + DynamicObject[] ec_out_contracts = BusinessDataServiceHelper.load("ec_out_contract", + "id,project,zcgj_projectmanager", new QFilter[]{qFilter2});//支出合同 + if (ec_out_contracts != null && ec_out_contracts.length > 0) { + for (DynamicObject ec_out_contract : ec_out_contracts) { + String projectNumber = ec_out_contract.getDynamicObject("project").getString("number");//支出合同-项目-项目编号 + QFilter[] qFilter22 = new QFilter[]{new QFilter("billno", QCP.equals, projectNumber)}; + DynamicObject ec_project = BusinessDataServiceHelper.loadSingle("ec_project", "id,zcgj_pm", qFilter22);//项目 + DynamicObject zcgj_pm = ec_project.getDynamicObject("zcgj_pm");//项目-项目负责人 + ec_out_contract.set("zcgj_projectmanager", zcgj_pm);//支出合同-项目负责人 + } + } + if (ec_out_contracts != null) { + SaveServiceHelper.save(ec_out_contracts); + } + } +} From ce459e1230a578718cd597596740e179a223be86 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Wed, 7 Jan 2026 17:05:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=94=AF=E5=87=BA=E5=90=88=E5=90=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E6=88=90=E6=9C=AC=E5=88=86?= =?UTF-8?q?=E8=A7=A3=E7=BB=93=E6=9E=84=E5=BF=85=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pr/plugin/form/OutContractFromPlugin.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFromPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFromPlugin.java index 3ddfdd7..a4a09de 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFromPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFromPlugin.java @@ -16,6 +16,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.sdk.plugin.Plugin; import java.util.ArrayList; +import java.util.EventObject; import java.util.List; /** @@ -28,6 +29,18 @@ public class OutContractFromPlugin extends AbstractBillPlugIn implements Plugin private String contracttype = "contracttype";//合同类型 + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + ((FieldEdit) this.getControl("cbs")).setMustInput(shouldCbsBeRequired());//项目成本分解结构必录设置 + } + + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + ((FieldEdit) this.getControl("cbs")).setMustInput(shouldCbsBeRequired());//项目成本分解结构必录设置 + } + @Override public void propertyChanged(PropertyChangedArgs e) { super.propertyChanged(e); @@ -35,6 +48,7 @@ public class OutContractFromPlugin extends AbstractBillPlugIn implements Plugin ChangeData changeData = e.getChangeSet()[0]; if (changeName.equals(contracttype)) {//收入合同字段值改变 //合同类型 + ((FieldEdit) this.getControl("cbs")).setMustInput(shouldCbsBeRequired());//项目成本分解结构必录设置 DynamicObject contractType = (DynamicObject)changeData.getNewValue(); if (contractType==null){ return; @@ -98,6 +112,41 @@ public class OutContractFromPlugin extends AbstractBillPlugIn implements Plugin this.getView().setEnable(false,"isonlist"); } } + ((FieldEdit) this.getControl("cbs")).setMustInput(shouldCbsBeRequired());//项目成本分解结构必录设置 + } else if (changeName.equals("isonlist") || changeName.equals("project")) { + //基于清单、项目 + ((FieldEdit) this.getControl("cbs")).setMustInput(shouldCbsBeRequired());//项目成本分解结构必录设置 } } + + /** + * 根据合同类型、计价方式和基于清单状态判断cbs字段是否必填 + * 条件:contracttype.number 不在 ['ZCHLX02', 'wzcg01', 'sbcg', 'jjfb'] 中 + * 且 isonlist=false 且 zcgj_pricetype 不等于 'bdlbdj' + */ + private boolean shouldCbsBeRequired() { + DynamicObject contracttype1 = (DynamicObject) this.getModel().getValue("contracttype"); + Object zcgj_pricetype = this.getModel().getValue("zcgj_pricetype"); + Boolean isonlist = (Boolean) this.getModel().getValue("isonlist"); + + boolean shouldSetMustInput = false; + if (contracttype1 != null) { + String number = contracttype1.getString("number"); + boolean isExcludedType = number.equals("ZCHLX02") || number.equals("wzcg01") || + number.equals("sbcg") || number.equals("jjfb"); + + // 满足条件:不是排除的类型 且 isonlist为false 且 pricetype不等于bdlbdj + if (!isExcludedType && !isonlist && + (zcgj_pricetype == null || !zcgj_pricetype.toString().equals("bdlbdj"))) { + shouldSetMustInput = true; + } + } else { + // contracttype为null的情况,根据业务需求决定是否设置必填 + if (!isonlist && (zcgj_pricetype == null || !zcgj_pricetype.toString().equals("bdlbdj"))) { + shouldSetMustInput = true; + } + } + + return shouldSetMustInput; + } } From 2b3c5dd4d0f110b8bff3d0a0db7db105502c7999 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Wed, 7 Jan 2026 17:15:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=B9=B4=E5=BA=A6?= =?UTF-8?q?=E6=88=90=E6=9C=AC=E8=A1=A8=E5=8D=95=E6=8F=92=E4=BB=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/AnnualProjectCostFromPlugin.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java new file mode 100644 index 0000000..acd96e9 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java @@ -0,0 +1,71 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.resource.ResManager; +import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.datamodel.events.ChangeData; +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; +import kd.bos.list.ListShowParameter; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.sdk.plugin.Plugin; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +/** + * 项目年度成本表单插件 + */ +public class AnnualProjectCostFromPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener, Plugin { + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + BasedataEdit zcgj_sectypef7 = (BasedataEdit) this.getControl("zcgj_sectypef7");//二级分类 + zcgj_sectypef7.addBeforeF7SelectListener(this); + } + + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String key = e.getProperty().getName(); + if ("zcgj_costtype".equals(key)) { + //成本大类 + ChangeData changeData = e.getChangeSet()[0]; + int rowIndex = changeData.getRowIndex(); + Object newValue = changeData.getNewValue(); + Object oldValue = changeData.getOldValue(); + if (newValue == null || !newValue.equals(oldValue)) { + this.getModel().setValue("zcgj_sectypef7", null, rowIndex);//二级分类 + } + } + } + + public void beforeF7Select(BeforeF7SelectEvent arg0) { + ListShowParameter parameter = (ListShowParameter) arg0.getFormShowParameter(); + int row = arg0.getRow(); + String name = arg0.getProperty().getName(); + if (StringUtils.equals(name, "zcgj_sectypef7")) { + //企业费用成本分摊明细分录-二级分类 + Object costType = this.getModel().getValue("zcgj_costtype", row);//成本项 + List qFilter = new ArrayList<>(); + if (costType != null) { + String costTypeStr = costType.toString(); + qFilter.add(new QFilter("number", QCP.like, costTypeStr.substring(0, Math.min(3, costTypeStr.length())) + "%")); + } else { + this.getView().showMessage(ResManager.loadKDString("请先选择成本项。", "EntCostSplitEditPlugin_0", "ec-ecco-formplugin", new Object[0])); + arg0.setCancel(true); + return; + } + parameter.getListFilterParameter().setQFilters(qFilter); + } + } +}