fix(oms,wms): 入库反审修复:已反审tab列表查不到数据、未下发单反审补写反审记录
1. W收货单/W上架单【已反审】tab查不到数据:queryList 的 LEFT JOIN stock_in_order 固定带 a/b.DEL_FLAG=1,归档数据(反审后双方均已软删del_flag=2)关联不上b表,仓库/货主等基于b表的过滤条件把行全部过滤掉;改为按是否查反审归档动态切换关联条件(归档按del_flag=2关联,正常列表行为不变) 2. 未下发WMS的执行单反审不产生反审记录:reverseExecutionOrder 幂等跳过分支直接return导致入库异常无留痕;现补写1条反审记录(abnormalType=6,回退库存0,备注未下发WMS),同单号已有有效记录时防重,重试/重复反审幂等 3. OMS反审Feign参数透传组织三字段(organizationId/organizationName/topOrganizationId),供WMS跳过分支写反审记录使用(该场景无W入库单可取组织信息)
This commit is contained in:
+4
@@ -847,6 +847,10 @@ public class ReservationStockInOrderDomainService {
|
||||
reverseParam.setRemark("业务单号:" + businessNumber
|
||||
+ (StringUtils.isNotEmpty(stockInOrderDO.getReverseAuditRemark())
|
||||
? ",反审原因:" + stockInOrderDO.getReverseAuditRemark() : ""));
|
||||
//组织三字段:WMS幂等跳过分支(未下发单反审)写反审记录时取不到W入库单,需经Feign透传
|
||||
reverseParam.setOrganizationId(executionOrder.getOrganizationId());
|
||||
reverseParam.setOrganizationName(executionOrder.getOrganizationName());
|
||||
reverseParam.setTopOrganizationId(executionOrder.getTopOrganizationId());
|
||||
reverseParam.setUpdateBy(loginUser.getUserid());
|
||||
reverseParam.setUpdateByName(userRealName);
|
||||
AjaxResult reverseResult = wmsServiceFeign.omsReverseInOrder(reverseParam);
|
||||
|
||||
+42
-12
@@ -913,7 +913,7 @@ public class StockInOrderDomainService {
|
||||
* 物料明细/作业单/任务/质检单一并软删留痕,台账节点物理删除保持与回退后库存一致</li>
|
||||
* <li>写1条入库异常【反审记录】(in_order_abnormal type=3/abnormalType=6) 用于记录跟踪</li>
|
||||
* </ul>
|
||||
* <p>WMS无该单数据时幂等返回成功(OMS未下发单反审不产生WMS数据);任何校验失败抛错经
|
||||
* <p>WMS无该单数据时幂等返回成功(OMS未下发单反审仅落1条反审记录留痕,不产生其他WMS数据);任何校验失败抛错经
|
||||
* Feign 返回,OMS侧整体回滚。反审可重试,本方法幂等。</p>
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@@ -930,7 +930,9 @@ public class StockInOrderDomainService {
|
||||
.eq(StockInOrder::getInOrderNumber, inOrderNumber)
|
||||
.eq(StockInOrder::getDelFlag, 1));
|
||||
if (CollectionUtils.isEmpty(stockInOrders)) {
|
||||
//幂等:WMS无该单数据(未下发单反审或已反审过),直接成功,保证OMS反审可重试
|
||||
//幂等:WMS无该单数据(未下发单反审或已反审过/重试),直接成功,保证OMS反审可重试;
|
||||
//反审记录仍落一条留痕(入库异常页面可查),同单号已有反审记录时不再重复写(重试幂等)
|
||||
saveReverseAuditAbnormalIfAbsent(stockInOrder, BigDecimal.ZERO, "未下发WMS,无WMS链路数据需回退");
|
||||
return;
|
||||
}
|
||||
StockInOrder wmsOrder = stockInOrders.get(0);
|
||||
@@ -1167,18 +1169,46 @@ public class StockInOrderDomainService {
|
||||
.eq(StockInOrder::getInOrderNumber, inOrderNumber)
|
||||
.eq(StockInOrder::getDelFlag, 1));
|
||||
|
||||
// ========== 4. 写1条入库异常【反审记录】用于记录跟踪 ==========
|
||||
// ========== 4. 写1条入库异常【反审记录】用于记录跟踪(组织信息取自W入库单) ==========
|
||||
StockInOrder abnormalParam = new StockInOrder();
|
||||
abnormalParam.setInOrderNumber(inOrderNumber);
|
||||
abnormalParam.setOrganizationId(wmsOrder.getOrganizationId());
|
||||
abnormalParam.setOrganizationName(wmsOrder.getOrganizationName());
|
||||
abnormalParam.setTopOrganizationId(wmsOrder.getTopOrganizationId());
|
||||
abnormalParam.setRemark(reverseReason);
|
||||
abnormalParam.setUpdateBy(stockInOrder.getUpdateBy());
|
||||
abnormalParam.setUpdateByName(reverseByName);
|
||||
saveReverseAuditAbnormalIfAbsent(abnormalParam, inventoryTotal,
|
||||
"回退库存" + inventoryTotal.stripTrailingZeros().toPlainString() + ",清理收货/上架链路数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入库异常【反审记录】(type=3/abnormalType=6,FSYC单号)。
|
||||
* 同单号已存在有效反审记录时跳过,保证"OMS重试/重复反审"不产生重复记录(幂等)。
|
||||
*
|
||||
* @param stockInOrder 载荷:入库单号/反审原因(remark)/操作人(updateBy,updateByName)/组织三字段
|
||||
* @param quantity 本次反审回退的库存量(未下发WMS无库存回退时传0)
|
||||
* @param sceneRemark 场景补充说明,拼入记录备注
|
||||
*/
|
||||
private void saveReverseAuditAbnormalIfAbsent(StockInOrder stockInOrder, BigDecimal quantity, String sceneRemark) {
|
||||
long existing = inOrderAbnormalService.count(new LambdaQueryWrapper<InOrderAbnormal>()
|
||||
.eq(InOrderAbnormal::getInOrderNumber, stockInOrder.getInOrderNumber())
|
||||
.eq(InOrderAbnormal::getAbnormalType, 6)
|
||||
.eq(InOrderAbnormal::getDelFlag, 1));
|
||||
if (existing > 0) {
|
||||
return;
|
||||
}
|
||||
InOrderAbnormal reverseAbnormal = new InOrderAbnormal();
|
||||
reverseAbnormal.setOrganizationId(wmsOrder.getOrganizationId());
|
||||
reverseAbnormal.setOrganizationName(wmsOrder.getOrganizationName());
|
||||
reverseAbnormal.setTopOrganizationId(wmsOrder.getTopOrganizationId());
|
||||
reverseAbnormal.setInOrderNumber(inOrderNumber);
|
||||
reverseAbnormal.setAbnormalReason(StringUtils.isEmpty(reverseReason) ? "入库业务单反审" : "入库业务单反审:" + reverseReason);
|
||||
reverseAbnormal.setQuantity(inventoryTotal);
|
||||
reverseAbnormal.setRemark("入库业务单反审:回退库存" + inventoryTotal.stripTrailingZeros().toPlainString()
|
||||
+ ",清理收货/上架链路数据");
|
||||
reverseAbnormal.setOrganizationId(stockInOrder.getOrganizationId());
|
||||
reverseAbnormal.setOrganizationName(stockInOrder.getOrganizationName());
|
||||
reverseAbnormal.setTopOrganizationId(stockInOrder.getTopOrganizationId());
|
||||
reverseAbnormal.setInOrderNumber(stockInOrder.getInOrderNumber());
|
||||
reverseAbnormal.setAbnormalReason(StringUtils.isEmpty(stockInOrder.getRemark())
|
||||
? "入库业务单反审" : "入库业务单反审:" + stockInOrder.getRemark());
|
||||
reverseAbnormal.setQuantity(quantity == null ? BigDecimal.ZERO : quantity);
|
||||
reverseAbnormal.setRemark("入库业务单反审:" + (StringUtils.isEmpty(sceneRemark) ? "" : sceneRemark));
|
||||
reverseAbnormal.setCreateBy(stockInOrder.getUpdateBy() == null ? 0L : stockInOrder.getUpdateBy());
|
||||
reverseAbnormal.setCreateByName(StringUtils.isEmpty(reverseByName) ? "system" : reverseByName);
|
||||
reverseAbnormal.setCreateByName(StringUtils.isEmpty(stockInOrder.getUpdateByName()) ? "system" : stockInOrder.getUpdateByName());
|
||||
inOrderAbnormalService.genReverseAuditAbnormal(reverseAbnormal);
|
||||
}
|
||||
|
||||
|
||||
@@ -167,7 +167,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<include refid="selectStockReceiptOrderPo"/>
|
||||
<include refid="com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper.joinStockInOrderPo"/>
|
||||
from stock_receipt_order 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
|
||||
<!-- 已反审tab查归档数据: a/b 均已软删(del_flag=2), 仍按 del_flag=1 关联会导致 b 全为 NULL,
|
||||
基于 b 的过滤条件(仓库/货主等)随之失效为 false, 列表恒为空; 故按是否查反审归档切换关联条件 -->
|
||||
LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number
|
||||
<choose>
|
||||
<when test="reverseAuditStatus != null">
|
||||
and a.DEL_FLAG = 2 and b.DEL_FLAG = 2
|
||||
</when>
|
||||
<otherwise>
|
||||
and a.DEL_FLAG = 1 and b.DEL_FLAG = 1
|
||||
</otherwise>
|
||||
</choose>
|
||||
<where>
|
||||
<include refid="selectStockReceiptOrderPo1"/>
|
||||
<include refid="com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper.joinStockInOrderPoWhere"/>
|
||||
|
||||
@@ -158,7 +158,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<include refid="selectStockShelfOrderPo"/>
|
||||
<include refid="com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper.joinStockInOrderPo"/>
|
||||
from stock_shelf_order 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
|
||||
<!-- 已反审tab查归档数据: a/b 均已软删(del_flag=2), 仍按 del_flag=1 关联会导致 b 全为 NULL,
|
||||
基于 b 的过滤条件(仓库/货主等)随之失效为 false, 列表恒为空; 故按是否查反审归档切换关联条件 -->
|
||||
LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number
|
||||
<choose>
|
||||
<when test="reverseAuditStatus != null">
|
||||
and a.DEL_FLAG = 2 and b.DEL_FLAG = 2
|
||||
</when>
|
||||
<otherwise>
|
||||
and a.DEL_FLAG = 1 and b.DEL_FLAG = 1
|
||||
</otherwise>
|
||||
</choose>
|
||||
<where>
|
||||
<include refid="selectStockShelfOrderPo1"/>
|
||||
<include refid="com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper.joinStockInOrderPoWhere"/>
|
||||
|
||||
Reference in New Issue
Block a user