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<CategoryWidthRawVo> selectCategoryWidthStatistics();
|
||||
|
||||
/**
|
||||
* 查询itemId和itemType不匹配的钢卷
|
||||
* @return 不匹配的钢卷列表
|
||||
*/
|
||||
List<WmsMaterialCoil> selectMismatchedItemCoils();
|
||||
}
|
||||
|
||||
|
||||
@@ -4922,75 +4922,20 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
*/
|
||||
@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()) {
|
||||
// 用SQL子查询直接找出itemId和itemType不匹配的钢卷
|
||||
List<WmsMaterialCoil> mismatchedCoils = baseMapper.selectMismatchedItemCoils();
|
||||
|
||||
if (mismatchedCoils == null || mismatchedCoils.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;
|
||||
|
||||
// 批量填充关联信息
|
||||
List<WmsMaterialCoilVo> voList = mismatchedCoils.stream()
|
||||
.map(coil -> BeanUtil.toBean(coil, WmsMaterialCoilVo.class))
|
||||
.collect(Collectors.toList());
|
||||
fillRelatedObjectsBatch(voList);
|
||||
|
||||
return voList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -881,5 +881,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
ORDER BY category, isTrimmed, width
|
||||
</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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user