From f350465db70d6f9db9494483ee0cec7793a9007b Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 19 八月 2026 17:47:57 +0800
Subject: [PATCH] feat(approve): 实现审批流程或签会签功能并优化数据库配置
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 125 ++++++++++++++++++++++++-----------------
1 files changed, 73 insertions(+), 52 deletions(-)
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 8b84e12..e8de010 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -1,11 +1,14 @@
package com.ruoyi.sales.service.impl;
+import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.ProductModelAnticlockwiseDto;
+import com.ruoyi.basic.service.IProductModelService;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.framework.web.domain.R;
@@ -15,6 +18,7 @@
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductProcessService;
import com.ruoyi.production.service.ProductWorkOrderService;
+import com.ruoyi.production.service.ProductionProductMainService;
import com.ruoyi.production.service.impl.ProductOrderServiceImpl;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
@@ -60,8 +64,10 @@
private final ProductWorkOrderService productWorkOrderService;
private final ProductProcessService productProcessService;
+ private ProductionProductMainService productionProductMainService;
private SalesLedgerProductMapper salesLedgerProductMapper;
private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+ private ProductionReportPersonMapper productionReportPersonMapper;
private SalesLedgerMapper salesLedgerMapper;
private PurchaseLedgerMapper purchaseLedgerMapper;
private ProductOrderMapper productOrderMapper;
@@ -84,6 +90,8 @@
private StockInventoryMapper stockInventoryMapper;
@Autowired
private ProductOrderServiceImpl productOrderServiceImpl;
+ @Autowired
+ private IProductModelService productModelService;
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -194,6 +202,16 @@
@Override
@Transactional(rollbackFor = Exception.class)
public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
+ //鍏堟煡璇㈠熀纭�琛ㄦ湁娌℃湁
+ ProductModelAnticlockwiseDto productModelAnticlockwiseDto = new ProductModelAnticlockwiseDto();
+ productModelAnticlockwiseDto.setProductName(salesLedgerProduct.getProductCategory());
+ productModelAnticlockwiseDto.setModel(salesLedgerProduct.getSpecificationModel());
+ productModelAnticlockwiseDto.setUnit(salesLedgerProduct.getUnit());
+ productModelAnticlockwiseDto.setSubUnit(salesLedgerProduct.getUnit());
+ productModelAnticlockwiseDto.setId(salesLedgerProduct.getId());
+ Long l = productModelService.productModelAnticlockwise(productModelAnticlockwiseDto);
+ salesLedgerProduct.setProductModelId(l);
+
// 寰呭洖娆撅紝浠樻
if (salesLedgerProduct.getType().equals(1)) {
salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal()));
@@ -265,7 +283,7 @@
productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
productOrder.setProductModelId(salesLedgerProduct.getProductModelId());
productOrder.setSaleLedgerProductId(salesLedgerProduct.getId());
- String string = productOrderServiceImpl.generateNextOrderByContractNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")), salesLedger.getSalesContractNo());
+ String string = productOrderServiceImpl.generateNextOrderByContractNo(salesLedger.getSalesContractNo());
productOrder.setNpsNo(string);
productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
@@ -286,11 +304,14 @@
//鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
- Map<Long, ProductProcess> productProcessMap = productProcessService
- .list(new LambdaQueryWrapper<ProductProcess>().in(ProductProcess::getId, processRouteItems.stream().map(ProcessRouteItem::getProcessId).collect(Collectors.toList())))
- .stream()
- .collect(Collectors.toMap(ProductProcess::getId, productProcess -> productProcess));
+ Map<Long, ProductProcess> productProcessMap = new HashMap<>();
+ if(CollUtil.isNotEmpty(processRouteItems)){
+ productProcessMap = productProcessService
+ .list(new LambdaQueryWrapper<ProductProcess>().in(ProductProcess::getId, processRouteItems.stream().map(ProcessRouteItem::getProcessId).collect(Collectors.toList())))
+ .stream()
+ .collect(Collectors.toMap(ProductProcess::getId, productProcess -> productProcess));
+ }
for (ProcessRouteItem processRouteItem : processRouteItems) {
ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
@@ -298,19 +319,22 @@
productProcessRouteItem.setProductOrderId(productOrder.getId());
productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+ productProcessRouteItem.setIsQuality(processRouteItem.getIsQuality());
int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
if (insert > 0) {
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
- productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder(null, productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(),new ProductProcess()).getName(), productOrder.getNpsNo()));
+ productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder( productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(),new ProductProcess()).getName(), productOrder.getNpsNo()));
productWorkOrder.setStatus(1);
productWorkOrderMapper.insert(productWorkOrder);
}
}
+ // 鎺掍骇涓嬭揪鍚庤嚜鍔ㄨЕ鍙戠涓�閬撻渶璐ㄦ宸ュ簭鐨勮繃绋嬫楠�
+ productionProductMainService.preGenerateQualityInspectForOrder(productOrder.getId());
productOrder.setRouteId(processRoute.getId());
productOrderMapper.updateById(productOrder);
}
@@ -345,59 +369,56 @@
// 鏌ヨ鍏宠仈鐨勫伐鍗旾D
List<ProductWorkOrder> workOrders = productWorkOrderMapper.selectList(
new LambdaQueryWrapper<ProductWorkOrder>()
- .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)
+ .in(ProductWorkOrder::getProductOrderId, orderIds)
);
- if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(workOrders)) {
- List<Long> workOrderIds = workOrders.stream()
- .map(ProductWorkOrder::getId)
- .collect(Collectors.toList());
+ List<Long> workOrderIds = workOrders.stream()
+ .map(ProductWorkOrder::getId)
+ .collect(Collectors.toList());
- // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
- List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
- new LambdaQueryWrapper<ProductionProductMain>()
- .in(ProductionProductMain::getWorkOrderId, workOrderIds)
+ // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
+ List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
+ new LambdaQueryWrapper<ProductionProductMain>()
+ .in(ProductionProductMain::getWorkOrderId, workOrderIds)
+ );
+ List<Long> productMainIds = productMains.stream()
+ .map(ProductionProductMain::getId)
+ .collect(Collectors.toList());
+
+ // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(productMainIds)) {
+ productionProductOutputMapper.deleteByProductMainIds(productMainIds);
+ productionProductInputMapper.deleteByProductMainIds(productMainIds);
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+ new LambdaQueryWrapper<QualityInspect>()
+ .in(QualityInspect::getProductMainId, productMainIds)
);
- List<Long> productMainIds = productMains.stream()
- .map(ProductionProductMain::getId)
- .collect(Collectors.toList());
-
- // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
- if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(productMainIds)) {
- productionProductOutputMapper.deleteByProductMainIds(productMainIds);
- productionProductInputMapper.deleteByProductMainIds(productMainIds);
- List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
- new LambdaQueryWrapper<QualityInspect>()
- .in(QualityInspect::getProductMainId, productMainIds)
- );
- //鍒犻櫎鍑哄簱璁板綍
- for (Long productMainId : productMainIds) {
- //鍒犻櫎鐢熶骇鍑哄簱璁板綍
- stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
- //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
- stockUtils.deleteStockInRecord(productMainId, StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
+ qualityInspects.forEach(qualityInspect -> {
+ //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
+ if (qualityInspect.getInspectState() == 1) {
+ throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
}
- qualityInspects.forEach(qualityInspect -> {
- //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
- if (qualityInspect.getInspectState() == 1) {
- throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
- }
- });
- qualityInspectMapper.deleteByProductMainIds(productMainIds);
- salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
- .in(SalesLedgerProductionAccounting::getProductMainId, productMainIds));
+ });
+ //鍒犻櫎鍑哄叆搴撹褰�
+ for (Long productMainId : productMainIds) {
+ stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
+ stockUtils.deleteStockInRecord(productMainId, StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
}
-
- // 鍒犻櫎鐢熶骇涓昏〃鏁版嵁
- productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
-
- // 鍒犻櫎宸ュ崟鏁版嵁
- productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
- .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
+ qualityInspectMapper.deleteByProductMainIds(productMainIds);
+ salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
+ .in(SalesLedgerProductionAccounting::getProductMainId, productMainIds));
+ productionReportPersonMapper.delete(new LambdaQueryWrapper<ProductionReportPerson>()
+ .in(ProductionReportPerson::getProductMainId, productMainIds));
}
+
+ productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
+ // 娓呯悊鎺掍骇棰勭敓鎴愮殑璐ㄦ鍗�
+ productionProductMainService.cleanPreGeneratedQualityInspects(workOrderIds);
+
+ productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
+ .in(ProductWorkOrder::getProductOrderId, orderIds));
+ productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
+ .in(ProductProcessRouteItem::getId, routeItemIds));
}
- // 鎵归噺鍒犻櫎processRouteItem
- productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
- .in(ProductProcessRouteItem::getProductOrderId, orderIds));
// 鎵归噺鍒犻櫎productProcessRoute
productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
--
Gitblit v1.9.3