付款排程优化
This commit is contained in:
parent
8d29359138
commit
2ea3dd5831
|
|
@ -115,68 +115,41 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i
|
||||||
DynamicObject[] dataEntities = e.getDataEntities();
|
DynamicObject[] dataEntities = e.getDataEntities();
|
||||||
// 提前加载所有 bill 对象
|
// 提前加载所有 bill 对象
|
||||||
DynamicObject[] loadedBills = loadAllBills(dataEntities);
|
DynamicObject[] loadedBills = loadAllBills(dataEntities);
|
||||||
Map<StringBuilder, List<DynamicObject>> map = new HashMap<>();
|
|
||||||
// 合并规则
|
// 新增逻辑:对loadedBills分类
|
||||||
DynamicObject sourcesystem = BusinessDataServiceHelper.loadSingle("psd_autocombinerule",
|
List<DynamicObject> aCategoryBills = new ArrayList<>(); // A类单据
|
||||||
new QFilter[]{new QFilter("enable", "=", "1")});
|
List<DynamicObject> bCategoryBills = new ArrayList<>(); // B类单据(原有逻辑)
|
||||||
if (sourcesystem != null) {
|
|
||||||
DynamicObjectCollection entryentity = sourcesystem.getDynamicObjectCollection("entryentity");
|
|
||||||
for (DynamicObject bill : loadedBills) {
|
for (DynamicObject bill : loadedBills) {
|
||||||
// 合并,赋值排程批次号(batchnum)
|
String externalSystem = bill.getString("shjh_externalsystemdocume");
|
||||||
StringBuilder rule = buildRule(bill, entryentity);
|
String sourceSystem = bill.getString("shjh_sourcesystem");
|
||||||
// 避免重复 key
|
|
||||||
boolean keyExists = false;
|
if ("E".equals(externalSystem) && "A".equals(sourceSystem)) {
|
||||||
for (StringBuilder existingKey : map.keySet()) {
|
aCategoryBills.add(bill);
|
||||||
if (existingKey.toString().contentEquals(rule)) {
|
} else {
|
||||||
keyExists = true;
|
bCategoryBills.add(bill);
|
||||||
map.get(existingKey).add(bill);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!keyExists) {
|
|
||||||
map.computeIfAbsent(rule, k -> new ArrayList<>()).add(bill);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int a = 0;
|
|
||||||
Map<Long, List<DynamicObject>> hashMap = new HashMap<>();
|
|
||||||
Map<Long, StringBuilder> billNoMap = new HashMap<>(); // 用于记录每个批次的单据编号
|
|
||||||
// 遍历原始Map处理数据
|
|
||||||
for (Map.Entry<StringBuilder, List<DynamicObject>> entry : map.entrySet()) {
|
|
||||||
long l = System.currentTimeMillis();
|
|
||||||
List<DynamicObject> 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(); // 合并的数
|
// 加载A类合并规则
|
||||||
StringBuilder sb = new StringBuilder("合并操作结果为:成功" + a + "条,生成合并单共" + size + "张。\n ");
|
DynamicObject aCategoryRule = BusinessDataServiceHelper.loadSingle("psd_autocombinerule",
|
||||||
for (Map.Entry<Long, StringBuilder> entry : billNoMap.entrySet()) {
|
new QFilter[]{new QFilter("name", "=", "预付款合并规则"),new QFilter("enable", "=", "1")});
|
||||||
Long key = entry.getKey();
|
|
||||||
StringBuilder billno = entry.getValue();
|
// 加载B类合并规则(原有逻辑)
|
||||||
// 移除最后多余的逗号
|
DynamicObject bCategoryRule = BusinessDataServiceHelper.loadSingle("psd_autocombinerule",
|
||||||
if (billno.length() > 0) {
|
new QFilter[]{new QFilter("name", "=", "默认合并规则"),new QFilter("enable", "=", "1")});
|
||||||
billno.deleteCharAt(billno.length() - 1);
|
|
||||||
|
// 处理A类单据
|
||||||
|
if (aCategoryRule != null && !aCategoryBills.isEmpty()) {
|
||||||
|
processBills(aCategoryBills, aCategoryRule);
|
||||||
|
}else {
|
||||||
|
//保底逻辑
|
||||||
|
bCategoryBills.addAll(aCategoryBills);
|
||||||
}
|
}
|
||||||
sb.append("单据编号为").append(billno).append("的单据:生成合并单").append(key).append("成功\n ");
|
|
||||||
}
|
// 处理B类单据(原有逻辑)
|
||||||
log.info(sb.toString());//将最终结果log输出
|
if (bCategoryRule != null) {
|
||||||
OperateErrorInfo operateErrorInfo = new OperateErrorInfo();
|
processBills(bCategoryBills, bCategoryRule);
|
||||||
operateErrorInfo.setMessage(sb.toString());
|
|
||||||
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
|
|
||||||
this.operationResult.addErrorInfo(operateErrorInfo);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 合并解除:若合并批次号不为空,且为二开干预的合并排程单,则将合并批次号置空,并将合并状态置为false
|
// 合并解除:若合并批次号不为空,且为二开干预的合并排程单,则将合并批次号置空,并将合并状态置为false
|
||||||
|
|
@ -272,4 +245,81 @@ public class SchedulebillMergeOperation extends AbstractOperationServicePlugIn i
|
||||||
log.error("对象类型是其他类型");
|
log.error("对象类型是其他类型");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 提取的公共处理方法
|
||||||
|
private void processBills(List<DynamicObject> bills, DynamicObject rule) {
|
||||||
|
if (bills.isEmpty()) return;
|
||||||
|
|
||||||
|
Map<StringBuilder, List<DynamicObject>> 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<Long, List<DynamicObject>> hashMap = new HashMap<>();
|
||||||
|
Map<Long, StringBuilder> billNoMap = new HashMap<>();
|
||||||
|
|
||||||
|
for (Map.Entry<StringBuilder, List<DynamicObject>> entry : map.entrySet()) {
|
||||||
|
long batchNum = System.currentTimeMillis();
|
||||||
|
List<DynamicObject> 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<Long, StringBuilder> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue