From f6d90d6f203b264e938d7c33c3b87d7cdec8d4f8 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Thu, 15 Jan 2026 17:06:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=96=B0=E5=A2=9EPDA=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E8=B4=A8=E6=A3=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在WmsInspectionInitiationServiceImpl中修改质检数量逻辑,使用materialQty字段 - 在WmsInstockRecordServiceImpl中新增远程QMS质检服务引用 - 实现submitInstockWithQualityCheck方法,支持质检判断和任务创建 - 添加完整的质检流程处理,包括免检物料直入和必检物料任务分配 - 在WmsPdaApiController中新增入库提交接口支持质检判断 --- .../controller/api/WmsPdaApiController.java | 27 ++++++ .../WmsInspectionInitiationServiceImpl.java | 7 +- .../impl/WmsInstockRecordServiceImpl.java | 88 +++++++++++++++++++ 3 files changed, 121 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/api/WmsPdaApiController.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/api/WmsPdaApiController.java index 92230a4f..b06e3de7 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/api/WmsPdaApiController.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/api/WmsPdaApiController.java @@ -33,6 +33,7 @@ public class WmsPdaApiController extends BaseController { private final IWmsMoveOrderService wmsMoveOrderService; private final IWmsAllocateOrderDetailService wmsAllocateOrderDetailService; private final IWmsAllocateTaskService wmsAllocateTaskService; + private final IWmsInstockRecordService wmsInstockRecordService; /** * 原材料退库-现场扫描 @@ -543,4 +544,30 @@ public class WmsPdaApiController extends BaseController { return R.ok(); } + /** + * PDA 入库提交(带质检判断) + *

+ * 业务流程: + * 1. 查询入库打印记录 + * 2. 判断是否需要质检(是否有物料 inspectionRequest = "0") + * 3. 如果全部是免检物料,直接调用 completeQualityCheck() 完成入库 + * 4. 如果有必检物料,调用 QMS 创建质检任务,更新打印记录状态为"质检中" + * + * @param instockCode 入库单号 + * @return 处理结果 + */ + @PostMapping("/instock/submit") + public R instockSubmit(String instockCode) { + if (instockCode == null || instockCode.trim().isEmpty()) { + return R.fail("入库单号不能为空"); + } + + try { + Boolean result = wmsInstockRecordService.submitInstockWithQualityCheck(instockCode); + return result ? R.ok("入库提交成功") : R.fail("入库提交失败"); + } catch (Exception e) { + return R.fail("入库提交异常: " + e.getMessage()); + } + } + } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInspectionInitiationServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInspectionInitiationServiceImpl.java index 0cb951e6..7e673096 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInspectionInitiationServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInspectionInitiationServiceImpl.java @@ -12,6 +12,7 @@ import org.dromara.wms.service.IWmsInspectionInitiationService; import org.dromara.wms.service.IWmsInstockPrintService; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -184,7 +185,11 @@ public class WmsInspectionInitiationServiceImpl implements IWmsInspectionInitiat request.setInstockCode(print.getInstockCode()); // 入库单号 request.setMaterialCode(print.getMaterialCode()); // 物料编码 request.setMaterialName(print.getMaterialName()); // 物料名称 - request.setInspectionQty(print.getApportionQty()); // 质检数量(分包数量) + // 质检数量:使用每包数量 materialQty + Long materialQty = print.getMaterialQty(); + log.info("构建质检请求,批次: {}, 前端传入 materialQty: {}", print.getBatchCode(), materialQty); + request.setInspectionQty(materialQty != null + ? new BigDecimal(materialQty) : BigDecimal.ONE); request.setBatchCode(print.getBatchCode()); // 批次号 // 检验类型:优先使用前端传入的参数,默认为"4"(原材料检) //首检=0, 专检=1, 自检=2, 互检=3, 原材料检=4, 抽检=5, 成品检=6, 入库检=7,出库检=8 diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java index 2b07d470..6abef963 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java @@ -4,12 +4,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.tenant.helper.TenantHelper; +import org.dromara.qms.api.RemoteQmsInspectionService; +import org.dromara.qms.api.dto.WmsInspectionTaskRequest; import org.dromara.wms.domain.BaseMaterialCategory; import org.dromara.wms.domain.SysUser; import org.dromara.wms.domain.WmsInstockOrder; @@ -45,6 +50,7 @@ import java.util.Map; * @author Yinq * @date 2025-01-07 */ +@Slf4j @RequiredArgsConstructor @Service public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService { @@ -59,6 +65,13 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService { private final IWmsPurchaseOrderService purchaseOrderService; private final IWmsPurchaseOrderDetailService purchaseOrderDetailService; + /** + * QMS 质检服务(Dubbo 引用) + * 用于为 WMS 入库单创建质检任务 + */ + @DubboReference(timeout = 300000) + private final RemoteQmsInspectionService remoteQmsInspectionService; + /** * 查询入库记录 @@ -367,4 +380,79 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService { } } + /** + * PDA 入库提交(带质检判断) + *

