refactor(sip): 重构产品信息比较逻辑

- 新增产品新增和删除的单独处理逻辑- 优化产品变更比较逻辑,使用更简洁的代码
-修复产品 BOM 编码为空时的处理
- 优化日志输出格式
master
chenhao 2025-06-06 15:47:24 +08:00
parent 6a62d079d5
commit 06f48e6825
2 changed files with 27 additions and 26 deletions

View File

@ -320,33 +320,36 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
.collect(Collectors.toMap(ProjectProductInfo::getId, product -> product));
Map<Long, ProjectProductInfo> newMap = CollUtil.isEmpty(newList) ? new HashMap<>() : newList.stream()
.collect(Collectors.toMap(ProjectProductInfo::getId, product -> product));
//新增
List<String> addCode = newList.stream().filter(item -> item.getId() == null).map(ProjectProductInfo::getProductBomCode).collect(Collectors.toList());
if (CollUtil.isNotEmpty(addCode)) {
logContent.append(index).append(".产品新增").append(type).append(":").append(String.join(",", addCode)).append("\n");
index++;
}
//删除
List<String> deleteCode = oldList.stream().filter(item -> !newMap.containsKey(item.getId())).map(ProjectProductInfo::getProductBomCode).collect(Collectors.toList());
if (CollUtil.isNotEmpty(deleteCode)) {
logContent.append(index).append(".产品删除").append(type).append(":").append(String.join(",", deleteCode)).append("\n");
index++;
}
// 获取所有 id 的并集
Set<Long> allIds = new HashSet<>(oldMap.keySet());
allIds.addAll(newMap.keySet());
for (Long id : allIds) {
ProjectProductInfo oldProduct = oldMap.get(id);
ProjectProductInfo newProduct = newMap.get(id);
if (oldProduct == null && newProduct != null) {
// 新增产品
logContent.append(index).append(".").append(type).append("新增:").append(StringUtils.isEmpty(newProduct.getProductBomCode()) ? "空" : newProduct.getProductBomCode()).append("\n");
index++;
} else if (oldProduct != null && newProduct == null) {
// 删除产品
logContent.append(index).append(".").append(type).append("删除:").append(StringUtils.isEmpty(oldProduct.getProductBomCode()) ? "空" : oldProduct.getProductBomCode()).append("\n");
index++;
} else if (oldProduct != null) {
if (oldProduct != null && newProduct != null) {
// 变更产品
index = compareField(logContent, index, "产品编号", oldProduct.getProductBomCode(), newProduct.getProductBomCode());
index = compareField(logContent, index, "数量", oldProduct.getQuantity(), newProduct.getQuantity());
index = compareField(logContent, index, "目录单价", oldProduct.getCataloguePrice(), newProduct.getCataloguePrice());
index = compareField(logContent, index, "指导折扣", oldProduct.getGuidanceDiscount(), newProduct.getGuidanceDiscount());
index = compareField(logContent, index, "指导折扣", oldProduct.getDiscount(), newProduct.getDiscount());
index = compareField(logContent, index, "单价", oldProduct.getPrice(), newProduct.getPrice());
index = compareField(logContent, index, "总价", oldProduct.getAllPrice(), newProduct.getAllPrice());
index = compareField(logContent, index, "目录总价", oldProduct.getCatalogueAllPrice(), newProduct.getCatalogueAllPrice());
index = compareBigDecimalField(logContent, index, "目录单价", oldProduct.getCataloguePrice(), newProduct.getCataloguePrice());
index = compareBigDecimalField(logContent, index, "指导折扣", oldProduct.getGuidanceDiscount(), newProduct.getGuidanceDiscount());
index = compareBigDecimalField(logContent, index, "指导折扣", oldProduct.getDiscount(), newProduct.getDiscount());
index = compareBigDecimalField(logContent, index, "单价", oldProduct.getPrice(), newProduct.getPrice());
index = compareBigDecimalField(logContent, index, "总价", oldProduct.getAllPrice(), newProduct.getAllPrice());
index = compareBigDecimalField(logContent, index, "目录总价", oldProduct.getCatalogueAllPrice(), newProduct.getCatalogueAllPrice());
index = compareField(logContent, index, "备注", oldProduct.getRemark(), newProduct.getRemark());
}
}
@ -359,7 +362,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
index,
fieldName,
oldValue == null ? "空" : oldValue,
newValue == null ? "空" : oldValue));
newValue == null ? "空" : newValue));
index++;
}
return index;
@ -367,13 +370,11 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
private int compareBigDecimalField(StringBuilder logContent, int index, String fieldName, BigDecimal oldValue, BigDecimal newValue) {
if (oldValue != null && newValue != null && oldValue.compareTo(newValue) != 0) {
logContent.append(index).append(".")
.append(fieldName)
.append("由‘")
.append(oldValue)
.append("’变更为‘")
.append(newValue)
.append("\n");
logContent.append(StringUtils.format("{}.{}由[{}]变更为[{}]\n",
index,
fieldName,
oldValue,
newValue));
index++;
}
return index;

View File

@ -132,7 +132,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update project_product_info
<trim prefix="SET" suffixOverrides=",">
<if test="item.projectId != null">project_id = #{item.projectId},</if>
<if test="item.productBomCode != null and productBomCode != ''">product_bom_code = #{item.productBomCode},</if>
<if test="item.productBomCode != null and item.productBomCode != ''">product_bom_code = #{item.productBomCode},</if>
<if test="item.model != null">model = #{item.model},</if>
<if test="item.productCode != null">product_code = #{item.productCode},</if>
<if test="item.productDesc != null">product_desc = #{item.productDesc},</if>