feat(wms): 新增材质异常钢卷查询功能

- 在IWmsMaterialCoilService中添加queryMaterialMismatchCoils方法定义
- 在WmsMaterialCoilController中新增查询材质异常钢卷的API接口
- 在WmsMaterialCoilMapper中添加selectMaterialMismatchCoilsPage分页查询方法
- 在WmsMaterialCoilMapper.xml中实现材质异常钢卷的SQL查询逻辑
- 在WmsMaterialCoilServiceImpl中实现材质异常钢卷查询的具体业务逻辑
- 通过关联查询优化性能,避免N+1问题并支持分页返回结果
This commit is contained in:
2026-04-20 14:29:33 +08:00
parent be59e4cc79
commit 2dbf4a042e
5 changed files with 68 additions and 0 deletions

View File

@@ -605,6 +605,19 @@ public class WmsMaterialCoilController extends BaseController {
return R.ok(mismatchedCoils);
}
/**
* 查询材质异常的钢卷
* 对比wms_material_coil.packing_status与wms_product.material或wms_raw_material.material
* 返回材质不匹配的钢卷列表,用于数据异常排查
*
* @param pageQuery 分页参数
* @return 材质异常的钢卷列表(分页)
*/
@GetMapping("/queryMaterialMismatchCoils")
public TableDataInfo<WmsMaterialCoilVo> queryMaterialMismatchCoils(PageQuery pageQuery) {
return iWmsMaterialCoilService.queryMaterialMismatchCoils(pageQuery);
}
}

View File

@@ -3,6 +3,7 @@ package com.klp.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.klp.domain.WmsMaterialCoil;
import com.klp.domain.vo.WmsMaterialCoilDeliveryExportVo;
import com.klp.domain.vo.WmsMaterialCoilVo;
@@ -112,5 +113,10 @@ List<WmsMaterialCoilDeliveryExportVo> selectDeliveryExportListByCoilIds(@Param("
* @return 每个仓库的钢卷数量
*/
List<Map<String, Object>> selectWarehouseIdCount(@Param("list") List<Long> warehouseIds);
/**
* 分页查询材质异常的钢卷
*/
IPage<WmsMaterialCoil> selectMaterialMismatchCoilsPage(IPage<WmsMaterialCoil> page);
}

View File

@@ -275,5 +275,14 @@ public interface IWmsMaterialCoilService {
* @return 不匹配的钢卷列表
*/
List<WmsMaterialCoilVo> queryMismatchedItemCoils();
/**
* 查询材质异常的钢卷packing_status与wms_product.material或wms_raw_material.material不匹配
* 通过itemType确定关联的表对比packing_status和关联表的material字段
*
* @param pageQuery 分页参数
* @return 材质异常的钢卷列表(分页)
*/
TableDataInfo<WmsMaterialCoilVo> queryMaterialMismatchCoils(PageQuery pageQuery);
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.klp.common.core.domain.entity.SysUser;
import com.klp.common.core.page.TableDataInfo;
@@ -5163,5 +5164,27 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
return voList;
}
/**
* 查询材质异常的钢卷packing_status与wms_product.material或wms_raw_material.material不匹配
* 通过SQL关联查询优化性能避免N+1问题
*/
@Override
public TableDataInfo<WmsMaterialCoilVo> queryMaterialMismatchCoils(PageQuery pageQuery) {
IPage<WmsMaterialCoil> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
IPage<WmsMaterialCoil> result = baseMapper.selectMaterialMismatchCoilsPage(page);
List<WmsMaterialCoilVo> voList = new ArrayList<>();
if (result.getRecords() != null && !result.getRecords().isEmpty()) {
voList = result.getRecords().stream()
.map(coil -> BeanUtil.toBean(coil, WmsMaterialCoilVo.class))
.collect(Collectors.toList());
fillRelatedObjectsBatch(voList);
}
IPage<WmsMaterialCoilVo> voPage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal());
voPage.setRecords(voList);
return TableDataInfo.build(voPage);
}
}

View File

@@ -936,5 +936,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY warehouse_id
</select>
<!-- 分页查询材质异常的钢卷 -->
<select id="selectMaterialMismatchCoilsPage" resultMap="WmsMaterialCoilResult">
SELECT mc.*
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id AND rm.del_flag = 0
LEFT JOIN wms_product wp ON mc.item_type = 'product' AND mc.item_id = wp.product_id AND wp.del_flag = 0
WHERE mc.del_flag = 0
AND mc.item_id IS NOT NULL
AND mc.item_type IS NOT NULL
AND mc.packing_status IS NOT NULL
AND (
(mc.item_type = 'raw_material' AND rm.material IS NOT NULL AND mc.packing_status != rm.material)
OR
(mc.item_type = 'product' AND wp.material IS NOT NULL AND mc.packing_status != wp.material)
)
</select>
</mapper>