fix(oms,wms): 下单冻结推送OMS镜像丢loginUser致NPE静默失败——O侧库存查询冻结不同步根因修复
- 根因: WMS pushOmsMirror 用 MaterialInventoryParamDO(无loginUser字段)copyProperties到OMS参数, loginUser=null 致 OMS kctzjl 写调整记录时 NPE(先于xgkc执行)→镜像不更新+无调整记录, 异常被 Feign @Async+fallback(return null) 完全吞掉, WMS 侧静默无感知 - 修复1(WMS): pushOmsMirror 显式 setLoginUser, 3 个调用点传入登录态兜底后的 loginUser - 修复2(OMS): kctzjl 补三个文案分支——下单冻结(并入库存冻结:可用-冻结+库存不变, adjustType=3)、下单解冻(并入取消分配:可用+冻结-库存不变)、出库反审-还原冻结(新增:实物+冻结+可用不变, 合并快照两步推送) - 修复3(OMS): omsEdit try-catch 失败 log.error 带 type/kctzType/relateNo/全部匹配键后原样抛出, 推送失败不再无痕(此前连错误日志都没有) - 存量: 在途冻结单 R260915004 镜像需按 16.7 节 SQL 补同步; R260915003 因 RQZ260723005 入库镜像行缺失需先补建镜像行(存量对账问题单独排查)
This commit is contained in:
+8
-4
@@ -382,7 +382,7 @@ public class OutOrderFreezeRecordDomainService {
|
||||
for (PendingFreeze pending : pendingFreezes) {
|
||||
insertFreezeRecord(pending.row, pending.quantity, businessOrderNumber, pending.uniqueId, pending.relateNo, holder);
|
||||
MaterialInventoryParamDO paramDO = buildParamDO(pending.row, pending.quantity, "7", pending.relateNo);
|
||||
pushOmsMirror(paramDO, "下单冻结");
|
||||
pushOmsMirror(paramDO, "下单冻结", holder.loginUser);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -405,7 +405,7 @@ public class OutOrderFreezeRecordDomainService {
|
||||
record.setFreezeStatus(OutOrderFreezeRecord.STATUS_RELEASED);
|
||||
record.setUpdateTime(new Date());
|
||||
outOrderFreezeRecordService.updateById(record);
|
||||
pushOmsMirror(buildParamDO(row, record.getFreezeQuantity(), "3", record.getRelateNo()), "下单解冻");
|
||||
pushOmsMirror(buildParamDO(row, record.getFreezeQuantity(), "3", record.getRelateNo()), "下单解冻", holder.loginUser);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -454,13 +454,17 @@ public class OutOrderFreezeRecordDomainService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送OMS镜像库存(type=7下单冻结:可用-冻结+ / type=3下单解冻:可用+冻结-),与分配/交接推送同模式
|
||||
* 推送OMS镜像库存(type=7下单冻结:可用-冻结+ / type=3下单解冻:可用+冻结-),与分配/交接推送同模式。
|
||||
* ★loginUser 必须显式传入:MaterialInventoryParamDO 无 loginUser 字段,copyProperties 不会带过去,
|
||||
* 推过去为 null 时 OMS 侧 kctzjl 写调整记录 loginUser.getUserid() 直接 NPE——
|
||||
* kctzjl 先于 xgkc 执行,NPE 导致镜像完全不更新且异常被 Feign 异步/fallback 吞掉(历史静默失败根因)
|
||||
*/
|
||||
private void pushOmsMirror(MaterialInventoryParamDO paramDO, String kctzType) {
|
||||
private void pushOmsMirror(MaterialInventoryParamDO paramDO, String kctzType, LoginUser loginUser) {
|
||||
try {
|
||||
MaterialInventoryOmsParamDO omsParamDO = new MaterialInventoryOmsParamDO();
|
||||
BeanUtils.copyProperties(paramDO, omsParamDO);
|
||||
omsParamDO.setKctzType(kctzType);
|
||||
omsParamDO.setLoginUser(loginUser);
|
||||
omsServiceFeign.omsEdit(omsParamDO);
|
||||
} catch (Exception e) {
|
||||
// 镜像推送失败不阻断冻结主流程(与分配/交接链路同口径),由OMS侧定时对账兜底
|
||||
|
||||
Reference in New Issue
Block a user