refactor(ysr): 优化 ECN1 变更数量计算逻辑

- 新增 getAllChange 方法,合并前后 BOMLine 的 key 集合,去重处理
- 重构主逻辑,使用 changeSet 遍历所有变化的 BOMLine
- 优化数量对比逻辑,处理 null值和新增/删除的 BOMLine
- 删除冗余代码,提高代码可读性和维护性
main
熊朝柱 3 weeks ago
parent 043173fdbb
commit 62d96156bc

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

@ -20,6 +20,7 @@ import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -1229,40 +1230,62 @@ public class YSR8_ECN1RevisionMasterForm extends AbstractRendering {
System.out.println("更改前的零部件BOMLineChild数量="+beforeMap.size());
System.out.println("更改后的零部件BOMLineChild数量="+afterMap.size());
for (Map.Entry<String, TCComponentBOMLine> beforeEntry : beforeMap.entrySet()) {
String key = beforeEntry.getKey();
System.out.println("1_beforeMap ["+key+"] : ["+beforeMap.get(key)+"]");
System.out.println("1_afterMap ["+key+"] : ["+afterMap.get(key)+"]");
if (afterMap.containsKey(key)) {
System.out.println("1");
// Object compResult = TCUtil.compareBOMLineQuantity(beforeMap.get(key), afterMap.get(key));//原生方法:根据“安装位置限定”计算更改前后零部件的数量
// if (compResult instanceof double[]) {
// System.out.println("2");
// double[] ds = (double[]) compResult;
// resultMap.put(afterMap.get(key), ds[1] - ds[0]);
// }
// Set<String> changeSet = new LinkedHashSet<String>();
Set<String> changeSet = getAllChange(beforeMap,afterMap);
for (String key : changeSet) {
TCComponentBOMLine beforeBomLine1 = beforeMap.get(key);
TCComponentBOMLine afterBomLine1 = afterMap.get(key);
if (beforeBomLine1 == null && afterBomLine1 == null) {
continue;
}else {
//新增的逻辑
double[] ds = getBOMLineQuantity(beforeMap.get(key),afterMap.get(key));
double[] ds = getBOMLineQuantity(beforeBomLine1,afterBomLine1);
System.out.println("对象:["+beforeMap.get(key)+"]变更前的数量=["+ds[0]+"],变更后的数量=["+ds[1]+"]");
double changeNum = ds[1] - ds[0];
if (changeNum == 0) {
continue;
}
resultMap.put(afterMap.get(key), ds[1] - ds[0]);
}
}
for (Map.Entry<String, TCComponentBOMLine> afterEntry : afterMap.entrySet()) {
String key = afterEntry.getKey();
System.out.println("遍历afterMap "+key+":"+afterMap.get(key));
if (beforeMap.containsKey(key)) {
System.out.println("3");
} else {
System.out.println("4");
resultMap.put(afterMap.get(key), TCUtil.totalBOMLineQuantity(afterMap.get(key)));
TCComponentBOMLine putBomLine = afterMap.get(key) == null ? beforeMap.get(key) : afterMap.get(key);
resultMap.put(putBomLine, ds[1] - ds[0]);
}
}
// for (Map.Entry<String, TCComponentBOMLine> beforeEntry : beforeMap.entrySet()) {
// String key = beforeEntry.getKey();
// System.out.println("1_beforeMap ["+key+"] : ["+beforeMap.get(key)+"]");
// System.out.println("1_afterMap ["+key+"] : ["+afterMap.get(key)+"]");
// if (afterMap.containsKey(key)) {
// System.out.println("1");
//// Object compResult = TCUtil.compareBOMLineQuantity(beforeMap.get(key), afterMap.get(key));//原生方法:根据“安装位置限定”计算更改前后零部件的数量
//// if (compResult instanceof double[]) {
//// System.out.println("2");
//// double[] ds = (double[]) compResult;
//// resultMap.put(afterMap.get(key), ds[1] - ds[0]);
//// }
// //新增的逻辑
// double[] ds = getBOMLineQuantity(beforeMap.get(key),afterMap.get(key));
// System.out.println("对象:["+beforeMap.get(key)+"]变更前的数量=["+ds[0]+"],变更后的数量=["+ds[1]+"]");
// double changeNum = ds[1] - ds[0];
// if (changeNum == 0) {
// continue;
// }
// resultMap.put(afterMap.get(key), ds[1] - ds[0]);
// }
// }
// for (Map.Entry<String, TCComponentBOMLine> afterEntry : afterMap.entrySet()) {
// String key = afterEntry.getKey();
// System.out.println("遍历afterMap "+key+":"+afterMap.get(key));
// if (beforeMap.containsKey(key)) {
// System.out.println("3");
// } else {
// System.out.println("4");
// resultMap.put(afterMap.get(key), TCUtil.totalBOMLineQuantity(afterMap.get(key)));
// }
// }
String ysr8_ReasonAnalysisVal = "";
TCComponentItem ecn1Item = ecn1Revision.getItem();
@ -1381,24 +1404,57 @@ public class YSR8_ECN1RevisionMasterForm extends AbstractRendering {
}
}
/**
* keyset
* @param beforeMap
* @param afterMap
* @return
*/
private Set<String> getAllChange(Map<String, TCComponentBOMLine> beforeMap,
Map<String, TCComponentBOMLine> afterMap) {
Set<String> changeSet = new LinkedHashSet<String>();
// 将 beforeMap 的所有 key 添加进 set
if (beforeMap != null) {
changeSet.addAll(beforeMap.keySet());
}
// 将 afterMap 的所有 key 添加进 set
if (afterMap != null) {
changeSet.addAll(afterMap.keySet());
}
return changeSet;
}
/**
* bomlineQuantity
* @param beforeBOMLine
* @param afterBOMLine2
* @param afterBOMLine
* @return
* @throws TCException
*/
private double[] getBOMLineQuantity(TCComponentBOMLine beforeBOMLine, TCComponentBOMLine afterBOMLine2) throws TCException {
private double[] getBOMLineQuantity(TCComponentBOMLine beforeBOMLine, TCComponentBOMLine afterBOMLine) throws TCException {
System.out.println("getBOMLineQuantity开始执行···");
if (beforeBOMLine == null || afterBOMLine2 == null) {
double bl1 = 0;
double bl2 = 0;
String bl_quantity1 = null;
String bl_quantity2 = null;
String targetName = null;
if (beforeBOMLine == null && afterBOMLine == null) {
System.out.println("getBOMLineQuantity入参异常为null");
return null;
}
String targetName = beforeBOMLine.getItem().getStringProperty("object_string");
String bl_quantity1 = beforeBOMLine.getStringProperty("bl_quantity");
String bl_quantity2 = afterBOMLine2afterBOMLine2.getStringProperty("bl_quantity");
double bl1 = Double.parseDouble(bl_quantity1);
double bl2 = Double.parseDouble(bl_quantity2);
if (beforeBOMLine != null) {
bl_quantity1 = beforeBOMLine.getStringProperty("bl_quantity");
bl1 = Double.parseDouble(bl_quantity1 == null ? "0" : bl_quantity1);
targetName = beforeBOMLine.getItem().getStringProperty("object_string");
}
if (afterBOMLine != null) {
bl_quantity2 = afterBOMLine.getStringProperty("bl_quantity");
bl2 = Double.parseDouble(bl_quantity2 == null ? "0" : bl_quantity2);
targetName = afterBOMLine.getItem().getStringProperty("object_string");
}
System.out.println(targetName+"对应的bomline前后数量对比=【"+bl_quantity1+":"+bl_quantity2+"】");
double[] re = {bl1, bl2};
return re;

Loading…
Cancel
Save