feat(wms): 添加钢卷物料改判记录查询功能
- 在IWmsMaterialCoilService中新增queryPageListWithRejudge方法 - 实现批量查询钢卷最新改判记录的Mapper方法 - 添加SQL映射查询每个钢卷的最新一条改判记录 - 创建WmsMaterialCoilRejudgeVo视图对象包含改判信息 - 实现控制器listWithRejudge接口供前端调用 - 在服务实现中批量关联钢卷与其最新改判记录
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计筛选条件下的全量汇总数据
|
||||
* 独立的统计接口,使用与分页列表相同的查询条件
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
* 查询钢卷物料表列表
|
||||
*/
|
||||
|
||||
@@ -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)
|
||||
*/
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user