Commit bab71fce0017f010d96b85d35defe7fe8859dc35

Authored by YunaiV
1 parent f8011968

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

重构库存冻结和解冻逻辑,合并相关方法以提高代码可读性和维护性。
新增表单提交和执行盘点的处理逻辑,确保用户操作的流畅性和准确性。
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 @@ -12,12 +12,12 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterial
12 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; 12 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO;
13 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; 13 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
14 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; 14 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO;
15 -import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanParamMapper;  
16 import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskLineMapper; 15 import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskLineMapper;
17 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanParamTypeEnum; 16 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanParamTypeEnum;
18 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskLineStatusEnum; 17 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskLineStatusEnum;
19 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTypeEnum; 18 import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTypeEnum;
20 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; 19 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
  20 +import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanParamService;
21 import jakarta.annotation.Resource; 21 import jakarta.annotation.Resource;
22 import org.springframework.stereotype.Service; 22 import org.springframework.stereotype.Service;
23 import org.springframework.transaction.annotation.Transactional; 23 import org.springframework.transaction.annotation.Transactional;
@@ -44,7 +44,7 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask @@ -44,7 +44,7 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask
44 @Resource 44 @Resource
45 private MesWmStockTakingTaskLineMapper stockTakingTaskLineMapper; 45 private MesWmStockTakingTaskLineMapper stockTakingTaskLineMapper;
46 @Resource 46 @Resource
47 - private MesWmStockTakingPlanParamMapper stockTakingPlanParamMapper; 47 + private MesWmStockTakingPlanParamService stockTakingPlanParamService;
48 @Resource 48 @Resource
49 private MesWmMaterialStockService materialStockService; 49 private MesWmMaterialStockService materialStockService;
50 @Resource 50 @Resource
@@ -139,7 +139,7 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask @@ -139,7 +139,7 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask
139 */ 139 */
140 private MesWmMaterialStockListReqVO buildStockQueryReqVO(MesWmStockTakingTaskDO task) { 140 private MesWmMaterialStockListReqVO buildStockQueryReqVO(MesWmStockTakingTaskDO task) {
141 // 1. 从方案参数中提取过滤条件 141 // 1. 从方案参数中提取过滤条件
142 - List<MesWmStockTakingPlanParamDO> params = stockTakingPlanParamMapper.selectListByPlanId(task.getPlanId()); 142 + List<MesWmStockTakingPlanParamDO> params = stockTakingPlanParamService.getStockTakingPlanParamListByPlanId(task.getPlanId());
143 Assert.notEmpty(params, "盘点方案参数不能为空"); 143 Assert.notEmpty(params, "盘点方案参数不能为空");
144 144
145 // 2.1 拼接通用参数 145 // 2.1 拼接通用参数
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; @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.ObjUtil; 4 import cn.hutool.core.util.ObjUtil;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 -import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockFreezeReqVO;  
8 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO; 7 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO;
9 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO; 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO;
10 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
@@ -20,10 +19,10 @@ import org.springframework.stereotype.Service; @@ -20,10 +19,10 @@ import org.springframework.stereotype.Service;
20 import org.springframework.transaction.annotation.Transactional; 19 import org.springframework.transaction.annotation.Transactional;
21 import org.springframework.validation.annotation.Validated; 20 import org.springframework.validation.annotation.Validated;
22 21
23 -import java.math.BigDecimal;  
24 import java.util.List; 22 import java.util.List;
25 23
26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  25 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
27 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 26 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
28 27
29 /** 28 /**
@@ -128,13 +127,8 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ @@ -128,13 +127,8 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
128 .setStatus(MesWmStockTakingTaskStatusEnum.APPROVING.getStatus())); 127 .setStatus(MesWmStockTakingTaskStatusEnum.APPROVING.getStatus()));
129 128
130 // 3. 根据冻结标识,对物资进行冻结 129 // 3. 根据冻结标识,对物资进行冻结
131 - // TODO @芋艿:后续跟进下!  
132 if (Boolean.TRUE.equals(task.getFrozen())) { 130 if (Boolean.TRUE.equals(task.getFrozen())) {
133 - for (MesWmStockTakingTaskLineDO line : lines) {  
134 - if (line.getMaterialStockId() != null) {  
135 - updateMaterialStockFrozen(line.getMaterialStockId(), true);  
136 - }  
137 - } 131 + updateMaterialStockFrozen(lines, true);
138 } 132 }
139 } 133 }
140 134
@@ -149,10 +143,9 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ @@ -149,10 +143,9 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
149 .setStatus(MesWmStockTakingTaskStatusEnum.FINISHED.getStatus())); 143 .setStatus(MesWmStockTakingTaskStatusEnum.FINISHED.getStatus()));
150 144
151 // 3. 解冻库存 145 // 3. 解冻库存
152 - // TODO @芋艿:后续跟进下!  
153 if (Boolean.TRUE.equals(task.getFrozen())) { 146 if (Boolean.TRUE.equals(task.getFrozen())) {
154 List<MesWmStockTakingTaskLineDO> lines = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id); 147 List<MesWmStockTakingTaskLineDO> lines = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id);
155 - unfreezeStockTakingTaskStocks(lines); 148 + updateMaterialStockFrozen(lines, false);
156 } 149 }
157 } 150 }
158 151
@@ -167,7 +160,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ @@ -167,7 +160,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
167 task.setStatus(MesWmStockTakingTaskStatusEnum.CANCELED.getStatus()); 160 task.setStatus(MesWmStockTakingTaskStatusEnum.CANCELED.getStatus());
168 stockTakingTaskMapper.updateById(task); 161 stockTakingTaskMapper.updateById(task);
169 if (Boolean.TRUE.equals(task.getFrozen())) { 162 if (Boolean.TRUE.equals(task.getFrozen())) {
170 - unfreezeStockTakingTaskStocks(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id)); 163 + updateMaterialStockFrozen(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id), false);
171 } 164 }
172 } 165 }
173 166
@@ -208,30 +201,13 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ @@ -208,30 +201,13 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
208 return stockTakingTaskMapper.selectPage(pageReqVO); 201 return stockTakingTaskMapper.selectPage(pageReqVO);
209 } 202 }
210 203
211 - private void updateMaterialStockFrozen(Long materialStockId, boolean frozen) {  
212 - MesWmMaterialStockFreezeReqVO reqVO = new MesWmMaterialStockFreezeReqVO();  
213 - reqVO.setId(materialStockId);  
214 - reqVO.setFrozen(frozen);  
215 - materialStockService.updateMaterialStockFrozen(reqVO);  
216 - }  
217 -  
218 - private void unfreezeStockTakingTaskStocks(List<MesWmStockTakingTaskLineDO> lines) { 204 + private void updateMaterialStockFrozen(List<MesWmStockTakingTaskLineDO> lines, boolean frozen) {
219 if (CollUtil.isEmpty(lines)) { 205 if (CollUtil.isEmpty(lines)) {
220 return; 206 return;
221 } 207 }
222 - for (MesWmStockTakingTaskLineDO line : lines) {  
223 - if (line.getMaterialStockId() != null) {  
224 - updateMaterialStockFrozen(line.getMaterialStockId(), false);  
225 - }  
226 - }  
227 - }  
228 -  
229 - private BigDecimal calculateStockTakingDifferenceQuantity(MesWmStockTakingTaskLineDO line) {  
230 - return getDefaultQuantity(line.getTakingQuantity()).subtract(getDefaultQuantity(line.getQuantity()));  
231 - }  
232 -  
233 - private BigDecimal getDefaultQuantity(BigDecimal quantity) {  
234 - return quantity == null ? BigDecimal.ZERO : quantity; 208 + List<Long> materialStockIds = convertList(lines,
  209 + MesWmStockTakingTaskLineDO::getMaterialStockId, line -> line.getMaterialStockId() != null);
  210 + materialStockService.updateMaterialStockFrozen(materialStockIds, frozen);
235 } 211 }
236 212
237 private void validateStockTakingTaskCodeUnique(Long id, String code) { 213 private void validateStockTakingTaskCodeUnique(Long id, String code) {