From c247f5bf64c98595cc7e4efc9e1ae7ff1df79c11 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 23 四月 2026 14:05:32 +0800
Subject: [PATCH] refactor(swagger): 迁移Swagger注解到OpenAPI 3.0

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |  447 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 314 insertions(+), 133 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index f100c7f..ff43daf 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -2,65 +2,71 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.basic.mapper.ProductMapper;
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Product;
 import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.bean.BeanUtils;
-import com.ruoyi.production.controller.ProductWorkOrderController;
-import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.bean.dto.ProductStructureDto;
+import com.ruoyi.production.bean.dto.ProductionProductMainDto;
+import com.ruoyi.production.enums.ProductOrderStatusEnum;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductionProductMainService;
-import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.mapper.QualityInspectParamMapper;
-import com.ruoyi.quality.mapper.QualityTestStandardMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
-import com.ruoyi.quality.pojo.QualityInspectParam;
-import com.ruoyi.quality.pojo.QualityTestStandard;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.quality.mapper.*;
+import com.ruoyi.quality.pojo.*;
+import com.ruoyi.technology.mapper.TechnologyOperationMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
+import com.ruoyi.technology.pojo.TechnologyOperation;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.ruoyi.production.mapper.ProductionProductMainMapper;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
 public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
 
-    private ProductionProductMainMapper productionProductMainMapper;
-
-    private ProductWorkOrderController productWorkOrderController;
-
-    private ProductWorkOrderMapper productWorkOrderMapper;
-
-    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
-
-    private ProductionProductOutputMapper productionProductOutputMapper;
-
-    private ProcessRouteItemMapper processRouteItemMapper;
-
-    private ProductModelMapper productModelMapper;
-
-    private QualityInspectMapper qualityInspectMapper;
-
-    private ProductProcessMapper productProcessMapper;
-
-    private ProductMapper productMapper;
-
-    private QualityTestStandardMapper qualityTestStandardMapper;
-
-    private QualityInspectParamMapper qualityInspectParamMapper;
-
+    private final ProductionProductMainMapper productionProductMainMapper;
+    private final SysUserMapper userMapper;
+    private final ProductionProductOutputMapper productionProductOutputMapper;
+    private final ProductModelMapper productModelMapper;
+    private final QualityInspectMapper qualityInspectMapper;
+    private final QualityUnqualifiedMapper qualityUnqualifiedMapper;
+    private final ProductMapper productMapper;
+    private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
+    private final QualityTestStandardMapper qualityTestStandardMapper;
+    private final QualityInspectParamMapper qualityInspectParamMapper;
+    private final ProductionProductInputMapper productionProductInputMapper;
+    private final ProductionAccountMapper productionAccountMapper;
+    private final ProductionOperationTaskMapper productionOperationTaskMapper;
+    private final ProductionOrderMapper productionOrderMapper;
+    private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
+    private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
+    private final TechnologyOperationMapper technologyOperationMapper;
+    private final StockUtils stockUtils;
 
     @Override
     public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) {
@@ -68,122 +74,297 @@
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
+    public IPage<ProductionProductMainDto> pageProductionProductMain(Page page, ProductionProductMainDto productionProductMainDto) {
+        return listPageProductionProductMainDto(page, productionProductMainDto);
+    }
+
+    @Override
+    public ProductionProductMainDto getProductionProductMainInfo(Long id) {
+        return productionProductMainMapper.listPageProductionProductMainDto(new Page<>(1, 1), new ProductionProductMainDto() {{
+            setId(id);
+        }}).getRecords().stream().findFirst().orElse(null);
+    }
+
+    @Override
     public Boolean addProductMain(ProductionProductMainDto dto) {
-        if (dto == null) {
-            throw new RuntimeException("鍙傛暟涓嶈兘涓虹┖");
+        if (dto.getProductionOperationTaskId() == null) {
+            throw new ServiceException("璇蜂紶鍏ョ敓浜у伐鍗旾D");
+        }
+        return addProductMainByProductionTask(dto);
+    }
+
+    @Override
+    public Boolean saveProductionProductMain(ProductionProductMainDto productionProductMainDto) {
+        return addProductMain(productionProductMainDto);
+    }
+
+    @Override
+    public Boolean removeProductMain(Long id) {
+        ProductionProductMain currentMain = productionProductMainMapper.selectById(id);
+        if (currentMain == null) {
+            return true;
+        }
+        return removeProductMainByProductionTask(currentMain);
+    }
+
+    private Boolean addProductMainByProductionTask(ProductionProductMainDto dto) {
+        // 鎶ュ伐浠ヨ鍗曞伐搴忓揩鐓т负鍑嗭紝閬垮厤宸ヨ壓涓绘暟鎹彉鏇村悗褰卞搷鍘嗗彶宸ュ崟鎵ц銆�
+        SysUser user = userMapper.selectUserById(dto.getUserId());
+        ProductionOperationTask productionOperationTask = productionOperationTaskMapper.selectById(dto.getProductionOperationTaskId());
+        if (productionOperationTask == null) {
+            throw new ServiceException("鐢熶骇宸ュ崟涓嶅瓨鍦�");
+        }
+        ProductionOrderRoutingOperation routingOperation = productionOrderRoutingOperationMapper.selectById(productionOperationTask.getTechnologyRoutingOperationId());
+        if (routingOperation == null) {
+            throw new ServiceException("璁㈠崟宸ヨ壓璺嚎宸ュ簭涓嶅瓨鍦�");
+        }
+        ProductionOrder productionOrder = productionOrderMapper.selectById(productionOperationTask.getProductionOrderId());
+        if (productionOrder == null) {
+            throw new ServiceException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
+        }
+        TechnologyRoutingOperation technologyRoutingOperation = technologyRoutingOperationMapper.selectById(routingOperation.getTechnologyRoutingOperationId());
+        TechnologyOperation technologyOperation = technologyRoutingOperation == null ? null
+                : technologyOperationMapper.selectById(technologyRoutingOperation.getTechnologyOperationId());
+        ProductModel productModel = productModelMapper.selectById(
+                routingOperation.getProductModelId() != null ? routingOperation.getProductModelId() : productionOrder.getProductModelId());
+        if (productModel == null) {
+            throw new ServiceException("浜у搧瑙勬牸涓嶅瓨鍦�");
         }
 
-//        if (dto.isReportWork()) {
-//            // 鏇存柊閫昏緫 - 鍙洿鏂版暟閲�
-//            QueryWrapper<ProductionProductOutput> outputWrapper = new QueryWrapper<>();
-//            outputWrapper.eq("product_main_id", dto.getId());
-//
-//            ProductionProductOutput output = productionProductOutputMapper.selectOne(outputWrapper);
-//            if (output == null) {
-//                throw new RuntimeException("浜у嚭璁板綍涓嶅瓨鍦�");
-//            }
-//
-//            // 鍙洿鏂版暟閲�
-//            if (dto.getQuantity() != null) {
-//                output.setQuantity(dto.getQuantity());
-//                productionProductOutputMapper.updateById(output);
-//            }
-//            return true;
-//        }
-
-        // 鏂板閫昏緫
         ProductionProductMain productionProductMain = new ProductionProductMain();
-        ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
-        if (productProcessRouteItem == null) {
-            throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
+        productionProductMain.setProductNo(generateProductNo());
+        productionProductMain.setUserId(dto.getUserId());
+        productionProductMain.setUserName(dto.getUserName());
+        productionProductMain.setProductionOperationTaskId(productionOperationTask.getId());
+        productionProductMain.setWorkOrderId(productionOperationTask.getId());
+        productionProductMain.setStatus(0);
+        productionProductMainMapper.insert(productionProductMain);
+
+        List<ProductStructureDto> productStructureDtos = new ArrayList<>();
+        ProductStructureDto productStructureDto = new ProductStructureDto();
+        productStructureDto.setProductModelId(productModel.getId());
+        productStructureDto.setUnitQuantity(BigDecimal.ONE);
+        productStructureDtos.add(productStructureDto);
+        for (ProductStructureDto item : productStructureDtos) {
+            // 褰撳墠瀹炵幇鎸夊伐搴忔垚鍝佺洿鎺ヤ綔涓烘姇鍏ワ紝鍚庣画鑻ユ帴鍏ラ鏂欒褰曞彲鍦ㄨ繖閲屾浛鎹㈡潵婧愩��
+            ProductionProductInput productionProductInput = new ProductionProductInput();
+            productionProductInput.setProductionProductMainId(productionProductMain.getId());
+            productionProductInput.setProductMainId(productionProductMain.getId());
+            productionProductInput.setProductModelId(item.getProductModelId());
+            productionProductInput.setInputQuantity(item.getUnitQuantity().multiply(defaultDecimal(dto.getQuantity())));
+            productionProductInput.setQuantity(productionProductInput.getInputQuantity());
+            productionProductInputMapper.insert(productionProductInput);
+            stockUtils.substractStock(item.getProductModelId(), productionProductInput.getInputQuantity(),
+                    StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId());
         }
 
-        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        ProductionProductOutput productionProductOutput = new ProductionProductOutput();
+        productionProductOutput.setProductionProductMainId(productionProductMain.getId());
+        productionProductOutput.setProductMainId(productionProductMain.getId());
+        productionProductOutput.setProductModelId(productModel.getId());
+        productionProductOutput.setQuantity(defaultDecimal(dto.getQuantity()));
+        productionProductOutput.setScrapQty(defaultDecimal(dto.getScrapQty()));
+        productionProductOutputMapper.insert(productionProductOutput);
+        BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
 
+        List<ProductionOrderRoutingOperation> routingOperationList = productionOrderRoutingOperationMapper.selectList(
+                Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
+                        .eq(ProductionOrderRoutingOperation::getTechnologyRoutingId, routingOperation.getTechnologyRoutingId())
+                        .eq(ProductionOrderRoutingOperation::getProductionOrderId, routingOperation.getProductionOrderId()));
+        boolean isLastOperation = routingOperation.getDragSort() != null && routingOperation.getDragSort().equals(routingOperationList.size());
+        if (productQty.compareTo(BigDecimal.ZERO) > 0) {
+            if (Boolean.TRUE.equals(routingOperation.getIsQuality())) {
+                // 璐ㄦ宸ュ簭鍏堢敓鎴愭楠屽崟锛岄潪璐ㄦ宸ュ簭鐩存帴鍏ュ悎鏍煎搧搴撳瓨銆�
+                int inspectType = isLastOperation ? 2 : 1;
+                String process = isLastOperation ? null : technologyOperation == null ? null : technologyOperation.getName();
+                Product product = productMapper.selectById(productModel.getProductId());
+                QualityInspect qualityInspect = new QualityInspect();
+                qualityInspect.setProductId(product.getId());
+                qualityInspect.setProductName(product.getProductName());
+                qualityInspect.setModel(productModel.getModel());
+                qualityInspect.setUnit(productModel.getUnit());
+                qualityInspect.setQuantity(productQty);
+                qualityInspect.setProcess(process);
+                qualityInspect.setInspectState(0);
+                qualityInspect.setInspectType(inspectType);
+                qualityInspect.setProductMainId(productionProductMain.getId());
+                qualityInspect.setProductModelId(productModel.getId());
+                qualityInspectMapper.insert(qualityInspect);
+                List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
+                if (qualityTestStandard.size() > 0) {
+                    qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
+                    qualityInspectMapper.updateById(qualityInspect);
+                    qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
+                                    .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))
+                            .forEach(qualityTestStandardParam -> {
+                                QualityInspectParam param = new QualityInspectParam();
+                                BeanUtils.copyProperties(qualityTestStandardParam, param);
+                                param.setId(null);
+                                param.setInspectId(qualityInspect.getId());
+                                qualityInspectParamMapper.insert(param);
+                            });
+                }
+            } else {
+                stockUtils.addStock(productModel.getId(), productQty,
+                        StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+            }
+
+            productionOperationTask.setCompleteQuantity(defaultDecimal(productionOperationTask.getCompleteQuantity()).add(productQty));
+            if (ObjectUtils.isNull(productionOperationTask.getActualStartTime())) {
+                productionOperationTask.setActualStartTime(LocalDate.now());
+            }
+            // 鎶ュ伐椹卞姩宸ュ崟鐘舵�佹祦杞細鏈変骇鍑哄嵆杩涜涓紝杈惧埌璁″垝閲忓嵆瀹屽伐銆�
+            productionOperationTask.setStatus(3);
+            if (productionOperationTask.getPlanQuantity() != null
+                    && productionOperationTask.getCompleteQuantity().compareTo(productionOperationTask.getPlanQuantity()) >= 0) {
+                productionOperationTask.setActualEndTime(LocalDate.now());
+                productionOperationTask.setStatus(4);
+            }
+            productionOperationTaskMapper.updateById(productionOperationTask);
+
+            if (ObjectUtils.isNull(productionOrder.getStartTime())) {
+                productionOrder.setStartTime(LocalDateTime.now());
+            }
+            // 璁㈠崟鐘舵�佺敱鏈�鍚庝竴閬撳伐搴忕殑鍚堟牸浜у嚭鎺ㄥ姩锛岄伩鍏嶄腑闂村伐搴忔彁鍓嶅畬宸ャ��
+            productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
+            if (isLastOperation) {
+                productionOrder.setCompleteQuantity(defaultDecimal(productionOrder.getCompleteQuantity()).add(productQty));
+                if (productionOrder.getQuantity() != null
+                        && productionOrder.getCompleteQuantity().compareTo(productionOrder.getQuantity()) >= 0) {
+                    productionOrder.setEndTime(LocalDateTime.now());
+                    productionOrder.setStatus(ProductOrderStatusEnum.FINISHED.getCode());
+                }
+            }
+            productionOrderMapper.updateById(productionOrder);
+
+            BigDecimal workHours = BigDecimal.ZERO;
+            if (technologyOperation != null && technologyOperation.getSalaryQuota() != null) {
+                workHours = Integer.valueOf(1).equals(technologyOperation.getType())
+                        ? technologyOperation.getSalaryQuota().multiply(productQty)
+                        : technologyOperation.getSalaryQuota();
+            }
+            ProductionAccount productionAccount = new ProductionAccount();
+            productionAccount.setProductionProductMainId(productionProductMain.getId());
+            productionAccount.setSalesLedgerId(productionOrder.getSalesLedgerId());
+            productionAccount.setSalesLedgerProductId(productionOrder.getSaleLedgerProductId() == null ? null : productionOrder.getSaleLedgerProductId().longValue());
+            productionAccount.setSchedulingUserId(user == null ? null : user.getUserId());
+            productionAccount.setSchedulingUserName(user == null ? dto.getUserName() : user.getNickName());
+            productionAccount.setFinishedNum(productQty);
+            productionAccount.setWorkHours(workHours);
+            productionAccount.setTechnologyOperationName(technologyOperation == null ? null : technologyOperation.getName());
+            productionAccount.setSchedulingDate(LocalDateTime.now());
+            productionAccountMapper.insert(productionAccount);
+        }
+        if (defaultDecimal(dto.getScrapQty()).compareTo(BigDecimal.ZERO) > 0) {
+            stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(),
+                    StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
+        }
+        return true;
+    }
+
+    private Boolean removeProductMainByProductionTask(ProductionProductMain productionProductMain) {
+        // 鍒犻櫎鎶ュ伐闇�瑕佸悓姝ュ洖婊氳川妫�銆佸簱瀛樸�佸伐鏃舵牳绠楀拰璁㈠崟/宸ュ崟杩涘害銆�
+        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+                Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, productionProductMain.getId()));
+        if (qualityInspects.size() > 0) {
+            List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(
+                    Wrappers.<QualityUnqualified>lambdaQuery()
+                            .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList())));
+            if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState() == 1) {
+                throw new ServiceException("璇ユ潯鎶ュ伐宸茬粡涓嶅悎鏍煎鐞嗕簡锛屼笉鍏佽鍒犻櫎");
+            }
+        }
+        ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(
+                Wrappers.<ProductionProductOutput>lambdaQuery()
+                        .eq(ProductionProductOutput::getProductionProductMainId, productionProductMain.getId()))
+                .stream().findFirst().orElse(null);
+        productionAccountMapper.delete(new LambdaQueryWrapper<ProductionAccount>()
+                .eq(ProductionAccount::getProductionProductMainId, productionProductMain.getId()));
+
+        ProductionOperationTask productionOperationTask = productionOperationTaskMapper.selectById(productionProductMain.getProductionOperationTaskId());
+        if (productionOperationTask != null && productionProductOutput != null) {
+            BigDecimal validQuantity = defaultDecimal(productionProductOutput.getQuantity()).subtract(defaultDecimal(productionProductOutput.getScrapQty()));
+            productionOperationTask.setCompleteQuantity(defaultDecimal(productionOperationTask.getCompleteQuantity()).subtract(validQuantity));
+            productionOperationTask.setActualEndTime(null);
+            if (defaultDecimal(productionOperationTask.getCompleteQuantity()).compareTo(BigDecimal.ZERO) <= 0) {
+                productionOperationTask.setCompleteQuantity(BigDecimal.ZERO);
+                productionOperationTask.setActualStartTime(null);
+                productionOperationTask.setStatus(2);
+            } else {
+                productionOperationTask.setStatus(3);
+            }
+            productionOperationTaskMapper.updateById(productionOperationTask);
+
+            ProductionOrder productionOrder = productionOrderMapper.selectById(productionOperationTask.getProductionOrderId());
+            ProductionOrderRoutingOperation routingOperation = productionOrderRoutingOperationMapper.selectById(productionOperationTask.getTechnologyRoutingOperationId());
+            if (productionOrder != null && routingOperation != null) {
+                // 鍙湁鏈�鍚庝竴閬撳伐搴忕殑鎶ュ伐鎵嶄細褰卞搷鐢熶骇璁㈠崟瀹屽伐鏁伴噺銆�
+                List<ProductionOrderRoutingOperation> routingOperationList = productionOrderRoutingOperationMapper.selectList(
+                        Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
+                                .eq(ProductionOrderRoutingOperation::getTechnologyRoutingId, routingOperation.getTechnologyRoutingId())
+                                .eq(ProductionOrderRoutingOperation::getProductionOrderId, routingOperation.getProductionOrderId()));
+                boolean isLastOperation = routingOperation.getDragSort() != null && routingOperation.getDragSort().equals(routingOperationList.size());
+                if (isLastOperation) {
+                    BigDecimal newCompleteQty = defaultDecimal(productionOrder.getCompleteQuantity()).subtract(validQuantity);
+                    productionOrder.setCompleteQuantity(newCompleteQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newCompleteQty);
+                    productionOrder.setEndTime(null);
+                }
+                if (defaultDecimal(productionOrder.getCompleteQuantity()).compareTo(BigDecimal.ZERO) <= 0) {
+                    productionOrder.setStartTime(null);
+                    productionOrder.setStatus(ProductOrderStatusEnum.WAIT.getCode());
+                } else {
+                    productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
+                }
+                productionOrderMapper.updateById(productionOrder);
+            }
+        }
+
+        qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
+                .eq(QualityInspect::getProductMainId, productionProductMain.getId())).forEach(q -> {
+            qualityInspectParamMapper.delete(new LambdaQueryWrapper<QualityInspectParam>()
+                    .eq(QualityInspectParam::getInspectId, q.getId()));
+            qualityInspectMapper.deleteById(q.getId());
+            stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
+        });
+        productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
+                .eq(ProductionProductOutput::getProductionProductMainId, productionProductMain.getId()));
+        productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
+                .eq(ProductionProductInput::getProductionProductMainId, productionProductMain.getId()));
+        stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
+        stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
+        stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
+        productionProductMainMapper.deleteById(productionProductMain.getId());
+        return true;
+    }
+
+    private String generateProductNo() {
+        String datePrefix = "BG" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
         QueryWrapper<ProductionProductMain> queryWrapper = new QueryWrapper<>();
-        queryWrapper.select("MAX(product_no) as maxNo")
-                .likeRight("product_no", datePrefix);
-
+        queryWrapper.select("MAX(product_no) as maxNo").likeRight("product_no", datePrefix);
         List<Map<String, Object>> resultList = productionProductMainMapper.selectMaps(queryWrapper);
-
         int sequenceNumber = 1;
         if (resultList != null && !resultList.isEmpty()) {
             Map<String, Object> result = resultList.get(0);
-
-            if (result != null) {
-                Object maxNoObj = result.get("maxNo");
-                if (maxNoObj != null) {
-                    String lastNo = maxNoObj.toString();
-                    System.out.println("lastNo: " + lastNo);
-
-                    if (lastNo.startsWith(datePrefix)) {
-                        try {
-                            String seqStr = lastNo.substring(datePrefix.length());
-                            sequenceNumber = Integer.parseInt(seqStr) + 1;
-                        } catch (NumberFormatException e) {
-                            sequenceNumber = 1;
-                        }
+            if (result != null && result.get("maxNo") != null) {
+                String lastNo = result.get("maxNo").toString();
+                if (lastNo.startsWith(datePrefix)) {
+                    try {
+                        sequenceNumber = Integer.parseInt(lastNo.substring(datePrefix.length())) + 1;
+                    } catch (NumberFormatException e) {
+                        sequenceNumber = 1;
                     }
                 }
             }
         }
+        return String.format("%s%03d", datePrefix, sequenceNumber);
+    }
 
-        String productNo = String.format("%s%03d", datePrefix, sequenceNumber);
-        productionProductMain.setProductNo(productNo);
-        productionProductMain.setUserId(dto.getUserId());
-        productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId());
-        productionProductMain.setWorkOrderId(dto.getWorkOrderId());
-        productionProductMain.setStatus(0);
+    private BigDecimal defaultDecimal(BigDecimal value) {
+        return value == null ? BigDecimal.ZERO : value;
+    }
 
-        // 娣诲姞鎶ュ伐涓昏〃
-        int insert = productionProductMainMapper.insert(productionProductMain);
-
-        //鏇存柊宸ュ崟
-        if (insert > 0) {
-            UpdateWrapper<ProductWorkOrder> wrapper = new UpdateWrapper<>();
-            wrapper.set("report_work", true)
-                    .set("quantity",dto.getQuantity())
-                    .eq("id", dto.getWorkOrderId());
-            productWorkOrderMapper.update(null, wrapper);
-        }
-        ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
-        ProductModel productModel = productProcessRouteItem.getProductModelId() != null ?
-                productModelMapper.selectById(productProcessRouteItem.getProductModelId()) : null;
-
-        if (productModel != null) {
-            Product product = productMapper.selectById(productModel.getProductId());
-            int inspectType = "缁勮".equals(productProcess.getName()) ? 2 : 1;
-
-            QualityInspect qualityInspect = new QualityInspect();
-            qualityInspect.setProductId(product.getId());
-            qualityInspect.setProductName(product.getProductName());
-            qualityInspect.setModel(productModel.getModel());
-            qualityInspect.setUnit(productModel.getUnit());
-            qualityInspect.setQuantity(dto.getQuantity());
-            qualityInspect.setProcess(productProcess.getName());
-            qualityInspect.setInspectState(0);
-            qualityInspect.setInspectType(inspectType);
-            qualityInspectMapper.insert(qualityInspect);
-
-            qualityTestStandardMapper.selectList(
-                    new LambdaQueryWrapper<QualityTestStandard>()
-                            .eq(QualityTestStandard::getProductId, product.getId())
-            ).forEach(standard -> {
-                QualityInspectParam param = new QualityInspectParam();
-                BeanUtils.copyProperties(standard, param);
-                param.setId(null);
-                param.setInspectId(qualityInspect.getId());
-                qualityInspectParamMapper.insert(param);
-            });
-        }
-        // 娣诲姞浜у嚭
-        ProductionProductOutput productionProductOutput = new ProductionProductOutput();
-        productionProductOutput.setProductMainId(productionProductMain.getId());
-        productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
-        productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
-        productionProductOutputMapper.insert(productionProductOutput);
-
-        return true;
+    @Override
+    public ArrayList<Long> listMain(List<Long> idList) {
+        return productionProductMainMapper.listMain(idList);
     }
 }

--
Gitblit v1.9.3