feat(wms): 添加钢卷物料改判记录查询功能

- 在IWmsMaterialCoilService中新增queryPageListWithRejudge方法
- 实现批量查询钢卷最新改判记录的Mapper方法
- 添加SQL映射查询每个钢卷的最新一条改判记录
- 创建WmsMaterialCoilRejudgeVo视图对象包含改判信息
- 实现控制器listWithRejudge接口供前端调用
- 在服务实现中批量关联钢卷与其最新改判记录
This commit is contained in:
2026-05-08 16:58:47 +08:00
parent 2260058c63
commit d248b0e585
6 changed files with 122 additions and 0 deletions

View File

@@ -78,6 +78,16 @@ public class WmsMaterialCoilController extends BaseController {
return iWmsMaterialCoilService.queryPageListWithOrderRel(bo, pageQuery);
}
/**
* 查询钢卷物料表列表(包含改判记录信息)
* 前端调用此接口时每个钢卷会携带其关联的改判记录列表通过wms_coil_quality_rejudge表
* 注意此接口比普通list多一次查询仅在需要查看改判记录时使用
*/
@GetMapping("/listWithRejudge")
public TableDataInfo<WmsMaterialCoilRejudgeVo> listWithRejudge(WmsMaterialCoilBo bo, PageQuery pageQuery) {
return iWmsMaterialCoilService.queryPageListWithRejudge(bo, pageQuery);
}
/**
* 统计筛选条件下的全量汇总数据
* 独立的统计接口,使用与分页列表相同的查询条件

View File

@@ -0,0 +1,23 @@
package com.klp.domain.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 钢卷物料表视图对象(包含改判记录信息) wms_material_coil
*
* @author Joshi
* @date 2026-05-08
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsMaterialCoilRejudgeVo extends WmsMaterialCoilVo {
private static final long serialVersionUID = 1L;
/**
* 最新改判记录通过wms_coil_quality_rejudge表
*/
private WmsCoilQualityRejudgeVo rejudgeInfo;
}

View File

@@ -24,4 +24,13 @@ public interface WmsCoilQualityRejudgeMapper extends BaseMapperPlus<WmsCoilQuali
*/
List<Map<String, Object>> selectMapsBySql(@Param("sql") String sql);
/**
* 批量根据钢卷ID列表查询每个钢卷的最新一条改判记录
*
* @param coilIds 钢卷ID列表
* @return 最新改判记录列表
*/
List<WmsCoilQualityRejudgeVo> selectLatestByCoilIds(@Param("coilIds") List<Long> coilIds);
}

View File

@@ -44,6 +44,12 @@ public interface IWmsMaterialCoilService {
*/
TableDataInfo<WmsMaterialCoilVo> queryPageListWithOrderRel(WmsMaterialCoilBo bo, PageQuery pageQuery);
/**
* 查询钢卷物料表列表(包含改判记录信息)
* 每个钢卷会携带其关联的改判记录列表通过wms_coil_quality_rejudge表
*/
TableDataInfo<WmsMaterialCoilRejudgeVo> queryPageListWithRejudge(WmsMaterialCoilBo bo, PageQuery pageQuery);
/**
* 查询钢卷物料表列表
*/

View File

@@ -384,6 +384,53 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
return TableDataInfo.build(result);
}
@Override
public TableDataInfo<WmsMaterialCoilRejudgeVo> queryPageListWithRejudge(WmsMaterialCoilBo bo, PageQuery pageQuery) {
Page<WmsMaterialCoilVo> result = queryMaterialCoilPage(bo, pageQuery);
List<WmsMaterialCoilVo> records = result.getRecords();
if (records == null || records.isEmpty()) {
Page<WmsMaterialCoilRejudgeVo> rejudgePage = new Page<>();
rejudgePage.setTotal(result.getTotal());
rejudgePage.setCurrent(result.getCurrent());
rejudgePage.setSize(result.getSize());
return TableDataInfo.build(rejudgePage);
}
// 填充通用字段(昵称等)
fillPageCommonFields(records);
// 批量查询每个钢卷的最新一条改判记录
List<com.klp.domain.vo.WmsCoilQualityRejudgeVo> latestRejudges =
wmsCoilQualityRejudgeMapper.selectLatestByCoilIds(
records.stream().map(WmsMaterialCoilVo::getCoilId).filter(Objects::nonNull).collect(Collectors.toList()));
Map<Long, com.klp.domain.vo.WmsCoilQualityRejudgeVo> rejudgeMap = new HashMap<>();
if (latestRejudges != null && !latestRejudges.isEmpty()) {
latestRejudges.forEach(r -> {
if (r.getCoilId() != null) {
rejudgeMap.put(r.getCoilId(), r);
}
});
}
// 转换为新VO并回填最新改判记录
List<WmsMaterialCoilRejudgeVo> rejudgeRecords = records.stream().map(vo -> {
WmsMaterialCoilRejudgeVo rvo = new WmsMaterialCoilRejudgeVo();
BeanUtil.copyProperties(vo, rvo);
if (vo.getCoilId() != null && rejudgeMap.containsKey(vo.getCoilId())) {
rvo.setRejudgeInfo(rejudgeMap.get(vo.getCoilId()));
}
return rvo;
}).collect(Collectors.toList());
Page<WmsMaterialCoilRejudgeVo> rejudgePage = new Page<>();
rejudgePage.setRecords(rejudgeRecords);
rejudgePage.setTotal(result.getTotal());
rejudgePage.setCurrent(result.getCurrent());
rejudgePage.setSize(result.getSize());
return TableDataInfo.build(rejudgePage);
}
/**
* 批量填充钢卷列表的订单关联信息(一次查询中间表+订单避免N+1
*/

View File

@@ -23,4 +23,31 @@
${sql}
</select>
<!-- 批量根据钢卷ID列表查询每个钢卷的最新一条改判记录 -->
<select id="selectLatestByCoilIds" resultType="com.klp.domain.vo.WmsCoilQualityRejudgeVo">
SELECT
r.rejudge_id AS rejudgeId,
r.coil_id AS coilId,
r.before_quality AS beforeQuality,
r.after_quality AS afterQuality,
r.rejudge_reason AS rejudgeReason,
r.remark,
r.create_by AS createBy,
r.create_time AS createTime,
r.update_by AS updateBy,
r.update_time AS updateTime
FROM wms_coil_quality_rejudge r
INNER JOIN (
SELECT coil_id, MAX(create_time) AS max_create_time
FROM wms_coil_quality_rejudge
WHERE del_flag = '0'
AND coil_id IN
<foreach collection="coilIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
GROUP BY coil_id
) latest ON r.coil_id = latest.coil_id AND r.create_time = latest.max_create_time
WHERE r.del_flag = '0'
</select>
</mapper>