diff --git a/klp-wms/src/main/java/com/klp/domain/WmsMaterialCoil.java b/klp-wms/src/main/java/com/klp/domain/WmsMaterialCoil.java index 69d5e9f3..4cb981dd 100644 --- a/klp-wms/src/main/java/com/klp/domain/WmsMaterialCoil.java +++ b/klp-wms/src/main/java/com/klp/domain/WmsMaterialCoil.java @@ -160,5 +160,15 @@ public class WmsMaterialCoil extends BaseEntity { // 父钢卷id private String parentCoilId; + + /** + * 实测长度 + */ + private BigDecimal actualLength; + + /** + * 实测宽度 + */ + private BigDecimal actualWidth; } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java index cad12c2f..bbf8bbfb 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java @@ -260,5 +260,15 @@ public class WmsMaterialCoilBo extends BaseEntity { // 已绑定钢卷列表中,未发货(status=0)的排在前面 @TableField(exist = false) private Boolean statusFirst; + + /** + * 实测长度 + */ + private BigDecimal actualLength; + + /** + * 实测宽度 + */ + private BigDecimal actualWidth; } diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java index 16001a65..5b6d58f6 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java @@ -429,5 +429,17 @@ public class WmsMaterialCoilVo extends BaseEntity { * 明细单价 */ private BigDecimal bindDetailUnitPrice; + + /** + * 实测长度 + */ + @ExcelProperty(value = "实测长度") + private BigDecimal actualLength; + + /** + * 实测宽度 + */ + @ExcelProperty(value = "实测宽度") + private BigDecimal actualWidth; } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index f007fe98..73c38432 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -469,6 +469,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } // 新增长度 qw.eq(bo.getLength() != null, "mc.length", bo.getLength()); + // 实测长度 + qw.eq(bo.getActualLength() != null, "mc.actual_length", bo.getActualLength()); + // 实测宽度 + qw.eq(bo.getActualWidth() != null, "mc.actual_width", bo.getActualWidth()); // 如果actualWarehouseId不为空,则根据实际库区ID进行查询 如果为-1,则查询无库区的数据 if (bo.getActualWarehouseId() != null) { if (bo.getActualWarehouseId() == -1) { @@ -663,11 +667,12 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { qw.orderByAsc("mc.status = 1"); qw.orderByAsc("mc.status"); } else if (Boolean.TRUE.equals(bo.getOrderBy())) { - // 再按实际库位ID升序(库位ID为自增,升序即可满足“先生成的库位在前”) - // - 否则:保持原有创建时间倒序 - // MySQL: false(0) < true(1),因此 "IS NULL" 升序可实现非空在前、空值在后 + // 按库位全局排序号排序 qw.orderByAsc("mc.actual_warehouse_id IS NULL"); - qw.orderByAsc("mc.actual_warehouse_id"); + // 全局交错排序(仅三/四级):使用 SQL 中计算好的辅助字段,避免 MP 注入拦截 + qw.orderByAsc("aw_sort_key"); + qw.orderByAsc("aw_layer_key"); + qw.orderByAsc("aw_id_key"); } else { //根据创建时间倒叙 qw.orderByDesc("mc.create_time"); diff --git a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml index 9ad30e47..f8c6b8ab 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml @@ -22,6 +22,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -100,6 +102,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" mc.packing_status, mc.sale_id AS saleId, mc.length, + mc.actual_length, + mc.actual_width, mc.coating_type, mc.temper_grade, mc.business_purpose, @@ -135,12 +139,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHEN mc.item_type = 'product' THEN p.product_code ELSE NULL END as itemCode, + -- 库位排序辅助字段(用于全局交错排序,避免在 ORDER BY 中写复杂表达式触发 MP 注入拦截) + COALESCE(CASE WHEN aw.actual_warehouse_type = 4 THEN awp.sort_no ELSE aw.sort_no END, 0) AS aw_sort_key, + CASE WHEN aw.actual_warehouse_type = 4 THEN CAST(SUBSTRING_INDEX(aw.actual_warehouse_code, '-', -1) AS UNSIGNED) ELSE 0 END AS aw_layer_key, + COALESCE(aw.actual_warehouse_id, 0) AS aw_id_key, -- 异常数量统计 COALESCE(ca.abnormal_count, 0) AS abnormalCount FROM wms_material_coil mc LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id LEFT JOIN wms_warehouse nw ON mc.next_warehouse_id = nw.warehouse_id LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id + LEFT JOIN wms_actual_warehouse awp ON aw.parent_id = awp.actual_warehouse_id LEFT JOIN sys_user su ON mc.sale_id = su.user_id LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_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 @@ -246,6 +255,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHEN mc.item_type = 'product' THEN p.product_code ELSE NULL END as itemCode, + -- 库位排序辅助字段(用于全局交错排序,避免在 ORDER BY 中写复杂表达式触发 MP 注入拦截) + COALESCE(CASE WHEN aw.actual_warehouse_type = 4 THEN awp.sort_no ELSE aw.sort_no END, 0) AS aw_sort_key, + CASE WHEN aw.actual_warehouse_type = 4 THEN CAST(SUBSTRING_INDEX(aw.actual_warehouse_code, '-', -1) AS UNSIGNED) ELSE 0 END AS aw_layer_key, + COALESCE(aw.actual_warehouse_id, 0) AS aw_id_key, -- 异常数量统计 COALESCE(ca.abnormal_count, 0) AS abnormalCount FROM wms_material_coil mc @@ -253,6 +266,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 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 LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id + LEFT JOIN wms_actual_warehouse awp ON aw.parent_id = awp.actual_warehouse_id LEFT JOIN ( SELECT coil_id, COUNT(*) AS abnormal_count FROM wms_coil_abnormal