refactor(wms): 优化钢卷不匹配数据查询逻辑
- 在WmsMaterialCoilMapper中新增selectMismatchedItemCoils方法用于查询itemId和itemType不匹配的钢卷 - 在WmsMaterialCoilMapper.xml中添加对应的SQL查询语句,使用子查询直接筛选不匹配的数据 - 重构WmsMaterialCoilServiceImpl中的queryMismatchedItemCoils方法,改用SQL子查询替代原来的多次数据库查询 - 移除原有的批量验证逻辑,直接通过数据库层面进行数据校验 - 优化性能,减少不必要的数据库访问次数 - 使用批量填充方式处理关联对象信息
This commit is contained in:
@@ -91,5 +91,11 @@ List<WmsMaterialCoilDeliveryExportVo> selectDeliveryExportListByCoilIds(@Param("
|
|||||||
List<CoilTrimRawVo> selectCoilTrimStatistics();
|
List<CoilTrimRawVo> selectCoilTrimStatistics();
|
||||||
|
|
||||||
List<CategoryWidthRawVo> selectCategoryWidthStatistics();
|
List<CategoryWidthRawVo> selectCategoryWidthStatistics();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询itemId和itemType不匹配的钢卷
|
||||||
|
* @return 不匹配的钢卷列表
|
||||||
|
*/
|
||||||
|
List<WmsMaterialCoil> selectMismatchedItemCoils();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4922,75 +4922,20 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<WmsMaterialCoilVo> queryMismatchedItemCoils() {
|
public List<WmsMaterialCoilVo> queryMismatchedItemCoils() {
|
||||||
// 查询所有钢卷
|
// 用SQL子查询直接找出itemId和itemType不匹配的钢卷
|
||||||
LambdaQueryWrapper<WmsMaterialCoil> queryWrapper = new LambdaQueryWrapper<>();
|
List<WmsMaterialCoil> mismatchedCoils = baseMapper.selectMismatchedItemCoils();
|
||||||
queryWrapper.eq(WmsMaterialCoil::getDelFlag, 0);
|
|
||||||
queryWrapper.isNotNull(WmsMaterialCoil::getItemId);
|
|
||||||
queryWrapper.isNotNull(WmsMaterialCoil::getItemType);
|
|
||||||
List<WmsMaterialCoil> allCoils = baseMapper.selectList(queryWrapper);
|
|
||||||
|
|
||||||
if (allCoils == null || allCoils.isEmpty()) {
|
if (mismatchedCoils == null || mismatchedCoils.isEmpty()) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 收集所有需要校验的itemId,按itemType分组
|
// 批量填充关联信息
|
||||||
Set<Long> rawMaterialIds = new HashSet<>();
|
List<WmsMaterialCoilVo> voList = mismatchedCoils.stream()
|
||||||
Set<Long> productIds = new HashSet<>();
|
.map(coil -> BeanUtil.toBean(coil, WmsMaterialCoilVo.class))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
fillRelatedObjectsBatch(voList);
|
||||||
|
|
||||||
for (WmsMaterialCoil coil : allCoils) {
|
return voList;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -881,5 +881,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
ORDER BY category, isTrimmed, width
|
ORDER BY category, isTrimmed, width
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 查询itemId和itemType不匹配的钢卷 -->
|
||||||
|
<select id="selectMismatchedItemCoils" resultMap="WmsMaterialCoilResult">
|
||||||
|
SELECT mc.*
|
||||||
|
FROM wms_material_coil mc
|
||||||
|
WHERE mc.del_flag = 0
|
||||||
|
AND mc.item_id IS NOT NULL
|
||||||
|
AND mc.item_type IS NOT NULL
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT 1 FROM wms_raw_material rm WHERE rm.raw_material_id = mc.item_id AND rm.del_flag = 0
|
||||||
|
)
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT 1 FROM wms_product wp WHERE wp.product_id = mc.item_id AND wp.del_flag = 0
|
||||||
|
)
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user