From f9497f7c15a45ff9b9af6dae547226a5bb1921ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Fri, 13 Mar 2026 13:37:00 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E4=B8=8A=E6=9E=B6=EF=BC=8C=E5=A4=8D?= =?UTF-8?q?=E6=A0=B8=E6=8B=A3=E8=B4=A7=E6=9F=A5=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...InvestigationManageApplicationService.java | 61 ++++++++++++++++++- .../StockReceiptOrderApplicationService.java | 17 +++++- .../repository/todo/StockReceiptOrderDO.java | 3 + .../StockReceiptOrderDomainService.java | 22 ++++--- .../service/StockShelfOrderDomainService.java | 4 +- .../StockReceiptOrderAppApi.java | 2 +- .../OutMaterialDetailMapper.xml | 1 + 7 files changed, 95 insertions(+), 15 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java index f893c148d..f61669d1a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java @@ -461,11 +461,13 @@ public class InvestigationManageApplicationService { } /** - * 按物料盘点 获取盘点单详细信息(动态返回物料绑定的批次属性) + * 按物料盘点 获取盘点单详细信息(动态返回物料绑定的批次属性、监盘人、盘点进度) */ public InvestigationManagePO getInfoByMaterial(Long investigationManageId) { InvestigationManagePO po = investigationManageDomainService.getInfoByMaterial(investigationManageId); enrichInvestigationWithBatchAttributes(po); + enrichInvestigationManName(po); + enrichInvestigationProgress(po); return po; } @@ -519,6 +521,63 @@ public class InvestigationManageApplicationService { setMaterialMoreDetailListFromInventory(detailList, batchDetailMap); } + /** + * 填充监盘人姓名(investigationManName为空时根据investigationManBy从用户服务获取) + */ + private void enrichInvestigationManName(InvestigationManagePO po) { + if (po == null) { + return; + } + if (StringUtils.isBlank(po.getInvestigationManName()) && po.getInvestigationManBy() != null) { + try { + AjaxResult ajaxResult = userServiceFeign.getInfo(po.getInvestigationManBy()); + if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { + UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class); + if (userPo != null && StringUtils.isNotBlank(userPo.getUserName())) { + po.setInvestigationManName(userPo.getUserName()); + } + } + } catch (Exception e) { + log.warn("获取监盘人姓名失败,investigationManBy={},错误:{}", po.getInvestigationManBy(), e.getMessage()); + } + } + } + + /** + * 填充盘点进度(investigationProgress=已盘点状态的库存数量/盘点单库存总数量) + */ + private void enrichInvestigationProgress(InvestigationManagePO po) { + if (po == null || StringUtils.isBlank(po.getInvestigationNumber())) { + return; + } + InvestigetionManageDetailDO queryDO = new InvestigetionManageDetailDO(); + queryDO.setInvestigationNumber(po.getInvestigationNumber()); + List detailList = investigetionManageDetailDomainService.queryList(queryDO); + if (CollectionUtils.isEmpty(detailList)) { + po.setTotalInventoryQuantity(BigDecimal.ZERO); + po.setInvestigatedInventoryQuantity(BigDecimal.ZERO); + po.setInvestigationProgress(BigDecimal.ZERO); + return; + } + BigDecimal totalQuantity = BigDecimal.ZERO; + BigDecimal investigatedQuantity = BigDecimal.ZERO; + for (InvestigetionManageDetailPO detail : detailList) { + if (detail.getInventoryQuantity() != null) { + totalQuantity = totalQuantity.add(detail.getInventoryQuantity()); + if (Integer.valueOf(4).equals(detail.getInvestigationStatus())) { + investigatedQuantity = investigatedQuantity.add(detail.getInventoryQuantity()); + } + } + } + po.setTotalInventoryQuantity(totalQuantity); + po.setInvestigatedInventoryQuantity(investigatedQuantity); + if (totalQuantity.compareTo(BigDecimal.ZERO) > 0) { + po.setInvestigationProgress(investigatedQuantity.divide(totalQuantity, 4, RoundingMode.HALF_UP)); + } else { + po.setInvestigationProgress(BigDecimal.ZERO); + } + } + /** * @description 按物料分组 盘点 * @author ZhouGY diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index b7d62b5c8..8ee893f56 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -1046,6 +1046,7 @@ public class StockReceiptOrderApplicationService { public Boolean receivingGoods(StockReceiptOrderDO stockReceiptOrderDO){ //收货装配参数 StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO); + assembleStockReceiptOrderDO.setFromPda(false); // PC收货完成,上架单是否下发=否 return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO); } @@ -1073,6 +1074,7 @@ public class StockReceiptOrderApplicationService { if (CollectionUtils.isEmpty(assembleStockReceiptOrderDO.getMaterialDetailList())) { throw new ServiceException("无有效收货数据,请确认已填写收货数量(收货数量不能全部为0)"); } + assembleStockReceiptOrderDO.setFromPda(true); // PDA收货完成,上架单是否下发=是 return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO); } @@ -1154,14 +1156,25 @@ public class StockReceiptOrderApplicationService { } /** - * @description 完成收货 + * @description 完成收货(PC端) * @author ZhouGY * @date 2024/5/22 16:20 * @param receiptOrderId * @return Boolean */ public Boolean completeReceipt(Long receiptOrderId){ - return stockReceiptOrderDomainService.completeReceipt(receiptOrderId); + return stockReceiptOrderDomainService.completeReceipt(receiptOrderId, false); + } + + /** + * @description 完成收货(PDA端,上架单是否下发=是) + * @author ZhouGY + * @date 2024/5/22 16:20 + * @param receiptOrderId + * @return Boolean + */ + public Boolean completeReceiptByApp(Long receiptOrderId){ + return stockReceiptOrderDomainService.completeReceipt(receiptOrderId, true); } public Boolean genStockShelfOrder(Long receiptOrderId){ diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java index 83d22c3e3..1c889761a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java @@ -166,4 +166,7 @@ public class StockReceiptOrderDO extends StockInOrderBaseDO { @ApiModelProperty(name = "创建时间查询条件结束日期") private String createTimeEnd; + + @ApiModelProperty("是否来自PDA收货:true-PDA收货完成,false-PC收货完成(用于上架单是否下发:PDA=是,PC=否)") + private Boolean fromPda; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java index 0bdfb1d36..4944fd694 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java @@ -624,7 +624,7 @@ public class StockReceiptOrderDomainService { long receiptMaterialQuantity = stockReceiptOrderDO.getMaterialDetailList().stream().filter(receiptMaterialDetailDO -> receiptMaterialDetailDO.getReceiptStatus() < 3).count(); //收货数量大于等于计划数量 直接完成收货 if (stockReceiptOrder.getReceiptQuantity().compareTo(stockReceiptOrderPO.getQuantity()) >= 0 && receiptMaterialQuantity == 0){ - completeReceipt(stockReceiptOrderPO.getReceiptOrderId()); + completeReceipt(stockReceiptOrderPO.getReceiptOrderId(), stockReceiptOrderDO.getFromPda()); } return true; } @@ -650,14 +650,15 @@ public class StockReceiptOrderDomainService { } /** - * @param receiptOrderId + * @param receiptOrderId 收货单ID + * @param fromPda 是否来自PDA:true-PDA收货完成(上架单是否下发=是),false/null-PC收货完成(上架单是否下发=否) * @return Boolean * @description 完成收货 * @author ZhouGY * @date 2024/5/22 16:20 */ @Transactional(rollbackFor = Exception.class) - public Boolean completeReceipt(Long receiptOrderId) { + public Boolean completeReceipt(Long receiptOrderId, Boolean fromPda) { StockReceiptOrderPO stockReceiptOrderPO = stockReceiptOrderService.getInfo(receiptOrderId); if (stockReceiptOrderPO == null) { throw new ServiceException("收货单不存在"); @@ -677,8 +678,8 @@ public class StockReceiptOrderDomainService { if (stockReceiptOrderPO.getReceiptQuantity().compareTo(stockReceiptOrderPO.getQuantity()) != 0){ abnormal = 1; } - //根据收货数量生成上架 - genStockShelfOrder(stockReceiptOrderPO); + //根据收货数量生成上架(PDA=是否下发是,PC=是否下发否) + genStockShelfOrder(stockReceiptOrderPO, fromPda); //生成上架单后,更新入库单状态为4(上架中) if (StringUtils.isNotBlank(stockReceiptOrderPO.getInOrderNumber())) { @@ -725,8 +726,8 @@ public class StockReceiptOrderDomainService { if (stockReceiptOrderPO == null) { throw new ServiceException("收货单不存在"); } - - return genStockShelfOrder(stockReceiptOrderPO); + // 手动生成上架单:仅App(PDA)调用,是否下发=是 + return genStockShelfOrder(stockReceiptOrderPO, true); } /** @@ -953,14 +954,15 @@ public class StockReceiptOrderDomainService { } /** - * @param stockReceiptOrderPO + * @param stockReceiptOrderPO 收货单 + * @param fromPda 是否来自PDA:true-是否下发=是(1),false/null-是否下发=否(2) * @return Boolean * @description 生成上架单 * @author ZhouGY * @date 2024/5/24 15:47 */ @Transactional(rollbackFor = Exception.class) - public Boolean genStockShelfOrder(StockReceiptOrderPO stockReceiptOrderPO) { + public Boolean genStockShelfOrder(StockReceiptOrderPO stockReceiptOrderPO, Boolean fromPda) { //构造上架单信息 List stockShelfOrderDOList = new ArrayList<>(); StockShelfOrderDO stockShelfOrderDO = new StockShelfOrderDO(); @@ -1093,6 +1095,8 @@ public class StockReceiptOrderDomainService { stockShelfOrderDO.setReceiptQuantity(receiptQuantity); stockShelfOrderDO.setMaterialDetailList(shelfMaterialDetailDOList); stockShelfOrderDO.setMaterialQuantity(shelfMaterialDetailDOList.size()); + // PDA收货完成=是否下发是(1),PC收货完成=是否下发否(2) + stockShelfOrderDO.setTaskDistribution(fromPda != null && fromPda ? 1 : 2); stockShelfOrderDOList.add(stockShelfOrderDO); return stockShelfOrderDomainService.genStockShelfOrder(stockShelfOrderDOList); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java index 48e69a7eb..033d66b34 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java @@ -162,8 +162,8 @@ public class StockShelfOrderDomainService { if (StringUtils.isBlank(stockShelfOrder.getShelfOrderNumber())){ stockShelfOrder.setShelfOrderNumber(OrderSequence.getOrderCode("SJ")); } - // 收货完成生成上架任务时,任务下发默认值为否(2-未下发),强制覆盖避免从收货单复制到错误值 - stockShelfOrder.setTaskDistribution(2); + // PDA收货完成=是否下发是(1),PC收货完成/无单收货/整单收货=是否下发否(2),DO未设置时默认2 + stockShelfOrder.setTaskDistribution(stockShelfOrderDO.getTaskDistribution() != null ? stockShelfOrderDO.getTaskDistribution() : 2); stockShelfOrder.setCreateBy(loginUser.getUserid()); stockShelfOrder.setCreateByName(userRealName); stockShelfOrder.setCreateTime(new Date()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/stockReceiptOrder/StockReceiptOrderAppApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/stockReceiptOrder/StockReceiptOrderAppApi.java index de3cbc38b..9d5f0496f 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/stockReceiptOrder/StockReceiptOrderAppApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/stockReceiptOrder/StockReceiptOrderAppApi.java @@ -71,7 +71,7 @@ public class StockReceiptOrderAppApi extends BaseController { @ApiOperation("完成收货") @PostMapping("/completeReceipt") public AjaxResult completeReceipt(@RequestBody StockReceiptOrderDTO stockReceiptOrderDTO) { - return toAjax(stockReceiptOrderApplicationService.completeReceipt(stockReceiptOrderDTO.getReceiptOrderId())); + return toAjax(stockReceiptOrderApplicationService.completeReceiptByApp(stockReceiptOrderDTO.getReceiptOrderId())); } @ApiOperation("生成上架单") diff --git a/mhd_wms/src/main/resources/mapper/OutMaterialDetail/OutMaterialDetailMapper.xml b/mhd_wms/src/main/resources/mapper/OutMaterialDetail/OutMaterialDetailMapper.xml index 231ba7880..0e24fe2df 100644 --- a/mhd_wms/src/main/resources/mapper/OutMaterialDetail/OutMaterialDetailMapper.xml +++ b/mhd_wms/src/main/resources/mapper/OutMaterialDetail/OutMaterialDetailMapper.xml @@ -29,6 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +