Commit f5e61242ce56951b2b7be3e737aa6b7a655bc7d5
1 parent
62699136
✨ feat(mes): 移除生产退料单数量校验逻辑及相关接口
Showing
3 changed files
with
28 additions
and
32 deletions
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 | 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 | 145 | // ==================== 拼接 VO ==================== |
| 154 | 146 | |
| 155 | 147 | private List<MesWmReturnIssueRespVO> buildRespVOList(List<MesWmReturnIssueDO> list) { | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueService.java
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 | 8 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 9 | 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssuePageReqVO; |
| 10 | 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 | 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDO; |
| 12 | 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO; |
| 13 | 14 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO; |
| 14 | 15 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueMapper; |
| 15 | 16 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; |
| 16 | 17 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueStatusEnum; |
| 18 | +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; | |
| 17 | 19 | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| 18 | 20 | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| 19 | 21 | import jakarta.annotation.Resource; |
| ... | ... | @@ -23,6 +25,7 @@ import org.springframework.validation.annotation.Validated; |
| 23 | 25 | |
| 24 | 26 | import java.math.BigDecimal; |
| 25 | 27 | import java.util.List; |
| 28 | +import java.util.Map; | |
| 26 | 29 | |
| 27 | 30 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 28 | 31 | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| ... | ... | @@ -45,6 +48,8 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { |
| 45 | 48 | private MesMdWorkstationService workstationService; |
| 46 | 49 | @Resource |
| 47 | 50 | private MesProWorkOrderService workOrderService; |
| 51 | + @Resource | |
| 52 | + private MesMdItemService itemService; | |
| 48 | 53 | |
| 49 | 54 | @Override |
| 50 | 55 | @Transactional(rollbackFor = Exception.class) |
| ... | ... | @@ -133,12 +138,33 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { |
| 133 | 138 | @Override |
| 134 | 139 | @Transactional(rollbackFor = Exception.class) |
| 135 | 140 | public void stockReturnIssue(Long id) { |
| 136 | - // 校验存在 + 待上架状态 | |
| 141 | + // 1.1 校验存在 + 待上架状态 | |
| 137 | 142 | MesWmReturnIssueDO issue = validateReturnIssueExists(id); |
| 138 | 143 | if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.APPROVING.getStatus(), issue.getStatus())) { |
| 139 | 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 | 168 | issueMapper.updateById(new MesWmReturnIssueDO() |
| 143 | 169 | .setId(id).setStatus(MesWmReturnIssueStatusEnum.APPROVED.getStatus())); |
| 144 | 170 | } |
| ... | ... | @@ -185,20 +211,6 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { |
| 185 | 211 | } |
| 186 | 212 | |
| 187 | 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 | 214 | public MesWmReturnIssueDO validateReturnIssueExists(Long id) { |
| 203 | 215 | MesWmReturnIssueDO issue = issueMapper.selectById(id); |
| 204 | 216 | if (issue == null) { | ... | ... |