From 688e9ef6f9e3d820787cf9921313a7134416dee4 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Mon, 19 May 2025 16:49:37 +0800 Subject: [PATCH] =?UTF-8?q?refactor(sip):=20=E4=BC=98=E5=8C=96=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增校验产品编码是否重复的逻辑 - 增加折扣不能为空的校验 - 优化订单导入逻辑,支持增量更新 - 新增删除订单明细的接口和 SQL --- .../com/ruoyi/sip/mapper/OrderInfoMapper.java | 2 + .../service/impl/OrderInfoServiceImpl.java | 71 +++++++++++++++++-- .../mapper/manage/OrderInfoMapper.xml | 6 ++ 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java index 9b4cfc26..511a84d5 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java @@ -30,6 +30,7 @@ public interface OrderInfoMapper * @return 合同档案集合 */ public List selectOrderInfoList(OrderInfo orderInfo); + public List selectOrderListList(Long id); /** * 新增合同档案 @@ -87,6 +88,7 @@ public interface OrderInfoMapper * @return 结果 */ public int deleteOrderListByOrderId(Long id); + public int deleteOrderListById(List ids); /** * 删除合同清单 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java index f3144f7e..b4416450 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java @@ -196,13 +196,26 @@ public class OrderInfoServiceImpl implements IOrderInfoService @Override public AjaxResult listImportData(List orderListList, Long orderId) { Assert.notNull(orderId, "合同ID不能为空"); - List productCodeList = orderListList.stream().map(OrderList::getProductCode).filter(Objects::nonNull).collect(Collectors.toList()); + List productCodeList = orderListList.stream() + .map(OrderList::getProductCode) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 校验productCode是否重复 + Set uniqueProductCodes = new HashSet<>(productCodeList); + if (uniqueProductCodes.size() != productCodeList.size()) { + return AjaxResult.error("产品编码在excel中存在重复"); + } + if (productCodeList.isEmpty()) { return AjaxResult.error("文件为空或产品编码为空"); } for (OrderList orderList : orderListList) { orderList.setOrderId(orderId); - if (orderList.getDiscount() != null && (orderList.getDiscount().compareTo(BigDecimal.ONE) > 0 || orderList.getDiscount().compareTo(BigDecimal.ZERO) <= 0)) { + if (orderList.getDiscount() == null) { + return AjaxResult.error("折扣不能为空"); + } + if (orderList.getDiscount().compareTo(BigDecimal.ONE) > 0 || orderList.getDiscount().compareTo(BigDecimal.ZERO) <= 0) { return AjaxResult.error("折扣区间需在0-1之间"); } if (orderList.getPrice() == null) { @@ -218,11 +231,61 @@ public class OrderInfoServiceImpl implements IOrderInfoService } orderList.setAmount(amount); } - orderInfoMapper.deleteOrderListByOrderId(orderId); - orderInfoMapper.batchOrderList(orderListList); +// orderInfoMapper.deleteOrderListByOrderId(orderId); +// orderInfoMapper.batchOrderList(orderListList); + List orderInfoList = orderInfoMapper.selectOrderListList(orderId); + Map> stringListMap = compareOrderLists(orderInfoList, orderListList); + List deleteList = stringListMap.get("removed"); + List addList = stringListMap.get("added"); + List 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> compareOrderLists(List orderInfoList, List orderListList) { + // 创建一个映射,用于快速查找订单 + Map orderInfoMap = orderInfoList.stream() + .collect(Collectors.toMap(OrderList::getProductCode, order -> order)); + Map orderListMap = orderListList.stream() + .collect(Collectors.toMap(OrderList::getProductCode, order -> order)); + + // 找出新增的订单 + List addedOrders = orderListList.stream() + .filter(order -> !orderInfoMap.containsKey(order.getProductCode())) + .collect(Collectors.toList()); + + // 找出删除的订单 + List removedOrders = orderInfoList.stream() + .filter(order -> !orderListMap.containsKey(order.getProductCode())) + .collect(Collectors.toList()); + + // 找出需要修改的订单 + List modifiedOrders = orderListList.stream() + .filter(order -> orderInfoMap.containsKey(order.getProductCode())) + .filter(order -> !order.equals(orderInfoMap.get(order.getProductCode()))) + .collect(Collectors.toList()); + // 修改的订单添加id + for (OrderList modifiedOrder : modifiedOrders) { + OrderList orderList = orderInfoMap.get(modifiedOrder.getProductCode()); + modifiedOrder.setId(orderList.getId()); + } + + // 返回结果 + Map> result = new HashMap<>(); + result.put("added", addedOrders); + result.put("removed", removedOrders); + result.put("modified", modifiedOrders); + + return result; + } /** * 查询代表处信息并构建映射 */ diff --git a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml index c36522a8..04e01af8 100644 --- a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml @@ -343,6 +343,12 @@ from order_list where order_id = #{orderId} + + delete from order_list where id in + + #{item} + + insert into order_list(id , order_id, product_code, quantity, price, amount,discount,remark, created_at, updated_at) values