Commit 892ce3e13a942bf43c45dd60673d5dfc71e14b35

Authored by YunaiV
1 parent 5738e2b8

✨ feat(mes): 添加领料出库单数量校验功能

新增校验领料出库单数量的接口,确保每行明细数量之和等于行领料数量。此功能提升了数据一致性检查,避免了潜在的数量不匹配问题。
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) {
... ...