fix(oms): 预约单下发不再推送WMS,修复执行单下发后WMS出现预约单+执行单两张单;三个下发入口补充软删单拦截
This commit is contained in:
+7
-1
@@ -613,9 +613,15 @@ public class ExecutionStockInOrderDomainService {
|
||||
}
|
||||
// 入参去重:同一请求内重复ID会导致同一执行单被多次推送WMS
|
||||
List<Long> distinctInOrderIds = inOrderIds.stream().distinct().collect(Collectors.toList());
|
||||
// 只校验有效单据:已删除(软删)执行单混入ID(过期页面提交)时在此拦截,
|
||||
// 此前list/getById均不过滤del_flag,软删单照样被推到WMS形成"幽灵单"
|
||||
List<ExecutionStockInOrder> checkOrders = stockInOrderService.list(
|
||||
new QueryWrapper<ExecutionStockInOrder>().lambda()
|
||||
.in(ExecutionStockInOrder::getInOrderId, distinctInOrderIds));
|
||||
.in(ExecutionStockInOrder::getInOrderId, distinctInOrderIds)
|
||||
.eq(ExecutionStockInOrder::getDelFlag, 1));
|
||||
if (checkOrders.size() != distinctInOrderIds.size()) {
|
||||
throw new ServiceException("下发失败:存在已删除的单据,请刷新后重新选择");
|
||||
}
|
||||
for (ExecutionStockInOrder order : checkOrders) {
|
||||
if (order.getIssueTime() != null) {
|
||||
throw new ServiceException("下发失败:单据[" + order.getInOrderNumber() + "]已下发,不可重复下发;如需重新下发请先取消下发");
|
||||
|
||||
+17
-45
@@ -525,9 +525,14 @@ public class ReservationStockInOrderDomainService {
|
||||
if (inOrderIds == null || inOrderIds.isEmpty()) {
|
||||
throw new ServiceException("下发失败:未选择单据");
|
||||
}
|
||||
// 只校验有效单据:软删单混入ID(过期页面提交)时在此拦截
|
||||
List<ReservationStockInOrder> checkOrders = stockInOrderService.list(
|
||||
new QueryWrapper<ReservationStockInOrder>().lambda()
|
||||
.in(ReservationStockInOrder::getInOrderId, inOrderIds));
|
||||
.in(ReservationStockInOrder::getInOrderId, inOrderIds)
|
||||
.eq(ReservationStockInOrder::getDelFlag, 1));
|
||||
if (checkOrders.size() != inOrderIds.stream().distinct().count()) {
|
||||
throw new ServiceException("下发失败:存在已删除的单据,请刷新后重新选择");
|
||||
}
|
||||
for (ReservationStockInOrder order : checkOrders) {
|
||||
// 校验1:必须已审核(issueStatus==2 表示审核成功)
|
||||
if (order.getIssueStatus() == null || order.getIssueStatus() != 2) {
|
||||
@@ -560,50 +565,12 @@ public class ReservationStockInOrderDomainService {
|
||||
.set(ReservationStockInOrder::getUpdateTime, new Date())
|
||||
.in(ReservationStockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
|
||||
|
||||
//todo下发推送到wms
|
||||
for (Long inOrderId : inOrderIds) {
|
||||
ReservationStockInOrder byId = stockInOrderService.getById(inOrderId);
|
||||
StockInOrder stockInOrder = new StockInOrder();
|
||||
BeanUtils.copyProperties(byId, stockInOrder, "inOrderId");
|
||||
stockInOrder.setOmsStockInOrderId(String.valueOf(byId.getInOrderId()));
|
||||
// 业务链路(2026-09与业务确认,生产验证):预约单下发→生成执行单→执行单下发时才推送WMS。
|
||||
// 预约单下发此前会先把预约单自身推到WMS(omsInOrderAdd/omsInOrderAddDetail),执行单下发又推一次,
|
||||
// 导致WMS入库管理出现预约单号(R260907001)+执行单号(RK260907001)两张单、仓库收两道货。
|
||||
// 已移除预约单的WMS推送,WMS推送唯一入口收敛到 ExecutionStockInOrderDomainService.issueOrder。
|
||||
// 历史已推送的预约单数据由"取消下发"(cancelIssueOrder→omsCancelInOrder,幂等)负责清理。
|
||||
|
||||
try {
|
||||
//WMS保存结果必须校验:此前接口返回void、Feign降级被静默吞掉,OMS标记已下发但WMS无数据/缺明细,
|
||||
//收货流程无从进行(流程阻断);失败抛错回滚下发标记,WMS侧幂等(主单/明细判重),重下发安全
|
||||
AjaxResult addResult = wmsServiceFeign.omsInOrderAdd(stockInOrder); // 推主单
|
||||
if (addResult == null || !"200".equals(String.valueOf(addResult.get("code")))) {
|
||||
throw new ServiceException("下发到WMS失败:入库单[" + stockInOrder.getInOrderNumber() + "]保存主单失败:"
|
||||
+ (addResult == null ? "WMS服务不可用或已降级" : addResult.get("msg")));
|
||||
}
|
||||
|
||||
String inOrderNumber = stockInOrder.getInOrderNumber();
|
||||
List<ReservationInMaterialDetail> materialDetailList = materialDetailService.list(
|
||||
new QueryWrapper<ReservationInMaterialDetail>().lambda()
|
||||
.eq(ReservationInMaterialDetail::getInOrderNumber, inOrderNumber)
|
||||
.eq(ReservationInMaterialDetail::getDelFlag, 1));
|
||||
List<InMaterialDetail> inMaterialDetailList = new ArrayList<>();
|
||||
for (ReservationInMaterialDetail reservationInMaterialDetail : materialDetailList) {
|
||||
InMaterialDetail inMaterialDetail = new InMaterialDetail();
|
||||
BeanUtils.copyProperties(reservationInMaterialDetail, inMaterialDetail, "materialDetailId");
|
||||
inMaterialDetail.setOmsInMaterialDetail(String.valueOf(reservationInMaterialDetail.getMaterialDetailId()));
|
||||
// 过期日期为空且饮用日期有值时,用饮用日期补齐过期日期(食品业务饮用日期即效期),
|
||||
// 确保下发WMS后入库/收货/库存链路的过期日期能正常回显
|
||||
if (inMaterialDetail.getExpiryDate() == null && inMaterialDetail.getDrinkDate() != null) {
|
||||
inMaterialDetail.setExpiryDate(inMaterialDetail.getDrinkDate());
|
||||
}
|
||||
inMaterialDetailList.add(inMaterialDetail);
|
||||
}
|
||||
AjaxResult detailResult = wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList); // 推明细(会触发WMS自动审核)
|
||||
if (detailResult == null || !"200".equals(String.valueOf(detailResult.get("code")))) {
|
||||
throw new ServiceException("下发到WMS失败:入库单[" + inOrderNumber + "]保存明细失败:"
|
||||
+ (detailResult == null ? "WMS服务不可用或已降级" : detailResult.get("msg")));
|
||||
}
|
||||
log.info("下发到WMS成功,单据号:{}", byId.getInOrderNumber());
|
||||
} catch (Exception e) {
|
||||
log.error("下发到WMS失败,单据号:{}", byId.getInOrderNumber(), e);
|
||||
throw new ServiceException("下发到WMS失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
//todo下发推送到入库业务单
|
||||
for (Long inOrderId : inOrderIds) {
|
||||
// Long inOrderId = stockInOrderDO.getInOrderId();
|
||||
@@ -801,9 +768,14 @@ public class ReservationStockInOrderDomainService {
|
||||
if (inOrderIds == null || inOrderIds.isEmpty()) {
|
||||
throw new ServiceException("执行失败:未选择单据");
|
||||
}
|
||||
// 只校验有效单据:软删单混入ID(过期页面提交)时在此拦截(与 issueOrder 校验口径一致)
|
||||
List<ReservationStockInOrder> checkOrders = stockInOrderService.list(
|
||||
new QueryWrapper<ReservationStockInOrder>().lambda()
|
||||
.in(ReservationStockInOrder::getInOrderId, inOrderIds));
|
||||
.in(ReservationStockInOrder::getInOrderId, inOrderIds)
|
||||
.eq(ReservationStockInOrder::getDelFlag, 1));
|
||||
if (checkOrders.size() != inOrderIds.stream().distinct().count()) {
|
||||
throw new ServiceException("执行失败:存在已删除的单据,请刷新后重新选择");
|
||||
}
|
||||
for (ReservationStockInOrder order : checkOrders) {
|
||||
if (order.getIssueTime() != null) {
|
||||
throw new ServiceException("执行失败:单据[" + order.getInOrderNumber() + "]已下发,不可重复执行;如需重新下发请先取消下发");
|
||||
|
||||
Reference in New Issue
Block a user