feat(oms): 入仓委托单「下发到WMS」功能开发

实现 issueOrder 下发逻辑,推送主单与明细至 WMS;增加已审核校验、防重复下发、仓库必填校验
This commit is contained in:
rcx
2026-08-11 09:16:28 +08:00
parent 969d90fff5
commit d91aadca0b
@@ -468,6 +468,31 @@ public class ReservationStockInOrderDomainService {
*/
@Transactional(rollbackFor = Exception.class)
public Boolean issueOrder(ReservationStockInOrderDO stockInOrderDO) {
// ===== 新增校验 =====
List<Long> inOrderIds = stockInOrderDO.getInOrderIds();
if (inOrderIds == null || inOrderIds.isEmpty()) {
throw new ServiceException("下发失败:未选择单据");
}
List<ReservationStockInOrder> checkOrders = stockInOrderService.list(
new QueryWrapper<ReservationStockInOrder>().lambda()
.in(ReservationStockInOrder::getInOrderId, inOrderIds));
for (ReservationStockInOrder order : checkOrders) {
// 校验1:必须已审核(issueStatus==2 表示审核成功)
if (order.getIssueStatus() == null || order.getIssueStatus() != 2) {
throw new ServiceException("下发失败:单据[" + order.getInOrderNumber() + "]未审核,无法下发");
}
// 校验2:防止重复下发(issueTime 有值表示已下发过)
if (order.getIssueTime() != null) {
throw new ServiceException("下发失败:单据[" + order.getInOrderNumber() + "]已下发,不可重复下发");
}
// 校验3WMS 必填字段(warehouseId 不能为空)
if (order.getWarehouseId() == null) {
throw new ServiceException("下发失败:单据[" + order.getInOrderNumber() + "]缺少入库仓库,无法下发");
}
}
// ===== 校验结束 =====
LoginUser loginUser = SecurityUtils.getLoginUser();
// 获取用户姓名(优先从UserPo获取,如果为空则使用realname,最后使用username作为兜底)
@@ -485,26 +510,34 @@ public class ReservationStockInOrderDomainService {
.in(ReservationStockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
//todo下发推送到wms
// List<Long> inOrderIds = stockInOrderDO.getInOrderIds();
// for (Long inOrderId : inOrderIds) {
// ReservationStockInOrder byId = stockInOrderService.getById(inOrderId);
// StockInOrder stockInOrder = new StockInOrder();
// BeanUtils.copyProperties(byId, stockInOrder,"inOrderId");
// stockInOrder.setOmsStockInOrderId(String.valueOf(byId.getInOrderId()));
// wmsServiceFeign.omsInOrderAdd(stockInOrder);
// String inOrderNumber = stockInOrder.getInOrderNumber();
// List<ReservationInMaterialDetail> materialDetailList = materialDetailService.list(new QueryWrapper<ReservationInMaterialDetail>().lambda().eq(ReservationInMaterialDetail::getInOrderNumber, inOrderNumber));
// List<InMaterialDetail> inMaterialDetailList = new ArrayList<>();
// for (ReservationInMaterialDetail reservationInMaterialDetail : materialDetailList) {
// InMaterialDetail inMaterialDetail = new InMaterialDetail();
// BeanUtils.copyProperties(reservationInMaterialDetail, inMaterialDetail,"materialDetailId");
// inMaterialDetail.setOmsInMaterialDetail(String.valueOf(reservationInMaterialDetail.getMaterialDetailId()));
// inMaterialDetailList.add(inMaterialDetail);
// }
// wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList);
// }
for (Long inOrderId : inOrderIds) {
ReservationStockInOrder byId = stockInOrderService.getById(inOrderId);
StockInOrder stockInOrder = new StockInOrder();
BeanUtils.copyProperties(byId, stockInOrder, "inOrderId");
stockInOrder.setOmsStockInOrderId(String.valueOf(byId.getInOrderId()));
try {
wmsServiceFeign.omsInOrderAdd(stockInOrder); // 推主单
String inOrderNumber = stockInOrder.getInOrderNumber();
List<ReservationInMaterialDetail> materialDetailList = materialDetailService.list(
new QueryWrapper<ReservationInMaterialDetail>().lambda()
.eq(ReservationInMaterialDetail::getInOrderNumber, inOrderNumber));
List<InMaterialDetail> inMaterialDetailList = new ArrayList<>();
for (ReservationInMaterialDetail reservationInMaterialDetail : materialDetailList) {
InMaterialDetail inMaterialDetail = new InMaterialDetail();
BeanUtils.copyProperties(reservationInMaterialDetail, inMaterialDetail, "materialDetailId");
inMaterialDetail.setOmsInMaterialDetail(String.valueOf(reservationInMaterialDetail.getMaterialDetailId()));
inMaterialDetailList.add(inMaterialDetail);
}
wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList); // 推明细(会触发WMS自动审核)
log.info("下发到WMS成功,单据号:{}", byId.getInOrderNumber());
} catch (Exception e) {
log.error("下发到WMS失败,单据号:{}", byId.getInOrderNumber(), e);
throw new ServiceException("下发到WMS失败:" + e.getMessage());
}
}
//todo下发推送到入库业务单
List<Long> inOrderIds = stockInOrderDO.getInOrderIds();
for (Long inOrderId : inOrderIds) {
// Long inOrderId = stockInOrderDO.getInOrderId();
ReservationStockInOrder byId = stockInOrderService.getById(inOrderId);