Browse Source

✨ feat(mes): 优化库存冻结逻辑,更新盘点任务处理流程

重构库存冻结和解冻逻辑,合并相关方法以提高代码可读性和维护性。
新增表单提交和执行盘点的处理逻辑,确保用户操作的流畅性和准确性。
YunaiV 4 months ago
parent
commit
bab71fce00

+ 3 - 3
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java

@@ -12,12 +12,12 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterial
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO;
-import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanParamMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskLineMapper;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanParamTypeEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskLineStatusEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTypeEnum;
 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
+import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanParamService;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -44,7 +44,7 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask
     @Resource
     private MesWmStockTakingTaskLineMapper stockTakingTaskLineMapper;
     @Resource
-    private MesWmStockTakingPlanParamMapper stockTakingPlanParamMapper;
+    private MesWmStockTakingPlanParamService stockTakingPlanParamService;
     @Resource
     private MesWmMaterialStockService materialStockService;
     @Resource
@@ -139,7 +139,7 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask
      */
     private MesWmMaterialStockListReqVO buildStockQueryReqVO(MesWmStockTakingTaskDO task) {
         // 1. 从方案参数中提取过滤条件
-        List<MesWmStockTakingPlanParamDO> params = stockTakingPlanParamMapper.selectListByPlanId(task.getPlanId());
+        List<MesWmStockTakingPlanParamDO> params = stockTakingPlanParamService.getStockTakingPlanParamListByPlanId(task.getPlanId());
         Assert.notEmpty(params, "盘点方案参数不能为空");
 
         // 2.1 拼接通用参数

+ 8 - 32
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java

@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockFreezeReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
@@ -20,10 +19,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
 
 /**
@@ -128,13 +127,8 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
                 .setStatus(MesWmStockTakingTaskStatusEnum.APPROVING.getStatus()));
 
         // 3. 根据冻结标识,对物资进行冻结
-        // TODO @芋艿:后续跟进下!
         if (Boolean.TRUE.equals(task.getFrozen())) {
-            for (MesWmStockTakingTaskLineDO line : lines) {
-                if (line.getMaterialStockId() != null) {
-                    updateMaterialStockFrozen(line.getMaterialStockId(), true);
-                }
-            }
+            updateMaterialStockFrozen(lines, true);
         }
     }
 
@@ -149,10 +143,9 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
                 .setStatus(MesWmStockTakingTaskStatusEnum.FINISHED.getStatus()));
 
         // 3. 解冻库存
-        // TODO @芋艿:后续跟进下!
         if (Boolean.TRUE.equals(task.getFrozen())) {
             List<MesWmStockTakingTaskLineDO> lines = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id);
-            unfreezeStockTakingTaskStocks(lines);
+            updateMaterialStockFrozen(lines, false);
         }
     }
 
@@ -167,7 +160,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
         task.setStatus(MesWmStockTakingTaskStatusEnum.CANCELED.getStatus());
         stockTakingTaskMapper.updateById(task);
         if (Boolean.TRUE.equals(task.getFrozen())) {
-            unfreezeStockTakingTaskStocks(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id));
+            updateMaterialStockFrozen(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id), false);
         }
     }
 
@@ -208,30 +201,13 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
         return stockTakingTaskMapper.selectPage(pageReqVO);
     }
 
-    private void updateMaterialStockFrozen(Long materialStockId, boolean frozen) {
-        MesWmMaterialStockFreezeReqVO reqVO = new MesWmMaterialStockFreezeReqVO();
-        reqVO.setId(materialStockId);
-        reqVO.setFrozen(frozen);
-        materialStockService.updateMaterialStockFrozen(reqVO);
-    }
-
-    private void unfreezeStockTakingTaskStocks(List<MesWmStockTakingTaskLineDO> lines) {
+    private void updateMaterialStockFrozen(List<MesWmStockTakingTaskLineDO> lines, boolean frozen) {
         if (CollUtil.isEmpty(lines)) {
             return;
         }
-        for (MesWmStockTakingTaskLineDO line : lines) {
-            if (line.getMaterialStockId() != null) {
-                updateMaterialStockFrozen(line.getMaterialStockId(), false);
-            }
-        }
-    }
-
-    private BigDecimal calculateStockTakingDifferenceQuantity(MesWmStockTakingTaskLineDO line) {
-        return getDefaultQuantity(line.getTakingQuantity()).subtract(getDefaultQuantity(line.getQuantity()));
-    }
-
-    private BigDecimal getDefaultQuantity(BigDecimal quantity) {
-        return quantity == null ? BigDecimal.ZERO : quantity;
+        List<Long> materialStockIds = convertList(lines,
+                MesWmStockTakingTaskLineDO::getMaterialStockId, line -> line.getMaterialStockId() != null);
+        materialStockService.updateMaterialStockFrozen(materialStockIds, frozen);
     }
 
     private void validateStockTakingTaskCodeUnique(Long id, String code) {