From d3870556afccacf6615fd2c525f558f49a7df8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 7 Apr 2026 11:44:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=8D=E6=A0=B8=E9=A1=B5=E9=9D=A2=E4=BF=AE?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/PickingOrderDomainService.java | 12 ++++- .../service/ReviewOrderDomainService.java | 54 ++++++++++++++----- 2 files changed, 50 insertions(+), 16 deletions(-) rename mhd_wms/src/main/java/com/mhd/wms/domain/{reviewOrder => pickingOrder}/service/ReviewOrderDomainService.java (79%) diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java index 7fb17582d..6bbf3bfea 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java @@ -43,7 +43,6 @@ import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService; import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO; import com.mhd.wms.domain.pickingOrder.repository.todo.PickingOrderDO; import com.mhd.wms.domain.pushSyncBms.PushSyncBmsDomainService; -import com.mhd.wms.domain.reviewOrder.service.ReviewOrderDomainService; import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO; import com.mhd.wms.domain.stockInOrder.service.StockInOrderDomainService; import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder; @@ -328,7 +327,16 @@ public class PickingOrderDomainService { //设置拣货单拣货需要更新的数据数据 updatePickingOrder(pickingOrderPO, pickingOrderPODb); //更新出库单状态 - return updateStockOutOrder(pickingOrderPODb); + Boolean updated = updateStockOutOrder(pickingOrderPODb); + // 拣货提交(/pickingOrderApi/picking)一次拣满也会完成拣货,此前仅 completePicking 会生成复核单,此处对齐 + if (Boolean.TRUE.equals(updated) && Integer.valueOf(1).equals(pickingOrderPODb.getType())) { + StockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper() + .eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber())); + if (stockOutOrder != null) { + reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPODb, stockOutOrder); + } + } + return updated; } /** diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/service/ReviewOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/ReviewOrderDomainService.java similarity index 79% rename from mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/service/ReviewOrderDomainService.java rename to mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/ReviewOrderDomainService.java index a4bbe8b91..283935da9 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/service/ReviewOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/ReviewOrderDomainService.java @@ -1,4 +1,4 @@ -package com.mhd.wms.domain.reviewOrder.service; +package com.mhd.wms.domain.pickingOrder.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mhd.common.core.exception.ServiceException; @@ -10,8 +10,8 @@ import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailM import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail; import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService; import com.mhd.wms.domain.pickingOrder.entity.PickingOrder; -import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO; import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService; +import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO; import com.mhd.wms.domain.reviewOrder.entity.ReviewMaterialDetail; import com.mhd.wms.domain.reviewOrder.entity.ReviewOrder; import com.mhd.wms.domain.reviewOrder.repository.mapper.ReviewMaterialDetailMapper; @@ -28,7 +28,7 @@ import java.util.Date; import java.util.List; /** - * 复核单领域:拣货完成后生成复核单等 + * 复核单领域:拣货完成后生成复核单等(与拣货同包,避免部分环境对 reviewOrder.service 包识别异常) */ @Service @Slf4j @@ -61,14 +61,22 @@ public class ReviewOrderDomainService { if (pickingOrderPO == null || stockOutOrder == null) { return; } - if (!Integer.valueOf(1).equals(pickingOrderPO.getReview())) { + String outOrderNumber = pickingOrderPO.getOrderNumber(); + if (outOrderNumber == null) { + return; + } + // 是否复核以出库单为准:1-是 2-否(与 StockOutOrder 一致);拣货单 PO 上 review 可能未映射或为 null + Integer needReview = stockOutOrder.getReview(); + if (needReview == null) { + needReview = pickingOrderPO.getReview(); + } + if (!Integer.valueOf(1).equals(needReview)) { + log.info("跳过生成复核单:出库单未勾选需要复核(出库单 review 须为 1) outOrderNumber={} stockOutReview={} pickingReview={}", + outOrderNumber, stockOutOrder.getReview(), pickingOrderPO.getReview()); return; } if (!Integer.valueOf(1).equals(pickingOrderPO.getType())) { - return; - } - String outOrderNumber = pickingOrderPO.getOrderNumber(); - if (outOrderNumber == null) { + log.info("跳过生成复核单:仅普通拣货单(type=1)生成,当前 type={} outOrderNumber={}", pickingOrderPO.getType(), outOrderNumber); return; } @@ -77,11 +85,13 @@ public class ReviewOrderDomainService { .eq(PickingOrder::getType, 1) .eq(PickingOrder::getDelFlag, 1)); if (pickingOrders.isEmpty()) { + log.warn("跳过生成复核单:未找到普通拣货单记录 outOrderNumber={}", outOrderNumber); return; } boolean allPickingFinished = pickingOrders.stream() .allMatch(p -> p.getStatus() != null && p.getStatus() == 3); if (!allPickingFinished) { + log.info("跳过生成复核单:同一出库单下尚未全部完成拣货(需全部拣货单 status=3) outOrderNumber={}", outOrderNumber); return; } @@ -89,7 +99,7 @@ public class ReviewOrderDomainService { .eq(ReviewOrder::getOutOrderNumber, outOrderNumber) .eq(ReviewOrder::getDelFlag, 1)); if (exists > 0) { - log.debug("复核单已存在,跳过生成 outOrderNumber={}", outOrderNumber); + log.info("跳过生成复核单:该出库单已存在复核单 outOrderNumber={}", outOrderNumber); return; } @@ -117,11 +127,12 @@ public class ReviewOrderDomainService { header.setCustomerCode(stockOutOrder.getCustomerCode()); header.setCustomerName(stockOutOrder.getCustomerName()); header.setDelFlag(1); + String operatorDisplayName = resolveLoginDisplayName(loginUser); header.setCreateBy(loginUser.getUserid()); - header.setCreateByName(loginUser.getUsername()); + header.setCreateByName(operatorDisplayName); header.setCreateTime(now); header.setUpdateBy(loginUser.getUserid()); - header.setUpdateByName(loginUser.getUsername()); + header.setUpdateByName(operatorDisplayName); header.setUpdateTime(now); reviewOrderMapper.insert(header); @@ -143,7 +154,7 @@ public class ReviewOrderDomainService { StockOutOrder statusUpdate = new StockOutOrder(); statusUpdate.setStatus(8); statusUpdate.setUpdateBy(loginUser.getUserid()); - statusUpdate.setUpdateByName(loginUser.getUsername()); + statusUpdate.setUpdateByName(operatorDisplayName); statusUpdate.setUpdateTime(now); stockOutOrderService.update(statusUpdate, new LambdaQueryWrapper() .eq(StockOutOrder::getOutOrderNumber, outOrderNumber)); @@ -191,10 +202,10 @@ public class ReviewOrderDomainService { d.setRemark(line.getRemark()); d.setDelFlag(1); d.setCreateBy(loginUser.getUserid()); - d.setCreateByName(loginUser.getUsername()); + d.setCreateByName(resolveLoginDisplayName(loginUser)); d.setCreateTime(now); d.setUpdateBy(loginUser.getUserid()); - d.setUpdateByName(loginUser.getUsername()); + d.setUpdateByName(resolveLoginDisplayName(loginUser)); d.setUpdateTime(now); if (line.getOutUniqueId() != null) { @@ -211,4 +222,19 @@ public class ReviewOrderDomainService { } return d; } + + /** 与拣货领域一致:优先 userPo.userName(姓名),其次 LoginUser.realname,最后 username(账号兜底) */ + private static String resolveLoginDisplayName(LoginUser loginUser) { + if (loginUser == null) { + return null; + } + if (loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null + && !loginUser.getUserPo().getUserName().trim().isEmpty()) { + return loginUser.getUserPo().getUserName(); + } + if (loginUser.getRealname() != null && !loginUser.getRealname().trim().isEmpty()) { + return loginUser.getRealname(); + } + return loginUser.getUsername(); + } }