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