From 47806d9e390ee00e1d29ad1da8c1aa908882a758 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 11 八月 2026 14:43:59 +0800
Subject: [PATCH] 用河南鹤壁代码覆盖山西长治

---
 src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java |  142 ++++++++++++++++-------------------------------
 1 files changed, 48 insertions(+), 94 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
index 4503e4d..e847384 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -7,17 +7,14 @@
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.approve.bean.dto.ApprovalInstanceDto;
-import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo;
-import com.ruoyi.approve.mapper.ApprovalTemplateMapper;
-import com.ruoyi.approve.pojo.ApprovalInstance;
-import com.ruoyi.approve.pojo.ApprovalTemplate;
 import com.ruoyi.approve.pojo.ApproveProcess;
-import com.ruoyi.approve.service.ApprovalInstanceService;
 import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
+import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.common.enums.IsDeleteEnum;
+import com.ruoyi.common.utils.AmountUtils;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
@@ -33,8 +30,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDateTime;
-import java.util.*;
+import java.time.LocalDate;
+import java.util.Collections;
+import java.util.List;
 import java.util.stream.Collectors;
 
 @Service
@@ -47,8 +45,6 @@
 
     private final ApproveProcessServiceImpl approveProcessService;
     private final CustomerMapper customerMapper;
-    private final ApprovalTemplateMapper approvalTemplateMapper;
-    private final ApprovalInstanceService approvalInstanceService;
 
     @Override
     public IPage<SalesQuotationDto> listPage(Page page, SalesQuotationDto salesQuotationDto) {
@@ -56,31 +52,34 @@
         if(CollectionUtils.isEmpty(salesQuotationDtoIPage.getRecords())){
             return salesQuotationDtoIPage;
         }
-
-        // 鎵归噺鏌ヨ浜у搧锛岄伩鍏� N+1 闂
-        List<Long> quotationIds = salesQuotationDtoIPage.getRecords().stream()
-                .map(SalesQuotationDto::getId)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toList());
-
-        if (!quotationIds.isEmpty()) {
-            List<SalesQuotationProduct> allProducts = salesQuotationProductMapper.selectList(
-                    new LambdaQueryWrapper<SalesQuotationProduct>()
-                            .in(SalesQuotationProduct::getSalesQuotationId, quotationIds)
-            );
-
-            Map<Long, List<SalesQuotationProduct>> productMap = allProducts.stream()
-                    .collect(Collectors.groupingBy(SalesQuotationProduct::getSalesQuotationId));
-
-            salesQuotationDtoIPage.getRecords().forEach(record ->
-                    record.setProducts(productMap.getOrDefault(record.getId(), new ArrayList<>()))
-            );
-        }
+        salesQuotationDtoIPage.getRecords().forEach(record -> {
+            record.setTotalAmount(AmountUtils.scaleAmount(record.getTotalAmount()));
+            List<SalesQuotationProduct> products = salesQuotationProductMapper.selectBySalesQuotationId(record.getId());
+            if (!CollectionUtils.isEmpty(products)) {
+                products.forEach(product -> {
+                    product.setUnitPrice(AmountUtils.scaleAmount(product.getUnitPrice()));
+                    product.setAmount(AmountUtils.scaleAmount(product.getAmount()));
+                });
+            }
+            record.setProducts(products);
+        });
         return salesQuotationDtoIPage;
+    }
+
+    private void normalizeAmounts(SalesQuotationDto salesQuotationDto) {
+        salesQuotationDto.setTotalAmount(AmountUtils.scaleAmount(salesQuotationDto.getTotalAmount()));
+        if (CollectionUtils.isEmpty(salesQuotationDto.getProducts())) {
+            return;
+        }
+        salesQuotationDto.getProducts().forEach(product -> {
+            product.setUnitPrice(AmountUtils.scaleAmount(product.getUnitPrice()));
+            product.setAmount(AmountUtils.scaleAmount(product.getAmount()));
+        });
     }
 
     @Override
     public boolean add(SalesQuotationDto salesQuotationDto) {
+        normalizeAmounts(salesQuotationDto);
         LoginUser loginUser = SecurityUtils.getLoginUser();
         SalesQuotation salesQuotation = new SalesQuotation();
         BeanUtils.copyProperties(salesQuotationDto, salesQuotation);
@@ -89,7 +88,7 @@
         if (ObjectUtils.isNotEmpty(customer))  {
             salesQuotation.setCustomer(customer.getCustomerName());
         }
-        String quotationNo = OrderUtils.countTodayByCreateTime(salesQuotationMapper, "QT","quotation_no", salesQuotationDto.getCreateTime() != null ? salesQuotationDto.getCreateTime() : LocalDateTime.now());
+        String quotationNo = OrderUtils.countTodayByCreateTime(salesQuotationMapper, "QT","quotation_no");
         salesQuotation.setQuotationNo(quotationNo);
         salesQuotation.setStatus("寰呭鎵�");
         salesQuotationMapper.insert(salesQuotation);
@@ -104,36 +103,25 @@
         }).collect(Collectors.toList());
         salesQuotationProductService.saveBatch(products);
         // 鎶ヤ环瀹℃壒
-        ApprovalTemplate approvalTemplate = approvalTemplateMapper.selectOne(
-                new LambdaQueryWrapper<ApprovalTemplate>()
-                        .eq(ApprovalTemplate::getBusinessType, 6L)
-                        .eq(ApprovalTemplate::getDeleted, 0)
-                        .orderByDesc(ApprovalTemplate::getId)
-                        .last("LIMIT 1")
-        );
-        if (approvalTemplate == null) {
-            throw new RuntimeException("璇峰厛閰嶇疆鎶ヤ环瀹℃壒妯℃澘");
-        }
-        ApprovalInstanceDto approvalInstance = new ApprovalInstanceDto();
-        approvalInstance.setTemplateId(approvalTemplate.getId());
-        approvalInstance.setTemplateName(approvalTemplate.getTemplateName());
-        approvalInstance.setBusinessId(salesQuotation.getId());
-        approvalInstance.setBusinessType(6L);
-        approvalInstance.setCurrentLevel(1);
-        approvalInstance.setTitle(quotationNo+"瀹℃壒");
-        approvalInstance.setApplicantId(loginUser.getUserId());
-        approvalInstance.setApplicantName(loginUser.getNickName());
-        approvalInstance.setApplyTime(LocalDateTime.now());
+        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+        approveProcessVO.setApproveType(6);
+        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+        approveProcessVO.setApproveReason(quotationNo);
+        approveProcessVO.setApproveUserIds(salesQuotationDto.getApproveUserIds());
+        approveProcessVO.setApproveUser(loginUser.getUserId());
+        approveProcessVO.setApproveTime(LocalDate.now().toString());
+        approveProcessVO.setPrice(salesQuotationDto.getTotalAmount());
         try {
-            approvalInstanceService.add(approvalInstance);
-        } catch (Exception e) {
-            log.error("SalesQuotationServiceImpl approve error for quotationNo: {}", e);
-            throw new RuntimeException("瀹℃壒澶辫触: " + e.getMessage(), e);
+            approveProcessService.addApprove(approveProcessVO);
+        }catch (Exception e){
+            log.error("SalesQuotationServiceImpl error:{}", e);
+            throw                                new RuntimeException("瀹℃壒澶辫触");
         }
         return true;
     }
     @Override
     public boolean edit(SalesQuotationDto salesQuotationDto) {
+        normalizeAmounts(salesQuotationDto);
         SalesQuotation salesQuotation = new SalesQuotation();
         BeanUtils.copyProperties(salesQuotationDto, salesQuotation);
         ApproveGetAndUpdateVo vo = new ApproveGetAndUpdateVo();
@@ -157,35 +145,10 @@
 
         salesQuotationProductService.saveBatch(products);
         // 淇敼鎶ヤ环瀹℃壒
-        // 鍏堢粨鏉熶箣鍓嶆湭缁撴潫鐨勬姤浠峰鎵�
-        approvalInstanceService.lambdaUpdate().set(ApprovalInstance::getStatus,"REJECTED").eq(ApprovalInstance::getBusinessId,salesQuotation.getId()).eq(ApprovalInstance::getBusinessType,6L).update();
-
-        ApprovalTemplate approvalTemplate = approvalTemplateMapper.selectOne(
-                new LambdaQueryWrapper<ApprovalTemplate>()
-                        .eq(ApprovalTemplate::getBusinessType, 6L)
-                        .eq(ApprovalTemplate::getDeleted, 0)
-                        .orderByDesc(ApprovalTemplate::getId)
-                        .last("LIMIT 1")
-        );
-        if (approvalTemplate == null) {
-            throw new RuntimeException("璇峰厛閰嶇疆鎶ヤ环瀹℃壒妯℃澘");
-        }
-        ApprovalInstanceDto approvalInstance = new ApprovalInstanceDto();
-        approvalInstance.setTemplateId(approvalTemplate.getId());
-        approvalInstance.setTemplateName(approvalTemplate.getTemplateName());
-        approvalInstance.setBusinessId(salesQuotation.getId());
-        approvalInstance.setBusinessType(6L);
-        approvalInstance.setCurrentLevel(1);
-        approvalInstance.setTitle(salesQuotation.getQuotationNo()+"瀹℃壒");
-        approvalInstance.setApplicantId(SecurityUtils.getUserId());
-        approvalInstance.setApplicantName(SecurityUtils.getLoginUser().getNickName());
-        approvalInstance.setApplyTime(LocalDateTime.now());
-        try {
-            approvalInstanceService.add(approvalInstance);
-        } catch (Exception e) {
-            log.error("SalesQuotationServiceImpl approve error for quotationNo: {}", e);
-            throw new RuntimeException("瀹℃壒澶辫触: " + e.getMessage(), e);
-        }
+        vo.setApproveUserIds(salesQuotationDto.getApproveUserIds());
+        vo.setApproveType(6);
+        vo.setApproveReason(salesQuotationDto.getQuotationNo());
+        approveProcessService.updateApproveUser(vo);
         return true;
     }
     @Override
@@ -194,16 +157,7 @@
         if(salesQuotation==null) return false;
         salesQuotationMapper.deleteById(id);
         salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>().eq(SalesQuotationProduct::getSalesQuotationId, id));
-        // 鍒犻櫎鎶ヤ环瀹℃壒瀹炰緥锛圓pprovalInstance锛�
-        ApprovalInstance approvalInstance = approvalInstanceService.getOne(new LambdaQueryWrapper<ApprovalInstance>()
-                .eq(ApprovalInstance::getBusinessId, id)
-                .eq(ApprovalInstance::getBusinessType, 6L)
-                .eq(ApprovalInstance::getDeleted, 0)
-                .last("LIMIT 1"));
-        if(approvalInstance != null){
-            approvalInstanceService.delete(Collections.singletonList(approvalInstance.getId()));
-        }
-        // 鍒犻櫎鎶ヤ环瀹℃壒娴佺▼锛圓pproveProcess锛�
+        // 鍒犻櫎鎶ヤ环瀹℃壒
         ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
                 .eq(ApproveProcess::getApproveType, 6)
                 .eq(ApproveProcess::getApproveDelete, IsDeleteEnum.NOT_DELETED)

--
Gitblit v1.9.3