2 天以前 f350465db70d6f9db9494483ee0cec7793a9007b
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -18,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;
@@ -63,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;
@@ -280,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);//完成数量
@@ -316,6 +319,7 @@
                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();
@@ -329,6 +333,8 @@
                }
            }
            // 排产下达后自动触发第一道需质检工序的过程检验
            productionProductMainService.preGenerateQualityInspectForOrder(productOrder.getId());
            productOrder.setRouteId(processRoute.getId());
            productOrderMapper.updateById(productOrder);
        }
@@ -363,59 +369,56 @@
                // 查询关联的工单ID
                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());
                    // 查询关联的生产主表ID
                    List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
                            new LambdaQueryWrapper<ProductionProductMain>()
                                    .in(ProductionProductMain::getWorkOrderId, workOrderIds)
                // 查询关联的生产主表ID
                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>()