diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/MesWmOutsourceIssueController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/MesWmOutsourceIssueController.java index 96858ba..7bdf25b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/MesWmOutsourceIssueController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/MesWmOutsourceIssueController.java @@ -146,7 +146,13 @@ public class MesWmOutsourceIssueController { return success(true); } - // DONE @AI:需要有 checkQuantity 类似的接口;(AI 未修复原因:需要明确业务逻辑,checkQuantity 接口需要产品经理确认具体校验规则) + @GetMapping("/check-quantity") + @Operation(summary = "校验外协发料单数量", description = "校验每行明细数量之和是否等于行发料数量") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-outsource-issue:query')") + public CommonResult checkOutsourceIssueQuantity(@RequestParam("id") Long id) { + return success(outsourceIssueService.checkOutsourceIssueQuantity(id)); + } // ==================== 拼接 VO ==================== diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/vo/detail/MesWmOutsourceIssueDetailSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/vo/detail/MesWmOutsourceIssueDetailSaveReqVO.java index d154bae..d645061 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/vo/detail/MesWmOutsourceIssueDetailSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/vo/detail/MesWmOutsourceIssueDetailSaveReqVO.java @@ -31,15 +31,10 @@ public class MesWmOutsourceIssueDetailSaveReqVO { @DecimalMin(value = "0.01", message = "数量必须大于 0") private BigDecimal quantity; - @Schema(description = "库存ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "库存ID不能为空") - private Long materialStockId; - @Schema(description = "批次ID", example = "1") private Long batchId; - @Schema(description = "仓库ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "仓库ID不能为空") + @Schema(description = "仓库ID", example = "1") private Long warehouseId; @Schema(description = "库区ID", example = "1") diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/outsourceissue/MesWmOutsourceIssueMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/outsourceissue/MesWmOutsourceIssueMapper.java index 37591c3..48b2855 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/outsourceissue/MesWmOutsourceIssueMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/outsourceissue/MesWmOutsourceIssueMapper.java @@ -20,10 +20,8 @@ public interface MesWmOutsourceIssueMapper extends BaseMapperX lines = outsourceIssueLineService.getOutsourceIssueLineListByIssueId(id); + if (CollUtil.isEmpty(lines)) { + return true; + } + // 批量查询所有明细 + List allDetails = outsourceIssueDetailService.getOutsourceIssueDetailListByIssueId(id); + Map> detailMap = CollectionUtils.convertMultiMap( + allDetails, MesWmOutsourceIssueDetailDO::getLineId); + // 检查每行的明细数量 + for (MesWmOutsourceIssueLineDO line : lines) { + List details = detailMap.getOrDefault(line.getId(), List.of()); + BigDecimal totalDetailQuantity = CollectionUtils.getSumValue(details, + MesWmOutsourceIssueDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); + // 对比行数量与明细总数量 + if (line.getQuantity().compareTo(totalDetailQuantity) != 0) { + return false; + } + } + return true; + } + /** * 校验外协发料单存在 */