fix(oms,wms): 入库反审三项修复:反审记录不可见、反审后重新下发无法收货、异常列表JOIN过滤

1. 入库异常三个生成器(收货异常/上架异常/反审记录)插入时未显式设置delFlag,MyBatis-Plus insert不含该列,列无默认值落库为NULL,被列表del_flag=1过滤导致反审记录永远不可见;现显式setDelFlag(1)

2. 反审重置业务单status=1:首轮完成上架经WMS回传把业务单status写成5(已入库),不重置则重新下发时copy给执行单→W入库单→收货单,收货单带已完成状态导致前端不给收货按钮

3. 入库异常列表LEFT JOIN stock_in_order固定b.DEL_FLAG=1,反审记录关联的入库单已软删导致匹配不上,仓库等基于b表的过滤把行全部过滤掉、列表恒为空;改为按a.TYPE切换关联状态(type=3关联已软删入库单);收货/上架已反审tab同号多张入库单JOIN出重复行,限定只关联同状态最新一张(IN_ORDER_ID取max)
This commit is contained in:
rcx
2026-09-11 09:41:21 +08:00
parent cae62e83a5
commit a65cca1cfa
5 changed files with 30 additions and 1 deletions
@@ -897,6 +897,10 @@ public class ReservationStockInOrderDomainService {
.set(ReservationStockInOrder::getIssueStatus, 3)
//清空下发/执行时间(前端"是否执行"列按执行时间判断,不清会仍显示已执行,与取消下发 cancelIssueOrder 同口径)
.set(ReservationStockInOrder::getIssueTime, null)
//入库进度状态(1-已创建 2-已审核 3-收货中 4-上架中 5-已入库):首轮"完成上架"会经WMS回传写成5,
//不重置的话重新下发时copy给执行单→W入库单→收货单,收货单带着"已完成"状态导致前端不给收货按钮;
//重置为1(已创建),与手工新单首次下发链路一致(W入库单/收货单起点=1-待收货)
.set(ReservationStockInOrder::getStatus, 1)
.set(ReservationStockInOrder::getInQuantity, BigDecimal.ZERO)
.set(ReservationStockInOrder::getStorageTime, null)
.set(ReservationStockInOrder::getExecutionInOrderNumber, null)
@@ -187,6 +187,8 @@ public class InOrderAbnormalImpl extends ServiceImpl<InOrderAbnormalMapper, InOr
inOrderAbnormal.setAbnormalNumber(OrderSequence.getOrderCode("FSYC"));
inOrderAbnormal.setType(3);
inOrderAbnormal.setAbnormalType(6);
//del_flag 不显式置1时 insert 不含该列,列无默认值则落库为NULL,会被列表的 del_flag=1 过滤掉导致记录永远不可见
inOrderAbnormal.setDelFlag(1);
if (inOrderAbnormal.getCreateTime() == null) {
inOrderAbnormal.setCreateTime(new Date());
}
@@ -242,6 +244,8 @@ public class InOrderAbnormalImpl extends ServiceImpl<InOrderAbnormalMapper, InOr
inOrderAbnormal.setCreateByName(userRealName);
inOrderAbnormal.setCreateTime(new Date());
inOrderAbnormal.setType(2);
//del_flag 不显式置1时 insert 不含该列,列无默认值则落库为NULL,会被列表的 del_flag=1 过滤掉导致记录永远不可见
inOrderAbnormal.setDelFlag(1);
inOrderAbnormalList.add(inOrderAbnormal);
}
}
@@ -287,6 +291,8 @@ public class InOrderAbnormalImpl extends ServiceImpl<InOrderAbnormalMapper, InOr
inOrderAbnormal.setCreateByName(userRealName);
inOrderAbnormal.setCreateTime(new Date());
inOrderAbnormal.setType(1);
//del_flag 不显式置1时 insert 不含该列,列无默认值则落库为NULL,会被列表的 del_flag=1 过滤掉导致记录永远不可见
inOrderAbnormal.setDelFlag(1);
inOrderAbnormalList.add(inOrderAbnormal);
}
}
@@ -91,7 +91,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectInOrderAbnormalPo"/>
<include refid="com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper.joinStockInOrderPo"/>
from in_order_abnormal a
LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number and a.DEL_FLAG = 1 and b.DEL_FLAG = 1
<!-- 反审记录(a.TYPE=3)关联的W入库单已被反审软删(del_flag=2),仍按 b.DEL_FLAG=1 关联会匹配不上:
LEFT JOIN 下 b 全为 NULL,仓库/货主等基于 b 的过滤条件(warehouseId等)随之恒为 false,反审记录列表恒为空;
故按 a.TYPE 切换关联状态:type=3 关联已软删的入库单,其余(收货/上架异常)关联正常入库单。
b.IN_ORDER_ID 取同状态最新一张:历史重复下发会产生同号多张入库单,不限定会JOIN出重复行 -->
LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number
and a.DEL_FLAG = 1
and b.DEL_FLAG = (case when a.TYPE = 3 then 2 else 1 end)
and b.IN_ORDER_ID = (select max(c.IN_ORDER_ID) from stock_in_order c
where c.IN_ORDER_NUMBER = a.in_order_number
and c.DEL_FLAG = (case when a.TYPE = 3 then 2 else 1 end))
<where>
<include refid="selectInOrderAbnormalPo1"/>
<include refid="com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper.joinStockInOrderPoWhere"/>
@@ -173,9 +173,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<choose>
<when test="reverseAuditStatus != null">
and a.DEL_FLAG = 2 and b.DEL_FLAG = 2
<!-- 历史重复下发会产生同号多张入库单,限定只关联同状态最新一张,防止列表出现重复行 -->
and b.IN_ORDER_ID = (select max(c.IN_ORDER_ID) from stock_in_order c
where c.IN_ORDER_NUMBER = a.in_order_number and c.DEL_FLAG = 2)
</when>
<otherwise>
and a.DEL_FLAG = 1 and b.DEL_FLAG = 1
and b.IN_ORDER_ID = (select max(c.IN_ORDER_ID) from stock_in_order c
where c.IN_ORDER_NUMBER = a.in_order_number and c.DEL_FLAG = 1)
</otherwise>
</choose>
<where>
@@ -164,9 +164,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<choose>
<when test="reverseAuditStatus != null">
and a.DEL_FLAG = 2 and b.DEL_FLAG = 2
<!-- 历史重复下发会产生同号多张入库单,限定只关联同状态最新一张,防止列表出现重复行 -->
and b.IN_ORDER_ID = (select max(c.IN_ORDER_ID) from stock_in_order c
where c.IN_ORDER_NUMBER = a.in_order_number and c.DEL_FLAG = 2)
</when>
<otherwise>
and a.DEL_FLAG = 1 and b.DEL_FLAG = 1
and b.IN_ORDER_ID = (select max(c.IN_ORDER_ID) from stock_in_order c
where c.IN_ORDER_NUMBER = a.in_order_number and c.DEL_FLAG = 1)
</otherwise>
</choose>
<where>