feat(wms): 新增动态关联查询功能并优化钢卷列表接口

- 在 WmsMaterialCoilMapper 中新增 selectVoListWithDynamicJoin 方法
- 修改 selectVoPagePlus SQL 查询逻辑,移除冗余字段
- 实现根据物品类型联查原材料或产品信息
- 更新 WmsMaterialCoilServiceImpl 中 queryList 方法调用新接口
- 优化 WmsMaterialCoilVo 字段注释及 Excel 导出配置- 移除部分不必要的 @ExcelProperty 注解
- 新增 itemName 和 itemCode 字段用于显示物品名称和编号- 调整字段注释说明 dataType 数据类型含义- 修复仓库变更判断逻辑中的空指针风险
This commit is contained in:
2025-10-30 14:59:46 +08:00
parent 824ce738a9
commit ca301a4c18
4 changed files with 54 additions and 37 deletions

View File

@@ -24,7 +24,6 @@ public class WmsMaterialCoilVo {
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long coilId;
/**
@@ -53,7 +52,7 @@ public class WmsMaterialCoilVo {
private Integer dataType;
/**
* 所在库区ID
所在库区ID 联查当前库区和物品id 复卷好去掉 dataType数据类型是1当前 0就是历史 物品类型row_me 原材料 product产品
*/
@ExcelProperty(value = "所在库区ID")
private Long warehouseId;
@@ -61,13 +60,11 @@ public class WmsMaterialCoilVo {
/**
* 下一库区ID
*/
@ExcelProperty(value = "下一库区ID")
private Long nextWarehouseId;
/**
* 关联二维码ID
*/
@ExcelProperty(value = "关联二维码ID")
private Long qrcodeRecordId;
/**
@@ -86,7 +83,6 @@ public class WmsMaterialCoilVo {
/**
* 父卷号
*/
@ExcelProperty(value = "父卷号")
private String parentCoilNos;
/**
@@ -98,7 +94,6 @@ public class WmsMaterialCoilVo {
/**
* 物品ID
*/
@ExcelProperty(value = "物品ID")
private Long itemId;
/**
@@ -163,6 +158,7 @@ public class WmsMaterialCoilVo {
/**
* 库区名称(用于统计查询)
*/
@ExcelProperty(value = "库区名称")
private String warehouseName;
/**
@@ -180,8 +176,10 @@ public class WmsMaterialCoilVo {
*/
private BigDecimal totalNetWeight;
@ExcelProperty(value = "物品名称")
private String itemName;
@ExcelProperty(value = "物品编号")
private String itemCode;
}

View File

@@ -39,5 +39,7 @@ public interface WmsMaterialCoilMapper extends BaseMapperPlus<WmsMaterialCoilMap
List<Map<String, Object>> getDistributionByItemType(@Param("itemType") String itemType, @Param("itemId") Long itemId);
Page<WmsMaterialCoilVo> selectVoPagePlus(Page<Object> build,@Param("ew") QueryWrapper<WmsMaterialCoil> lqw);
List<WmsMaterialCoilVo> selectVoListWithDynamicJoin(@Param("ew")QueryWrapper<WmsMaterialCoil> lqw);
}

View File

@@ -181,10 +181,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
@Override
public List<WmsMaterialCoilVo> queryList(WmsMaterialCoilBo bo) {
QueryWrapper<WmsMaterialCoil> lqw = buildQueryWrapperPlus(bo);
Page<Object> build = new PageQuery().build();
build.setSize(Long.MAX_VALUE);
Page<WmsMaterialCoilVo> wmsMaterialCoilVoPage = baseMapper.selectVoPagePlus(build, lqw);
return wmsMaterialCoilVoPage.getRecords();
return baseMapper.selectVoListWithDynamicJoin(lqw);
}
/**
@@ -364,9 +361,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
// 判断warehouseId是否发生变化
boolean warehouseChanged = bo.getWarehouseId() != null &&
boolean warehouseChanged = bo.getWarehouseId() != null &&
!bo.getWarehouseId().equals(oldCoil.getWarehouseId());
Long qrcodeRecordId;
if (warehouseChanged) {
// 如果库区发生变化,生成新的二维码

View File

@@ -63,7 +63,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY w.warehouse_id, w.warehouse_name, mc.item_type, mc.item_id
ORDER BY w.warehouse_id, mc.item_type, mc.item_id
</select>
<select id="selectVoPagePlus" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT
mc.coil_id,
mc.enter_coil_no,
mc.current_coil_no,
mc.supplier_coil_no,
mc.data_type,
mc.next_warehouse_id,
mc.qrcode_record_id,
mc.team,
mc.has_merge_split,
mc.parent_coil_nos,
mc.item_type,
mc.item_id,
mc.gross_weight,
mc.net_weight,
mc.status,
mc.remark,
mc.warehouse_id,
w.warehouse_name AS warehouseName
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
${ew.customSqlSegment}
</select>
<!-- 查询不同类型的钢卷在不同库区的分布情况 -->
<select id="getDistributionByItemType" resultType="java.util.Map">
SELECT
@@ -88,30 +111,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY mc.item_type, mc.item_id, w.warehouse_id, w.warehouse_name
ORDER BY mc.item_type, mc.item_id, w.warehouse_id
</select>
<select id="selectVoPagePlus" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT
mc.coil_id,
mc.enter_coil_no,
mc.current_coil_no,
mc.supplier_coil_no,
mc.data_type,
mc.next_warehouse_id,
mc.qrcode_record_id,
mc.team,
mc.has_merge_split,
mc.parent_coil_nos,
mc.item_type,
mc.item_id,
mc.gross_weight,
mc.net_weight,
mc.status,
mc.remark,
mc.warehouse_id,
w.warehouse_name AS warehouseName
<select id="selectVoListWithDynamicJoin" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT mc.*,
w.warehouse_name AS warehouseName,
CASE
WHEN mc.item_type = 'row_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END as itemName,
CASE
WHEN mc.item_type = 'row_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL
END as itemCode
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
${ew.customSqlSegment}
LEFT JOIN wms_raw_material rm ON mc.item_type = 'row_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
${ew.customSqlSegment}
</select>
</mapper>