feat(sip): 优化订单导入逻辑
- 移除了产品编码重复校验,改为在导入时自动合并相同产品编码的订单- 添加了 mergeOrderLists 方法用于合并订单列表 - 修改了导入逻辑,先删除原有订单再批量插入新订单,以适应无法确定 BOM 编码唯一性的情况 - 优化了错误提示信息,将"单价不能为空"改为"数量不能为空" - 删除了 OrderList 类中的冗余空行master
parent
6c2e32f470
commit
5e45584754
|
@ -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;
|
||||
}
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue