From 0578c6c76f13e367b5dc7d0882efe3c69ca4cb0e Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 15 五月 2026 16:29:30 +0800
Subject: [PATCH] feat(customer): 添加客户银行代码字段并实现批量删除功能

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |  167 ++++++++++++++++++++++++++++---------------------------
 1 files changed, 86 insertions(+), 81 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 9b967c4..c753b0c 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -9,13 +9,8 @@
 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.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.bean.dto.ProductStructureDto;
 import com.ruoyi.production.bean.dto.ProductionProductMainDto;
@@ -26,7 +21,8 @@
 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.quality.pojo.QualityInspect;
+import com.ruoyi.stock.service.StockInventoryService;
 import com.ruoyi.technology.mapper.TechnologyOperationMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
 import com.ruoyi.technology.pojo.TechnologyOperation;
@@ -39,15 +35,7 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -76,9 +64,11 @@
     private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
     private final TechnologyOperationMapper technologyOperationMapper;
     private final StockUtils stockUtils;
+    private final StockInventoryService stockInventoryService;
 
     @Override
     public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) {
+        // 鍒嗛〉鏌ヨ鐢熶骇鎶ュ伐涓昏〃
         IPage<ProductionProductMainDto> result = productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto);
         fillOperationParamList(result.getRecords());
         return result;
@@ -86,20 +76,24 @@
 
     @Override
     public IPage<ProductionProductMainDto> pageProductionProductMain(Page page, ProductionProductMainDto productionProductMainDto) {
+        // 鍒嗛〉鏌ヨ鐢熶骇鎶ュ伐涓昏〃
         return listPageProductionProductMainDto(page, productionProductMainDto);
     }
 
     @Override
     public ProductionProductMainDto getProductionProductMainInfo(Long id) {
+        // 鑾峰彇鐢熶骇浜у搧涓昏〃璇︽儏
         return listPageProductionProductMainDto(new Page<>(1, 1), new ProductionProductMainDto() {{
             setId(id);
         }}).getRecords().stream().findFirst().orElse(null);
     }
 
     private void fillOperationParamList(List<ProductionProductMainDto> recordList) {
+        // 濉厖宸ュ簭鍙傛暟鍒楄〃
         if (recordList == null || recordList.isEmpty()) {
             return;
         }
+        // 閬嶅巻澶勭悊鏁版嵁骞剁粍瑁呯粨鏋�
         Set<Long> mainIdSet = recordList.stream()
                 .map(ProductionProductMainDto::getId)
                 .filter(Objects::nonNull)
@@ -109,6 +103,7 @@
             return;
         }
 
+        // 鏌ヨ骞跺噯澶囦笟鍔℃暟鎹�
         List<ProductionOrderRoutingOperationParam> paramList = productionOrderRoutingOperationParamMapper.selectList(
                 Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
                         .in(ProductionOrderRoutingOperationParam::getProductionProductMainId, mainIdSet)
@@ -208,6 +203,7 @@
 
     @Override
     public Boolean addProductMain(ProductionProductMainDto dto) {
+        // 鏂板鐢熶骇鎶ュ伐涓昏褰�
         Long taskId = resolveTaskId(dto);
         if (taskId == null) {
             throw new ServiceException("璇蜂紶鍏ョ敓浜у伐鍗旾D");
@@ -217,11 +213,13 @@
 
     @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;
@@ -230,10 +228,10 @@
     }
 
     private Boolean addProductMainByProductionTask(ProductionProductMainDto dto) {
-        // 鎶ュ伐浠ヨ鍗曞伐搴忓揩鐓т负鍑嗭紝閬垮厤宸ヨ壓涓绘暟鎹彉鏇村悗褰卞搷鍘嗗彶宸ュ崟鎵ц銆�
+        // 鎸夌敓浜т换鍔℃柊澧炴姤宸ヤ富璁板綍
         Long taskId = resolveTaskId(dto);
         if (taskId == null) {
-            throw new ServiceException("productionOperationTaskId can not be null");
+            throw new ServiceException("鐢熶骇宸ュ崟ID涓嶈兘涓虹┖");
         }
         SysUser user = userMapper.selectUserById(dto.getUserId());
         ProductionOperationTask productionOperationTask = productionOperationTaskMapper.selectById(taskId);
@@ -263,6 +261,7 @@
         productionProductMain.setUserName(user == null ? dto.getUserName() : user.getNickName());
         productionProductMain.setProductionOperationTaskId(taskId);
         productionProductMain.setStatus(0);
+        productionProductMain.setWorkHour(dto.getWorkHour());
         productionProductMainMapper.insert(productionProductMain);
         syncOperationParamInputValue(dto, routingOperation.getId(), productionProductMain.getId());
 
@@ -293,7 +292,8 @@
         productionProductOutput.setQuantity(defaultDecimal(dto.getQuantity()));
         productionProductOutput.setScrapQty(defaultDecimal(dto.getScrapQty()));
         productionProductOutputMapper.insert(productionProductOutput);
-        BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
+        BigDecimal reportQty = defaultDecimal(productionProductOutput.getQuantity());
+        BigDecimal productQty = reportQty;
 
         List<ProductionOrderRoutingOperation> routingOperationList = productionOrderRoutingOperationMapper.selectList(
                 Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
@@ -301,41 +301,45 @@
                         .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.isEmpty()) {
-                    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());
-            }
+//            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.isEmpty()) {
+//                    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 {
+//                StockInventoryDto stockInventoryDto = new StockInventoryDto();
+//                stockInventoryDto.setRecordId(productionProductMain.getId());
+//                stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode()));
+//                stockInventoryDto.setQualitity(productQty);
+//                stockInventoryDto.setProductModelId(productModel.getId());
+//                stockInventoryService.addStockInRecordOnly(stockInventoryDto);
+//            }
 
             productionOperationTask.setCompleteQuantity(defaultDecimal(productionOperationTask.getCompleteQuantity()).add(productQty));
             if (ObjectUtils.isNull(productionOperationTask.getActualStartTime())) {
@@ -373,8 +377,6 @@
             }
             ProductionAccount productionAccount = new ProductionAccount();
             productionAccount.setProductionProductMainId(productionProductMain.getId());
-//            productionAccount.setSalesLedgerId(productionOrder.getSalesLedgerId());
-//            productionAccount.setSalesLedgerProductId(productionOrder.getSalesLedgerProductId() == null ? null : productionOrder.getSalesLedgerProductId().longValue());
             productionAccount.setSchedulingUserId(user == null ? null : user.getUserId());
             productionAccount.setSchedulingUserName(user == null ? dto.getUserName() : user.getNickName());
             productionAccount.setFinishedNum(productQty);
@@ -382,10 +384,6 @@
             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;
     }
@@ -514,17 +512,19 @@
     }
 
     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("璇ユ潯鎶ュ伐宸茬粡涓嶅悎鏍煎鐞嗕簡锛屼笉鍏佽鍒犻櫎");
