pangyang 4 weeks ago
commit a323d9d5ea
  1. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java
  2. 443
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  3. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  4. 31
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  5. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java

@ -104,15 +104,14 @@ public class OemOrderController extends BladeController {
IPage<OemApprovalVO> pages = workOrderRunService.queryOemApproval(Condition.getPage(query), approvalQuery); IPage<OemApprovalVO> pages = workOrderRunService.queryOemApproval(Condition.getPage(query), approvalQuery);
return R.data(pages); return R.data(pages);
} }
/** /**
* 审批 * 批量审批
*/ */
@PostMapping("/approval") @PostMapping("/batchApproval")
@ApiOperationSupport(order = 4) @ApiOperationSupport(order = 4)
@Operation(summary = "审批", description = "") @Operation(summary = "批量审批", description = "")
public R approval(@Valid @RequestBody OemApproval oemApproval) throws Exception { public R batchApproval(@Valid @RequestBody List<OemApproval> oemApprovals) throws Exception {
return workOrderRunService.approval(oemApproval); return workOrderRunService.batchApproval(oemApprovals);
} }
/** /**
@ -121,13 +120,14 @@ public class OemOrderController extends BladeController {
@GetMapping("/prepareOemBatches") @GetMapping("/prepareOemBatches")
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@Operation(summary = "外协分批准备数据", description = "worId") @Operation(summary = "外协分批准备数据", description = "worId")
public R<WorkOrderVO> detail(@PathVariable Long worId) { public R<WorkOrderVO> prepareOemBatches(@Parameter(description = "车间订单运行记录主键ID", required = true) @RequestParam Long worId) {
WorkOrderRun oldWorkOrderRun = workOrderRunService.getById(worId); WorkOrderRun oldWorkOrderRun = workOrderRunService.getById(worId);
WorkOrder oldWorkOrder = workOrderService.getById(oldWorkOrderRun.getWoId()); WorkOrder oldWorkOrder = workOrderService.getById(oldWorkOrderRun.getWoId());
YieldOrder yieldOrder = yieldOrderService.getById(oldWorkOrder.getYoId()); YieldOrder yieldOrder = yieldOrderService.getById(oldWorkOrder.getYoId());
// 创建新的分批订单对象 // 创建新的分批订单对象
WorkOrder newWorkOrder = new WorkOrder(); WorkOrder newWorkOrder = new WorkOrder();
// 复制原订单基本信息 // 复制原订单基本信息
newWorkOrder.setId(oldWorkOrder.getId());
newWorkOrder.setYoId(oldWorkOrder.getYoId()); newWorkOrder.setYoId(oldWorkOrder.getYoId());
newWorkOrder.setWoCode(workOrderService.nextCode(yieldOrder.getYpCode())); newWorkOrder.setWoCode(workOrderService.nextCode(yieldOrder.getYpCode()));
newWorkOrder.setCardNo(workOrderService.nextCardNo(yieldOrder.getYpCode(), oldWorkOrder.getCardNo())); newWorkOrder.setCardNo(workOrderService.nextCardNo(yieldOrder.getYpCode(), oldWorkOrder.getCardNo()));

@ -33,6 +33,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -73,7 +74,31 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
AtomicInteger countError = new AtomicInteger(0); AtomicInteger countError = new AtomicInteger(0);
//1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表> //1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表>
Map<String, List<StatementVO>> oemAndStatementMap = statementVOS.stream().collect(Collectors.groupingBy(StatementVO::getOcName)); Map<String, List<StatementVO>> oemAndStatementMap = statementVOS.stream().collect(Collectors.groupingBy(StatementVO::getOcName));
// 创建CompletableFuture列表
List<CompletableFuture<Void>> futures = new ArrayList<>();
for (Map.Entry<String, List<StatementVO>> listEntry : oemAndStatementMap.entrySet()) { for (Map.Entry<String, List<StatementVO>> listEntry : oemAndStatementMap.entrySet()) {
CompletableFuture<Void> 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<String, List<StatementVO>> listEntry : oemAndStatementMap.entrySet()) {
//外协厂商下全部需要结算的结算单 //外协厂商下全部需要结算的结算单
List<StatementVO> statementVOList = listEntry.getValue(); List<StatementVO> statementVOList = listEntry.getValue();
@ -81,71 +106,6 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String oemName = listEntry.getKey(); String oemName = listEntry.getKey();
List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName, putStoreDate); List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName, putStoreDate);
//假数据测试用
// List<PriceSheetVO> 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()) { if (priceSheetAllList.isEmpty()) {
//【结算异常】 //【结算异常】
statementVOList.forEach(statementVO -> { statementVOList.forEach(statementVO -> {
@ -155,43 +115,43 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
} else { } else {
//工序分组Map<工序, 报价列表> //工序分组Map<工序, 报价列表>
Map<String, List<PriceSheetVO>> priceSheetMap = priceSheetAllList.stream().collect(Collectors.groupingBy(PriceSheetVO::getGxinfo)); Map<String, List<PriceSheetVO>> priceSheetMap = priceSheetAllList.stream().collect(Collectors.groupingBy(PriceSheetVO::getGxinfo));
/*statementVOList.forEach(statementVO -> {
List<PriceSheetVO> matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap);
if (matchedPriceSheets.isEmpty()) {
return;
}
statementVO.setPriceSheetList(matchedPriceSheets);
});*/
//3.为每个结算单匹配报价集合 //3.为每个结算单匹配报价集合
statementVOList.forEach(statementVO -> { statementVOList.forEach(statementVO -> {
List<PriceSheetVO> matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap); try {
if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) { List<PriceSheetVO> matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap);
return; if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) {
} return;
statementVO.setPriceSheetList(matchedPriceSheets); }
//4.匹配规则,过滤出唯一报价 statementVO.setPriceSheetList(matchedPriceSheets);
//①.匹配车间订单号 //4.匹配规则,过滤出唯一报价
if (ruleWoNo(statementVO, true)) { //①.匹配车间订单号
return; if (ruleWoNo(statementVO, true)) {
} return;
//②.匹配物料名称和质量等级 }
if (rulePartNameAndProdIdent(statementVO)) { //②.匹配物料名称和质量等级
return; if (rulePartNameAndProdIdent(statementVO)) {
} return;
//③.匹配金价银价 }
if (ruleGoldAndSilverPrices(statementVO, price)) { //③.匹配金价银价
return; if (ruleGoldAndSilverPrices(statementVO, price)) {
} return;
//④.涂色标、涂色带、涂箭头 }
if (ruleColor(statementVO, true)) { //④.涂色标、涂色带、涂箭头
return; if (ruleColor(statementVO, true)) {
} return;
//⑤.物料号匹配 }
if (ruleGoods(statementVO)) { //⑤.物料号匹配
return; if (ruleGoods(statementVO)) {
} return;
//⑥.阶梯价匹配 }
if (ruleTieredPricing(statementVO, true)) { //⑥.阶梯价匹配
if (ruleTieredPricing(statementVO, true)) {
return;
}
}catch (Exception e){
log.error("结算单处理异常", e);
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo("结算处理异常: " + e.getMessage());
return; return;
} }
}); });
@ -217,7 +177,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return R.data(Map.of( return R.data(Map.of(
"success", countSuccess, "success", countSuccess,
"error", countError "error", countError
)); ));*/
} }
@ -251,76 +211,6 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String oemName = listEntry.getKey(); String oemName = listEntry.getKey();
List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName); List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName);
//假数据测试用
// List<PriceSheetVO> 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()) { if (priceSheetAllList.isEmpty()) {
//【结算异常】 //【结算异常】
statementVOList.forEach(statementVO -> { statementVOList.forEach(statementVO -> {
@ -345,40 +235,202 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
)); ));
//3.为每个结算单匹配报价集合 //3.为每个结算单匹配报价集合
statementVOList.forEach(statementVO -> { statementVOList.forEach(statementVO -> {
try {
List<PriceSheetVO> 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<StatementVO> statementVOList,
BigDecimal price, LocalDate putStoreDate,
AtomicInteger countSuccess, AtomicInteger countError) {
// 1. 查询报价单
List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName, putStoreDate);
//假数据测试用
// List<PriceSheetVO> 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<String, List<PriceSheetVO>> priceSheetMap = priceSheetAllList.stream()
.collect(Collectors.groupingBy(PriceSheetVO::getGxinfo));
// 3. 为每个结算单匹配报价集合
statementVOList.forEach(statementVO -> {
try {
List<PriceSheetVO> matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap); List<PriceSheetVO> matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap);
if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) { if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) {
return; return;
} }
statementVO.setPriceSheetList(matchedPriceSheets); statementVO.setPriceSheetList(matchedPriceSheets);
//4.匹配规则,过滤出唯一报价
//①.匹配车间订单号 // 4. 匹配规则,过滤出唯一报价
if (ruleWoNo(statementVO, false)) { // ①. 匹配车间订单号
if (ruleWoNo(statementVO, true)) {
return; return;
} }
//②.匹配物料名称和质量等级 // ②. 匹配物料名称和质量等级
if (rulePartNameAndProdIdent(statementVO)) { if (rulePartNameAndProdIdent(statementVO)) {
return; return;
} }
//③.匹配金价银价 // ③. 匹配金价银价
if (ruleGoldAndSilverPrices(statementVO, price)) { if (ruleGoldAndSilverPrices(statementVO, price)) {
return; return;
} }
//④.涂色标、涂色带、涂箭头 // ④. 涂色标、涂色带、涂箭头
if (ruleColor(statementVO, false)) { if (ruleColor(statementVO, true)) {
return; return;
} }
//⑤.物料号匹配 // ⑤. 物料号匹配
if (ruleGoods(statementVO)) { if (ruleGoods(statementVO)) {
return; return;
} }
//⑥.阶梯价匹配 // ⑥. 阶梯价匹配
if (ruleTieredPricing(statementVO, false)) { if (ruleTieredPricing(statementVO, true)) {
return; return;
} }
}); } catch (Exception e) {
} log.error("结算单处理异常", e);
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo("结算处理异常: " + e.getMessage());
}
});
}
// 5. 批量保存
List<OemStatementEntity> 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 @Override
@ -468,17 +520,22 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
* 获取报价单列表 * 获取报价单列表
*/ */
private List<PriceSheetVO> getPriceSheets(String oemName, LocalDate putStoreDate) { private List<PriceSheetVO> getPriceSheets(String oemName, LocalDate putStoreDate) {
PriceSheetQuery query = new PriceSheetQuery(); try {
query.setOcName(oemName); PriceSheetQuery query = new PriceSheetQuery();
query.setInDateStart(putStoreDate); query.setOcName(oemName);
query.setInDateEnd(putStoreDate); query.setInDateStart(putStoreDate);
query.setInDateEnd(putStoreDate);
R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{ R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{
setSize(99999); setSize(99999);
}}); }});
if (pageR != null && pageR.getData() != null) { if (pageR != null && pageR.getData() != null) {
return pageR.getData().getRecords(); return pageR.getData().getRecords();
}
} catch (Exception e) {
log.error("获取报价单失败,失败原因:{}", e);
return Collections.emptyList();
} }
return Collections.emptyList(); return Collections.emptyList();
} }

