From 56ffe5eba619db019db2afa06466af3f410484a9 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Mon, 21 Jul 2025 18:21:40 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=9A=E6=94=AF=E5=87=BA=E5=90=88=E5=90=8C?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E5=8D=95=E6=B7=BB=E5=8A=A0=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=BF=87=E6=BB=A4=E5=92=8C=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=B8=85=E7=A9=BA=E6=97=B6=E7=9A=84=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E6=8A=A5=E9=94=99=EF=BC=9B2=EF=BC=9A=E8=B4=B9?= =?UTF-8?q?=E7=94=A8=E6=8A=A5=E9=94=80=E5=8D=95=EF=BC=9A=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=BF=87=E6=BB=A4=E5=92=8C=E7=A7=91=E7=9B=AE?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E8=B5=8B=E5=80=BC=E8=BF=87=E6=BB=A4=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/DailyReimburseAccountPlugin.java | 198 ++++++++++++++++++ .../form/OutContractFinaceConfirmePlugin.java | 33 ++- 2 files changed, 225 insertions(+), 6 deletions(-) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyReimburseAccountPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyReimburseAccountPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyReimburseAccountPlugin.java new file mode 100644 index 0000000..0fcac7b --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyReimburseAccountPlugin.java @@ -0,0 +1,198 @@ +package zcgj.zcdev.zcdev.fs.plugin.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +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.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; +import kd.sdk.plugin.Plugin; +import zcgj.zcdev.zcdev.fs.utils.OrgCheckUtils; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +/* + * 费用报销单:费用项目过滤和科目属性赋值过滤逻辑 + */ +public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener { + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + BasedataEdit expenseItem = this.getControl("expenseitem"); //费用项目 + if (expenseItem != null) { + expenseItem.addBeforeF7SelectListener(this); + } + BasedataEdit accountType = this.getControl("zcgj_accounttype"); //科目属性 + if (accountType != null) { + accountType.addBeforeF7SelectListener(this); + } + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + String name = e.getProperty().getName(); + if (name.equals("expenseitem")) { + //费用项目 + DynamicObject costCompany = (DynamicObject) this.getModel().getValue("costcompany");//费用承担公司 + long costCompanyId = costCompany.getLong("id");//费用承担公司id + if (!OrgCheckUtils.isKS(costCompanyId)) { + //不是矿山不进入下面逻辑 + return; + } + ChangeData changeData = e.getChangeSet()[0]; + DynamicObject expenseItem = (DynamicObject) changeData.getNewValue();//费用项目新值 + int rowIndex = changeData.getRowIndex();//所选行 + if (expenseItem == null) { + this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 + return; + } + long expenseItemId = expenseItem.getLong("id");//费用项目id + + QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, expenseItemId); + DynamicObjectCollection AccountFeeCollection = QueryServiceHelper.query("zcgj_accountfee", + "zcgj_entryentity.zcgj_accounttype", new QFilter[]{filter});//费用与科目分类 + + if (AccountFeeCollection != null && AccountFeeCollection.size() == 1) { + //费用与科目分类中费用项目与科目分类为一对一的关系,直接获取科目分类赋值 + long id = AccountFeeCollection.get(0).getLong("zcgj_entryentity.zcgj_accounttype"); + this.getModel().setValue("zcgj_accounttype", id, rowIndex); + } else if (AccountFeeCollection != null && AccountFeeCollection.size() > 1) { + /* + 费用与科目分类中费用项目与科目分类为一对多的关系,先查询默认科目分类,存在默认科目分类数据时,如若通过费用承担公司与公司科目分类规则中查询到对应数据,便直接赋值 + 如若没有,则通过费用承担公司在组织分类中查询对应默认分类,再通过组织分类配置表确认默认科目分类 + */ + QFilter filter1 = new QFilter("zcgj_entryexpense.zcgj_expenseitem", QCP.equals, expenseItemId); + DynamicObjectCollection orgTypeDefaultCollection = QueryServiceHelper.query("zcgj_orgtypedefault", + "zcgj_entryexpense.zcgj_yanzhou,zcgj_entryexpense.zcgj_xian,zcgj_entryexpense.zcgj_nanjing,zcgj_entryexpense.zcgj_tianjin", + new QFilter[]{filter1});//默认科目分类 + + if (orgTypeDefaultCollection != null && orgTypeDefaultCollection.size() == 1) { + DynamicObject companyRule = BusinessDataServiceHelper.loadSingle("zcgj_companyrule", + new QFilter("zcgj_costcompany.id", QCP.equals, costCompanyId).toArray());//公司科目分类规则 + if (companyRule != null) { + DynamicObjectCollection entryRuleCollection = companyRule.getDynamicObjectCollection("zcgj_entryrule");//公司费用分类规则分录 + for (DynamicObject entryRule : entryRuleCollection) { + DynamicObject entryRuleExpenseItem = entryRule.getDynamicObject("zcgj_expenseitem");//费用项目 + String entryRuleRuleType = entryRule.getString("zcgj_ruletype");//分类规则 + if (entryRuleRuleType.equals("公司") && entryRuleExpenseItem.getLong("id") == expenseItemId) { + DynamicObject entryRuleCompanyType = entryRule.getDynamicObject("zcgj_companytype");//公司默认分类(科目分类) + this.getModel().setValue("zcgj_accounttype", entryRuleCompanyType, rowIndex); + return; + } + } + } + + QFilter filter3 = new QFilter("entryentity.orgid", QCP.equals, costCompanyId); + DynamicObjectCollection wf_orgTyp = QueryServiceHelper.query("wf_orgtype", + "number", new QFilter[]{filter3});//组织分类 + + if (wf_orgTyp != null && wf_orgTyp.size() == 1) { + String wf_orgTypeNumber = (String) wf_orgTyp.get(0).get("number");//组织分类编号 + DynamicObject orgCateGoryConfig = BusinessDataServiceHelper.loadSingle("zcgj_orgcategoryconfig", + new QFilter("number", QCP.equals, wf_orgTypeNumber).toArray());//组织分类配置表 + + String accountType = null;//默认科目分类中的科目分类 + if (orgCateGoryConfig != null) { + String defaultSubjectCode = orgCateGoryConfig.getString("zcgj_defaultsubjectcode");//默认科目分类编码 + switch (defaultSubjectCode) { + case "ZCKS_NJXMBM": + //南京项目 + accountType = "zcgj_nanjing"; + break; + case "ZCKS_TJXMBM": + //天津项目 + accountType = "zcgj_tianjin"; + break; + case "ZCKS_XAXMBM": + //西安项目 + accountType = "zcgj_xian"; + break; + case "ZCKS_YZ_XMBM": + //兖州项目 + accountType = "zcgj_yanzhou"; + break; + } + long id = orgTypeDefaultCollection.get(0).getLong("zcgj_entryexpense." + accountType); + this.getModel().setValue("zcgj_accounttype", id, rowIndex);//科目属性 + } else { + //组织分类配置表中未查询到对应数据,说明组织分类中编码有所改变,需维护对应的组织分类配置表 + this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 + this.getView().showErrorNotification("组织分类中编码有所改变,请维护对应的组织分类配置表!"); + } + } else { + this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 + } + } else { + this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 + } + } else { + this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 + } + } + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { + DynamicObject costCompany = this.getView().getModel().getDataEntity(true).getDynamicObject("costcompany"); + long costCompanyId = costCompany.getLong("id"); + if (!OrgCheckUtils.isKS(costCompanyId)) { + //不是矿山不进入下面逻辑 + return; + } + String name = beforeF7SelectEvent.getProperty().getName(); + ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + if (name.equals("expenseitem")) { + //费用项目 + DynamicObject zcgj_accountfee = BusinessDataServiceHelper.loadSingle("zcgj_accountfee", + new QFilter("zcgj_biztype", QCP.equals, "10").toArray());//费用与科目分类表 + List feeNumbers = new ArrayList<>(); + if (zcgj_accountfee != null) { + DynamicObjectCollection entryEntityCollection = zcgj_accountfee.getDynamicObjectCollection("zcgj_entryentity");//分录 + for (DynamicObject entryEntity : entryEntityCollection) { + DynamicObject fee = entryEntity.getDynamicObject("zcgj_fee");//费用项目 + String feeNumber = fee.getString("number"); + feeNumbers.add(feeNumber); + } + } + QFilter qFilter = new QFilter("number", QCP.in, feeNumbers); + formShowParameter.getListFilterParameter().getQFilters().add(qFilter); + formShowParameter.getTreeFilterParameter().getQFilters().add(qFilter); + } else if (name.equals("zcgj_accounttype")) { + //科目属性 + int row = beforeF7SelectEvent.getRow(); + DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity");//分录 + if (dynamicObjectCollection != null) { + DynamicObject expenseItem = dynamicObjectCollection.get(row).getDynamicObject("expenseitem");//费用项目 + if (expenseItem != null) { + QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, expenseItem.getLong("id")); + DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", + "zcgj_entryentity.zcgj_accounttype.number", new QFilter[]{filter});//费用与科目分类 + List numbers = new ArrayList<>(); + if (accountfeeEntries != null) { + for (DynamicObject dynamicObject : accountfeeEntries) { + String zcgjAccounttypeNumber = dynamicObject.getString("zcgj_entryentity.zcgj_accounttype.number"); + if (zcgjAccounttypeNumber != null) { + numbers.add(zcgjAccounttypeNumber); + } + } + } + QFilter qFilter = new QFilter("number", QCP.in, numbers); + formShowParameter.getListFilterParameter().getQFilters().add(qFilter); + } else { + this.getView().showErrorNotification("请选择费用项目!"); + beforeF7SelectEvent.setCancel(true); + } + } + } + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java index b0bad53..a9c1df6 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java @@ -22,6 +22,7 @@ import kd.bos.form.field.RefBillEdit; import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectListener; import kd.bos.list.ListShowParameter; +import kd.bos.org.utils.OrgTreeUtils; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.permission.api.HasPermOrgResult; @@ -123,7 +124,11 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_expenseitementry"); if(dynamicObjectCollection!=null){ DynamicObject zcgjExpenseitem = dynamicObjectCollection.get(rowIndex).getDynamicObject("zcgj_expenseitem"); - QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee",QCP.equals,zcgjExpenseitem.getLong("id")); + if (zcgjExpenseitem == null) { + this.getModel().setValue("zcgj_accounttype", null, rowIndex); + return; + } + QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, zcgjExpenseitem.getLong("id")); //分录过滤 //使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据 //使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据 @@ -201,6 +206,11 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme if(accounttype != null) { accounttype.addBeforeF7SelectListener(this); } + + BasedataEdit zcgj_expenseitem = this.getControl("zcgj_expenseitem"); //费用项目 + if (zcgj_expenseitem != null) { + zcgj_expenseitem.addBeforeF7SelectListener(this); + } } @Override @@ -274,8 +284,6 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme } - - @Override public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { String name = beforeF7SelectEvent.getProperty().getName(); @@ -346,10 +354,23 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme this.getView().showErrorNotification("请选择费用项目!"); beforeF7SelectEvent.setCancel(true); } - } - + } else if (name.equals("zcgj_expenseitem")) { + //费用项目 + ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + DynamicObject zcgj_accountfee = BusinessDataServiceHelper.loadSingle("zcgj_accountfee", new QFilter("zcgj_biztype", QCP.equals, "10").toArray());//获取费用与科目分类表 + List numbers = new ArrayList<>(); + if (zcgj_accountfee != null) { + DynamicObjectCollection zcgj_entryentity = zcgj_accountfee.getDynamicObjectCollection("zcgj_entryentity");//分录 + for (DynamicObject dynamicObject : zcgj_entryentity) { + DynamicObject zcgj_fee = dynamicObject.getDynamicObject("zcgj_fee");//费用项目 + String number = zcgj_fee.getString("number"); + numbers.add(number); + } + } + QFilter qFilter = new QFilter("number", QCP.in, numbers); + formShowParameter.getListFilterParameter().getQFilters().add(qFilter); + formShowParameter.getTreeFilterParameter().getQFilters().add(qFilter); } - } }