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; + } + }