@ -10,6 +10,7 @@ import org.springblade.desk.oem.pojo.vo.OemApprovalVO;
import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.oem.pojo.vo.OemOrderVO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun; import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -48,10 +49,10 @@ public interface IWorkOrderRunService extends BaseService<WorkOrderRun> {
/** /**
* 外协审批 * 外协审批
* *
* @param oemApproval * @param oemApprovals
* @return * @return
*/ */
R approval(OemApproval oemApproval) throws Exception; R batchApproval(List<OemApproval> oemApprovals) throws Exception;
/** /**
* 转外协厂家 * 转外协厂家

@ -46,6 +46,7 @@ import org.springblade.system.pojo.entity.User;
import org.springblade.system.pojo.enums.DictEnum; import org.springblade.system.pojo.enums.DictEnum;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
@ -144,9 +145,35 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return R.fail("未找到相关外协订单"); return R.fail("未找到相关外协订单");
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public R approval(OemApproval oemApproval) throws Exception { public R batchApproval(List<OemApproval> 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()); WorkOrderRun workOrderRun = workOrderRunMapper.selectById(oemApproval.getWorkOrderRunId());
WorkOrder wo = workOrderMapper.selectById(workOrderRun.getWoId()); WorkOrder wo = workOrderMapper.selectById(workOrderRun.getWoId());
YieldOrder yo = yieldOrderMapper.selectById(wo.getYoId()); YieldOrder yo = yieldOrderMapper.selectById(wo.getYoId());

@ -1733,6 +1733,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public R inOemBatches(Long oldWoId, InBatchesDTO inBatchesDTO, Long userId) { public R inOemBatches(Long oldWoId, InBatchesDTO inBatchesDTO, Long userId) {
WorkOrder oldWo = this.getById(oldWoId); WorkOrder oldWo = this.getById(oldWoId);
WorkOrder newWo = this.addWorkOrderAndYieldOrder(oldWo, inBatchesDTO, true); WorkOrder newWo = this.addWorkOrderAndYieldOrder(oldWo, inBatchesDTO, true);

Loading…
Cancel
Save