Commit 892ce3e13a942bf43c45dd60673d5dfc71e14b35
1 parent
5738e2b8
✨ feat(mes): 添加领料出库单数量校验功能
新增校验领料出库单数量的接口,确保每行明细数量之和等于行领料数量。此功能提升了数据一致性检查,避免了潜在的数量不匹配问题。
Showing
3 changed files
with
30 additions
and
12 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productionissue/MesWmProductionIssueController.java
| ... | ... | @@ -142,7 +142,13 @@ public class MesWmProductionIssueController { |
| 142 | 142 | return success(true); |
| 143 | 143 | } |
| 144 | 144 | |
| 145 | - // TODO @AI:【芋艿】check quantity;晚点搞; | |
| 145 | + @GetMapping("/check-quantity") | |
| 146 | + @Operation(summary = "校验领料出库单数量", description = "校验每行明细数量之和是否等于行领料数量") | |
| 147 | + @Parameter(name = "id", description = "编号", required = true) | |
| 148 | + @PreAuthorize("@ss.hasPermission('mes:wm-production-issue:query')") | |
| 149 | + public CommonResult<Boolean> checkProductionIssueQuantity(@RequestParam("id") Long id) { | |
| 150 | + return success(issueService.checkProductionIssueQuantity(id)); | |
| 151 | + } | |
| 146 | 152 | |
| 147 | 153 | // ==================== 拼接 VO ==================== |
| 148 | 154 | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueService.java
| ... | ... | @@ -85,4 +85,12 @@ public interface MesWmProductionIssueService { |
| 85 | 85 | */ |
| 86 | 86 | void cancelProductionIssue(Long id); |
| 87 | 87 | |
| 88 | + /** | |
| 89 | + * 校验领料出库单的数量:每行明细数量之和是否等于行领料数量 | |
| 90 | + * | |
| 91 | + * @param id 编号 | |
| 92 | + * @return 是否全部一致 | |
| 93 | + */ | |
| 94 | + Boolean checkProductionIssueQuantity(Long id); | |
| 95 | + | |
| 88 | 96 | } | ... | ... |
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 |
| 125 | 125 | if (ObjUtil.notEqual(MesWmProductionIssueStatusEnum.APPROVING.getStatus(), issue.getStatus())) { |
| 126 | 126 | throw exception(WM_PRODUCTION_ISSUE_STATUS_INVALID); |
| 127 | 127 | } |
| 128 | - // 校验每行明细数量之和是否等于行领料数量 | |
| 129 | - List<MesWmProductionIssueLineDO> lines = issueLineService.getProductionIssueLineListByIssueId(id); | |
| 130 | - for (MesWmProductionIssueLineDO line : lines) { | |
| 131 | - List<MesWmProductionIssueDetailDO> details = issueDetailService.getProductionIssueDetailListByLineId(line.getId()); | |
| 132 | - BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, | |
| 133 | - MesWmProductionIssueDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); | |
| 134 | - if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) { | |
| 135 | - throw exception(WM_PRODUCTION_ISSUE_DETAIL_QUANTITY_MISMATCH); | |
| 136 | - } | |
| 137 | - } | |
| 138 | - | |
| 139 | 128 | // 执行拣货(待拣货 → 待执行领出) |
| 140 | 129 | issueMapper.updateById(new MesWmProductionIssueDO() |
| 141 | 130 | .setId(id).setStatus(MesWmProductionIssueStatusEnum.APPROVED.getStatus())); |
| ... | ... | @@ -175,12 +164,27 @@ public class MesWmProductionIssueServiceImpl implements MesWmProductionIssueServ |
| 175 | 164 | MesWmProductionIssueStatusEnum.CANCELED.getStatus())) { |
| 176 | 165 | throw exception(WM_PRODUCTION_ISSUE_CANCEL_NOT_ALLOWED); |
| 177 | 166 | } |
| 167 | + | |
| 178 | 168 | // 取消 |
| 179 | 169 | issueMapper.updateById(new MesWmProductionIssueDO() |
| 180 | 170 | .setId(id).setStatus(MesWmProductionIssueStatusEnum.CANCELED.getStatus())); |
| 181 | 171 | } |
| 182 | 172 | |
| 183 | 173 | @Override |
| 174 | + public Boolean checkProductionIssueQuantity(Long id) { | |
| 175 | + List<MesWmProductionIssueLineDO> lines = issueLineService.getProductionIssueLineListByIssueId(id); | |
| 176 | + for (MesWmProductionIssueLineDO line : lines) { | |
| 177 | + List<MesWmProductionIssueDetailDO> details = issueDetailService.getProductionIssueDetailListByLineId(line.getId()); | |
| 178 | + BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, | |
| 179 | + MesWmProductionIssueDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); | |
| 180 | + if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) { | |
| 181 | + return false; | |
| 182 | + } | |
| 183 | + } | |
| 184 | + return true; | |
| 185 | + } | |
| 186 | + | |
| 187 | + @Override | |
| 184 | 188 | public MesWmProductionIssueDO validateProductionIssueExists(Long id) { |
| 185 | 189 | MesWmProductionIssueDO issue = issueMapper.selectById(id); |
| 186 | 190 | if (issue == null) { | ... | ... |