parent
a3f6b8512a
commit
0fe09139c2
|
|
@ -19,6 +19,7 @@ import kd.sdk.plugin.Plugin;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
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");
|
bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "psd_schedulebill");
|
||||||
String schedulstatus = bill.getString("schedulstatus");//排程状态
|
String schedulstatus = bill.getString("schedulstatus");//排程状态
|
||||||
if (!"yetschedule".equals(schedulstatus)) {
|
if (!"yetschedule".equals(schedulstatus)) {
|
||||||
this.addErrorMessage(entity,"状态不是已排程");
|
this.addErrorMessage(entity, "状态不是已排程");
|
||||||
}
|
}
|
||||||
String shjh_sourcesystem = bill.getString("shjh_sourcesystem");// 来源系统 SAP:A
|
String shjh_sourcesystem = bill.getString("shjh_sourcesystem");// 来源系统 SAP:A
|
||||||
if (!"A".equals(shjh_sourcesystem)) {
|
if (!"A".equals(shjh_sourcesystem)) {
|
||||||
this.addErrorMessage(entity,"来源系统不是SAP");
|
this.addErrorMessage(entity, "来源系统不是SAP");
|
||||||
}
|
}
|
||||||
BigDecimal balanceamt = bill.getBigDecimal("balanceamt");//排程余额
|
BigDecimal balanceamt = bill.getBigDecimal("balanceamt");//排程余额
|
||||||
if (balanceamt.compareTo(BigDecimal.ZERO) != 0) {
|
if (balanceamt.compareTo(BigDecimal.ZERO) != 0) {
|
||||||
this.addErrorMessage(entity,"排程余额不为0");
|
this.addErrorMessage(entity, "排程余额不为0");
|
||||||
}
|
}
|
||||||
String batchnum = bill.getString("batchnum");//合并批次号
|
String batchnum = bill.getString("batchnum");//合并批次号
|
||||||
if (!batchnum.isEmpty()) {
|
if (!batchnum.isEmpty()) {
|
||||||
this.addErrorMessage(entity,"合并批次号不为空");
|
this.addErrorMessage(entity, "合并批次号不为空");
|
||||||
}
|
}
|
||||||
BigDecimal draftamt = bill.getBigDecimal("draftamt");//排票金额
|
BigDecimal draftamt = bill.getBigDecimal("draftamt");//排票金额
|
||||||
if (draftamt.compareTo(BigDecimal.ZERO) != 0) {
|
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");
|
String batchnum = loadedBill.getString("batchnum");
|
||||||
if (!batchnum.isEmpty()) {
|
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)});
|
new QFilter[]{new QFilter("batchnum", "=", batchnum)});
|
||||||
for (DynamicObject sameBill : sameBills) {
|
for (DynamicObject sameBill : sameBills) {
|
||||||
sameBill.set("batchnum", "");
|
sameBill.set("batchnum", "");
|
||||||
|
|
@ -135,30 +136,43 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i
|
||||||
map.computeIfAbsent(rule, k -> new ArrayList<>()).add(bill);
|
map.computeIfAbsent(rule, k -> new ArrayList<>()).add(bill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// assignBatchNumbersAndSave(map);
|
int a = 0;
|
||||||
List<Long> longs = new ArrayList<>();
|
Map<Long, List<DynamicObject>> hashMap = new HashMap<>();
|
||||||
map.forEach((k, v) -> {
|
Map<Long, StringBuilder> billNoMap = new HashMap<>(); // 用于记录每个批次的单据编号
|
||||||
|
// 遍历原始Map处理数据
|
||||||
|
for (Map.Entry<StringBuilder, List<DynamicObject>> entry : map.entrySet()) {
|
||||||
long l = System.currentTimeMillis();
|
long l = System.currentTimeMillis();
|
||||||
longs.add(l);
|
List<DynamicObject> v = entry.getValue();
|
||||||
|
// 初始化当前批次的单据编号收集器
|
||||||
|
StringBuilder billno = new StringBuilder();
|
||||||
for (DynamicObject bill : v) {
|
for (DynamicObject bill : v) {
|
||||||
bill.set("batchnum", "" + l);
|
bill.set("batchnum", "" + l);
|
||||||
bill.set("shjh_ishb", true);
|
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]));
|
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<Long, StringBuilder> 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 operateErrorInfo = new OperateErrorInfo();
|
||||||
operateErrorInfo.setMessage("合并数:" + size + "\n 合并的批次号:" + sb);
|
operateErrorInfo.setMessage(sb.toString());
|
||||||
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
|
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
|
||||||
// operateErrorInfo.setPkValue(bill.getPkValue());
|
|
||||||
this.operationResult.addErrorInfo(operateErrorInfo);
|
this.operationResult.addErrorInfo(operateErrorInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -174,7 +188,7 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i
|
||||||
//通过批次号查找所有同一批的排程单
|
//通过批次号查找所有同一批的排程单
|
||||||
String batchnum = loadedBill.getString("batchnum");
|
String batchnum = loadedBill.getString("batchnum");
|
||||||
if (!batchnum.isEmpty()) {
|
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)});
|
new QFilter[]{new QFilter("batchnum", "=", batchnum)});
|
||||||
for (DynamicObject sameBill : sameBills) {
|
for (DynamicObject sameBill : sameBills) {
|
||||||
sameBill.set("batchnum", "");
|
sameBill.set("batchnum", "");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue