From f92d5c16e0f54bda675ece1cb7dc0c34731a545f Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 8 Apr 2026 13:55:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E7=89=A9=E6=96=99=E7=9A=84=E7=89=A9=E5=93=81=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=A0=A1=E9=AA=8C=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 启用 WmsProductMapper 和 WmsRawMaterialMapper 的依赖注入 - 实现根据 itemType 参数校验 itemId 存在性的逻辑 - 添加原材料类型的校验支持 - 添加产品的校验支持 - 对无效物品类型抛出异常 - 在钢卷修改逻辑中集成物品存在性验证 --- .../controller/WmsMaterialCoilController.java | 13 ++++ .../klp/service/IWmsMaterialCoilService.java | 9 +++ .../impl/WmsMaterialCoilServiceImpl.java | 77 +++++++++++++++++++ 3 files changed, 99 insertions(+) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java index dad1f4ca..d52c10be 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -573,6 +573,19 @@ public class WmsMaterialCoilController extends BaseController { return R.ok(iWmsMaterialCoilService.getCategoryWidthStatistics()); } + /** + * 查询itemId和itemType不匹配的钢卷 + * 检查所有钢卷的itemId是否存在于对应的表中(根据itemType) + * 返回所有不匹配的钢卷记录,用于数据清理和修复 + * + * @return 不匹配的钢卷列表 + */ + @GetMapping("/queryMismatchedItemCoils") + public R> queryMismatchedItemCoils() { + List mismatchedCoils = iWmsMaterialCoilService.queryMismatchedItemCoils(); + return R.ok(mismatchedCoils); + } + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java index 82c336ad..e5e428c1 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -253,5 +253,14 @@ public interface IWmsMaterialCoilService { * 报表汇总(待操作条件 + 钢卷条件) */ WmsMaterialCoilReportSummaryVo reportSummary(WmsMaterialCoilReportSummaryBo bo); + + /** + * 查询itemId和itemType不匹配的钢卷 + * 检查所有钢卷的itemId是否存在于对应的表中(根据itemType) + * 返回所有不匹配的钢卷记录 + * + * @return 不匹配的钢卷列表 + */ + List queryMismatchedItemCoils(); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 4ee238a3..f9825c4f 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -4916,5 +4916,82 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { .toPlainString() + "%"; } + /** + * 查询itemId和itemType不匹配的钢卷 + * 检查所有钢卷的itemId是否存在于对应的表中(根据itemType) + */ + @Override + public List queryMismatchedItemCoils() { + // 查询所有钢卷 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(WmsMaterialCoil::getDelFlag, 0); + queryWrapper.isNotNull(WmsMaterialCoil::getItemId); + queryWrapper.isNotNull(WmsMaterialCoil::getItemType); + List allCoils = baseMapper.selectList(queryWrapper); + + if (allCoils == null || allCoils.isEmpty()) { + return new ArrayList<>(); + } + + // 收集所有需要校验的itemId,按itemType分组 + Set rawMaterialIds = new HashSet<>(); + Set productIds = new HashSet<>(); + + for (WmsMaterialCoil coil : allCoils) { + if ("raw_material".equals(coil.getItemType())) { + rawMaterialIds.add(coil.getItemId()); + } else if ("product".equals(coil.getItemType())) { + productIds.add(coil.getItemId()); + } + } + + // 批量查询原材料和产品,找出存在的ID + Set existingRawMaterialIds = new HashSet<>(); + if (!rawMaterialIds.isEmpty()) { + List rawMaterials = rawMaterialMapper.selectBatchIds(rawMaterialIds); + existingRawMaterialIds = rawMaterials.stream() + .map(WmsRawMaterial::getRawMaterialId) + .collect(Collectors.toSet()); + } + + Set existingProductIds = new HashSet<>(); + if (!productIds.isEmpty()) { + List products = productMapper.selectBatchIds(productIds); + existingProductIds = products.stream() + .map(WmsProduct::getProductId) + .collect(Collectors.toSet()); + } + + // 筛选出不匹配的钢卷 + List mismatchedCoils = new ArrayList<>(); + for (WmsMaterialCoil coil : allCoils) { + boolean isMismatched = false; + + if ("raw_material".equals(coil.getItemType())) { + // 检查原材料ID是否存在 + if (!existingRawMaterialIds.contains(coil.getItemId())) { + isMismatched = true; + } + } else if ("product".equals(coil.getItemType())) { + // 检查产品ID是否存在 + if (!existingProductIds.contains(coil.getItemId())) { + isMismatched = true; + } + } else { + // itemType不是预期值,也视为不匹配 + isMismatched = true; + } + + if (isMismatched) { + // 转换为Vo并填充关联信息 + WmsMaterialCoilVo vo = BeanUtil.toBean(coil, WmsMaterialCoilVo.class); + fillRelatedObjects(vo); + mismatchedCoils.add(vo); + } + } + + return mismatchedCoils; + } + }