From 5cb700ebfab02c3e2dfc58d41a66c97070dcf13f Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Mon, 29 Sep 2025 13:46:04 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E7=A7=91=E7=9B=AE=E4=BD=99=E9=A2=9D?= =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E5=8F=96=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/common/AssistbalanceAutoData.java | 9 ++ .../plugin/common/SubjectbalanceAutoData.java | 90 ++++++++++--------- .../common/SuppliertbalanceAutoData.java | 13 +++ 3 files changed, 69 insertions(+), 43 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java index 06d101f..8f17e78 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java @@ -10,6 +10,7 @@ import kd.bos.openapi.common.util.OpenApiSdkUtil; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.DeleteServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import zcgj.zcdev.zcdev.fs.utils.AccountRecord; import zcgj.zcdev.zcdev.fs.utils.BalanceQueryParamApi; @@ -171,6 +172,14 @@ public class AssistbalanceAutoData { if (!addEntities.isEmpty()) { try { + + // ✅ 删除旧数据(保证每个组织、每个期间只保留一份最新的) + Long orgId = orgObj.getLong("id"); + Long periodId = curperiod.getLong("id"); + QFilter orgFilter = new QFilter("zcgj_org", QCP.equals, orgId); + QFilter periodFilter = new QFilter("zcgj_period", QCP.equals, periodId); + DeleteServiceHelper.delete("zcgj_rpt_assistbalance", new QFilter[]{orgFilter.and(periodFilter)}); + SaveServiceHelper.save(addEntities.toArray(new DynamicObject[0])); } catch (Exception ex) { throw new RuntimeException(ex); diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SubjectbalanceAutoData.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SubjectbalanceAutoData.java index 1e168f3..9526740 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SubjectbalanceAutoData.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SubjectbalanceAutoData.java @@ -11,6 +11,7 @@ import kd.bos.openapi.common.util.OpenApiSdkUtil; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.DeleteServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.util.StringUtils; import zcgj.zcdev.zcdev.fs.utils.AccountRecord; @@ -23,27 +24,26 @@ public class SubjectbalanceAutoData { private static final String[] asseestypeArrays = new String[]{"0032","0017",""}; - public static void getData(){ - String[] selectorsArray = new String[]{"beginlocal", "endlocal", "yeardebitfor","yearcreditfor","debitlocal","creditlocal"}; + public static void getData() { + String[] selectorsArray = new String[]{"beginlocal", "endlocal", "yeardebitfor", "yearcreditfor", "debitlocal", "creditlocal"}; QFilter filteraccountTable = new QFilter("number", QCP.equals, "0003"); DynamicObject accountTableLoad = BusinessDataServiceHelper.loadSingle("bd_accounttable", "id", new QFilter[]{filteraccountTable}); - //查询核算组织 + // 查询核算组织 QFilter number = new QFilter("fisaccounting", "=", "1"); QFilter structure = new QFilter("structure.longnumber", QCP.like, "10000000!10006431%"); QFilter isleaf = new QFilter("structure.isleaf", QCP.equals, true); - DynamicObject[] load = BusinessDataServiceHelper.load("bos_org", "id,structure.longnumber,structure.view", new QFilter[]{number, structure,isleaf}); + DynamicObject[] load = BusinessDataServiceHelper.load("bos_org", "id,structure.longnumber,structure.view", new QFilter[]{number, structure, isleaf}); List orgIds = new ArrayList<>(); - Map orgNumberMap = new HashMap<>(); - for (int i = 0; i < load.length; i++) { - DynamicObject dynamicObject = load[i]; + Map orgNumberMap = new HashMap<>(); + for (DynamicObject dynamicObject : load) { orgNumberMap.put(dynamicObject.getString("number"), dynamicObject); orgIds.add(dynamicObject.getLong("id")); } DynamicObject[] costcompany = BusinessDataServiceHelper.load("zcgj_minecompany", "zcgj_costcompany", new QFilter[]{}); - if(costcompany != null){ + if (costcompany != null) { List ids = new ArrayList<>(); for (DynamicObject dynamicObject : costcompany) { DynamicObject minecompany = dynamicObject.getDynamicObject("zcgj_costcompany"); @@ -57,7 +57,8 @@ public class SubjectbalanceAutoData { orgIds.add(dynamicObject.getLong("id")); } } - //查询组织下对应的当前期间数据 + + // 查询组织下对应的当前期间数据 DynamicObject[] orgByCurperiod = BusinessDataServiceHelper.load("gl_accountbook", "org,curperiod", new QFilter[]{new QFilter("enable", QCP.equals, Boolean.TRUE). @@ -67,23 +68,22 @@ public class SubjectbalanceAutoData { orgByCurperiodMap.put(dynamicObject.getLong("org.id"), dynamicObject); } - //清除数据 - //DeleteServiceHelper.delete("zcgj_rpt_assistbalance",new QFilter[]{}); + // 标记旧数据为非最新 List sqlparams = new ArrayList<>(); - Object[] sqlparam = new Object[] { false }; + Object[] sqlparam = new Object[]{false}; sqlparams.add(sqlparam); DB.executeBatch(DBRoute.of("fi"), "update tk_zcgj_rpt_assistbalangx set fk_zcgj_isnew = ? ", sqlparams); for (String asseestype : asseestypeArrays) { - //查询科目余额配置表 + // 查询科目余额配置表 DynamicObject[] accountConf = BusinessDataServiceHelper.load("zcgj_conf_balanceaccoungx", "zcgj_entryentity.zcgj_account,zcgj_entryentity.zcgj_asseestype", new QFilter[]{}); Set accountNumber = new HashSet<>(); for (DynamicObject dynamicObject : accountConf) { DynamicObjectCollection zcgjEntryentity = dynamicObject.getDynamicObjectCollection("zcgj_entryentity"); for (DynamicObject object : zcgjEntryentity) { String zcgjAsseestype = object.getString("zcgj_asseestype"); - if(asseestype.equals(zcgjAsseestype)){ + if (asseestype.equals(zcgjAsseestype)) { accountNumber.add(object.getDynamicObject("zcgj_account").getString("number")); } } @@ -92,7 +92,6 @@ public class SubjectbalanceAutoData { for (String orgNumber : orgNumberMap.keySet()) { BalanceQueryParamApi balanceQueryParamApi = new BalanceQueryParamApi(); balanceQueryParamApi.setSelectors(Arrays.asList(selectorsArray)); - // balanceQueryParamApi.setOrgNumber("cw000102"); balanceQueryParamApi.setOrgNumber(orgNumber); balanceQueryParamApi.setBookTypeNumber("100002"); //账簿类型 balanceQueryParamApi.setAccountTableNumber("0003");//科目表 @@ -100,30 +99,28 @@ public class SubjectbalanceAutoData { DynamicObject orgObj = orgNumberMap.get(orgNumber); DynamicObject periodObj = orgByCurperiodMap.get(orgObj.getLong("id")); DynamicObject curperiod = null; - if(periodObj != null) { + if (periodObj != null) { curperiod = periodObj.getDynamicObject("curperiod"); - if( curperiod!= null) { + if (curperiod != null) { balanceQueryParamApi.setPeriodNumber(curperiod.getString("number")); // - }else{ + } else { continue; } - }else{ + } else { continue; } - List groupBy = new ArrayList<>(); - if(!StringUtils.isEmpty(asseestype)){ + if (!StringUtils.isEmpty(asseestype)) { Map>> accountAssgrp = new HashMap<>(); List> li = new ArrayList<>(); Map map1 = new HashMap<>(); - map1.put(asseestype,""); + map1.put(asseestype, ""); li.add(map1); for (String accNum : accountNumber) { - accountAssgrp.put(accNum,li); + accountAssgrp.put(accNum, li); } balanceQueryParamApi.setAccountAssgrp(accountAssgrp); - groupBy.add(asseestype); } groupBy.add("account"); @@ -131,50 +128,56 @@ public class SubjectbalanceAutoData { Gson gson = new Gson(); String json = gson.toJson(balanceQueryParamApi); Map params = gson.fromJson(json, - new TypeToken>(){}.getType()); + new TypeToken>() { + }.getType()); OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/gl/getBalanceApi", params); List addEntities = new ArrayList<>(); - if(balanceData.isStatus()){ + if (balanceData.isStatus()) { String data = (String) balanceData.getData(); - Type listType = new TypeToken>() {}.getType(); + Type listType = new TypeToken>() { + }.getType(); List records = gson.fromJson(data, listType); - // 示例输出 for (AccountRecord record : records) { - DynamicObject assistbalance - =BusinessDataServiceHelper.newDynamicObject("zcgj_rpt_assistbalancegx"); + DynamicObject assistbalance = BusinessDataServiceHelper.newDynamicObject("zcgj_rpt_assistbalancegx"); assistbalance.set("zcgj_debitlocal", record.getDebitlocal()); assistbalance.set("zcgj_beginlocal", record.getBeginlocal()); assistbalance.set("zcgj_creditlocal", record.getCreditlocal()); assistbalance.set("zcgj_yeardebitfor", record.getYeardebitfor()); assistbalance.set("zcgj_yearcreditfor", record.getYearcreditfor()); assistbalance.set("zcgj_endlocal", record.getEndlocal()); - assistbalance.set("zcgj_org",orgNumberMap.get(orgNumber)); - assistbalance.set("zcgj_accounttable",accountTableLoad); + assistbalance.set("zcgj_org", orgNumberMap.get(orgNumber)); + assistbalance.set("zcgj_accounttable", accountTableLoad); assistbalance.set("zcgj_account", record.getAccount()); - assistbalance.set("zcgj_period",curperiod); - assistbalance.set("zcgj_isnew",true); - //assistbalance.set("zcgj_pm",projectMap.get(orgNumber)); + assistbalance.set("zcgj_period", curperiod); + assistbalance.set("zcgj_isnew", true); + Map assgrp = record.getAssgrp(); if (assgrp.containsKey("0032")) { - if(assgrp.get("0032")!=null){ - assistbalance.set("zcgj_processnumber",assgrp.get("0032").getNumber()); - assistbalance.set("zcgj_processname",assgrp.get("0032").getName()); + if (assgrp.get("0032") != null) { + assistbalance.set("zcgj_processnumber", assgrp.get("0032").getNumber()); + assistbalance.set("zcgj_processname", assgrp.get("0032").getName()); } - }else if(assgrp.containsKey("0017")){ - if(assgrp.get("0017")!=null){ - assistbalance.set("zcgj_costcompanynumber",assgrp.get("0017").getNumber()); - assistbalance.set("zcgj_costcompanyname",assgrp.get("0017").getName()); + } else if (assgrp.containsKey("0017")) { + if (assgrp.get("0017") != null) { + assistbalance.set("zcgj_costcompanynumber", assgrp.get("0017").getNumber()); + assistbalance.set("zcgj_costcompanyname", assgrp.get("0017").getName()); } } addEntities.add(assistbalance); } - } if (!addEntities.isEmpty()) { try { + // ✅ 删除旧数据(保证每个组织、每个期间只保留一份最新的) + Long orgId = orgObj.getLong("id"); + Long periodId = curperiod.getLong("id"); + QFilter orgFilter = new QFilter("zcgj_org", QCP.equals, orgId); + QFilter periodFilter = new QFilter("zcgj_period", QCP.equals, periodId); + DeleteServiceHelper.delete("zcgj_rpt_assistbalancegx", new QFilter[]{orgFilter.and(periodFilter)}); + // 保存新数据 SaveServiceHelper.save(addEntities.toArray(new DynamicObject[0])); } catch (Exception ex) { throw new RuntimeException(ex); @@ -183,4 +186,5 @@ public class SubjectbalanceAutoData { } } } + } diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SuppliertbalanceAutoData.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SuppliertbalanceAutoData.java index 123956b..bc94a65 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SuppliertbalanceAutoData.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/SuppliertbalanceAutoData.java @@ -11,6 +11,7 @@ import kd.bos.openapi.common.util.OpenApiSdkUtil; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.DeleteServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import zcgj.zcdev.zcdev.fs.utils.AccountRecord; import zcgj.zcdev.zcdev.fs.utils.BalanceQueryParamApi; @@ -189,6 +190,18 @@ public class SuppliertbalanceAutoData { if (!addEntities.isEmpty()) { try { + + // ✅ 删除旧数据(保证每个组织、每个期间只保留一份最新的) + Long orgId = orgObj.getLong("id"); + Long periodId = curperiod.getLong("id"); + QFilter orgFilter = new QFilter("zcgj_org", QCP.equals, orgId); + QFilter periodFilter = new QFilter("zcgj_period", QCP.equals, periodId); + if("YUFZK".equals(type)){//预付账款 + DeleteServiceHelper.delete("zcgj_rpt_assibalancegysyu", new QFilter[]{orgFilter.and(periodFilter)}); + }else if("YIFZK".equals(type)){//应付账款 + DeleteServiceHelper.delete("zcgj_rpt_assibalancegysyi", new QFilter[]{orgFilter.and(periodFilter)}); + } + SaveServiceHelper.save(addEntities.toArray(new DynamicObject[0])); } catch (Exception ex) { throw new RuntimeException(ex); From 8bc8da8cf133de6c2c6e415b42503cfbbebe3584 Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Mon, 29 Sep 2025 13:46:29 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E8=B4=B9=E7=94=A8=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8D=95=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zcdev/zcdev/fs/plugin/form/DailyapplybillPlugin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyapplybillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyapplybillPlugin.java index 09a87d2..bda6429 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyapplybillPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/DailyapplybillPlugin.java @@ -29,7 +29,7 @@ public class DailyapplybillPlugin extends AbstractBillPlugIn implements Plugin { if(costcompany != null) { List comboList = new ArrayList<>(); if("10007186".equals(costcompany.getString("number"))){ - comboList.add(new ComboItem(new LocaleString("采购申请"), "purchase_apply")); + comboList.add(new ComboItem(new LocaleString("采购申请(非工程物资)"), "purchase_apply")); comboList.add(new ComboItem(new LocaleString("固定资产采购申请"), "gdzc_apply")); comboList.add(new ComboItem(new LocaleString("车辆维修保养申请"), "vehicle_maintain")); comboList.add(new ComboItem(new LocaleString("维修保养申请-非车辆"), "maintain_apply")); @@ -38,7 +38,7 @@ public class DailyapplybillPlugin extends AbstractBillPlugIn implements Plugin { comboList.add(new ComboItem(new LocaleString("费用申请单(兖州机关)"), "zc_morren")); comboList.add(new ComboItem(new LocaleString("工会经费申请"), "union_funding")); }else{ - comboList.add(new ComboItem(new LocaleString("采购申请"), "purchase_apply")); + comboList.add(new ComboItem(new LocaleString("采购申请(非工程物资)"), "purchase_apply")); comboList.add(new ComboItem(new LocaleString("固定资产采购申请"), "gdzc_apply")); comboList.add(new ComboItem(new LocaleString("车辆维修保养申请"), "vehicle_maintain")); comboList.add(new ComboItem(new LocaleString("维修保养申请-非车辆"), "maintain_apply")); @@ -62,7 +62,7 @@ public class DailyapplybillPlugin extends AbstractBillPlugIn implements Plugin { List comboList = new ArrayList<>(); if("10007186".equals(newValue.getString("number"))){ - comboList.add(new ComboItem(new LocaleString("采购申请"), "purchase_apply")); + comboList.add(new ComboItem(new LocaleString("采购申请(非工程物资)"), "purchase_apply")); comboList.add(new ComboItem(new LocaleString("固定资产采购申请"), "gdzc_apply")); comboList.add(new ComboItem(new LocaleString("车辆维修保养申请"), "vehicle_maintain")); comboList.add(new ComboItem(new LocaleString("维修保养申请-非车辆"), "maintain_apply")); @@ -72,7 +72,7 @@ public class DailyapplybillPlugin extends AbstractBillPlugIn implements Plugin { comboList.add(new ComboItem(new LocaleString("工会经费申请"), "union_funding")); }else{ - comboList.add(new ComboItem(new LocaleString("采购申请"), "purchase_apply")); + comboList.add(new ComboItem(new LocaleString("采购申请(非工程物资)"), "purchase_apply")); comboList.add(new ComboItem(new LocaleString("固定资产采购申请"), "gdzc_apply")); comboList.add(new ComboItem(new LocaleString("车辆维修保养申请"), "vehicle_maintain")); comboList.add(new ComboItem(new LocaleString("维修保养申请-非车辆"), "maintain_apply")); From 2e452c2ccf2eb450b62aecb1dcd0d99ba1ef4d5e Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Mon, 29 Sep 2025 13:47:29 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8D=95=E5=85=B3=E8=81=94=E7=BB=B4=E4=BF=AE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8D=95=E5=92=8C=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/PaymentapplyGeneralPlugin.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/PaymentapplyGeneralPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyGeneralPlugin.java index 291f4d8..f39f91a 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyGeneralPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyGeneralPlugin.java @@ -71,6 +71,55 @@ public class PaymentapplyGeneralPlugin extends AbstractBillPlugIn implements Plu if(entryentity != null){ entryentity.get(rowIndex).set("zcgj_expenseitem", null); this.getView().updateView("zcgj_expenseitem",rowIndex); + boolean isshowwxsq = false; + boolean isshowcgsq = false; + for (DynamicObject dynamicObject : entryentity) { + DynamicObject contract = dynamicObject.getDynamicObject("contract"); + String paymenttype = dynamicObject.getString("paymenttype"); + if(contract!=null){ + DynamicObject contracttype = contract.getDynamicObject("contracttype"); + System.out.println(); + if("PREPAYMENT".equals(paymenttype)){ + if("sbwbl".equals(contracttype.getString("number"))){//设备维保 sbwbl + isshowwxsq = true; + }else if("ZCHLX02".equals(contracttype.getString("number"))){//物资采购 ZCHLX02 + isshowcgsq = true; + } + } + } + } + + this.getModel().setValue("zcgj_isshowwxsq",isshowwxsq); + this.getView().updateView("zcgj_isshowwxsq"); + + this.getModel().setValue("zcgj_isshowcgsq",isshowcgsq); + this.getView().updateView("zcgj_isshowcgsq"); + } + }else if(name.equals("contract")){ + DynamicObjectCollection entryentity = this.getModel().getDataEntity(true).getDynamicObjectCollection("entryentity"); + if (entryentity != null) { + boolean isshowwxsq = false; + boolean isshowcgsq = false; + for (DynamicObject dynamicObject : entryentity) { + DynamicObject contract = dynamicObject.getDynamicObject("contract"); + String paymenttype = dynamicObject.getString("paymenttype"); + if(contract!=null){ + DynamicObject contracttype = contract.getDynamicObject("contracttype"); + System.out.println(); + if("PREPAYMENT".equals(paymenttype)){ + if("sbwbl".equals(contracttype.getString("number"))){//设备维保 sbwbl + isshowwxsq = true; + }else if("ZCHLX02".equals(contracttype.getString("number"))){//物资采购 ZCHLX02 + isshowcgsq = true; + } + } + } + } + this.getModel().setValue("zcgj_isshowwxsq",isshowwxsq); + this.getView().updateView("zcgj_isshowwxsq"); + + this.getModel().setValue("zcgj_isshowcgsq",isshowcgsq); + this.getView().updateView("zcgj_isshowcgsq"); } } } From 3e3791e03f908c71fc78d988fc531ed9485bfdd8 Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Mon, 29 Sep 2025 13:47:57 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E9=A2=84=E4=BB=98=E5=8D=95=E5=85=B3?= =?UTF-8?q?=E8=81=94=E7=BB=B4=E4=BF=AE=E7=94=B3=E8=AF=B7=E5=8D=95=E5=92=8C?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/PrepaybillNoContractCkOp.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/PrepaybillNoContractCkOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/PrepaybillNoContractCkOp.java index bb1b6bf..f2dd0b6 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/PrepaybillNoContractCkOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/PrepaybillNoContractCkOp.java @@ -31,8 +31,8 @@ public class PrepaybillNoContractCkOp extends AbstractOperationServicePlugIn { e.getFieldKeys().add("zcgj_nocontract");//合同付款类型 无合同付款 NOCONTRACT , 合同付款 CONTRACT e.getFieldKeys().add("contractentry");//关联合同 e.getFieldKeys().add("zcgj_bizype");//业务类型 - e.getFieldKeys().add("zcgj_maintenanceackentry");//设备维修 - e.getFieldKeys().add("zcgj_materialinbillentry");//入库单 + e.getFieldKeys().add("zcgj_maintenance");//设备维修申请单 + e.getFieldKeys().add("zcgj_purchaseapply");//采购申请单 } @Override @@ -52,12 +52,7 @@ public class PrepaybillNoContractCkOp extends AbstractOperationServicePlugIn { class ValidatorExt extends AbstractValidator { @Override public void validate() { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM"); ExtendedDataEntity[] extendedDataEntities = this.getDataEntities(); - Map> allMap = new HashMap<>(); - //当前提交的探亲单据id集合 - Map> currentBillIdListMap = new HashMap<>(); - for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { DynamicObject dataEntity = extendedDataEntity.getDataEntity(); Object costcompanyObj = dataEntity.get("costcompany"); @@ -71,14 +66,14 @@ public class PrepaybillNoContractCkOp extends AbstractOperationServicePlugIn { String bisType = dataEntity.getString("zcgj_bizype"); //物资采购 WZCG if("WZCG".equals(bisType)){ - DynamicObjectCollection entry = dataEntity.getDynamicObjectCollection("zcgj_materialinbillentry"); //入库单 + DynamicObjectCollection entry = dataEntity.getDynamicObjectCollection("zcgj_purchaseapply"); //采购申请单 if((entry == null || entry.isEmpty())){ - this.addFatalErrorMessage(extendedDataEntity, String.format("业务类型为物资采购时,入库单分录不能为空!")); + this.addFatalErrorMessage(extendedDataEntity, String.format("业务类型为物资采购时,采购申请单分录不能为空!")); } }else if("SBWX".equals(bisType)){//设备维修 SBWX - DynamicObjectCollection entry = dataEntity.getDynamicObjectCollection("zcgj_maintenanceackentry"); //入库单 + DynamicObjectCollection entry = dataEntity.getDynamicObjectCollection("zcgj_maintenance"); //维修申请单 if((entry == null || entry.isEmpty())){ - this.addFatalErrorMessage(extendedDataEntity, String.format("业务类型为设备维修时,维修确认单分录不能为空!")); + this.addFatalErrorMessage(extendedDataEntity, String.format("业务类型为设备维修时,设备维修申请单分录不能为空!")); } } //其他工程款 QTGCK 不交易 From 144947a5188bcc74acd940c0285061a46820f09f Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Mon, 29 Sep 2025 13:48:19 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E7=A7=91=E7=9B=AE=E4=BD=99=E9=A2=9D(=E5=B7=A5=E5=BA=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zcgj/zcdev/zcdev/fs/plugin/form/SubjectbalancePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SubjectbalancePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SubjectbalancePlugin.java index bfa3339..0a39283 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SubjectbalancePlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SubjectbalancePlugin.java @@ -20,7 +20,7 @@ public class SubjectbalancePlugin extends AbstractListPlugin implements Plugin String itemKey = evt.getItemKey(); if("zcgj_gatdata".equals(itemKey)) { //科目余额表自动取数 - SubjectbalanceAutoData.getData(); + SubjectbalanceAutoData.getData();//其他 } } From a87f8845cf7800891f961973415f647b5ce1cf78 Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Mon, 29 Sep 2025 13:48:46 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=B7=AE=E6=97=85=E6=8A=A5=E9=94=80?= =?UTF-8?q?=E5=8D=95=E5=8F=91=E7=A5=A8=E6=97=A5=E6=9C=9F=E5=92=8C=E8=A1=8C?= =?UTF-8?q?=E7=A8=8B=E6=9C=9F=E9=97=B4=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...TripreimbursebillIsInvoiceDateCheckOp.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/TripreimbursebillIsInvoiceDateCheckOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/TripreimbursebillIsInvoiceDateCheckOp.java index 895b96d..c04c97e 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/TripreimbursebillIsInvoiceDateCheckOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/TripreimbursebillIsInvoiceDateCheckOp.java @@ -3,13 +3,14 @@ package zcgj.zcdev.zcdev.fs.plugin.operate; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; -import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.ExtendedDataEntity; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.AddValidatorsEventArgs; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.validate.AbstractValidator; +import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.user.UserServiceHelper; +import kd.bos.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import zcgj.zcdev.zcdev.fs.utils.OrgCheckUtils; @@ -35,6 +36,7 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ e.getFieldKeys().add("enddate");//行程结束时间 e.getFieldKeys().add("invoiceentry");//发票信息 e.getFieldKeys().add("writeoffapply");//关联申请 + e.getFieldKeys().add("zcgjInvoiceremark");//特殊说明 } @Override @@ -68,6 +70,7 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ String number = costcompany.getString("number"); if(OrgCheckUtils.isKS(costcompanyId) && !number.equals("10006476")){ List errorList = new ArrayList<>(); + String zcgjInvoiceremark = dataEntity.getString("zcgj_invoiceremark");//特殊说明 //行程明细,会有多个明细 DynamicObjectCollection tripentry = dataEntity.getDynamicObjectCollection("tripentry"); //发票明细 @@ -75,8 +78,12 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ DynamicObjectCollection writeoffapply = dataEntity.getDynamicObjectCollection("writeoffapply");//关联的出差申请 Date earliestAuditDate = null; for (DynamicObject dynamicObject : writeoffapply) { + //er_tripreqbill + long sourceapplybillid = dynamicObject.getLong("sourceapplybillid"); + DynamicObject tripreqbill = BusinessDataServiceHelper.loadSingle(sourceapplybillid, "er_tripreqbill"); + boolean ischange = tripreqbill.getBoolean("ischange");//出差申请单发生过变更后,不进行校验 Date auditDate = dynamicObject.getDate("zcgj_glsq_auditdate"); - if (auditDate != null) { + if (auditDate != null && !ischange) { if (earliestAuditDate == null || auditDate.before(earliestAuditDate)) { earliestAuditDate = auditDate; // 保留最小审批日期 } @@ -103,15 +110,15 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ } } - if (!inTripRange) { + if (!inTripRange && StringUtils.isEmpty(zcgjInvoiceremark)) { //throw new RuntimeException("乘车日期【" + carrierDate + "】不在任何行程时间范围内!"); - this.addFatalErrorMessage(extendedDataEntity, String.format("发票信息中的第%d行,乘车/机日期不在任何行程时间范围内!",i)); + this.addFatalErrorMessage(extendedDataEntity, String.format("发票信息中的第%d行,乘车/机日期不在任何行程时间范围内,请填写特殊说明!",i)); } // 校验2: 必须在最早审批日期之后 - if (earliestAuditDate != null && carrierDate != null) { - if (carrierDate.before(earliestAuditDate)) { - this.addFatalErrorMessage(extendedDataEntity, String.format("发票信息中的第%d行,乘车/机日期早于关联申请最早审批日期!",i)); + if (earliestAuditDate != null && carrierDate != null && StringUtils.isEmpty(zcgjInvoiceremark)) { + if (carrierDate.compareTo(earliestAuditDate) != 0 && carrierDate.before(earliestAuditDate)) { + this.addFatalErrorMessage(extendedDataEntity, String.format("发票信息中的第%d行,乘车/机日期早于关联申请最早审批日期,请填写特殊说明!",i)); //throw new RuntimeException("乘车日期【" + carrierDate + "】早于出差申请最早审批日期【" + earliestAuditDate + "】!"); } } @@ -133,4 +140,6 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ .atZone(ZoneId.systemDefault()) .toLocalDate(); } + + } From 5bf3fff630ae48f3f5a83c50c2c697d779d6526b Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Mon, 29 Sep 2025 13:49:10 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E8=B4=B9=E7=94=A8=E6=8A=A5=E9=94=80?= =?UTF-8?q?=E5=8D=95=E5=BE=80=E6=9D=A5=E5=AE=B6=E5=B1=85=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/DailyreimbursHomeCheckOp.java | 177 +++++++++--------- 1 file changed, 93 insertions(+), 84 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java index ec21c7c..f15bb47 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java @@ -35,6 +35,7 @@ public class DailyreimbursHomeCheckOp extends AbstractOperationServicePlugIn { e.getFieldKeys().add("zcgj_is_home"); e.getFieldKeys().add("applier"); e.getFieldKeys().add("zcgj_homeentity"); + e.getFieldKeys().add("costcompany"); } @Override @@ -46,9 +47,9 @@ public class DailyreimbursHomeCheckOp extends AbstractOperationServicePlugIn { //当前切换选择的组织 Long currentOrgId = RequestContext.get().getOrgId(); //当前所在的组织是属于矿山下的 - if(OrgCheckUtils.isKS(currentOrgId)){ + //if(OrgCheckUtils.isKS(currentOrgId)){ e.getValidators().add(new ValidatorExt()); - } + // } } class ValidatorExt extends AbstractValidator { @@ -59,104 +60,112 @@ public class DailyreimbursHomeCheckOp extends AbstractOperationServicePlugIn { Map> allMap = new HashMap<>(); //当前提交的探亲单据id集合 Map> currentBillIdListMap = new HashMap<>(); - for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { DynamicObject dataEntity = extendedDataEntity.getDataEntity(); long aLong = dataEntity.getLong("id"); - //获取报销人 - DynamicObject applier = dataEntity.getDynamicObject("applier"); - long applierId = applier.getLong("id"); - //获取申请日期 - //Date bizdate = dataEntity.getDate( "bizdate"); - //获取是否探亲 - //如果是探亲,则进行逻辑判断 - boolean isHome = dataEntity.getBoolean(prefix + "_is_home"); + DynamicObject companyObj = (DynamicObject) dataEntity.get("costcompany");//核算组织(费用承担公司) + if (companyObj != null) { + Long companyId = companyObj.getLong("id"); + if (OrgCheckUtils.isKS(companyId)) { + //获取报销人 + DynamicObject applier = dataEntity.getDynamicObject("applier"); + long applierId = applier.getLong("id"); + //获取申请日期 + //Date bizdate = dataEntity.getDate( "bizdate"); + //获取是否探亲 + //如果是探亲,则进行逻辑判断 + boolean isHome = dataEntity.getBoolean(prefix + "_is_home"); - //判断是否来往家居地 - if(isHome){ - //获取当前人的往来家居地配置 - QFilter[] visitSetFilterArray = new QFilter[1]; - visitSetFilterArray[0] = new QFilter(prefix+"_user", QCP.equals, applierId); - DataSet homeDataSet = QueryServiceHelper.queryDataSet( - this.getClass().getName(), - prefix+"_user_home_conf", - "id,zcgj_month_times as monthTime", - visitSetFilterArray, null - ); - if(homeDataSet == null || homeDataSet.isEmpty()){ - String message = String.format("提交人没有往来居家配置。"); - this.addFatalErrorMessage(extendedDataEntity, message); - } - int monthTime = 0; - for (Row row : homeDataSet) { - monthTime = row.getInteger("monthTime"); - } - if(monthTime != 0){ - DynamicObjectCollection tripentry = dataEntity.getDynamicObjectCollection("zcgj_homeentity");//oa流程分录 - Map homeentityCountMap = new HashMap<>(); - int i = 1; - boolean isOk=true; - for (DynamicObject dynamicObject : tripentry) { - Date bxmonth = dynamicObject.getDate("zcgj_bxmonth"); - String yearMonth = dateFormat.format(bxmonth); - - String bxmonthStr = dateFormat.format(bxmonth); - String startdateStr = dateFormat.format(dynamicObject.getDate("zcgj_startdate")); - String enddateStr = dateFormat.format(dynamicObject.getDate("zcgj_enddate")); - isOk = checkBelongMonth(bxmonthStr, startdateStr, enddateStr); - if(!isOk){ - this.addFatalErrorMessage(extendedDataEntity, String.format("当前单据中往来居家明细的第%d行,往返日期不在报销归属月中!",i)); - } - // 更新统计次数 - homeentityCountMap.put(yearMonth, homeentityCountMap.getOrDefault(yearMonth, 0) + 1); - i++; - } - // 输出结果 - for (Map.Entry entry : homeentityCountMap.entrySet()) { - if(entry.getValue() > monthTime){ - String message = String.format("当前单据在%s月中提交了%d次往来居家,往来居家次数超限,限制每月%d次!",entry.getKey(),entry.getValue() ,monthTime); - isOk= false; + //判断是否来往家居地 + if(isHome){ + //获取当前人的往来家居地配置 + QFilter[] visitSetFilterArray = new QFilter[1]; + visitSetFilterArray[0] = new QFilter(prefix+"_user", QCP.equals, applierId); + DataSet homeDataSet = QueryServiceHelper.queryDataSet( + this.getClass().getName(), + prefix+"_user_home_conf", + "id,zcgj_month_times as monthTime", + visitSetFilterArray, null + ); + if(homeDataSet == null || homeDataSet.isEmpty()){ + String message = String.format("提交人没有往来居家配置。"); this.addFatalErrorMessage(extendedDataEntity, message); } - } - if(isOk){ - for (DynamicObject dynamicObject : tripentry) { - Date bxmonth = dynamicObject.getDate("zcgj_bxmonth"); - DataSet tripreimbursebill = getTripreimbursebill(bxmonth, applierId); - //已用次数 - int goHomeCount = 0; - StringBuilder trSb = new StringBuilder(); - for (Row row : tripreimbursebill) { - goHomeCount++; - String billno = row.getString("billno"); + int monthTime = 0; + for (Row row : homeDataSet) { + monthTime = row.getInteger("monthTime"); + } + if(monthTime != 0){ + DynamicObjectCollection tripentry = dataEntity.getDynamicObjectCollection("zcgj_homeentity");// + if(tripentry==null || tripentry.isEmpty()){ + this.addFatalErrorMessage(extendedDataEntity, String.format("请录入往来居家明细!")); + } + Map homeentityCountMap = new HashMap<>(); + int i = 1; + boolean isOk=true; + for (DynamicObject dynamicObject : tripentry) { + Date bxmonth = dynamicObject.getDate("zcgj_bxmonth"); + String yearMonth = dateFormat.format(bxmonth); + + String bxmonthStr = dateFormat.format(bxmonth); + String startdateStr = dateFormat.format(dynamicObject.getDate("zcgj_startdate")); + String enddateStr = dateFormat.format(dynamicObject.getDate("zcgj_enddate")); + isOk = checkBelongMonth(bxmonthStr, startdateStr, enddateStr); + if(!isOk){ + this.addFatalErrorMessage(extendedDataEntity, String.format("当前单据中往来居家明细的第%d行,往返日期不在报销归属月中!",i)); + } + // 更新统计次数 + homeentityCountMap.put(yearMonth, homeentityCountMap.getOrDefault(yearMonth, 0) + 1); + i++; + } + // 输出结果 + for (Map.Entry entry : homeentityCountMap.entrySet()) { + if(entry.getValue() > monthTime){ + String message = String.format("当前单据在%s月中提交了%d次往来居家,往来居家次数超限,限制每月%d次!",entry.getKey(),entry.getValue() ,monthTime); + isOk= false; + this.addFatalErrorMessage(extendedDataEntity, message); + } + } + if(isOk){ + for (DynamicObject dynamicObject : tripentry) { + Date bxmonth = dynamicObject.getDate("zcgj_bxmonth"); + DataSet tripreimbursebill = getTripreimbursebill(bxmonth, applierId); + //已用次数 + int goHomeCount = 0; + StringBuilder trSb = new StringBuilder(); + for (Row row : tripreimbursebill) { + goHomeCount++; + String billno = row.getString("billno"); /*String bxmonthStr = dateFormat.format(row.getDate("bxmonth")); String startdateStr = dateFormat.format(row.getDate("startdate")); String enddateStr = dateFormat.format(row.getDate("enddate")); boolean b = checkBelongMonth(bxmonthStr, startdateStr, enddateStr);*/ - trSb.append(billno).append(";"); - } - DataSet dailyreimbursebill = getDailyreimbursebill(bxmonth, applierId); - StringBuilder daSb = new StringBuilder(); - for (Row row : dailyreimbursebill) { - goHomeCount++; - String billno = row.getString("billno"); + trSb.append(billno).append(";"); + } + DataSet dailyreimbursebill = getDailyreimbursebill(bxmonth, applierId); + StringBuilder daSb = new StringBuilder(); + for (Row row : dailyreimbursebill) { + goHomeCount++; + String billno = row.getString("billno"); /* String bxmonthStr = dateFormat.format(row.getDate("bxmonth")); String startdateStr = dateFormat.format(row.getDate("startdate")); String enddateStr = dateFormat.format(row.getDate("enddate")); boolean b = checkBelongMonth(bxmonthStr, startdateStr, enddateStr);*/ - daSb.append(billno).append(";"); - } + daSb.append(billno).append(";"); + } - if(goHomeCount >= monthTime){ - int monthVal = getFirstDayOfMonth(bxmonth).getMonth().getValue(); - String message = String.format("请知悉:您每月共有%d次往来家居地报销次数,在%d月中已进行过%d次来往家居地报销。",monthTime,monthVal,goHomeCount); - if(!StringUtils.isBlank(trSb.toString())){ - message+="已提交的差旅报销单:【"+trSb.toString()+"】 "; + if(goHomeCount >= monthTime){ + int monthVal = getFirstDayOfMonth(bxmonth).getMonth().getValue(); + String message = String.format("请知悉:您每月共有%d次往来家居地报销次数,在%d月中已进行过%d次来往家居地报销。",monthTime,monthVal,goHomeCount); + if(!StringUtils.isBlank(trSb.toString())){ + message+="已提交的差旅报销单:【"+trSb.toString()+"】 "; + } + if(!StringUtils.isBlank(daSb.toString())){ + message+="已提交的费用报销单:【"+daSb.toString()+"】 "; + } + this.addFatalErrorMessage(extendedDataEntity, message); + } } - if(!StringUtils.isBlank(daSb.toString())){ - message+="已提交的费用报销单:【"+daSb.toString()+"】 "; - } - this.addFatalErrorMessage(extendedDataEntity, message); } } }