From 2ea3dd58310f02c06105216489189445b58adc3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B4=B5=E5=BC=BA?= Date: Mon, 25 Aug 2025 17:18:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E6=8E=92=E7=A8=8B=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/SchedulebillMergeOperation.java | 170 +++++++++++------- 1 file changed, 110 insertions(+), 60 deletions(-) diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchedulebillMergeOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchedulebillMergeOperation.java index 61c6bae..5fbf50f 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchedulebillMergeOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchedulebillMergeOperation.java @@ -115,68 +115,41 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i DynamicObject[] dataEntities = e.getDataEntities(); // 提前加载所有 bill 对象 DynamicObject[] loadedBills = loadAllBills(dataEntities); - Map> map = new HashMap<>(); - // 合并规则 - DynamicObject sourcesystem = BusinessDataServiceHelper.loadSingle("psd_autocombinerule", - new QFilter[]{new QFilter("enable", "=", "1")}); - if (sourcesystem != null) { - DynamicObjectCollection entryentity = sourcesystem.getDynamicObjectCollection("entryentity"); - for (DynamicObject bill : loadedBills) { - // 合并,赋值排程批次号(batchnum) - StringBuilder rule = buildRule(bill, entryentity); - // 避免重复 key - boolean keyExists = false; - for (StringBuilder existingKey : map.keySet()) { - if (existingKey.toString().contentEquals(rule)) { - keyExists = true; - map.get(existingKey).add(bill); - break; - } - } - if (!keyExists) { - map.computeIfAbsent(rule, k -> new ArrayList<>()).add(bill); - } - } - int a = 0; - Map> hashMap = new HashMap<>(); - Map billNoMap = new HashMap<>(); // 用于记录每个批次的单据编号 - // 遍历原始Map处理数据 - for (Map.Entry> entry : map.entrySet()) { - long l = System.currentTimeMillis(); - List v = entry.getValue(); - // 初始化当前批次的单据编号收集器 - StringBuilder billno = new StringBuilder(); - for (DynamicObject bill : v) { - bill.set("batchnum", "" + l); - bill.set("shjh_ishb", true); - a++; - // 收集单据编号(提前处理,避免后续重复遍历) - billno.append(bill.getString("billno")).append(","); - } - // 保存单据编号收集结果 - billNoMap.put(l, billno); - // 保存处理后的单据列表到结果Map - hashMap.put(l, v); - SaveServiceHelper.save(v.toArray(new DynamicObject[0])); - } - int size = hashMap.size(); // 合并的数 - StringBuilder sb = new StringBuilder("合并操作结果为:成功" + a + "条,生成合并单共" + size + "张。\n "); - for (Map.Entry entry : billNoMap.entrySet()) { - Long key = entry.getKey(); - StringBuilder billno = entry.getValue(); - // 移除最后多余的逗号 - if (billno.length() > 0) { - billno.deleteCharAt(billno.length() - 1); - } - sb.append("单据编号为").append(billno).append("的单据:生成合并单").append(key).append("成功\n "); + // 新增逻辑:对loadedBills分类 + List aCategoryBills = new ArrayList<>(); // A类单据 + List bCategoryBills = new ArrayList<>(); // B类单据(原有逻辑) + + for (DynamicObject bill : loadedBills) { + String externalSystem = bill.getString("shjh_externalsystemdocume"); + String sourceSystem = bill.getString("shjh_sourcesystem"); + + if ("E".equals(externalSystem) && "A".equals(sourceSystem)) { + aCategoryBills.add(bill); + } else { + bCategoryBills.add(bill); } - log.info(sb.toString());//将最终结果log输出 - OperateErrorInfo operateErrorInfo = new OperateErrorInfo(); - operateErrorInfo.setMessage(sb.toString()); - operateErrorInfo.setErrorLevel(ErrorLevel.Error.name()); - this.operationResult.addErrorInfo(operateErrorInfo); - return; + } + + // 加载A类合并规则 + DynamicObject aCategoryRule = BusinessDataServiceHelper.loadSingle("psd_autocombinerule", + new QFilter[]{new QFilter("name", "=", "预付款合并规则"),new QFilter("enable", "=", "1")}); + + // 加载B类合并规则(原有逻辑) + DynamicObject bCategoryRule = BusinessDataServiceHelper.loadSingle("psd_autocombinerule", + new QFilter[]{new QFilter("name", "=", "默认合并规则"),new QFilter("enable", "=", "1")}); + + // 处理A类单据 + if (aCategoryRule != null && !aCategoryBills.isEmpty()) { + processBills(aCategoryBills, aCategoryRule); + }else { + //保底逻辑 + bCategoryBills.addAll(aCategoryBills); + } + + // 处理B类单据(原有逻辑) + if (bCategoryRule != null) { + processBills(bCategoryBills, bCategoryRule); } } // 合并解除:若合并批次号不为空,且为二开干预的合并排程单,则将合并批次号置空,并将合并状态置为false @@ -272,4 +245,81 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i log.error("对象类型是其他类型"); } } + + // 提取的公共处理方法 + private void processBills(List bills, DynamicObject rule) { + if (bills.isEmpty()) return; + + Map> map = new HashMap<>(); + DynamicObjectCollection entryentity = rule.getDynamicObjectCollection("entryentity"); + +// for (DynamicObject bill : bills) { +// StringBuilder ruleKey = buildRule(bill, entryentity); +// map.computeIfAbsent(ruleKey, k -> new ArrayList<>()).add(bill); +// } + for (DynamicObject bill : bills) { + // 合并,赋值排程批次号(batchnum) + StringBuilder ruleKey = buildRule(bill, entryentity); + // 避免重复 key + boolean keyExists = false; + for (StringBuilder existingKey : map.keySet()) { + if (existingKey.toString().contentEquals(ruleKey)) { + keyExists = true; + map.get(existingKey).add(bill); + break; + } + } + if (!keyExists) { + map.computeIfAbsent(ruleKey, k -> new ArrayList<>()).add(bill); + } + } + + + int processedCount = 0; + Map> hashMap = new HashMap<>(); + Map billNoMap = new HashMap<>(); + + for (Map.Entry> entry : map.entrySet()) { + long batchNum = System.currentTimeMillis(); + List batchBills = entry.getValue(); + StringBuilder billNos = new StringBuilder(); + + for (DynamicObject bill : batchBills) { + bill.set("batchnum", String.valueOf(batchNum)); + bill.set("shjh_ishb", true); + processedCount++; + billNos.append(bill.getString("billno")).append(","); + } + + if (billNos.length() > 0) { + billNos.deleteCharAt(billNos.length() - 1); + } + + billNoMap.put(batchNum, billNos); + hashMap.put(batchNum, batchBills); + SaveServiceHelper.save(batchBills.toArray(new DynamicObject[0])); + } + + // 记录处理结果 + StringBuilder resultMsg = new StringBuilder() + .append("合并操作结果为:成功") + .append(processedCount) + .append("条,生成合并单共") + .append(hashMap.size()) + .append("张。\n"); + + for (Map.Entry entry : billNoMap.entrySet()) { + resultMsg.append("单据编号为") + .append(entry.getValue()) + .append("的单据:生成合并单") + .append(entry.getKey()) + .append("成功\n"); + } + + log.info(resultMsg.toString()); + OperateErrorInfo errorInfo = new OperateErrorInfo(); + errorInfo.setMessage(resultMsg.toString()); + errorInfo.setErrorLevel(ErrorLevel.Error.name()); + this.operationResult.addErrorInfo(errorInfo); + } }