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 85edf72b..96a0c09b 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 @@ -199,13 +199,12 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { // Web端覆盖模式:如果已有打印记录,先删除再新增 List existingTasks = queryTasksByDetailId(aoDId); if (!existingTasks.isEmpty()) { - // 检查是否有已开始执行的任务 - for (WmsAllocateTaskVo task : existingTasks) { - if ("1".equals(task.getInboundStatus()) || "2".equals(task.getInboundStatus())) { - throw new ServiceException("存在已开始执行的任务,不允许覆盖"); - } + // 新业务规则:只有出库数量等于调拨数量时才允许重新打印 + BigDecimal outSum = BigDecimal.valueOf(detailVo.getOutSum()); + if (outSum.compareTo(detailVo.getAllocateOrderQty()) != 0) { + throw new ServiceException("只有出库数量等于调拨数量时才能重新打印,当前出库数量:" + outSum + ",调拨数量:" + detailVo.getAllocateOrderQty()); } - // 删除现有任务 + // 删除现有任务(移除inboundStatus验证) deleteTasksByDetailId(aoDId); } @@ -381,22 +380,21 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { * @return 是否修改成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean updateTaskBarcode(Long allocateTaskId, String batchCode, BigDecimal materialQty) { WmsAllocateTask task = baseMapper.selectById(allocateTaskId); if (task == null) { throw new ServiceException("调拨任务不存在"); } - // 检查任务状态 - if ("1".equals(task.getInboundStatus()) || "2".equals(task.getInboundStatus())) {//入库状态(0-待入库,1-已入库,2-入库中) - throw new ServiceException("该任务已开始执行,不允许修改"); - } + // 移除inboundStatus验证,允许直接修改条码和分包数量 + // 只允许修改条码和分包数量,其他字段保持不变 + WmsAllocateTask updateTask = new WmsAllocateTask(); + updateTask.setAllocateTaskId(allocateTaskId); + updateTask.setBatchCode(batchCode); + updateTask.setMaterialQty(materialQty); - // 更新任务信息 - task.setBatchCode(batchCode); - task.setMaterialQty(materialQty); - - return baseMapper.updateById(task) > 0; + return baseMapper.updateById(updateTask) > 0; } /** @@ -408,24 +406,28 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService { @Override @Transactional(rollbackFor = Exception.class) public Boolean deleteTasksByDetailId(Long aoDId) { + // 获取调拨明细信息,验证删除条件 + org.dromara.wms.domain.vo.WmsAllocateOrderDetailVo detailVo = allocateOrderDetailService.queryById(aoDId); + if (detailVo == null) { + throw new ServiceException("调拨明细不存在"); + } + + // 验证删除条件:只有出库数量等于调拨数量时才能删除 + BigDecimal outSum = BigDecimal.valueOf(detailVo.getOutSum()); + if (outSum.compareTo(detailVo.getAllocateOrderQty()) != 0) { + throw new ServiceException("只有出库数量等于调拨数量时才能删除任务,当前出库数量:" + outSum + ",调拨数量:" + detailVo.getAllocateOrderQty()); + } + MPJLambdaWrapper wrapper = JoinWrappers.lambda(WmsAllocateTask.class) .eq(WmsAllocateTask::getAoDId, aoDId); List tasks = baseMapper.selectList(wrapper); - // 检查是否有已开始执行的任务 - for (WmsAllocateTask task : tasks) { - if ("1".equals(task.getInboundStatus()) || "2".equals(task.getInboundStatus())) {//入库状态(0-待入库,1-已入库,2-入库中) - throw new ServiceException("存在已开始执行的任务,不允许删除"); - } - } - if (!tasks.isEmpty()) { List taskIds = tasks.stream().map(WmsAllocateTask::getAllocateTaskId).toList(); int deleteCount = baseMapper.deleteByIds(taskIds); // 更新调拨明细的已分包数量 - org.dromara.wms.domain.vo.WmsAllocateOrderDetailVo detailVo = allocateOrderDetailService.queryById(aoDId); if (detailVo != null) { org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo detailBo = new org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo(); detailBo.setAoDId(detailVo.getAoDId());