From 0ec5aa88a9a2394a2211cc1f98225138879fddc9 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Mon, 8 Sep 2025 12:55:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor(wms):=20=E4=BC=98=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E6=8B=A8=E5=88=86=E5=8C=85=E6=89=93=E5=8D=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -完善打印条件验证,确保只有出库数量等于调拨数量时才能打印 - 优化覆盖模式下的任务删除逻辑 - 重构代码结构,提高可读性和可维护性 - 增加日志记录,便于问题追踪和调试 --- .../impl/WmsAllocateTaskServiceImpl.java | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsAllocateTaskServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsAllocateTaskServiceImpl.java index 9e0e42f5..b76a1051 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsAllocateTaskServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsAllocateTaskServiceImpl.java @@ -10,7 +10,9 @@ 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.wms.domain.WmsAllocateTask; +import org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo; import org.dromara.wms.domain.bo.WmsAllocateTaskBo; +import org.dromara.wms.domain.vo.WmsAllocateOrderDetailVo; import org.dromara.wms.domain.vo.WmsAllocateTaskVo; import org.dromara.wms.mapper.WmsAllocateTaskMapper; import org.dromara.wms.service.IBaseMaterialInfoService; @@ -165,7 +167,7 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { } /** - * 调拨分包打印 + * 调拨分包打印 - 完善版本(只支持覆盖模式) * * @param allocateCode 调拨单号 * @param aoDId 调拨明细ID @@ -184,22 +186,25 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { throw new ServiceException("调拨明细不存在"); } + // 验证打印条件:只有出库数量等于调拨数量时才能打印 + BigDecimal outSum = BigDecimal.valueOf(detailVo.getOutSum()); + if (outSum.compareTo(detailVo.getAllocateOrderQty()) != 0) { + throw new ServiceException("只有出库数量等于调拨数量时才能打印,当前出库数量:" + outSum + ",调拨数量:" + detailVo.getAllocateOrderQty()); + } + // 获取物料信息 org.dromara.wms.domain.vo.BaseMaterialInfoVo materialInfoVo = null; if (detailVo.getMaterialId() != null) { materialInfoVo = baseMaterialInfoService.queryById(detailVo.getMaterialId()); } - // Web端覆盖模式:如果已有打印记录,先删除再新增 + // 覆盖模式:如果已有打印记录,强制删除再新增 List existingTasks = queryTasksByDetailId(aoDId); if (!existingTasks.isEmpty()) { - // 新业务规则:只有出库数量等于调拨数量时才允许重新打印 - BigDecimal outSum = BigDecimal.valueOf(detailVo.getOutSum()); - if (outSum.compareTo(detailVo.getAllocateOrderQty()) != 0) { - throw new ServiceException("只有出库数量等于调拨数量时才能重新打印,当前出库数量:" + outSum + ",调拨数量:" + detailVo.getAllocateOrderQty()); - } - // 删除现有任务(移除inboundStatus验证) - deleteTasksByDetailId(aoDId); + // 强制删除现有任务(覆盖模式) + deleteTasksByDetailIdInternal(aoDId); + // 记录日志 + System.out.println("覆盖模式:删除调拨明细[" + aoDId + "]的" + existingTasks.size() + "个现有任务"); } int splitInt = splitPackageCount != null ? splitPackageCount : 1; @@ -238,7 +243,7 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { totalPackaged = totalPackaged.add(currentPackageQty); } } else { - // 重复打印逻辑(split == 1) + // 单包打印逻辑(split == 1) if (copiesInt < 1) { copiesInt = 1; } @@ -252,11 +257,16 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { } // 更新调拨明细的已分包数量 - org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo detailBo = new org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo(); + WmsAllocateOrderDetailBo detailBo = new WmsAllocateOrderDetailBo(); detailBo.setAoDId(detailVo.getAoDId()); detailBo.setPrintedQty(totalPackaged); + // 保持原有的出库数量不变 + detailBo.setOutSum(detailVo.getOutSum()); allocateOrderDetailService.updateByBo(detailBo); + // 记录成功日志 + System.out.println("调拨分包打印成功:调拨明细[" + aoDId + "],分包数量:" + splitInt + ",总打印数量:" + totalPackaged); + return true; } @@ -423,9 +433,11 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { // 更新调拨明细的已分包数量 if (detailVo != null) { - org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo detailBo = new org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo(); + WmsAllocateOrderDetailBo detailBo = new WmsAllocateOrderDetailBo(); detailBo.setAoDId(detailVo.getAoDId()); detailBo.setPrintedQty(BigDecimal.ZERO); + WmsAllocateOrderDetailVo wmsAllocateOrderDetailVo = allocateOrderDetailService.queryById(detailVo.getAoDId()); + detailBo.setOutSum(wmsAllocateOrderDetailVo.getOutSum()); allocateOrderDetailService.updateByBo(detailBo); } @@ -435,6 +447,24 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { return true; } + /** + * 内部删除方法,不进行业务验证(用于覆盖模式) + */ + private Boolean deleteTasksByDetailIdInternal(Long aoDId) { + MPJLambdaWrapper wrapper = JoinWrappers.lambda(WmsAllocateTask.class) + .eq(WmsAllocateTask::getAoDId, aoDId); + + List tasks = baseMapper.selectList(wrapper); + + if (!tasks.isEmpty()) { + List taskIds = tasks.stream().map(WmsAllocateTask::getAllocateTaskId).toList(); + int deleteCount = baseMapper.deleteByIds(taskIds); + return deleteCount > 0; + } + + return true; + } + /** * 生成订单号 */