diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productionissue/MesWmProductionIssueController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productionissue/MesWmProductionIssueController.java index d13234b..b7fb595 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productionissue/MesWmProductionIssueController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productionissue/MesWmProductionIssueController.java @@ -142,7 +142,13 @@ public class MesWmProductionIssueController { return success(true); } - // TODO @AI:【芋艿】check quantity;晚点搞; + @GetMapping("/check-quantity") + @Operation(summary = "校验领料出库单数量", description = "校验每行明细数量之和是否等于行领料数量") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-production-issue:query')") + public CommonResult checkProductionIssueQuantity(@RequestParam("id") Long id) { + return success(issueService.checkProductionIssueQuantity(id)); + } // ==================== 拼接 VO ==================== diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueService.java index 8668053..62841ea 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueService.java @@ -85,4 +85,12 @@ public interface MesWmProductionIssueService { */ void cancelProductionIssue(Long id); + /** + * 校验领料出库单的数量:每行明细数量之和是否等于行领料数量 + * + * @param id 编号 + * @return 是否全部一致 + */ + Boolean checkProductionIssueQuantity(Long id); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java index 34e52ff..2c8692b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java @@ -125,17 +125,6 @@ public class MesWmProductionIssueServiceImpl implements MesWmProductionIssueServ if (ObjUtil.notEqual(MesWmProductionIssueStatusEnum.APPROVING.getStatus(), issue.getStatus())) { throw exception(WM_PRODUCTION_ISSUE_STATUS_INVALID); } - // 校验每行明细数量之和是否等于行领料数量 - List lines = issueLineService.getProductionIssueLineListByIssueId(id); - for (MesWmProductionIssueLineDO line : lines) { - List details = issueDetailService.getProductionIssueDetailListByLineId(line.getId()); - BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, - MesWmProductionIssueDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); - if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) { - throw exception(WM_PRODUCTION_ISSUE_DETAIL_QUANTITY_MISMATCH); - } - } - // 执行拣货(待拣货 → 待执行领出) issueMapper.updateById(new MesWmProductionIssueDO() .setId(id).setStatus(MesWmProductionIssueStatusEnum.APPROVED.getStatus())); @@ -175,12 +164,27 @@ public class MesWmProductionIssueServiceImpl implements MesWmProductionIssueServ MesWmProductionIssueStatusEnum.CANCELED.getStatus())) { throw exception(WM_PRODUCTION_ISSUE_CANCEL_NOT_ALLOWED); } + // 取消 issueMapper.updateById(new MesWmProductionIssueDO() .setId(id).setStatus(MesWmProductionIssueStatusEnum.CANCELED.getStatus())); } @Override + public Boolean checkProductionIssueQuantity(Long id) { + List lines = issueLineService.getProductionIssueLineListByIssueId(id); + for (MesWmProductionIssueLineDO line : lines) { + List details = issueDetailService.getProductionIssueDetailListByLineId(line.getId()); + BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, + MesWmProductionIssueDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); + if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) { + return false; + } + } + return true; + } + + @Override public MesWmProductionIssueDO validateProductionIssueExists(Long id) { MesWmProductionIssueDO issue = issueMapper.selectById(id); if (issue == null) {