Commit f5e61242ce56951b2b7be3e737aa6b7a655bc7d5

Authored by YunaiV
1 parent 62699136

✨ feat(mes): 移除生产退料单数量校验逻辑及相关接口

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnissue/MesWmReturnIssueController.java
@@ -142,14 +142,6 @@ public class MesWmReturnIssueController { @@ -142,14 +142,6 @@ public class MesWmReturnIssueController {
142 return success(true); 142 return success(true);
143 } 143 }
144 144
145 - @GetMapping("/check-quantity")  
146 - @Operation(summary = "校验生产退料单数量", description = "校验每行明细数量之和是否等于行退料数量")  
147 - @Parameter(name = "id", description = "编号", required = true)  
148 - @PreAuthorize("@ss.hasPermission('mes:wm-return-issue:query')")  
149 - public CommonResult<Boolean> checkReturnIssueQuantity(@RequestParam("id") Long id) {  
150 - return success(issueService.checkReturnIssueQuantity(id));  
151 - }  
152 -  
153 // ==================== 拼接 VO ==================== 145 // ==================== 拼接 VO ====================
154 146
155 private List<MesWmReturnIssueRespVO> buildRespVOList(List<MesWmReturnIssueDO> list) { 147 private List<MesWmReturnIssueRespVO> buildRespVOList(List<MesWmReturnIssueDO> list) {
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueService.java
@@ -85,12 +85,4 @@ public interface MesWmReturnIssueService { @@ -85,12 +85,4 @@ public interface MesWmReturnIssueService {
85 */ 85 */
86 void cancelReturnIssue(Long id); 86 void cancelReturnIssue(Long id);
87 87
88 - /**  
89 - * 校验生产退料单的数量:每行明细数量之和是否等于行退料数量  
90 - *  
91 - * @param id 编号  
92 - * @return 是否全部一致  
93 - */  
94 - Boolean checkReturnIssueQuantity(Long id);  
95 -  
96 } 88 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java
@@ -8,12 +8,14 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -8,12 +8,14 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; 8 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
9 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssuePageReqVO; 9 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssuePageReqVO;
10 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssueSaveReqVO; 10 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssueSaveReqVO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
11 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDO; 12 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDO;
12 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO; 13 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO;
13 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO; 14 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO;
14 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueMapper; 15 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueMapper;
15 import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; 16 import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
16 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueStatusEnum; 17 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueStatusEnum;
  18 +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
17 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; 19 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
18 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; 20 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
19 import jakarta.annotation.Resource; 21 import jakarta.annotation.Resource;
@@ -23,6 +25,7 @@ import org.springframework.validation.annotation.Validated; @@ -23,6 +25,7 @@ import org.springframework.validation.annotation.Validated;
23 25
24 import java.math.BigDecimal; 26 import java.math.BigDecimal;
25 import java.util.List; 27 import java.util.List;
  28 +import java.util.Map;
26 29
27 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 30 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
28 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 31 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@@ -45,6 +48,8 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { @@ -45,6 +48,8 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService {
45 private MesMdWorkstationService workstationService; 48 private MesMdWorkstationService workstationService;
46 @Resource 49 @Resource
47 private MesProWorkOrderService workOrderService; 50 private MesProWorkOrderService workOrderService;
  51 + @Resource
  52 + private MesMdItemService itemService;
48 53
49 @Override 54 @Override
50 @Transactional(rollbackFor = Exception.class) 55 @Transactional(rollbackFor = Exception.class)
@@ -133,12 +138,33 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { @@ -133,12 +138,33 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService {
133 @Override 138 @Override
134 @Transactional(rollbackFor = Exception.class) 139 @Transactional(rollbackFor = Exception.class)
135 public void stockReturnIssue(Long id) { 140 public void stockReturnIssue(Long id) {
136 - // 校验存在 + 待上架状态 141 + // 1.1 校验存在 + 待上架状态
137 MesWmReturnIssueDO issue = validateReturnIssueExists(id); 142 MesWmReturnIssueDO issue = validateReturnIssueExists(id);
138 if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.APPROVING.getStatus(), issue.getStatus())) { 143 if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.APPROVING.getStatus(), issue.getStatus())) {
139 throw exception(WM_RETURN_ISSUE_NOT_APPROVING); 144 throw exception(WM_RETURN_ISSUE_NOT_APPROVING);
140 } 145 }
141 - // 入库上架(待上架 → 待执行退料) 146 + // 1.2 检查每个行的明细数量是否完成上架
  147 + List<MesWmReturnIssueLineDO> lines = issueLineService.getReturnIssueLineListByIssueId(id);
  148 + if (CollUtil.isNotEmpty(lines)) {
  149 + // 批量查询所有明细
  150 + List<MesWmReturnIssueDetailDO> allDetails = issueDetailService.getReturnIssueDetailListByIssueId(id);
  151 + Map<Long, List<MesWmReturnIssueDetailDO>> detailMap = CollectionUtils.convertMultiMap(
  152 + allDetails, MesWmReturnIssueDetailDO::getLineId);
  153 + // 检查每行的明细数量
  154 + for (MesWmReturnIssueLineDO line : lines) {
  155 + List<MesWmReturnIssueDetailDO> details = detailMap.getOrDefault(line.getId(), List.of());
  156 + BigDecimal totalDetailQuantity = CollectionUtils.getSumValue(details,
  157 + MesWmReturnIssueDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO);
  158 + // 对比行数量与明细总数量,不满足直接抛出
  159 + if (line.getQuantity().compareTo(totalDetailQuantity) > 0) {
  160 + MesMdItemDO item = itemService.validateItemExists(line.getItemId());
  161 + throw exception(WM_RETURN_ISSUE_DETAIL_QUANTITY_MISMATCH,
  162 + item.getCode() + " " + item.getName() + " 未完成上架");
  163 + }
  164 + }
  165 + }
  166 +
  167 + // 2. 入库上架(待上架 → 待执行退料)
142 issueMapper.updateById(new MesWmReturnIssueDO() 168 issueMapper.updateById(new MesWmReturnIssueDO()
143 .setId(id).setStatus(MesWmReturnIssueStatusEnum.APPROVED.getStatus())); 169 .setId(id).setStatus(MesWmReturnIssueStatusEnum.APPROVED.getStatus()));
144 } 170 }
@@ -185,20 +211,6 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { @@ -185,20 +211,6 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService {
185 } 211 }
186 212
187 @Override 213 @Override
188 - public Boolean checkReturnIssueQuantity(Long id) {  
189 - List<MesWmReturnIssueLineDO> lines = issueLineService.getReturnIssueLineListByIssueId(id);  
190 - for (MesWmReturnIssueLineDO line : lines) {  
191 - List<MesWmReturnIssueDetailDO> details = issueDetailService.getReturnIssueDetailListByLineId(line.getId());  
192 - BigDecimal totalDetailQty = CollectionUtils.getSumValue(details,  
193 - MesWmReturnIssueDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO);  
194 - if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) {  
195 - return false;  
196 - }  
197 - }  
198 - return true;  
199 - }  
200 -  
201 - @Override  
202 public MesWmReturnIssueDO validateReturnIssueExists(Long id) { 214 public MesWmReturnIssueDO validateReturnIssueExists(Long id) {
203 MesWmReturnIssueDO issue = issueMapper.selectById(id); 215 MesWmReturnIssueDO issue = issueMapper.selectById(id);
204 if (issue == null) { 216 if (issue == null) {