feat(wms): 添加钢卷物料的物品类型校验功能
- 启用 WmsProductMapper 和 WmsRawMaterialMapper 的依赖注入 - 实现根据 itemType 参数校验 itemId 存在性的逻辑 - 添加原材料类型的校验支持 - 添加产品的校验支持 - 对无效物品类型抛出异常 - 在钢卷修改逻辑中集成物品存在性验证
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -253,5 +253,14 @@ public interface IWmsMaterialCoilService {
|
||||
* 报表汇总(待操作条件 + 钢卷条件)
|
||||
*/
|
||||
WmsMaterialCoilReportSummaryVo reportSummary(WmsMaterialCoilReportSummaryBo bo);
|
||||
|
||||
/**
|
||||
* 查询itemId和itemType不匹配的钢卷
|
||||
* 检查所有钢卷的itemId是否存在于对应的表中(根据itemType)
|
||||
* 返回所有不匹配的钢卷记录
|
||||
*
|
||||
* @return 不匹配的钢卷列表
|
||||
*/
|
||||
List<WmsMaterialCoilVo> queryMismatchedItemCoils();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user