From 85478571dac73af35c90dad50f7c464efb528b5d Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Tue, 22 Jul 2025 11:31:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=91=E7=9B=AE=E5=88=86=E7=B1=BB=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E6=8F=92=E4=BB=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/DailyReimburseAccountPlugin.java | 143 +++++----- .../form/ReimbursementAccountTypePlugin.java | 252 +++++++++++------- 2 files changed, 231 insertions(+), 164 deletions(-) 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 index 36a3526..28bbc6b 100644 --- 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 @@ -21,7 +21,7 @@ import java.util.EventObject; import java.util.List; /* - * 费用报销单:费用项目过滤和科目属性赋值过滤逻辑 + * 费用报销单:费用项目过滤和科目属性赋值过滤逻辑(废弃 */ public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener { @@ -50,88 +50,93 @@ public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements P 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 + DynamicObjectCollection expenseEntryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity");//分录 + if (expenseEntryEntityCollection != null) { + DynamicObject expenseItem = expenseEntryEntityCollection.get(rowIndex).getDynamicObject("expenseitem"); + 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});//费用与科目分类 + 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) { + 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});//默认科目分类 + 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; + 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_orgTypCollection = QueryServiceHelper.query("wf_orgtype", - "number", new QFilter[]{filter3});//组织分类 + QFilter filter3 = new QFilter("entryentity.orgid", QCP.equals, costCompanyId); + DynamicObjectCollection wf_orgTypCollection = QueryServiceHelper.query("wf_orgtype", + "number", new QFilter[]{filter3});//组织分类 - if (wf_orgTypCollection != null && wf_orgTypCollection.size() > 0) { - List numbers = new ArrayList<>(); - for (DynamicObject wf_orgTyp : wf_orgTypCollection) { - String number = wf_orgTyp.getString("number"); - numbers.add(number); - } - DynamicObject orgCateGoryConfig = BusinessDataServiceHelper.loadSingle("zcgj_orgcategoryconfig", - new QFilter("number", QCP.in, numbers).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; + if (wf_orgTypCollection != null && wf_orgTypCollection.size() > 0) { + List numbers = new ArrayList<>(); + for (DynamicObject wf_orgTyp : wf_orgTypCollection) { + String number = wf_orgTyp.getString("number"); + numbers.add(number); + } + DynamicObject orgCateGoryConfig = BusinessDataServiceHelper.loadSingle("zcgj_orgcategoryconfig", + new QFilter("number", QCP.in, numbers).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("组织分类中编码有所改变,请维护对应的组织分类配置表!"); } - 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);//科目属性 @@ -139,8 +144,6 @@ public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements P } else { this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 } - } else { - this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 } } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/ReimbursementAccountTypePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/ReimbursementAccountTypePlugin.java index 0fe7c82..1e438d4 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/ReimbursementAccountTypePlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/ReimbursementAccountTypePlugin.java @@ -15,6 +15,7 @@ import kd.bos.list.ListShowParameter; import kd.bos.mvc.bill.BillView; 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; @@ -25,9 +26,9 @@ import java.util.List; /** * 1、费用报销单;2、差旅报销单;3、对公报销单;4、预付单 - * 科目分类通用插件 + * 科目分类通用插件 */ -public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener { +public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener { /** * 发票分录超链接跳转到详情 @@ -36,21 +37,19 @@ public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implemen public void registerListener(EventObject e) { super.registerListener(e); Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) - if(company!=null){ + if (company != null) { //String yzCompanyNumber ="10006475"; //兖州中材建设有限公司 - DynamicObject companyObj = (DynamicObject)company; + DynamicObject companyObj = (DynamicObject) company; Long companyId = companyObj.getLong("id"); - if(OrgCheckUtils.isKS(companyId)){ + if (OrgCheckUtils.isKS(companyId)) { //仅针对矿山下组织下的逻辑 - BasedataEdit accounttype = this.getControl("zcgj_accounttype"); //科目分类 - if(accounttype != null) { - accounttype.addBeforeF7SelectListener(this); + BasedataEdit accountType = this.getControl("zcgj_accounttype"); //科目属性 + if (accountType != null) { + accountType.addBeforeF7SelectListener(this); } - - //仅针对矿山下组织下的逻辑 - BasedataEdit expenseitem = this.getControl("expenseitem"); //科目分类 - if(expenseitem != null) { - expenseitem.addBeforeF7SelectListener(this); + BasedataEdit expenseItem = this.getControl("expenseitem"); //费用项目 + if (expenseItem != null) { + expenseItem.addBeforeF7SelectListener(this); } } } @@ -61,37 +60,37 @@ public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implemen Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) String name = beforeF7SelectEvent.getProperty().getName(); String billFormId = ((BillView) this.getView()).getFormId();//单据标识 - if(company!=null){ + if (company != null) { //String yzCompanyNumber ="10006475"; //兖州中材建设有限公司 - DynamicObject companyObj = (DynamicObject)company; + DynamicObject companyObj = (DynamicObject) company; Long companyId = companyObj.getLong("id"); - if(OrgCheckUtils.isKS(companyId)){ + if (OrgCheckUtils.isKS(companyId)) { //仅针对矿山下组织下的逻辑 - if(name.equals("zcgj_accounttype")){ //科目分类根据科目分类基础资料过滤 + if (name.equals("zcgj_accounttype")) { //科目分类根据科目分类基础资料过滤 int row = beforeF7SelectEvent.getRow(); DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity"); - if(dynamicObjectCollection!=null){ + 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")); + if (expenseitem != null) { + QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, expenseitem.getLong("id")); String typeKey = "20"; //差旅报销单 - if("er_dailyreimbursebill".equals(billFormId)){ //费用报销单 + if ("er_dailyreimbursebill".equals(billFormId)) { //费用报销单 typeKey = "30"; //差旅报销单 - }else if("er_publicreimbursebill".equals(billFormId)){ //对公报销单 + } else if ("er_publicreimbursebill".equals(billFormId)) { //对公报销单 typeKey = "40"; //差旅报销单 - }else if("er_prepaybill".equals(billFormId)){ //预付单 + } else if ("er_prepaybill".equals(billFormId)) { //预付单 typeKey = "50"; //差旅报销单 } - QFilter biztypefilter = new QFilter("zcgj_biztype",QCP.equals,typeKey); //过滤业务单据为支出财务确认单 + QFilter biztypefilter = new QFilter("zcgj_biztype", QCP.equals, typeKey); //过滤业务单据为支出财务确认单 //分录过滤 //使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据 //使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据 - DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype.number", new QFilter[]{filter,biztypefilter}); + DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype.number", new QFilter[]{filter, biztypefilter}); List numbers = new ArrayList<>(); - if(accountfeeEntries!=null){ + if (accountfeeEntries != null) { for (DynamicObject dynamicObject : accountfeeEntries) { String zcgjAccounttypeNumber = dynamicObject.getString("zcgj_entryentity.zcgj_accounttype.number"); - if(zcgjAccounttypeNumber!=null){ + if (zcgjAccounttypeNumber != null) { numbers.add(zcgjAccounttypeNumber); } } @@ -101,92 +100,157 @@ public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implemen QFilter qFilter = new QFilter("number", QCP.in, numbers); ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); showParameter.getListFilterParameter().getQFilters().add(qFilter); - }else{ + } else { this.getView().showErrorNotification("请选择费用项目!"); beforeF7SelectEvent.setCancel(true); } } - }else if("expenseitem".equals(name)){//费用项目增加过滤 - 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")); - String typeKey = "20"; //差旅报销单 - if("er_dailyreimbursebill".equals(billFormId)){ //费用报销单 - typeKey = "30"; //差旅报销单 - }else if("er_publicreimbursebill".equals(billFormId)){ //对公报销单 - typeKey = "40"; //差旅报销单 - }else if("er_prepaybill".equals(billFormId)){ //预付单 - typeKey = "50"; //差旅报销单 - } - QFilter biztypefilter = new QFilter("zcgj_biztype",QCP.equals,typeKey); //过滤业务单据为支出财务确认单 - //分录过滤 - //使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据 - //使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据 - DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype.number," + - "zcgj_entryentity.zcgj_fee.number", new QFilter[]{biztypefilter}); - List numbers = new ArrayList<>(); - if(accountfeeEntries!=null){ - for (DynamicObject dynamicObject : accountfeeEntries) { - String zcgjFeeNumber = dynamicObject.getString("zcgj_entryentity.zcgj_fee.number"); - if(zcgjFeeNumber!=null){ - numbers.add(zcgjFeeNumber); - } - } - } - QFilter qFilter = new QFilter("number", QCP.in, numbers); - ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); - showParameter.getListFilterParameter().getQFilters().add(qFilter); + } else if ("expenseitem".equals(name)) { + //费用项目增加过滤 + String typeKey = "20"; //差旅报销单 + if ("er_dailyreimbursebill".equals(billFormId)) { + typeKey = "30";//费用报销单 + } else if ("er_publicreimbursebill".equals(billFormId)) { + typeKey = "40"; //对公报销单 + } else if ("er_prepaybill".equals(billFormId)) { + typeKey = "50"; //预付单 + } + QFilter bizTypeFilter = new QFilter("zcgj_biztype", QCP.equals, typeKey); //过滤业务单据为支出财务确认单 + DynamicObject zcgj_accountFee = BusinessDataServiceHelper.loadSingle("zcgj_accountfee", + "zcgj_entryentity,zcgj_entryentity.zcgj_fee", bizTypeFilter.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); + ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + formShowParameter.getListFilterParameter().getQFilters().add(qFilter); + formShowParameter.getTreeFilterParameter().getQFilters().add(qFilter); } } } - } public void propertyChanged(PropertyChangedArgs e) { String name = e.getProperty().getName(); - ChangeData changeData = e.getChangeSet()[0]; - String billFormId = ((BillView) this.getView()).getFormId();//单据标识 - Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) - if(company!=null){ - //String yzCompanyNumber ="10006475"; //兖州中材建设有限公司 - DynamicObject companyObj = (DynamicObject)company; - Long companyId = companyObj.getLong("id"); - if(OrgCheckUtils.isKS(companyId)){ - //仅针对矿山下组织下的逻辑 - if(StringUtils.equals(name, "expenseitem")){ //费用项目发生改变时,清空科目分类 - int rowIndex = changeData.getRowIndex(); - DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity"); - if(dynamicObjectCollection!=null){ - DynamicObject zcgjExpenseitem = dynamicObjectCollection.get(rowIndex).getDynamicObject("expenseitem"); - QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee",QCP.equals,zcgjExpenseitem.getLong("id")); - String typeKey = "20"; //差旅报销单 - if("er_dailyreimbursebill".equals(billFormId)){ //费用报销单 - typeKey = "30"; //差旅报销单 - }else if("er_publicreimbursebill".equals(billFormId)){ //对公报销单 - typeKey = "40"; //差旅报销单 - }else if("er_prepaybill".equals(billFormId)){ //预付单 - typeKey = "50"; //差旅报销单 + if (StringUtils.equals(name, "expenseitem")) { + //费用项目 + String billFormId = ((BillView) this.getView()).getFormId();//单据标识 + DynamicObject costCompany = (DynamicObject) this.getModel().getValue("costcompany");//费用承担公司 + long costCompanyId = costCompany.getLong("id");//费用承担公司id + if (!OrgCheckUtils.isKS(costCompanyId)) { + //不是矿山不进入下面逻辑 + return; + } + ChangeData changeData = e.getChangeSet()[0]; + int rowIndex = changeData.getRowIndex();//所选行 + DynamicObjectCollection entryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity");//分录 + if (entryEntityCollection != null) { + DynamicObject expenseItem = entryEntityCollection.get(rowIndex).getDynamicObject("expenseitem"); + if (expenseItem == null) { + this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性 + return; + } + long expenseItemId = expenseItem.getLong("id");//费用项目id + + String typeKey = "20"; //差旅报销单 + if ("er_dailyreimbursebill".equals(billFormId)) { + typeKey = "30";//费用报销单 + } else if ("er_publicreimbursebill".equals(billFormId)) { + typeKey = "40"; //对公报销单 + } else if ("er_prepaybill".equals(billFormId)) { + typeKey = "50"; //预付单 + } + QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, expenseItemId).and("zcgj_biztype", QCP.equals, typeKey); + 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 biztypefilter = new QFilter("zcgj_biztype",QCP.equals,typeKey); //过滤业务单据为支出财务确认单 - //分录过滤 - //使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据 - //使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据 - DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype", new QFilter[]{filter,biztypefilter}); - if(accountfeeEntries!=null && accountfeeEntries.size()==1){ - long id = accountfeeEntries.get(0).getLong("zcgj_entryentity.zcgj_accounttype"); - this.getModel().setValue("zcgj_accounttype",id,rowIndex); - }else{ - this.getModel().setValue("zcgj_accounttype",null,rowIndex); + + QFilter filter3 = new QFilter("entryentity.orgid", QCP.equals, costCompanyId); + DynamicObjectCollection wf_orgTypCollection = QueryServiceHelper.query("wf_orgtype", + "number", new QFilter[]{filter3});//组织分类 + + if (wf_orgTypCollection != null && wf_orgTypCollection.size() > 0) { + List numbers = new ArrayList<>(); + for (DynamicObject wf_orgTyp : wf_orgTypCollection) { + String number = wf_orgTyp.getString("number"); + numbers.add(number); + } + DynamicObject orgCateGoryConfig = BusinessDataServiceHelper.loadSingle("zcgj_orgcategoryconfig", + new QFilter("number", QCP.in, numbers).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);//科目属性 } } }