+ * 业务流程: + * 1. 查询入库打印记录 + * 2. 判断是否需要质检(是否有物料 inspectionRequest = "0") + * 3. 如果全部是免检物料,直接调用 completeQualityCheck() 完成入库 + * 4. 如果有必检物料,调用 QMS 创建质检任务,更新打印记录状态为"质检中" + * + * @param instockCode 入库单号 + * @return 是否处理成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean submitInstockWithQualityCheck(String instockCode) { + log.info("PDA入库提交开始,入库单号: {}", instockCode); + + // 1. 查询入库打印记录 + WmsInstockPrintBo printBo = new WmsInstockPrintBo(); + printBo.setInstockCode(instockCode); + List prints = instockPrintService.queryList(printBo); + + if (prints.isEmpty()) { + throw new ServiceException("入库打印记录不存在: " + instockCode); + } + + // 2. 判断是否需要质检 + boolean needInspection = prints.stream() + .anyMatch(print -> "0".equals(print.getInspectionRequest())); + + if (!needInspection) { + // 免检物料 - 直接入库 + log.info("入库单 {} 全部为免检物料,直接入库", instockCode); + return completeQualityCheck(instockCode); + } + + // 3. 必检物料 - 调用 QMS 创建质检任务 + log.info("入库单 {} 包含必检物料,开始创建质检任务", instockCode); + + for (WmsInstockPrintVo print : prints) { + // 只处理必检物料 + if ("0".equals(print.getInspectionRequest())) { + try { + // 构建 QMS 请求参数 + WmsInspectionTaskRequest request = new WmsInspectionTaskRequest(); + request.setInstockCode(instockCode); + request.setMaterialCode(print.getMaterialCode()); + request.setMaterialName(print.getMaterialName()); + request.setInspectionQty(print.getApportionQty()); + request.setBatchCode(print.getBatchCode()); + request.setInspectionType("7"); // 入库检 + + // 调用 QMS 创建质检任务(租户ID和用户ID由 Dubbo 调用链自动传递) + String inspectionNo = remoteQmsInspectionService.createInspectionTaskForWMS(request); + + log.info("质检任务创建成功,质检单号: {}, 物料编码: {}", inspectionNo, print.getMaterialCode()); + + // 更新打印记录状态:质检中 + WmsInstockPrintBo updatePrintBo = new WmsInstockPrintBo(); + updatePrintBo.setInstockPrintId(print.getInstockPrintId()); + updatePrintBo.setInspectionType("1"); // 质检状态:1=质检中 + updatePrintBo.setInboundStatus("2"); // 入库状态:2=入库中 + instockPrintService.updateByBo(updatePrintBo); + + } catch (Exception e) { + log.error("为物料 {} 创建质检任务失败: {}", print.getMaterialCode(), e.getMessage(), e); + throw new ServiceException("为物料 " + print.getMaterialCode() + " 创建质检任务失败: " + e.getMessage()); + } + } + } + + log.info("入库单 {} 质检任务创建完成,等待质检结果", instockCode); + return true; + } + }