feat(sip): 优化订单导入逻辑

- 移除了产品编码重复校验,改为在导入时自动合并相同产品编码的订单- 添加了 mergeOrderLists 方法用于合并订单列表
- 修改了导入逻辑,先删除原有订单再批量插入新订单,以适应无法确定 BOM 编码唯一性的情况
- 优化了错误提示信息,将"单价不能为空"改为"数量不能为空"
- 删除了 OrderList 类中的冗余空行
master
chenhao 2025-05-20 10:54:36 +08:00
parent 6c2e32f470
commit 5e45584754
2 changed files with 47 additions and 27 deletions

View File

@ -52,8 +52,6 @@ public class OrderList extends BaseEntity
@Excel(name = "备注")
private String remark;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
// @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
@ -69,5 +67,5 @@ public class OrderList extends BaseEntity
// @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date deletedAt;
private ProductInfo productInfo;
}
private ProductInfo productInfo;
}

View File

@ -193,6 +193,33 @@ public class OrderInfoServiceImpl implements IOrderInfoService
return orderInfoMapper.listExport(orderList);
}
/**
* productCode quantity
*
* @param orderListList
* @return
*/
private List<OrderList> mergeOrderLists(List<OrderList> orderListList) {
if (orderListList == null || orderListList.isEmpty()) {
return orderListList;
}
Map<String, OrderList> mergedMap = new HashMap<>();
for (OrderList order : orderListList) {
String productCode = order.getProductCode();
if (mergedMap.containsKey(productCode)) {
// 如果已存在相同 productCode 的记录,则累加 quantity
OrderList existingOrder = mergedMap.get(productCode);
existingOrder.setQuantity(existingOrder.getQuantity() + order.getQuantity());
} else {
// 如果不存在,则直接添加到 Map 中
mergedMap.put(productCode, order);
}
}
// 将 Map 转换为 List 并返回
return new ArrayList<>(mergedMap.values());
}
@Override
public AjaxResult listImportData(List<OrderList> orderListList, Long orderId) {
Assert.notNull(orderId, "合同ID不能为空");
@ -201,12 +228,6 @@ public class OrderInfoServiceImpl implements IOrderInfoService
.filter(Objects::nonNull)
.collect(Collectors.toList());
// 校验productCode是否重复
Set<String> uniqueProductCodes = new HashSet<>(productCodeList);
if (uniqueProductCodes.size() != productCodeList.size()) {
return AjaxResult.error("产品编码在excel中存在重复");
}
if (productCodeList.isEmpty()) {
return AjaxResult.error("文件为空或产品编码为空");
}
@ -222,7 +243,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService
return AjaxResult.error("单价不能为空");
}
if (orderList.getQuantity() == null) {
return AjaxResult.error("单价不能为空");
return AjaxResult.error("数量不能为空");
}
BigDecimal amount = orderList.getPrice().multiply(new BigDecimal(orderList.getQuantity()));
@ -231,22 +252,23 @@ public class OrderInfoServiceImpl implements IOrderInfoService
}
orderList.setAmount(amount);
}
// orderInfoMapper.deleteOrderListByOrderId(orderId);
// orderInfoMapper.batchOrderList(orderListList);
List<OrderList> orderInfoList = orderInfoMapper.selectOrderListList(orderId);
Map<String, List<OrderList>> stringListMap = compareOrderLists(orderInfoList, orderListList);
List<OrderList> deleteList = stringListMap.get("removed");
List<OrderList> addList = stringListMap.get("added");
List<OrderList> updateList = stringListMap.get("modified");
if (CollUtil.isNotEmpty(addList)) {
orderInfoMapper.batchOrderList(addList);
}
if (CollUtil.isNotEmpty(deleteList)) {
orderInfoMapper.deleteOrderListById(deleteList.stream().map(OrderList::getId).collect(Collectors.toList()));
}
if (CollUtil.isNotEmpty(updateList)) {
orderInfoMapper.updateListBatch(updateList);
}
orderInfoMapper.deleteOrderListByOrderId(orderId);
orderInfoMapper.batchOrderList(orderListList);
//因为没办法确定BOM编码唯一性 无法根据bom编码进行对比
// List<OrderList> orderInfoList = orderInfoMapper.selectOrderListList(orderId);
// Map<String, List<OrderList>> stringListMap = compareOrderLists(orderInfoList, orderListList);
// List<OrderList> deleteList = stringListMap.get("removed");
// List<OrderList> addList = stringListMap.get("added");
// List<OrderList> updateList = stringListMap.get("modified");
// if (CollUtil.isNotEmpty(addList)) {
// orderInfoMapper.batchOrderList(addList);
// }
// if (CollUtil.isNotEmpty(deleteList)) {
// orderInfoMapper.deleteOrderListById(deleteList.stream().map(OrderList::getId).collect(Collectors.toList()));
// }
// if (CollUtil.isNotEmpty(updateList)) {
// orderInfoMapper.updateListBatch(updateList);
// }
return AjaxResult.success("导入成功");
}
public Map<String, List<OrderList>> compareOrderLists(List<OrderList> orderInfoList, List<OrderList> orderListList) {