feat(wms): 添加钢卷物料的物品类型校验功能

- 启用 WmsProductMapper 和 WmsRawMaterialMapper 的依赖注入
- 实现根据 itemType 参数校验 itemId 存在性的逻辑
- 添加原材料类型的校验支持
- 添加产品的校验支持
- 对无效物品类型抛出异常
- 在钢卷修改逻辑中集成物品存在性验证
This commit is contained in:
2026-04-08 13:55:54 +08:00
parent dc2624ece1
commit f92d5c16e0
3 changed files with 99 additions and 0 deletions

View File

@@ -573,6 +573,19 @@ public class WmsMaterialCoilController extends BaseController {
return R.ok(iWmsMaterialCoilService.getCategoryWidthStatistics());
}
/**
* 查询itemId和itemType不匹配的钢卷
* 检查所有钢卷的itemId是否存在于对应的表中根据itemType
* 返回所有不匹配的钢卷记录,用于数据清理和修复
*
* @return 不匹配的钢卷列表
*/
@GetMapping("/queryMismatchedItemCoils")
public R<List<WmsMaterialCoilVo>> queryMismatchedItemCoils() {
List<WmsMaterialCoilVo> mismatchedCoils = iWmsMaterialCoilService.queryMismatchedItemCoils();
return R.ok(mismatchedCoils);
}
}

View File

@@ -253,5 +253,14 @@ public interface IWmsMaterialCoilService {
* 报表汇总(待操作条件 + 钢卷条件)
*/
WmsMaterialCoilReportSummaryVo reportSummary(WmsMaterialCoilReportSummaryBo bo);
/**
* 查询itemId和itemType不匹配的钢卷
* 检查所有钢卷的itemId是否存在于对应的表中根据itemType
* 返回所有不匹配的钢卷记录
*
* @return 不匹配的钢卷列表
*/
List<WmsMaterialCoilVo> queryMismatchedItemCoils();
}

View File

@@ -4916,5 +4916,82 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
.toPlainString() + "%";
}
/**
* 查询itemId和itemType不匹配的钢卷
* 检查所有钢卷的itemId是否存在于对应的表中根据itemType
*/
@Override
public List<WmsMaterialCoilVo> queryMismatchedItemCoils() {
// 查询所有钢卷
LambdaQueryWrapper<WmsMaterialCoil> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(WmsMaterialCoil::getDelFlag, 0);
queryWrapper.isNotNull(WmsMaterialCoil::getItemId);
queryWrapper.isNotNull(WmsMaterialCoil::getItemType);
List<WmsMaterialCoil> allCoils = baseMapper.selectList(queryWrapper);
if (allCoils == null || allCoils.isEmpty()) {
return new ArrayList<>();
}
// 收集所有需要校验的itemId按itemType分组
Set<Long> rawMaterialIds = new HashSet<>();
Set<Long> 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<Long> existingRawMaterialIds = new HashSet<>();
if (!rawMaterialIds.isEmpty()) {
List<WmsRawMaterial> rawMaterials = rawMaterialMapper.selectBatchIds(rawMaterialIds);
existingRawMaterialIds = rawMaterials.stream()
.map(WmsRawMaterial::getRawMaterialId)
.collect(Collectors.toSet());
}
Set<Long> existingProductIds = new HashSet<>();
if (!productIds.isEmpty()) {
List<WmsProduct> products = productMapper.selectBatchIds(productIds);
existingProductIds = products.stream()
.map(WmsProduct::getProductId)
.collect(Collectors.toSet());
}
// 筛选出不匹配的钢卷
List<WmsMaterialCoilVo> 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;
}
}