feat(oms/wms): WMS上架状态回传OMS入库业务单,修复入库状态不同步
- WMS上架推进入库状态后回传OMS(OmsServiceFeign新增returnInResult) - OMS回传接收加固:无登录上下文判空、已入库同步issueStatus=4 - 已入库联动同步预约入库单(入库业务单)状态
This commit is contained in:
@@ -12,6 +12,7 @@ import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -28,6 +29,10 @@ public interface OmsServiceFeign {
|
||||
@PostMapping(value = "/reservationStockInOrderApi/pushInOrderDetail")
|
||||
public AjaxResult pushInOrderDetail(@RequestBody InMaterialDetailTZPD inMaterialDetail);
|
||||
|
||||
@ApiOperation("wms回传入库结果:按入库单号同步入库状态(3-收货中 4-上架中 5-已入库)到OMS入库业务单,type非1为入库")
|
||||
@GetMapping(value = "/executionStockInOrderApi/returnResult")
|
||||
public AjaxResult returnInResult(@RequestParam("orderNumber") String orderNumber, @RequestParam("status") Long status, @RequestParam("type") String type);
|
||||
|
||||
|
||||
@ApiOperation("wms推送入库单")
|
||||
@PostMapping(value = "/reservationStockOutOrderApi/pushOutOrder")
|
||||
|
||||
+5
@@ -41,6 +41,11 @@ public class RemoteOmsFeignFallbackFactory implements FallbackFactory<OmsService
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult returnInResult(String orderNumber, Long status, String type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult pushOutOrder(StockOutOrderTZPD stockOutOrder) {
|
||||
return null;
|
||||
|
||||
+84
-15
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.mhd.common.core.exception.ServiceException;
|
||||
import com.mhd.common.core.utils.OrderSequence;
|
||||
@@ -32,6 +33,8 @@ import com.mhd.oms.domain.executionStockInOrder.repository.po.ExecutionStockInOr
|
||||
import com.mhd.oms.domain.executionStockInOrder.repository.todo.ExecutionStockInOrderDO;
|
||||
import com.mhd.oms.domain.executionStockOutOrder.entity.ExecutionStockOutOrder;
|
||||
import com.mhd.oms.domain.executionStockOutOrder.repository.facade.IExecutionStockOutOrderService;
|
||||
import com.mhd.oms.domain.reservationStockInOrder.entity.ReservationStockInOrder;
|
||||
import com.mhd.oms.domain.reservationStockInOrder.repository.facade.IReservationStockInOrderService;
|
||||
import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.repository.mapper.ReserveStockInOrderMapper;
|
||||
import com.mhd.system.api.SystemServiceFeign;
|
||||
@@ -70,6 +73,8 @@ public class ExecutionStockInOrderDomainService {
|
||||
private IExecutionInMaterialDetailService materialDetailService;
|
||||
@Autowired
|
||||
private IExecutionStockOutOrderService stockOutOrderService;
|
||||
@Autowired
|
||||
private IReservationStockInOrderService reservationStockInOrderService;
|
||||
// @Autowired
|
||||
// private ReservationStockReceiptOrderDomainService stockReceiptOrderDomainService;
|
||||
// @Autowired
|
||||
@@ -710,24 +715,88 @@ public class ExecutionStockInOrderDomainService {
|
||||
* @return Boolean
|
||||
*/
|
||||
public Boolean returnResult(String orderNumber, Long status, String type) {
|
||||
// WMS内部Feign回传可能无登录上下文(如PDA异步完成上架),SecurityUtils.getLoginUser()会返回null,
|
||||
// 更新人信息判空兜底:无用户时只更新状态,不覆盖原有更新人字段
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
|
||||
? loginUser.getUserPo().getUserName()
|
||||
: (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername());
|
||||
String userRealName = null;
|
||||
Long updateBy = null;
|
||||
if (loginUser != null) {
|
||||
userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
|
||||
? loginUser.getUserPo().getUserName()
|
||||
: (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername());
|
||||
updateBy = loginUser.getUserid();
|
||||
}
|
||||
if (type != null && type.equals("1")) {
|
||||
return stockOutOrderService.update(null, new UpdateWrapper<ExecutionStockOutOrder>().lambda()
|
||||
.set(ExecutionStockOutOrder::getStatus, status)
|
||||
.set(ExecutionStockOutOrder::getUpdateBy, loginUser.getUserid())
|
||||
.set(ExecutionStockOutOrder::getUpdateByName, userRealName)
|
||||
.set(ExecutionStockOutOrder::getUpdateTime, new Date())
|
||||
.in(ExecutionStockOutOrder::getOutOrderNumber, orderNumber));
|
||||
LambdaUpdateWrapper<ExecutionStockOutOrder> wrapper = new LambdaUpdateWrapper<ExecutionStockOutOrder>()
|
||||
.set(ExecutionStockOutOrder::getStatus, status);
|
||||
if (updateBy != null) {
|
||||
wrapper.set(ExecutionStockOutOrder::getUpdateBy, updateBy)
|
||||
.set(ExecutionStockOutOrder::getUpdateByName, userRealName)
|
||||
.set(ExecutionStockOutOrder::getUpdateTime, new Date());
|
||||
}
|
||||
wrapper.in(ExecutionStockOutOrder::getOutOrderNumber, orderNumber);
|
||||
return stockOutOrderService.update(null, wrapper);
|
||||
} else {
|
||||
return stockInOrderService.update(null, new UpdateWrapper<ExecutionStockInOrder>().lambda()
|
||||
.set(ExecutionStockInOrder::getStatus, status)
|
||||
.set(ExecutionStockInOrder::getUpdateBy, loginUser.getUserid())
|
||||
.set(ExecutionStockInOrder::getUpdateByName, userRealName)
|
||||
.set(ExecutionStockInOrder::getUpdateTime, new Date())
|
||||
.in(ExecutionStockInOrder::getInOrderNumber, orderNumber));
|
||||
LambdaUpdateWrapper<ExecutionStockInOrder> wrapper = new LambdaUpdateWrapper<ExecutionStockInOrder>()
|
||||
.set(ExecutionStockInOrder::getStatus, status);
|
||||
// 已入库(5)时同步issueStatus=4,供前端"入库执行单"列表入库状态列展示"已入库"
|
||||
if (status != null && status == 5L) {
|
||||
wrapper.set(ExecutionStockInOrder::getIssueStatus, 4);
|
||||
}
|
||||
if (updateBy != null) {
|
||||
wrapper.set(ExecutionStockInOrder::getUpdateBy, updateBy)
|
||||
.set(ExecutionStockInOrder::getUpdateByName, userRealName)
|
||||
.set(ExecutionStockInOrder::getUpdateTime, new Date());
|
||||
}
|
||||
wrapper.in(ExecutionStockInOrder::getInOrderNumber, orderNumber);
|
||||
boolean updated = stockInOrderService.update(null, wrapper);
|
||||
// 同步预约入库单(前端"入库业务单"列表)状态
|
||||
syncReservationStatus(orderNumber, status, updateBy, userRealName);
|
||||
return updated;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 入库执行单状态回传后同步预约入库单:
|
||||
* 执行单通过business_in_order_number关联预约单,已入库(5)且该预约单名下关联执行单全部完成时,
|
||||
* 预约单同步置为已入库;同步失败只记日志,不影响执行单状态更新结果
|
||||
*/
|
||||
private void syncReservationStatus(String orderNumber, Long status, Long updateBy, String userRealName) {
|
||||
try {
|
||||
if (status == null || status != 5L) {
|
||||
return;
|
||||
}
|
||||
ExecutionStockInOrder execution = stockInOrderService.getOne(new QueryWrapper<ExecutionStockInOrder>().lambda()
|
||||
.eq(ExecutionStockInOrder::getInOrderNumber, orderNumber)
|
||||
.eq(ExecutionStockInOrder::getDelFlag, 1)
|
||||
.last("limit 1"));
|
||||
if (execution == null || execution.getBusinessInOrderNumber() == null
|
||||
|| execution.getBusinessInOrderNumber().trim().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 多仓库拆单时存在多个关联执行单,全部已入库才同步预约单
|
||||
long unfinished = stockInOrderService.count(new QueryWrapper<ExecutionStockInOrder>().lambda()
|
||||
.eq(ExecutionStockInOrder::getBusinessInOrderNumber, execution.getBusinessInOrderNumber())
|
||||
.eq(ExecutionStockInOrder::getDelFlag, 1)
|
||||
.and(w -> w.isNull(ExecutionStockInOrder::getStatus).or().lt(ExecutionStockInOrder::getStatus, 5)));
|
||||
if (unfinished > 0) {
|
||||
log.info("预约入库单[{}]名下仍有{}张执行单未完成,暂不同步已入库状态", execution.getBusinessInOrderNumber(), unfinished);
|
||||
return;
|
||||
}
|
||||
LambdaUpdateWrapper<ReservationStockInOrder> reservationWrapper = new LambdaUpdateWrapper<ReservationStockInOrder>()
|
||||
.set(ReservationStockInOrder::getStatus, 5)
|
||||
// issueStatus=4 为前端"入库业务单"列表入库状态列的"已入库"展示值
|
||||
.set(ReservationStockInOrder::getIssueStatus, 4);
|
||||
if (updateBy != null) {
|
||||
reservationWrapper.set(ReservationStockInOrder::getUpdateBy, updateBy)
|
||||
.set(ReservationStockInOrder::getUpdateByName, userRealName)
|
||||
.set(ReservationStockInOrder::getUpdateTime, new Date());
|
||||
}
|
||||
reservationWrapper.in(ReservationStockInOrder::getInOrderNumber, execution.getBusinessInOrderNumber());
|
||||
reservationStockInOrderService.update(reservationWrapper);
|
||||
log.info("预约入库单[{}]已同步为已入库", execution.getBusinessInOrderNumber());
|
||||
} catch (Exception e) {
|
||||
log.warn("同步预约入库单状态失败: orderNumber={}, status={}", orderNumber, status, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-1
@@ -810,8 +810,21 @@ public class StockShelfOrderDomainService {
|
||||
stockInOrder.setUpdateBy(loginUser.getUserid());
|
||||
stockInOrder.setUpdateByName(loginUser.getUsername());
|
||||
stockInOrder.setUpdateTime(new Date());
|
||||
return stockInOrderService.update(stockInOrder,
|
||||
boolean updated = stockInOrderService.update(stockInOrder,
|
||||
new QueryWrapper<StockInOrder>().lambda().eq(StockInOrder::getInOrderNumber, stockShelfOrderPO.getInOrderNumber()));
|
||||
if (updated) {
|
||||
// 上架推进入库状态(4-上架中/5-已入库)后回传OMS入库业务单,保证OMS入库状态与WMS一致;
|
||||
// OMS不可用或回传失败只记日志,不影响WMS上架主流程
|
||||
try {
|
||||
AjaxResult notifyResult = omsServiceFeign.returnInResult(stockShelfOrderPO.getInOrderNumber(), Long.valueOf(status), "0");
|
||||
if (notifyResult == null || !"200".equals(String.valueOf(notifyResult.get("code")))) {
|
||||
log.warn("回传OMS入库状态失败: orderNumber={}, status={}, result={}", stockShelfOrderPO.getInOrderNumber(), status, notifyResult);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("回传OMS入库状态异常: orderNumber={}, status={}", stockShelfOrderPO.getInOrderNumber(), status, e);
|
||||
}
|
||||
}
|
||||
return updated;
|
||||
}
|
||||
/**
|
||||
* @description 完成上架
|
||||
|
||||
Reference in New Issue
Block a user