From 69543777da53ecc4ceb7b15bec8c46ac28eea320 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, 10 Apr 2026 14:46:28 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E5=A4=8D=E6=A0=B8=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewOrderApplicationService.java | 133 ++++++++++++++++-- .../HandoverTaskOrderDomainService.java | 10 +- .../persistence/InOrderAbnormalImpl.java | 46 +++++- .../repository/todo/ReviewOrderDO.java | 2 + .../reviewOrder/ReviewOrderAppApi.java | 5 +- .../inOrderAbnormal/InOrderAbnormalMapper.xml | 3 + 6 files changed, 181 insertions(+), 18 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java index 68cc3b0f7..3bb137f05 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java @@ -194,14 +194,11 @@ public class ReviewOrderApplicationService { throw new ServiceException("复核明细不能为空"); } for (ReviewMaterialDetailPO i : inputDetails) { - if (i == null || i.getReviewMaterialDetailId() == null) { + if (i == null) { continue; } - ReviewMaterialDetail db = reviewMaterialDetailMapper.selectById(i.getReviewMaterialDetailId()); - if (db == null || db.getDelFlag() == null || db.getDelFlag() != 1) { - continue; - } - if (!cmd.getReviewOrderId().equals(db.getReviewOrderId())) { + ReviewMaterialDetail db = findReviewMaterialDetailForBatch(i, cmd.getReviewOrderId()); + if (db == null) { continue; } @@ -248,14 +245,11 @@ public class ReviewOrderApplicationService { throw new ServiceException("复核明细不能为空"); } for (ReviewMaterialDetailPO i : inputDetails) { - if (i == null || i.getReviewMaterialDetailId() == null) { + if (i == null) { continue; } - ReviewMaterialDetail db = reviewMaterialDetailMapper.selectById(i.getReviewMaterialDetailId()); - if (db == null || db.getDelFlag() == null || db.getDelFlag() != 1) { - continue; - } - if (!cmd.getReviewOrderId().equals(db.getReviewOrderId())) { + ReviewMaterialDetail db = findReviewMaterialDetailForBatch(i, cmd.getReviewOrderId()); + if (db == null) { continue; } @@ -314,6 +308,8 @@ public class ReviewOrderApplicationService { if (reviewOrderId == null) { continue; } + // 若完成复核请求携带明细,先按本次提交快照落库(数量与计量),再校验与同步出库/交接 + applyReviewSnapshotForConfirm(reviewOrderId, cmd.getDetails(), loginUser); List rows = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId); boolean hasPending = rows.stream().anyMatch(r -> nz(r.getPendingReviewQty()).compareTo(BigDecimal.ZERO) > 0); if (hasPending) { @@ -363,6 +359,18 @@ public class ReviewOrderApplicationService { } BigDecimal checkQty = nz(detail.getReviewedQty()); outDb.setCheckQuantity(checkQty); + if (detail.getNetWeightKg() != null) { + outDb.setCheckNetWeight(detail.getNetWeightKg()); + } + if (detail.getGrossWeightKg() != null) { + outDb.setCheckGrossWeight(detail.getGrossWeightKg()); + } + if (detail.getVolumeCbm() != null) { + outDb.setCheckVolume(detail.getVolumeCbm()); + } + if (detail.getAreaSqm() != null) { + outDb.setCheckArea(detail.getAreaSqm()); + } if (loginUser != null) { outDb.setUpdateBy(loginUser.getUserid()); } @@ -511,6 +519,107 @@ public class ReviewOrderApplicationService { deliveTaskService.batchInsert(deliveTaskDOList); } + /** + * 完成复核时,请求体中的明细快照先写入 review_material_detail(与 PDA 点击确认时一致),再参与待复核校验与出库同步。 + */ + private void applyReviewSnapshotForConfirm(Long reviewOrderId, List inputDetails, LoginUser loginUser) { + if (reviewOrderId == null || CollectionUtils.isEmpty(inputDetails)) { + return; + } + for (ReviewMaterialDetailPO i : inputDetails) { + if (i == null) { + continue; + } + ReviewMaterialDetail db = findReviewMaterialDetailForBatch(i, reviewOrderId); + if (db == null) { + continue; + } + BigDecimal total = nz(db.getReviewedQty()).add(nz(db.getPendingReviewQty())); + boolean qtyTouched = false; + if (i.getReviewedQty() != null && i.getPendingReviewQty() != null) { + db.setReviewedQty(i.getReviewedQty()); + db.setPendingReviewQty(i.getPendingReviewQty()); + qtyTouched = true; + } else if (i.getReviewedQty() != null) { + BigDecimal newR = i.getReviewedQty(); + if (newR.compareTo(total) > 0) { + newR = total; + } + db.setReviewedQty(newR); + db.setPendingReviewQty(total.subtract(newR).max(BigDecimal.ZERO)); + qtyTouched = true; + } else if (i.getPendingReviewQty() != null) { + BigDecimal newP = i.getPendingReviewQty(); + if (newP.compareTo(total) > 0) { + newP = total; + } + db.setPendingReviewQty(newP); + db.setReviewedQty(total.subtract(newP).max(BigDecimal.ZERO)); + qtyTouched = true; + } else if (i.getReviewQtyEa() != null) { + BigDecimal pending = nz(db.getPendingReviewQty()); + BigDecimal reviewed = nz(db.getReviewedQty()); + BigDecimal qty = i.getReviewQtyEa(); + if (qty.compareTo(BigDecimal.ZERO) > 0) { + if (qty.compareTo(pending) > 0) { + qty = pending; + } + db.setPendingReviewQty(pending.subtract(qty)); + db.setReviewedQty(reviewed.add(qty)); + qtyTouched = true; + } + } + if (i.getNetWeightKg() != null) { + db.setNetWeightKg(i.getNetWeightKg()); + } + if (i.getGrossWeightKg() != null) { + db.setGrossWeightKg(i.getGrossWeightKg()); + } + if (i.getVolumeCbm() != null) { + db.setVolumeCbm(i.getVolumeCbm()); + } + if (i.getAreaSqm() != null) { + db.setAreaSqm(i.getAreaSqm()); + } + if (qtyTouched || i.getNetWeightKg() != null || i.getGrossWeightKg() != null + || i.getVolumeCbm() != null || i.getAreaSqm() != null) { + fillOperator(db); + reviewMaterialDetailMapper.updateById(db); + } + } + } + + /** + * 批量复核/取消复核入参行定位:优先 reviewMaterialDetailId;PDA 常只传出库明细 materialDetailId,需按复核单+出库明细主键解析。 + */ + private ReviewMaterialDetail findReviewMaterialDetailForBatch(ReviewMaterialDetailPO input, Long reviewOrderId) { + if (input == null || reviewOrderId == null) { + return null; + } + if (input.getReviewMaterialDetailId() != null) { + ReviewMaterialDetail db = reviewMaterialDetailMapper.selectById(input.getReviewMaterialDetailId()); + if (db == null || db.getDelFlag() == null || db.getDelFlag() != 1) { + return null; + } + if (!reviewOrderId.equals(db.getReviewOrderId())) { + return null; + } + return db; + } + if (input.getMaterialDetailId() == null) { + return null; + } + List list = reviewMaterialDetailMapper.selectList( + new LambdaQueryWrapper() + .eq(ReviewMaterialDetail::getReviewOrderId, reviewOrderId) + .eq(ReviewMaterialDetail::getMaterialDetailId, input.getMaterialDetailId()) + .eq(ReviewMaterialDetail::getDelFlag, 1)); + if (CollectionUtils.isEmpty(list)) { + return null; + } + return list.get(0); + } + private void refreshReviewOrderStatus(Long reviewOrderId) { List rows = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId); // 业务口径:只有全部明细待复核=0 时,状态才置为 2;部分复核仍保持 1。 diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java index c44055b89..1d70d4593 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java @@ -171,8 +171,14 @@ public class HandoverTaskOrderDomainService { detail.setMaterialCode(omd.getMaterialCode() != null ? omd.getMaterialCode() : omd.getMaterialNo()); detail.setMaterialName(omd.getMaterialName() != null ? omd.getMaterialName() : omd.getCommodityName()); detail.setBarCode(omd.getBarCode()); - detail.setWeightLimit(omd.getWeightLimit()); - detail.setVolumeLimit(omd.getVolumeLimit()); + // 需要复核时:交接展示以出库明细上的复核计量为准(完成复核时由复核单同步写入 check_*) + if (Integer.valueOf(1).equals(review)) { + detail.setWeightLimit(omd.getCheckNetWeight() != null ? omd.getCheckNetWeight() : omd.getWeightLimit()); + detail.setVolumeLimit(omd.getCheckVolume() != null ? omd.getCheckVolume() : omd.getVolumeLimit()); + } else { + detail.setWeightLimit(omd.getWeightLimit()); + detail.setVolumeLimit(omd.getVolumeLimit()); + } detail.setQuantity(omd.getQuantity()); detail.setPickingQuantity(pickQty); detail.setCheckQuantity(handoverQuantity); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inOrderAbnormal/repository/persistence/InOrderAbnormalImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inOrderAbnormal/repository/persistence/InOrderAbnormalImpl.java index 3280dd2ec..b0cda6088 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/inOrderAbnormal/repository/persistence/InOrderAbnormalImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inOrderAbnormal/repository/persistence/InOrderAbnormalImpl.java @@ -14,14 +14,19 @@ import com.mhd.wms.domain.inOrderAbnormal.repository.po.InOrderAbnormalPO; import com.mhd.wms.domain.inOrderAbnormal.repository.todo.InOrderAbnormalBaseDO; import com.mhd.wms.domain.inOrderAbnormal.repository.todo.InOrderAbnormalDO; import com.mhd.wms.domain.receiptMaterialDetail.entity.ReceiptMaterialDetail; +import com.mhd.wms.domain.receiptMaterialDetail.repository.facade.IReceiptMaterialDetailService; import com.mhd.wms.domain.receiptMaterialDetail.repository.mapper.ReceiptMaterialDetailMapper; +import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO; import com.mhd.wms.domain.shelfMaterialDetail.entity.ShelfMaterialDetail; +import com.mhd.wms.domain.shelfMaterialDetail.repository.facade.IShelfMaterialDetailService; import com.mhd.wms.domain.shelfMaterialDetail.repository.mapper.ShelfMaterialDetailMapper; +import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; @@ -42,6 +47,10 @@ public class InOrderAbnormalImpl extends ServiceImpl details; @ApiModelProperty("PDA 列表 Tab:2=历史(已复核),其它=待办(待复核/复核中)") diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/reviewOrder/ReviewOrderAppApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/reviewOrder/ReviewOrderAppApi.java index 906718e70..ed9a47224 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/reviewOrder/ReviewOrderAppApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/reviewOrder/ReviewOrderAppApi.java @@ -1,6 +1,5 @@ package com.mhd.wms.interfaces.facadeApp.reviewOrder; -import cn.hutool.json.JSONUtil; import com.mhd.common.core.domain.po.UserPo; import com.mhd.common.core.web.controller.BaseController; import com.mhd.common.core.web.domain.AjaxResult; @@ -90,7 +89,7 @@ public class ReviewOrderAppApi extends BaseController { @ApiOperation("PDA 提交复核") @PostMapping("/check") public AjaxResult check(@RequestBody ReviewOrderDTO reviewOrderDTO) { - ReviewOrderDO cmd = JSONUtil.toBean(JSONUtil.toJsonStr(reviewOrderDTO), ReviewOrderDO.class); + ReviewOrderDO cmd = reviewOrderAssembler.toDO(reviewOrderDTO); return toAjax(reviewOrderApplicationService.batchCheck(cmd)); } @@ -110,7 +109,7 @@ public class ReviewOrderAppApi extends BaseController { @ApiOperation("PDA 完成复核") @PostMapping("/completeCheck") public AjaxResult completeCheck(@RequestBody ReviewOrderDTO reviewOrderDTO) { - ReviewOrderDO cmd = JSONUtil.toBean(JSONUtil.toJsonStr(reviewOrderDTO), ReviewOrderDO.class); + ReviewOrderDO cmd = reviewOrderAssembler.toDO(reviewOrderDTO); return toAjax(reviewOrderApplicationService.checkConfirm(cmd)); } } diff --git a/mhd_wms/src/main/resources/mapper/inOrderAbnormal/InOrderAbnormalMapper.xml b/mhd_wms/src/main/resources/mapper/inOrderAbnormal/InOrderAbnormalMapper.xml index 2bcd253e1..228139f0d 100644 --- a/mhd_wms/src/main/resources/mapper/inOrderAbnormal/InOrderAbnormalMapper.xml +++ b/mhd_wms/src/main/resources/mapper/inOrderAbnormal/InOrderAbnormalMapper.xml @@ -13,8 +13,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + +