diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java index ff8ac5a4..2461af9d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java @@ -104,15 +104,14 @@ public class OemOrderController extends BladeController { IPage pages = workOrderRunService.queryOemApproval(Condition.getPage(query), approvalQuery); return R.data(pages); } - /** - * 审批 + * 批量审批 */ - @PostMapping("/approval") + @PostMapping("/batchApproval") @ApiOperationSupport(order = 4) - @Operation(summary = "审批", description = "") - public R approval(@Valid @RequestBody OemApproval oemApproval) throws Exception { - return workOrderRunService.approval(oemApproval); + @Operation(summary = "批量审批", description = "") + public R batchApproval(@Valid @RequestBody List oemApprovals) throws Exception { + return workOrderRunService.batchApproval(oemApprovals); } /** @@ -121,13 +120,14 @@ public class OemOrderController extends BladeController { @GetMapping("/prepareOemBatches") @ApiOperationSupport(order = 5) @Operation(summary = "外协分批准备数据", description = "worId") - public R detail(@PathVariable Long worId) { + public R prepareOemBatches(@Parameter(description = "车间订单运行记录主键ID", required = true) @RequestParam Long worId) { WorkOrderRun oldWorkOrderRun = workOrderRunService.getById(worId); WorkOrder oldWorkOrder = workOrderService.getById(oldWorkOrderRun.getWoId()); YieldOrder yieldOrder = yieldOrderService.getById(oldWorkOrder.getYoId()); // 创建新的分批订单对象 WorkOrder newWorkOrder = new WorkOrder(); // 复制原订单基本信息 + newWorkOrder.setId(oldWorkOrder.getId()); newWorkOrder.setYoId(oldWorkOrder.getYoId()); newWorkOrder.setWoCode(workOrderService.nextCode(yieldOrder.getYpCode())); newWorkOrder.setCardNo(workOrderService.nextCardNo(yieldOrder.getYpCode(), oldWorkOrder.getCardNo())); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java index b102137c..64579f2f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java @@ -33,6 +33,7 @@ import org.springblade.core.mp.base.BaseServiceImpl; import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -73,7 +74,31 @@ public class OemStatementServiceImpl extends BaseServiceImpl Map> oemAndStatementMap = statementVOS.stream().collect(Collectors.groupingBy(StatementVO::getOcName)); + // 创建CompletableFuture列表 + List> futures = new ArrayList<>(); for (Map.Entry> listEntry : oemAndStatementMap.entrySet()) { + CompletableFuture future = CompletableFuture.runAsync(() -> { + try { + processOemStatements(listEntry.getKey(), listEntry.getValue(), price, putStoreDate, + countSuccess, countError); + } catch (Exception e) { + log.error(String.format("处理外协厂商{}的结算单时发生异常", listEntry.getKey()), e); + } + }); + futures.add(future); + } + // 等待所有任务完成 + try { + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); + } catch (Exception e) { + log.error("异步处理结算单时发生异常", e); + } + + return R.data(Map.of( + "success", countSuccess.get(), + "error", countError.get() + )); + /*for (Map.Entry> listEntry : oemAndStatementMap.entrySet()) { //外协厂商下全部需要结算的结算单 List statementVOList = listEntry.getValue(); @@ -81,71 +106,6 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetAllList = getPriceSheets(oemName, putStoreDate); - //假数据测试用 -// List priceSheetAllList = new ArrayList<>(); -// PriceSheetVO priceSheet1 = new PriceSheetVO(); -// priceSheet1.setPrice("60"); -// priceSheet1.setSplyname(oemName); -// priceSheet1.setPrtum("件"); -// priceSheet1.setWono("WO-N2510424439-R002"); -// priceSheet1.setSeqid("GXJG-20250228018"); -// priceSheet1.setGxinfo("玻璃封接电化学抛光"); -// priceSheetAllList.add(priceSheet1); -// PriceSheetVO priceSheet2 = new PriceSheetVO(); -// priceSheet2.setPrice("26"); -// priceSheet2.setSplyname(oemName); -// priceSheet2.setPrtum("件"); -// priceSheet2.setSeqid("GXJG-20250228012"); -// priceSheet2.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet2.setPrtlotno("JI和JHT"); -// priceSheet2.setStairflag("单批阶梯价(按单件面积)"); -// priceSheet2.setLower("5"); -// priceSheet2.setUpper("0"); -// priceSheet2.setPrtno("21E6-575-10724-%螺母"); -// priceSheetAllList.add(priceSheet2); -// PriceSheetVO priceSheet3 = new PriceSheetVO(); -// priceSheet3.setPrice("34"); -// priceSheet3.setSplyname(oemName); -// priceSheet3.setPrtum("件"); -// priceSheet3.setSeqid("GXJG-20250228012"); -// priceSheet3.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet3.setPrtlotno("JI和JHT"); -// priceSheet3.setStairflag("单批阶梯价(按单件面积)"); -// priceSheet3.setLower("10"); -// priceSheet3.setUpper("5.00001"); -// priceSheet3.setPrtno("21E6-575-10724-%螺母"); -// priceSheetAllList.add(priceSheet3); -// PriceSheetVO priceSheet4 = new PriceSheetVO(); -// priceSheet4.setPrice("15"); -// priceSheet4.setSplyname(oemName); -// priceSheet4.setPrtum("件"); -// priceSheet4.setSeqid("GXJG-20250228012"); -// priceSheet4.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet4.setPrtlotno("JHT"); -// priceSheet4.setStairflag("非阶梯价"); -// priceSheet4.setPrtno("21E6-575-10724-%螺母"); -// priceSheetAllList.add(priceSheet4); -// PriceSheetVO priceSheet5 = new PriceSheetVO(); -// priceSheet5.setPrice("99"); -// priceSheet5.setSplyname(oemName); -// priceSheet5.setPrtum("件"); -// priceSheet5.setSeqid("GXJG-20250228012"); -// priceSheet5.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet5.setStairflag("非阶梯价"); -// priceSheet5.setPrtno("21E6-575-10724-%螺母"); -// priceSheet5.setRemark("氰化亚金钾380.01-400元/克(未税)"); -// priceSheetAllList.add(priceSheet5); -// PriceSheetVO priceSheet6 = new PriceSheetVO(); -// priceSheet6.setPrice("200"); -// priceSheet6.setSplyname(oemName); -// priceSheet6.setPrtum("件"); -// priceSheet6.setSeqid("GXJG-20250228012"); -// priceSheet6.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet6.setStairflag("非阶梯价"); -// priceSheet6.setPrtno("21E6-575-10724-%螺母"); -// priceSheet6.setRemark("氰化亚金钾400.01-500元/克(未税)"); -// priceSheetAllList.add(priceSheet6); - if (priceSheetAllList.isEmpty()) { //【结算异常】 statementVOList.forEach(statementVO -> { @@ -155,43 +115,43 @@ public class OemStatementServiceImpl extends BaseServiceImpl Map> priceSheetMap = priceSheetAllList.stream().collect(Collectors.groupingBy(PriceSheetVO::getGxinfo)); - /*statementVOList.forEach(statementVO -> { - List matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap); - if (matchedPriceSheets.isEmpty()) { - return; - } - statementVO.setPriceSheetList(matchedPriceSheets); - });*/ //3.为每个结算单匹配报价集合 statementVOList.forEach(statementVO -> { - List matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap); - if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) { - return; - } - statementVO.setPriceSheetList(matchedPriceSheets); - //4.匹配规则,过滤出唯一报价 - //①.匹配车间订单号 - if (ruleWoNo(statementVO, true)) { - return; - } - //②.匹配物料名称和质量等级 - if (rulePartNameAndProdIdent(statementVO)) { - return; - } - //③.匹配金价银价 - if (ruleGoldAndSilverPrices(statementVO, price)) { - return; - } - //④.涂色标、涂色带、涂箭头 - if (ruleColor(statementVO, true)) { - return; - } - //⑤.物料号匹配 - if (ruleGoods(statementVO)) { - return; - } - //⑥.阶梯价匹配 - if (ruleTieredPricing(statementVO, true)) { + try { + List matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap); + if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) { + return; + } + statementVO.setPriceSheetList(matchedPriceSheets); + //4.匹配规则,过滤出唯一报价 + //①.匹配车间订单号 + if (ruleWoNo(statementVO, true)) { + return; + } + //②.匹配物料名称和质量等级 + if (rulePartNameAndProdIdent(statementVO)) { + return; + } + //③.匹配金价银价 + if (ruleGoldAndSilverPrices(statementVO, price)) { + return; + } + //④.涂色标、涂色带、涂箭头 + if (ruleColor(statementVO, true)) { + return; + } + //⑤.物料号匹配 + if (ruleGoods(statementVO)) { + return; + } + //⑥.阶梯价匹配 + if (ruleTieredPricing(statementVO, true)) { + return; + } + }catch (Exception e){ + log.error("结算单处理异常", e); + statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); + statementVO.setMemo("结算处理异常: " + e.getMessage()); return; } }); @@ -217,7 +177,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetAllList = getPriceSheets(oemName); - //假数据测试用 -// List priceSheetAllList = new ArrayList<>(); -// PriceSheetVO priceSheet1 = new PriceSheetVO(); -// priceSheet1.setPrice("60"); -// priceSheet1.setSplyname(oemName); -// priceSheet1.setPrtum("件"); -// priceSheet1.setWono("WO-N2510424439-R002"); -// priceSheet1.setSeqid("GXJG-20250228018"); -// priceSheet1.setGxinfo("玻璃封接电化学抛光"); -// priceSheet1.setStartdat("2026-01-15"); -// priceSheetAllList.add(priceSheet1); -// PriceSheetVO priceSheet2 = new PriceSheetVO(); -// priceSheet2.setPrice("26"); -// priceSheet2.setSplyname(oemName); -// priceSheet2.setPrtum("件"); -// priceSheet2.setSeqid("GXJG-20250228012"); -// priceSheet2.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet2.setPrtlotno("JI和JHT"); -// priceSheet2.setStairflag("单批阶梯价(按单件面积)"); -// priceSheet2.setLower("5"); -// priceSheet2.setUpper("0"); -// priceSheet2.setPrtno("21E6-575-10724-%螺母"); -// priceSheet2.setStartdat("2026-01-15"); -// priceSheetAllList.add(priceSheet2); -// PriceSheetVO priceSheet3 = new PriceSheetVO(); -// priceSheet3.setPrice("34"); -// priceSheet3.setSplyname(oemName); -// priceSheet3.setPrtum("件"); -// priceSheet3.setSeqid("GXJG-20250228012"); -// priceSheet3.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet3.setPrtlotno("JI和JHT"); -// priceSheet3.setStairflag("单批阶梯价(按单件面积)"); -// priceSheet3.setLower("10"); -// priceSheet3.setUpper("5.00001"); -// priceSheet3.setPrtno("21E6-575-10724-%螺母"); -// priceSheet3.setStartdat("2026-01-15"); -// priceSheetAllList.add(priceSheet3); -// PriceSheetVO priceSheet4 = new PriceSheetVO(); -// priceSheet4.setPrice("15"); -// priceSheet4.setSplyname(oemName); -// priceSheet4.setPrtum("件"); -// priceSheet4.setSeqid("GXJG-20250228012"); -// priceSheet4.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet4.setPrtlotno("JHT"); -// priceSheet4.setStairflag("非阶梯价"); -// priceSheet4.setPrtno("21E6-575-10724-%螺母"); -// priceSheet4.setStartdat("2026-01-15"); -// priceSheetAllList.add(priceSheet4); -// PriceSheetVO priceSheet5 = new PriceSheetVO(); -// priceSheet5.setPrice("99"); -// priceSheet5.setSplyname(oemName); -// priceSheet5.setPrtum("件"); -// priceSheet5.setSeqid("GXJG-20250228012"); -// priceSheet5.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet5.setStairflag("非阶梯价"); -// priceSheet5.setPrtno("21E6-575-10724-%螺母"); -// priceSheet5.setRemark("氰化亚金钾380.01-400元/克(未税)"); -// priceSheet5.setStartdat("2026-01-15"); -// priceSheetAllList.add(priceSheet5); -// PriceSheetVO priceSheet6 = new PriceSheetVO(); -// priceSheet6.setPrice("200"); -// priceSheet6.setSplyname(oemName); -// priceSheet6.setPrtum("件"); -// priceSheet6.setSeqid("GXJG-20250228012"); -// priceSheet6.setGxinfo("玻璃封接电镀去氧化皮"); -// priceSheet6.setStairflag("非阶梯价"); -// priceSheet6.setPrtno("21E6-575-10724-%螺母"); -// priceSheet6.setRemark("氰化亚金钾400.01-500元/克(未税)"); -// priceSheet6.setStartdat("2026-01-16"); -// priceSheetAllList.add(priceSheet6); if (priceSheetAllList.isEmpty()) { //【结算异常】 statementVOList.forEach(statementVO -> { @@ -345,40 +235,202 @@ public class OemStatementServiceImpl extends BaseServiceImpl { + try { + List matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap); + if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) { + return; + } + statementVO.setPriceSheetList(matchedPriceSheets); + //4.匹配规则,过滤出唯一报价 + //①.匹配车间订单号 + if (ruleWoNo(statementVO, false)) { + return; + } + //②.匹配物料名称和质量等级 + if (rulePartNameAndProdIdent(statementVO)) { + return; + } + //③.匹配金价银价 + if (ruleGoldAndSilverPrices(statementVO, price)) { + return; + } + //④.涂色标、涂色带、涂箭头 + if (ruleColor(statementVO, false)) { + return; + } + //⑤.物料号匹配 + if (ruleGoods(statementVO)) { + return; + } + //⑥.阶梯价匹配 + if (ruleTieredPricing(statementVO, false)) { + return; + } + } catch (Exception e) { + log.error("结算单处理异常", e); + statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); + statementVO.setMemo("结算处理异常: " + e.getMessage()); + return; + } + }); + } + } + return statementVOS; + } + + /** + * 以外协厂商分组结算 + * + * @param oemName + * @param statementVOList + * @param price + * @param putStoreDate + * @param countSuccess + * @param countError + */ + private void processOemStatements(String oemName, List statementVOList, + BigDecimal price, LocalDate putStoreDate, + AtomicInteger countSuccess, AtomicInteger countError) { + // 1. 查询报价单 + List priceSheetAllList = getPriceSheets(oemName, putStoreDate); + //假数据测试用 +// List priceSheetAllList = new ArrayList<>(); +// PriceSheetVO priceSheet1 = new PriceSheetVO(); +// priceSheet1.setPrice("60"); +// priceSheet1.setSplyname(oemName); +// priceSheet1.setPrtum("件"); +// priceSheet1.setWono("WO-N2510424439-R002"); +// priceSheet1.setSeqid("GXJG-20250228018"); +// priceSheet1.setGxinfo("玻璃封接电化学抛光"); +// priceSheetAllList.add(priceSheet1); +// PriceSheetVO priceSheet2 = new PriceSheetVO(); +// priceSheet2.setPrice("26"); +// priceSheet2.setSplyname(oemName); +// priceSheet2.setPrtum("件"); +// priceSheet2.setSeqid("GXJG-20250228012"); +// priceSheet2.setGxinfo("玻璃封接电镀去氧化皮"); +// priceSheet2.setPrtlotno("JI和JHT"); +// priceSheet2.setStairflag("单批阶梯价(按单件面积)"); +// priceSheet2.setLower("5"); +// priceSheet2.setUpper("0"); +// priceSheet2.setPrtno("21E6-575-10724-%螺母"); +// priceSheetAllList.add(priceSheet2); +// PriceSheetVO priceSheet3 = new PriceSheetVO(); +// priceSheet3.setPrice("34"); +// priceSheet3.setSplyname(oemName); +// priceSheet3.setPrtum("件"); +// priceSheet3.setSeqid("GXJG-20250228012"); +// priceSheet3.setGxinfo("玻璃封接电镀去氧化皮"); +// priceSheet3.setPrtlotno("JI和JHT"); +// priceSheet3.setStairflag("单批阶梯价(按单件面积)"); +// priceSheet3.setLower("10"); +// priceSheet3.setUpper("5.00001"); +// priceSheet3.setPrtno("21E6-575-10724-%螺母"); +// priceSheetAllList.add(priceSheet3); +// PriceSheetVO priceSheet4 = new PriceSheetVO(); +// priceSheet4.setPrice("15"); +// priceSheet4.setSplyname(oemName); +// priceSheet4.setPrtum("件"); +// priceSheet4.setSeqid("GXJG-20250228012"); +// priceSheet4.setGxinfo("玻璃封接电镀去氧化皮"); +// priceSheet4.setPrtlotno("JHT"); +// priceSheet4.setStairflag("非阶梯价"); +// priceSheet4.setPrtno("21E6-575-10724-%螺母"); +// priceSheetAllList.add(priceSheet4); +// PriceSheetVO priceSheet5 = new PriceSheetVO(); +// priceSheet5.setPrice("99"); +// priceSheet5.setSplyname(oemName); +// priceSheet5.setPrtum("件"); +// priceSheet5.setSeqid("GXJG-20250228012"); +// priceSheet5.setGxinfo("玻璃封接电镀去氧化皮"); +// priceSheet5.setStairflag("非阶梯价"); +// priceSheet5.setPrtno("21E6-575-10724-%螺母"); +// priceSheet5.setRemark("氰化亚金钾380.01-400元/克(未税)"); +// priceSheetAllList.add(priceSheet5); +// PriceSheetVO priceSheet6 = new PriceSheetVO(); +// priceSheet6.setPrice("200"); +// priceSheet6.setSplyname(oemName); +// priceSheet6.setPrtum("件"); +// priceSheet6.setSeqid("GXJG-20250228012"); +// priceSheet6.setGxinfo("玻璃封接电镀去氧化皮"); +// priceSheet6.setStairflag("非阶梯价"); +// priceSheet6.setPrtno("21E6-575-10724-%螺母"); +// priceSheet6.setRemark("氰化亚金钾400.01-500元/克(未税)"); +// priceSheetAllList.add(priceSheet6); + if (priceSheetAllList.isEmpty()) { + // 【结算异常】 + statementVOList.forEach(statementVO -> { + statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); + statementVO.setMemo(String.format("外协厂商【%s】匹配无报价记录", oemName)); + }); + } else { + // 2. 工序分组Map<工序, 报价列表> + Map> priceSheetMap = priceSheetAllList.stream() + .collect(Collectors.groupingBy(PriceSheetVO::getGxinfo)); + + // 3. 为每个结算单匹配报价集合 + statementVOList.forEach(statementVO -> { + try { List matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap); if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) { return; } statementVO.setPriceSheetList(matchedPriceSheets); - //4.匹配规则,过滤出唯一报价 - //①.匹配车间订单号 - if (ruleWoNo(statementVO, false)) { + + // 4. 匹配规则,过滤出唯一报价 + // ①. 匹配车间订单号 + if (ruleWoNo(statementVO, true)) { return; } - //②.匹配物料名称和质量等级 + // ②. 匹配物料名称和质量等级 if (rulePartNameAndProdIdent(statementVO)) { return; } - //③.匹配金价银价 + // ③. 匹配金价银价 if (ruleGoldAndSilverPrices(statementVO, price)) { return; } - //④.涂色标、涂色带、涂箭头 - if (ruleColor(statementVO, false)) { + // ④. 涂色标、涂色带、涂箭头 + if (ruleColor(statementVO, true)) { return; } - //⑤.物料号匹配 + // ⑤. 物料号匹配 if (ruleGoods(statementVO)) { return; } - //⑥.阶梯价匹配 - if (ruleTieredPricing(statementVO, false)) { + // ⑥. 阶梯价匹配 + if (ruleTieredPricing(statementVO, true)) { return; } - }); - } + } catch (Exception e) { + log.error("结算单处理异常", e); + statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); + statementVO.setMemo("结算处理异常: " + e.getMessage()); + } + }); + } + + // 5. 批量保存 + List saves = statementVOList.stream() + .map(statementVO -> { + // 统计数量 + if (Objects.equals(OemStatementEntity.IN_SETTLEMENT, statementVO.getRosStatus())) { + countSuccess.incrementAndGet(); + } else if (Objects.equals(OemStatementEntity.ERR_SETTLEMENT, statementVO.getRosStatus())) { + countError.incrementAndGet(); + } + OemStatementEntity entity = new OemStatementEntity(); + BeanUtils.copyProperties(statementVO, entity); + entity.setUpdateTime(new Date()); + entity.setIsDeleted(0); + return entity; + }) + .collect(Collectors.toList()); + + // 批量插入或更新 + if (!saves.isEmpty()) { + baseMapper.insertOrUpdate(saves); } - return statementVOS; } @Override @@ -468,17 +520,22 @@ public class OemStatementServiceImpl extends BaseServiceImpl getPriceSheets(String oemName, LocalDate putStoreDate) { - PriceSheetQuery query = new PriceSheetQuery(); - query.setOcName(oemName); - query.setInDateStart(putStoreDate); - query.setInDateEnd(putStoreDate); + try { + PriceSheetQuery query = new PriceSheetQuery(); + query.setOcName(oemName); + query.setInDateStart(putStoreDate); + query.setInDateEnd(putStoreDate); - R> pageR = erpDataOemClient.priceSheetData(query, new Query() {{ - setSize(99999); - }}); + R> pageR = erpDataOemClient.priceSheetData(query, new Query() {{ + setSize(99999); + }}); - if (pageR != null && pageR.getData() != null) { - return pageR.getData().getRecords(); + if (pageR != null && pageR.getData() != null) { + return pageR.getData().getRecords(); + } + } catch (Exception e) { + log.error("获取报价单失败,失败原因:{}", e); + return Collections.emptyList(); } return Collections.emptyList(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java index be38760c..d476e8ec 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java @@ -10,6 +10,7 @@ import org.springblade.desk.oem.pojo.vo.OemApprovalVO; import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import java.util.List; import java.util.Map; /** @@ -48,10 +49,10 @@ public interface IWorkOrderRunService extends BaseService { /** * 外协审批 * - * @param oemApproval + * @param oemApprovals * @return */ - R approval(OemApproval oemApproval) throws Exception; + R batchApproval(List oemApprovals) throws Exception; /** * 转外协厂家 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java index 7e40aa38..cf405e92 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java @@ -46,6 +46,7 @@ import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.enums.DictEnum; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.imageio.ImageIO; @@ -144,9 +145,35 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl approvals) { + + for (int i = 0; i < approvals.size(); i++) { + OemApproval approval = approvals.get(i); + + try { + R r = singleApprovalInNewTransaction(approval); + } catch (Exception e) { + log.error(String.format("审批失败,单据ID: {}", approval.getWorkOrderRunId()), e); + } + } + + return R.success("操作完成"); + } + + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) + public R singleApprovalInNewTransaction(OemApproval oemApproval) throws Exception { + return approval(oemApproval); + } + + /** + * 审批 + * + * @param oemApproval + * @return + * @throws Exception + */ + private R approval(OemApproval oemApproval) throws Exception { WorkOrderRun workOrderRun = workOrderRunMapper.selectById(oemApproval.getWorkOrderRunId()); WorkOrder wo = workOrderMapper.selectById(workOrderRun.getWoId()); YieldOrder yo = yieldOrderMapper.selectById(wo.getYoId()); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index bc8feb94..eb6bdd6e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -1733,6 +1733,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl