diff --git a/src/main/java/com/xujie/modules/order/controller/PODetailController.java b/src/main/java/com/xujie/modules/order/controller/PODetailController.java index 7b74587..e78a52a 100644 --- a/src/main/java/com/xujie/modules/order/controller/PODetailController.java +++ b/src/main/java/com/xujie/modules/order/controller/PODetailController.java @@ -235,5 +235,4 @@ public class PODetailController { } } - } diff --git a/src/main/java/com/xujie/modules/order/dao/PODetailMapper.java b/src/main/java/com/xujie/modules/order/dao/PODetailMapper.java index daf8381..7c51968 100644 --- a/src/main/java/com/xujie/modules/order/dao/PODetailMapper.java +++ b/src/main/java/com/xujie/modules/order/dao/PODetailMapper.java @@ -33,4 +33,15 @@ public interface PODetailMapper extends BaseMapper { Integer getMaxItemNo(@Param("poNo") String poNo, @Param("site") String site); + + /** + * 检查订单明细是否已存在(用于防止重复上传) + * @param orderNo 订单号 + * @param site 工厂编码 + * @param item 款号 + * @return 存在的记录数 + */ + Integer countByOrderAndItem(@Param("orderNo") String orderNo, + @Param("site") String site, + @Param("item") String item); } diff --git a/src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java b/src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java index e1a00a0..616a42a 100644 --- a/src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java +++ b/src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java @@ -145,19 +145,22 @@ public class PODetailServiceImpl extends ServiceImpl i SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - // 新增:控制 item_no(每个PO递增) + // 新增:控制 item_no(每个PO递增) Map orderLineMap = new HashMap<>(); - - // 获取当前用户(避免循环里重复取) + + // 获取当前用户(避免循环里重复取) SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if (currentUser == null || currentUser.getSite() == null) { throw new RuntimeException("无法获取当前用户站点信息"); } String site = currentUser.getSite(); - + if (site == null) { - throw new RuntimeException("当前用户site为空!"); + throw new RuntimeException("当前用户site为空!"); } + + // 用于收集重复数据的信息 + List duplicateItems = new ArrayList<>(); // 转换并保存每条数据 for (PODetailExcelDTO excelDTO : excelList) { @@ -216,13 +219,23 @@ public class PODetailServiceImpl extends ServiceImpl i } } - // ========== 2. 生成 item_no(核心) ========== + // ========== 2. 检查是否重复 ========== String poNo = excelDTO.getPoNo(); + String item = excelDTO.getItem(); + + // 检查数据库中是否已存在相同的订单号+款号 + Integer existCount = baseMapper.countByOrderAndItem(poNo, site, item); + if (existCount != null && existCount > 0) { + duplicateItems.add("订单号: " + poNo + ", 款号: " + item); + continue; // 跳过重复数据,继续处理下一条 + } + + // ========== 3. 生成 item_no(核心) ========== Integer maxItemNo = baseMapper.getMaxItemNo(poNo, site); int lineNo = (maxItemNo == null ? 0 : maxItemNo) + 1; orderLineMap.put(poNo, lineNo); - // ========== 3. 保存 PODetail ========== + // ========== 4. 保存 PODetail ========== PODetailVo poDetailVo = new PODetailVo(); // 主键字段(必须) @@ -276,6 +289,12 @@ public class PODetailServiceImpl extends ServiceImpl i } } + // 如果有重复数据,抛出异常并提示 + if (!duplicateItems.isEmpty()) { + String duplicateMsg = String.join("; ", duplicateItems); + throw new RuntimeException("以下数据已存在,跳过保存: " + duplicateMsg); + } + } catch (IOException e) { throw new RuntimeException("文件读取失败: " + e.getMessage()); } diff --git a/src/main/resources/mapper/order/PODetailMapper.xml b/src/main/resources/mapper/order/PODetailMapper.xml index 358f109..0d0076f 100644 --- a/src/main/resources/mapper/order/PODetailMapper.xml +++ b/src/main/resources/mapper/order/PODetailMapper.xml @@ -491,4 +491,13 @@ WHERE order_no = #{poNo} AND site = #{site} + + +