-            }
-        }
+        // 鍙傛暟涓庡墠缃潯浠舵牎楠�
+//        if (!qualityInspects.isEmpty()) {
+//            List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(
+//                    Wrappers.<QualityUnqualified>lambdaQuery()
+//        // 閬嶅巻澶勭悊鏁版嵁骞剁粍瑁呯粨鏋�
+//                            .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList())));
+//            if (!qualityUnqualifieds.isEmpty() && qualityUnqualifieds.getFirst().getInspectState() == 1) {
+//                throw new ServiceException("璇ユ潯鎶ュ伐宸茬粡涓嶅悎鏍煎鐞嗕簡锛屼笉鍏佽鍒犻櫎");
+//            }
+//        }
         ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(
                 Wrappers.<ProductionProductOutput>lambdaQuery()
                         .eq(ProductionProductOutput::getProductionProductMainId, productionProductMain.getId()))
@@ -534,8 +534,8 @@
 
         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));
+            BigDecimal reportQuantity = defaultDecimal(productionProductOutput.getQuantity());
+            productionOperationTask.setCompleteQuantity(defaultDecimal(productionOperationTask.getCompleteQuantity()).subtract(reportQuantity));
             productionOperationTask.setActualEndTime(null);
             if (defaultDecimal(productionOperationTask.getCompleteQuantity()).compareTo(BigDecimal.ZERO) <= 0) {
                 productionOperationTask.setCompleteQuantity(BigDecimal.ZERO);
@@ -544,6 +544,7 @@
             } else {
                 productionOperationTask.setStatus(3);
             }
+        // 鎸佷箙鍖栨垨杈撳嚭澶勭悊缁撴灉
             productionOperationTaskMapper.updateById(productionOperationTask);
 
             ProductionOrder productionOrder = productionOrderMapper.selectById(productionOperationTask.getProductionOrderId());
@@ -556,7 +557,7 @@
                                 .eq(ProductionOrderRoutingOperation::getProductionOrderId, routingOperation.getProductionOrderId()));
                 boolean isLastOperation = routingOperation.getDragSort() != null && routingOperation.getDragSort().equals(routingOperationList.size());
                 if (isLastOperation) {
-                    BigDecimal newCompleteQty = defaultDecimal(productionOrder.getCompleteQuantity()).subtract(validQuantity);
+                    BigDecimal newCompleteQty = defaultDecimal(productionOrder.getCompleteQuantity()).subtract(reportQuantity);
                     productionOrder.setCompleteQuantity(newCompleteQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newCompleteQty);
                     productionOrder.setEndTime(null);
                 }
@@ -570,13 +571,13 @@
             }
         }
 
-        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());
-        });
+//        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>()
@@ -584,14 +585,15 @@
         productionOrderRoutingOperationParamMapper.delete(
                 Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
                         .eq(ProductionOrderRoutingOperationParam::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());
+//        stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInQualifiedRecordTypeEnum.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);
@@ -614,10 +616,12 @@
     }
 
     private BigDecimal defaultDecimal(BigDecimal value) {
+        // 灏嗙┖鏁伴噺鍏滃簳涓�0锛岄伩鍏嶇┖鎸囬拡寮傚父
         return value == null ? BigDecimal.ZERO : value;
     }
 
     private Long resolveTaskId(ProductionProductMainDto dto) {
+        // 浠庡叆鍙備腑瑙f瀽鐢熶骇宸ュ崟ID骞舵牎楠�
         if (dto == null) {
             return null;
         }
@@ -626,6 +630,7 @@
 
     @Override
     public ArrayList<Long> listMain(List<Long> idList) {
+        // 鏌ヨ涓昏〃ID闆嗗悎
         return productionProductMainMapper.listMain(idList);
     }
 }

--
Gitblit v1.9.3