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 8b5c377..803412a 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchedulebillMergeOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchedulebillMergeOperation.java @@ -19,6 +19,7 @@ import kd.sdk.plugin.Plugin; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; /** * 排程单据合并/解除 @@ -52,23 +53,23 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "psd_schedulebill"); String schedulstatus = bill.getString("schedulstatus");//排程状态 if (!"yetschedule".equals(schedulstatus)) { - this.addErrorMessage(entity,"状态不是已排程"); + this.addErrorMessage(entity, "状态不是已排程"); } String shjh_sourcesystem = bill.getString("shjh_sourcesystem");// 来源系统 SAP:A if (!"A".equals(shjh_sourcesystem)) { - this.addErrorMessage(entity,"来源系统不是SAP"); + this.addErrorMessage(entity, "来源系统不是SAP"); } BigDecimal balanceamt = bill.getBigDecimal("balanceamt");//排程余额 if (balanceamt.compareTo(BigDecimal.ZERO) != 0) { - this.addErrorMessage(entity,"排程余额不为0"); + this.addErrorMessage(entity, "排程余额不为0"); } String batchnum = bill.getString("batchnum");//合并批次号 if (!batchnum.isEmpty()) { - this.addErrorMessage(entity,"合并批次号不为空"); + this.addErrorMessage(entity, "合并批次号不为空"); } BigDecimal draftamt = bill.getBigDecimal("draftamt");//排票金额 if (draftamt.compareTo(BigDecimal.ZERO) != 0) { - this.addErrorMessage(entity,"排票金额不为0"); + this.addErrorMessage(entity, "排票金额不为0"); } } } @@ -91,7 +92,7 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i //通过批次号查找所有同一批的排程单 String batchnum = loadedBill.getString("batchnum"); if (!batchnum.isEmpty()) { - DynamicObject[] sameBills = BusinessDataServiceHelper.load("psd_schedulebill","id,batchnum,shjh_ishb", + DynamicObject[] sameBills = BusinessDataServiceHelper.load("psd_schedulebill", "id,batchnum,shjh_ishb", new QFilter[]{new QFilter("batchnum", "=", batchnum)}); for (DynamicObject sameBill : sameBills) { sameBill.set("batchnum", ""); @@ -135,30 +136,43 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i map.computeIfAbsent(rule, k -> new ArrayList<>()).add(bill); } } -// assignBatchNumbersAndSave(map); - List longs = new ArrayList<>(); - map.forEach((k, v) -> { + int a = 0; + Map> hashMap = new HashMap<>(); + Map billNoMap = new HashMap<>(); // 用于记录每个批次的单据编号 + // 遍历原始Map处理数据 + for (Map.Entry> entry : map.entrySet()) { long l = System.currentTimeMillis(); - longs.add(l); + 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 = map.size();//合并的数 - StringBuilder sb = new StringBuilder(); - for (Long aLong : longs) { - sb.append(aLong).append(","); } -// this.getOperationResult().setSuccess(true); -// this.getOperationResult().setMessage("合并数:" + size + " 合并的批次号:" + sb); -// this.getOperationResult().setShowMessage(true); + 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 "); + } OperateErrorInfo operateErrorInfo = new OperateErrorInfo(); - operateErrorInfo.setMessage("合并数:" + size + "\n 合并的批次号:" + sb); + operateErrorInfo.setMessage(sb.toString()); operateErrorInfo.setErrorLevel(ErrorLevel.Error.name()); -// operateErrorInfo.setPkValue(bill.getPkValue()); this.operationResult.addErrorInfo(operateErrorInfo); return; } @@ -174,7 +188,7 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i //通过批次号查找所有同一批的排程单 String batchnum = loadedBill.getString("batchnum"); if (!batchnum.isEmpty()) { - DynamicObject[] sameBills = BusinessDataServiceHelper.load("psd_schedulebill","id,batchnum,shjh_ishb", + DynamicObject[] sameBills = BusinessDataServiceHelper.load("psd_schedulebill", "id,batchnum,shjh_ishb", new QFilter[]{new QFilter("batchnum", "=", batchnum)}); for (DynamicObject sameBill : sameBills) { sameBill.set("batchnum", ""); @@ -200,7 +214,7 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i } /** - * 按规则字段 构建合并规则key + * 按规则字段 构建合并规则key */ private static StringBuilder buildRule(DynamicObject bill, DynamicObjectCollection entryentity) { StringBuilder rule = new StringBuilder();