From 8c8ff31cdca25f579d3c1f688f46c877bf28aaa1 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 26 五月 2026 16:21:46 +0800
Subject: [PATCH] feat(approve): 重构审批流程配置功能

---
 src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java              |   58 +++----
 src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java           |   66 +++-----
 src/main/java/com/ruoyi/approve/bean/vo/KnowledgeBaseVo.java                          |   13 +
 src/main/java/com/ruoyi/approve/service/KnowledgeBaseService.java                     |    2 
 src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java |    4 
 src/main/java/com/ruoyi/approve/controller/KnowledgeBaseController.java               |    3 
 src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java             |  282 ++++-------------------------------
 src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java                         |    5 
 src/main/java/com/ruoyi/approve/mapper/KnowledgeBaseMapper.java                       |    1 
 9 files changed, 109 insertions(+), 325 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java b/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
index 91d19c7..2eca84e 100644
--- a/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
+++ b/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
@@ -3,9 +3,12 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
+import com.ruoyi.sales.pojo.CommonFile;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
@@ -44,8 +47,6 @@
      * 瀹℃壒鐞嗙敱
      */
     private String approveReason;
-
-    private Long recordId;
 
     @Excel(name = "寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd",width = 30)
     @JsonFormat(pattern = "yyyy-MM-dd")
diff --git a/src/main/java/com/ruoyi/approve/bean/vo/KnowledgeBaseVo.java b/src/main/java/com/ruoyi/approve/bean/vo/KnowledgeBaseVo.java
new file mode 100644
index 0000000..ee75d0d
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/bean/vo/KnowledgeBaseVo.java
@@ -0,0 +1,13 @@
+package com.ruoyi.approve.bean.vo;
+
+import com.ruoyi.approve.pojo.KnowledgeBase;
+import com.ruoyi.approve.pojo.KnowledgeBaseFile;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class KnowledgeBaseVo extends KnowledgeBase {
+
+    private List<KnowledgeBaseFile> files;
+}
diff --git a/src/main/java/com/ruoyi/approve/controller/KnowledgeBaseController.java b/src/main/java/com/ruoyi/approve/controller/KnowledgeBaseController.java
index b6ede4a..d314dc9 100644
--- a/src/main/java/com/ruoyi/approve/controller/KnowledgeBaseController.java
+++ b/src/main/java/com/ruoyi/approve/controller/KnowledgeBaseController.java
@@ -3,8 +3,11 @@
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.approve.mapper.KnowledgeBaseMapper;
+import com.ruoyi.approve.bean.vo.KnowledgeBaseVo;
 import com.ruoyi.approve.pojo.KnowledgeBase;
 import com.ruoyi.approve.pojo.RpaProcessAutomation;
+import com.ruoyi.approve.pojo.KnowledgeBaseFile;
+import com.ruoyi.approve.service.KnowledgeBaseFileService;
 import com.ruoyi.approve.service.KnowledgeBaseService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.domain.AjaxResult;
diff --git a/src/main/java/com/ruoyi/approve/mapper/KnowledgeBaseMapper.java b/src/main/java/com/ruoyi/approve/mapper/KnowledgeBaseMapper.java
index adae509..b8f02d4 100644
--- a/src/main/java/com/ruoyi/approve/mapper/KnowledgeBaseMapper.java
+++ b/src/main/java/com/ruoyi/approve/mapper/KnowledgeBaseMapper.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.bean.vo.KnowledgeBaseVo;
 import com.ruoyi.approve.pojo.KnowledgeBase;
 import org.apache.ibatis.annotations.Mapper;
 
diff --git a/src/main/java/com/ruoyi/approve/service/KnowledgeBaseService.java b/src/main/java/com/ruoyi/approve/service/KnowledgeBaseService.java
index c8a3664..7e9da71 100644
--- a/src/main/java/com/ruoyi/approve/service/KnowledgeBaseService.java
+++ b/src/main/java/com/ruoyi/approve/service/KnowledgeBaseService.java
@@ -3,8 +3,10 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.approve.bean.vo.KnowledgeBaseVo;
 import com.ruoyi.approve.pojo.KnowledgeBase;
 
+
 public interface KnowledgeBaseService extends IService<KnowledgeBase> {
     IPage<KnowledgeBase> listpage(Page page, KnowledgeBase knowledgeBase);
 }
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index 2f3a8a0..10e838d 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -3,6 +3,7 @@
 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.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.approve.mapper.ApproveNodeMapper;
@@ -12,8 +13,10 @@
 import com.ruoyi.approve.service.IApproveNodeService;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
+import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.project.system.domain.SysUser;
@@ -38,7 +41,6 @@
 import com.ruoyi.sales.pojo.SalesQuotation;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
-import com.ruoyi.sales.service.impl.SalesLedgerProductServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -71,7 +73,6 @@
     private final QualityTestStandardMapper qualityTestStandardMapper;
     private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
     private final QualityInspectParamMapper qualityInspectParamMapper;
-    private final SalesLedgerProductServiceImpl salesLedgerProductServiceImpl;
 
 
     public ApproveProcess getApproveById(String id) {
@@ -167,11 +168,11 @@
         approveProcessMapper.updateById(approveProcess);
 
         //閲囪喘瀹℃牳
-        if (approveProcess.getApproveType().equals(5)) {
+        if(approveProcess.getApproveType().equals(5)){
             PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
                     .eq(PurchaseLedger::getPurchaseContractNumber, approveProcess.getApproveReason())
                     .last("limit 1"));
-            if (purchaseLedger != null) {
+            if(purchaseLedger != null) {
                 if (status.equals(2)) {
                     // 鍚屾剰
                     purchaseLedger.setApprovalStatus(3);
@@ -180,8 +181,7 @@
                     for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
                         // 璐ㄦ
                         if (salesLedgerProduct.getIsChecked()) {
-                            addQualityInspect(purchaseLedger, salesLedgerProduct);
-                        } else {
+                            addQualityInspect(purchaseLedger, salesLedgerProduct);                        }else {
                             //鐩存帴鍏ュ簱
                             stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId());
                         }
@@ -197,47 +197,41 @@
             }
         }
         // 閿�鍞姤浠风姸鎬佷慨鏀�
-        if (approveProcess.getApproveType().equals(6)) {
+        if(approveProcess.getApproveType().equals(6)){
             SalesQuotation salesQuote = salesQuotationMapper.selectOne(new LambdaQueryWrapper<SalesQuotation>()
                     .eq(SalesQuotation::getQuotationNo, approveProcess.getApproveReason())
                     .last("limit 1"));
             // 鍚屾剰
-            if (status.equals(2) && salesQuote != null) {
+            if(status.equals(2) && salesQuote != null){
                 salesQuote.setStatus("閫氳繃");
-            } else if (status.equals(3) && salesQuote != null) {
+            }else if(status.equals(3) && salesQuote != null){
                 salesQuote.setStatus("鎷掔粷");
-            } else if (status.equals(1) && salesQuote != null) {
+            }else if(status.equals(1) && salesQuote != null){
                 salesQuote.setStatus("瀹℃牳涓�");
             }
             salesQuotationMapper.updateById(salesQuote);
         }
         // 鍑哄簱瀹℃壒淇敼
-        if (approveProcess.getApproveType().equals(7)) {
+        if(approveProcess.getApproveType().equals(7)){
             String[] split = approveProcess.getApproveReason().split(":");
             ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
                     .eq(ShippingInfo::getShippingNo, split[1])
                     .orderByDesc(ShippingInfo::getCreateTime)
                     .last("limit 1"));
-            if (shippingInfo != null) {
-                if (status.equals(2)) {
+            if(shippingInfo != null){
+                if(status.equals(2)){
                     shippingInfo.setStatus("瀹℃牳閫氳繃");
-                } else if (status.equals(3)) {
+                }else if(status.equals(3)){
                     shippingInfo.setStatus("瀹℃牳鎷掔粷");
-                } else if (status.equals(1)) {
+                }else if(status.equals(1)){
                     shippingInfo.setStatus("瀹℃牳涓�");
                 }
                 shippingInfoMapper.updateById(shippingInfo);
             }
 
         }
-        //閿�鍞鎵规垚鍔熶箣鍚庢坊鍔犵敓浜ф暟鎹�
-        if (approveProcess.getApproveType().equals(9)) {
-            List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
-                    .eq(SalesLedgerProduct::getSalesLedgerId, approveProcess.getRecordId()));
-            salesLedgerProducts.forEach(salesLedgerProductServiceImpl::addProductionData);
-        }
         // 缁戝畾闄勪欢
-        if (!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1) {
+        if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){
             tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue());
         }
     }
@@ -245,21 +239,21 @@
     @Override
     public void updateApproveNode(ApproveNode approveNode) throws IOException {
         // 瀹℃壒鑺傜偣鐘舵��:1鍚屾剰锛�2鎷掔粷锛�0灏氭湭瀹℃牳
-        switch (approveNode.getApproveNodeStatus()) {
+        switch (approveNode.getApproveNodeStatus()){
             case 1:
                 updateApproveProcessStatus(approveNode, Boolean.TRUE.equals(approveNode.getIsLast()) ? 2 : 1);
                 /*娑堟伅閫氱煡*/
                 Integer nodeOrder = approveNode.getApproveNodeOrder();
                 ApproveProcess approveProcess = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery()
                         .eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId())).get(0);
-                if (approveProcess.getApproveUserIds().split(",").length > nodeOrder) {
+                if (approveProcess.getApproveUserIds().split(",").length > nodeOrder){
                     String id = approveProcess.getApproveUserIds().split(",")[nodeOrder];
-                    if (approveProcess.getApproveType() == 8) {
+                    if (approveProcess.getApproveType()==8){
                         sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                                 approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                                 Arrays.asList(Long.valueOf(id)),
                                 "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
-                    } else {
+                    }else {
                         sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                                 approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                                 Arrays.asList(Long.valueOf(id)),
@@ -292,8 +286,8 @@
     }
 
     //瀹℃壒绫诲瀷鑾峰彇(涓庡墠绔〉闈㈠搴�)
-    private String approveProcessType(Integer approveType) {
-        switch (approveType) {
+    private String approveProcessType(Integer approveType){
+        switch (approveType){
             case 1:
                 return "鍏嚭绠$悊";
             case 2:
@@ -310,8 +304,6 @@
                 return "鍙戣揣瀹℃壒";
             case 8:
                 return "鍗遍櫓浣滀笟瀹℃壒";
-            case 9:
-                return "閿�鍞鎵�";
         }
         return null;
     }
@@ -328,12 +320,12 @@
         qualityInspect.setUnit(saleProduct.getUnit());
         qualityInspect.setQuantity(saleProduct.getQuantity());
         qualityInspectMapper.insert(qualityInspect);
-        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0, null);
-        if (qualityTestStandard.size() > 0) {
+        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
+        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()))
+                            .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))
                     .forEach(qualityTestStandardParam -> {
                         QualityInspectParam param = new QualityInspectParam();
                         com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param);
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java
index 5d55842..6d4124c 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java
@@ -42,7 +42,9 @@
         //鍒犻櫎鏃ф暟鎹�
         approveProcessConfigNodeMapper.delete(new QueryWrapper<ApproveProcessConfigNode>().lambda().eq(ApproveProcessConfigNode::getApproveType, approveProcessConfigNodes.get(0).getApproveType()));
         //鏂板 鏁版嵁
-        approveProcessConfigNodes.forEach(approveProcessConfigNodeMapper::insert);
+        for (ApproveProcessConfigNode node : approveProcessConfigNodes) {
+            approveProcessConfigNodeMapper.insert(node);
+        }
         return true;
     }
 }
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index f6af037..63eb8ac 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -10,11 +10,9 @@
 import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo;
 import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.approve.mapper.ApproveNodeMapper;
-import com.ruoyi.approve.mapper.ApproveProcessConfigNodeMapper;
 import com.ruoyi.approve.mapper.ApproveProcessMapper;
 import com.ruoyi.approve.pojo.ApproveNode;
 import com.ruoyi.approve.pojo.ApproveProcess;
-import com.ruoyi.approve.pojo.ApproveProcessConfigNode;
 import com.ruoyi.approve.service.ApproveProcessConfigNodeService;
 import com.ruoyi.approve.service.IApproveNodeService;
 import com.ruoyi.approve.service.IApproveProcessService;
@@ -65,19 +63,15 @@
     private final ShippingInfoMapper shippingInfoMapper;
     private final ApproveNodeMapper approveNodeMapper;
     private final ApproveProcessConfigNodeService approveProcessConfigNodeService;
-    private final ApproveProcessConfigNodeMapper approveProcessConfigNodeMapper;
 
     @Override
     public void addApprove(ApproveProcessVO approveProcessVO) throws Exception {
         SysUser sysUser = SecurityUtils.getLoginUser().getUser();
         SysDept sysDept = sysDeptMapper.selectDeptById(SecurityUtils.getLoginUser().getCurrentDeptId());
-        List<ApproveProcessConfigNodeVo> list = approveProcessConfigNodeService.listNode(approveProcessVO.getApproveType());
+        List<ApproveProcessConfigNodeVo> list = approveProcessConfigNodeService.listNode( approveProcessVO.getApproveType());
         List<Long> nodeIds = list.stream()
                 .map(ApproveProcessConfigNodeVo::getApproverId)
                 .collect(Collectors.toList());
-        if (list.isEmpty()) {
-            throw new RuntimeException("娴佺▼涓嶅瓨鍦�");
-        }
         List<SysUser> sysUsers = sysUserMapper.selectUserByIds(nodeIds);
         if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("瀹℃牳鐢ㄦ埛涓嶅瓨鍦�");
         if (sysDept == null) throw new RuntimeException("閮ㄩ棬涓嶅瓨鍦�");
@@ -89,7 +83,7 @@
 //        String approveID = today + formattedCount;
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
         ApproveProcess approveProcess = new ApproveProcess();
-        String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "", "approve_id");
+        String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "approve_id");
         approveProcess.setApproveId(no);
         approveProcess.setApproveUser(sysUser.getUserId());
         approveProcess.setApproveUserName(sysUser.getNickName());
@@ -97,10 +91,9 @@
         approveProcess.setApproveUserIds(nodeIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
         approveProcess.setApproveDeptName(sysDept.getDeptName());
         approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
-        approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? new Date() : dateFormat.parse(approveProcessVO.getApproveTime()));
+        approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? new Date(): dateFormat.parse(approveProcessVO.getApproveTime()));
         approveProcess.setApproveReason(approveProcessVO.getApproveReason());
         approveProcess.setDeviceRepairId(approveProcessVO.getDeviceRepairId());
-        approveProcess.setRecordId(approveProcessVO.getRecordId());
         approveProcess.setMaintenancePrice(approveProcessVO.getMaintenancePrice());
         approveProcess.setPrice(approveProcessVO.getPrice());
         approveProcess.setStartDate(approveProcessVO.getStartDate());
@@ -133,12 +126,12 @@
         tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
         /*娑堟伅閫氱煡*/
         Long id = nodeIds.get(0);
-        if (approveProcess.getApproveType() == 8) {
+        if (approveProcess.getApproveType()==8){
             sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                     approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                     Collections.singletonList(id),
                     "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
-        } else {
+        }else {
             sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                     approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                     Collections.singletonList(id),
@@ -155,6 +148,7 @@
         }
         return sysDeptList;
     }
+
 
     @Override
     public IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess) {
@@ -275,9 +269,9 @@
 
             //  鍒犻櫎瀵瑰簲鐨勬秷鎭�氱煡
             sysNoticeService.remove(new LambdaQueryWrapper<SysNotice>()
-                    .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType()))
-                    .eq(SysNotice::getSenderId, latestProcess.getApproveUser())
-                    .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId()));
+                            .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType()))
+                            .eq(SysNotice::getSenderId, latestProcess.getApproveUser())
+                            .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId()));
         }
 
     }
@@ -285,8 +279,8 @@
     @Override
     public ApproveProcess getApproveById(String id) {
         ApproveProcess one = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery()
-                .eq(ApproveProcess::getApproveId, id)
-                .eq(ApproveProcess::getApproveDelete, 0)).get(0);
+                .eq(ApproveProcess::getApproveId,id)
+                .eq(ApproveProcess::getApproveDelete,0)).get(0);
         one.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                 .eq(CommonFile::getCommonId, one.getId())
                 .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue())));
@@ -301,20 +295,17 @@
                 .eq(ApproveProcess::getApproveReason, approveGetAndUpdateVo.getApproveReason())
                 .last("limit 1");
         ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper);
-
         if (approveProcess == null) throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
-        //鏌ヨ瀹℃壒閰嶇疆
-        List<ApproveProcessConfigNode> approveProcessConfig = approveProcessConfigNodeMapper.selectList(new LambdaQueryWrapper<ApproveProcessConfigNode>().eq(ApproveProcessConfigNode::getApproveType, approveGetAndUpdateVo.getApproveType()));
-        List<Long> configNodeIds = approveProcessConfig.stream()
-                .sorted(Comparator.comparing(ApproveProcessConfigNode::getNodeOrder))
-                .map(ApproveProcessConfigNode::getApproverId)
-                .collect(Collectors.toList());
-        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(configNodeIds);
+        String[] split = approveGetAndUpdateVo.getApproveUserIds().split(",");
+        if (split.length == 0) {
+            throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
+        }
+        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(Arrays.asList(split).stream().map(Long::parseLong).collect(Collectors.toList()));
         if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
         //瀹℃牳涓笉鍙互缂栬緫瀹℃牳浜�
         if (approveProcess.getApproveStatus() != 1) {
-            approveProcess.setApproveUserCurrentId(configNodeIds.get(0));
-            approveProcess.setApproveUserCurrentName(sysUsers.stream().filter(user -> user.getUserId().equals(configNodeIds.get(0))).collect(Collectors.toList()).get(0).getNickName());
+            approveProcess.setApproveUserCurrentId(Long.parseLong(split[0]));
+            approveProcess.setApproveUserCurrentName(sysUsers.stream().filter(user -> user.getUserId().equals(Long.parseLong(split[0]))).collect(Collectors.toList()).get(0).getNickName());
         }
         if (approveGetAndUpdateVo.getApproveStatus() != null) {
             approveProcess.setApproveStatus(approveGetAndUpdateVo.getApproveStatus());
@@ -326,24 +317,21 @@
         LambdaQueryWrapper<ApproveNode> approveNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
         approveNodeLambdaQueryWrapper.eq(ApproveNode::getApproveProcessId, approveProcess.getApproveId())
                 .eq(ApproveNode::getDeleteFlag, 0)
+//                .eq(ApproveNode::getTenantId, SecurityUtils.getLoginUser().getTenantId())
                 .orderByAsc(ApproveNode::getApproveNodeOrder);
         approveNodeMapper.delete(approveNodeLambdaQueryWrapper);
-        //鏌ヨ瀹℃壒閰嶇疆
-        approveGetAndUpdateVo.setApproveUserIds(configNodeIds.stream()
-                .map(String::valueOf)
-                .collect(Collectors.joining(",")));
         approveNodeService.initApproveNodes(approveGetAndUpdateVo.getApproveUserIds(), approveProcess.getApproveId(), approveProcess.getTenantId());
         /*娑堟伅閫氱煡*/
-        Long id = configNodeIds.get(0);
-        if (approveProcess.getApproveType() == 8) {
+        String id = approveProcess.getApproveUserIds().split(",")[0];
+        if (approveProcess.getApproveType()==8){
             sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                     approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
-                    Collections.singletonList(id),
+                    Arrays.asList(Long.valueOf(id)),
                     "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
-        } else {
+        }else {
             sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                     approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
-                    Collections.singletonList(id),
+                    Arrays.asList(Long.valueOf(id)),
                     "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
         }
     }
@@ -400,12 +388,12 @@
         tempFileService.migrateTempFilesToFormal(approve.getId(), approveGetAndUpdateVo.getTempFileIds(), FileNameType.ApproveProcess.getValue());
         /*娑堟伅閫氱煡*/
         String id = approve.getApproveUserIds().split(",")[0];
-        if (approve.getApproveType() == 8) {
+        if (approve.getApproveType()==8){
             sysNoticeService.simpleNoticeByUser(approveProcessType(approve.getApproveType()),
                     approve.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                     Arrays.asList(Long.valueOf(id)),
                     "/safeProduction/safeWorkApproval?approveType=" + approve.getApproveType() + "&approveId=" + approve.getApproveId());
-        } else {
+        }else {
             sysNoticeService.simpleNoticeByUser(approveProcessType(approve.getApproveType()),
                     approve.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                     Arrays.asList(Long.valueOf(id)),
@@ -434,8 +422,6 @@
                 return "鍙戣揣瀹℃壒";
             case 8:
                 return "鍗遍櫓浣滀笟瀹℃壒";
-            case 9:
-                return "閿�鍞鎵�";
         }
         return null;
     }
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 2921463..f5ea4e4 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -4,64 +4,53 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
 import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.IApproveProcessService;
 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.mapper.ProductModelMapper;
-import com.ruoyi.basic.pojo.Customer;
-import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.dto.CustomerPrivatePoolDto;
+import com.ruoyi.basic.mapper.CustomerPrivatePoolMapper;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.uuid.UUID;
 import com.ruoyi.framework.security.LoginUser;
-import com.ruoyi.project.system.domain.SysUser;
-import com.ruoyi.project.system.mapper.SysUserMapper;
-import com.ruoyi.sales.dto.QuotationRecordJSON;
 import com.ruoyi.sales.dto.SalesQuotationDto;
-import com.ruoyi.sales.mapper.QuotationRecordMapper;
 import com.ruoyi.sales.mapper.SalesQuotationMapper;
 import com.ruoyi.sales.mapper.SalesQuotationProductMapper;
 import com.ruoyi.sales.pojo.SalesQuotation;
 import com.ruoyi.sales.pojo.SalesQuotationProduct;
-import com.ruoyi.sales.service.QuotationRecordService;
 import com.ruoyi.sales.service.SalesQuotationProductService;
 import com.ruoyi.sales.service.SalesQuotationService;
-import lombok.RequiredArgsConstructor;
-import org.apache.poi.ss.usermodel.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.InputStream;
-import java.math.BigDecimal;
 import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
 @Service
-@RequiredArgsConstructor
 @Transactional(rollbackFor = Exception.class)
 public class SalesQuotationServiceImpl extends ServiceImpl<SalesQuotationMapper, SalesQuotation> implements SalesQuotationService {
-    private final SalesQuotationMapper salesQuotationMapper;
-    private final SalesQuotationProductMapper salesQuotationProductMapper;
-    private final SalesQuotationProductService salesQuotationProductService;
-    private final ApproveProcessServiceImpl approveProcessService;
-    private final CustomerMapper customerMapper;
-    private final SysUserMapper sysUserMapper;
-    private final ProductModelMapper productModelMapper;
-    private final QuotationRecordMapper quotationRecordMapper;
-    private final QuotationRecordService quotationRecordsService;
+    @Autowired
+    private SalesQuotationMapper salesQuotationMapper;
+    @Autowired
+    private SalesQuotationProductMapper salesQuotationProductMapper;
+    @Autowired
+    private SalesQuotationProductService salesQuotationProductService;
 
+    @Autowired
+    private ApproveProcessServiceImpl approveProcessService;
     @Override
     public IPage<SalesQuotationDto> listPage(Page page, SalesQuotationDto salesQuotationDto) {
         IPage<SalesQuotationDto> salesQuotationDtoIPage = salesQuotationMapper.listPage(page, salesQuotationDto);
-        if (CollectionUtils.isEmpty(salesQuotationDtoIPage.getRecords())) {
+        if(CollectionUtils.isEmpty(salesQuotationDtoIPage.getRecords())){
             return salesQuotationDtoIPage;
         }
         salesQuotationDtoIPage.getRecords().forEach(record -> {
@@ -76,11 +65,11 @@
         LoginUser loginUser = SecurityUtils.getLoginUser();
         SalesQuotation salesQuotation = new SalesQuotation();
         BeanUtils.copyProperties(salesQuotationDto, salesQuotation);
-        String quotationNo = OrderUtils.countTodayByCreateTime(salesQuotationMapper, "QT", "quotation_no");
+        String quotationNo = OrderUtils.countTodayByCreateTime(salesQuotationMapper, "QT","quotation_no");
         salesQuotation.setQuotationNo(quotationNo);
         salesQuotation.setStatus("寰呭鎵�");
         salesQuotationMapper.insert(salesQuotation);
-        if (CollectionUtils.isEmpty(salesQuotationDto.getProducts())) {
+        if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){
             return true;
         }
         List<SalesQuotationProduct> products = salesQuotationDto.getProducts().stream().map(product -> {
@@ -101,38 +90,26 @@
         approveProcessVO.setPrice(salesQuotationDto.getTotalAmount());
         try {
             approveProcessService.addApprove(approveProcessVO);
-        } catch (Exception e) {
+        }catch (Exception e){
             log.error("SalesQuotationServiceImpl error:{}", e);
             throw new RuntimeException("瀹℃壒澶辫触");
         }
         return true;
     }
-
     @Override
     public boolean edit(SalesQuotationDto salesQuotationDto) {
         SalesQuotation salesQuotation = new SalesQuotation();
         BeanUtils.copyProperties(salesQuotationDto, salesQuotation);
-//        if ("鎷掔粷".equals(salesQuotationDto.getStatus())) {
-//            vo.setApproveStatus(0);
-//            salesQuotation.setStatus("寰呭鎵�");
-//        }
-        //缂栬緫灏嗗鎵规敼涓哄緟瀹℃壒
-        salesQuotation.setStatus("寰呭鎵�");
-        //灏嗕箣鍓嶆湭瀹℃壒鐨勭粨鏉�
-        LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveType, 6)
-                .eq(ApproveProcess::getApproveReason, salesQuotationDto.getQuotationNo());
-        List<ApproveProcess> approveProcesss = approveProcessService.list(approveProcessLambdaQueryWrapper);
-        approveProcesss.forEach(approveProcess -> {
-            approveProcess.setApproveStatus(4);
-        });
-        approveProcessService.updateBatchById(approveProcesss);
-
-        if (salesQuotationMapper.updateById(salesQuotation) != 1) {
+        ApproveGetAndUpdateVo vo = new ApproveGetAndUpdateVo();
+        if("鎷掔粷".equals(salesQuotationDto.getStatus())){
+            vo.setApproveStatus(0);
+            salesQuotation.setStatus("寰呭鎵�");
+        }
+        if(salesQuotationMapper.updateById(salesQuotation)!=1){
             return false;
         }
         salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>().eq(SalesQuotationProduct::getSalesQuotationId, salesQuotationDto.getId()));
-        if (CollectionUtils.isEmpty(salesQuotationDto.getProducts())) {
+        if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){
             return true;
         }
         List<SalesQuotationProduct> products = salesQuotationDto.getProducts().stream().map(product -> {
@@ -144,220 +121,27 @@
 
         salesQuotationProductService.saveBatch(products);
         // 淇敼鎶ヤ环瀹℃壒
-        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-        approveProcessVO.setApproveType(6);
-        approveProcessVO.setApproveDeptId(SecurityUtils.getLoginUser().getCurrentDeptId());
-        approveProcessVO.setApproveReason(salesQuotation.getQuotationNo());
-        approveProcessVO.setApproveUserIds(salesQuotationDto.getApproveUserIds());
-        approveProcessVO.setApproveUser(SecurityUtils.getUserId());
-        approveProcessVO.setApproveTime(LocalDate.now().toString());
-        approveProcessVO.setPrice(salesQuotationDto.getTotalAmount());
-        try {
-            approveProcessService.addApprove(approveProcessVO);
-        }catch (Exception e){
-            log.error("SalesQuotationServiceImpl error:{}", e);
-        }
+        vo.setApproveUserIds(salesQuotationDto.getApproveUserIds());
+        vo.setApproveType(6);
+        vo.setApproveReason(salesQuotationDto.getQuotationNo());
+        approveProcessService.updateApproveUser(vo);
         return true;
     }
-
     @Override
     public boolean delete(Long id) {
         SalesQuotation salesQuotation = salesQuotationMapper.selectById(id);
-        if (salesQuotation == null) return false;
+        if(salesQuotation==null) return false;
         salesQuotationMapper.deleteById(id);
         salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>().eq(SalesQuotationProduct::getSalesQuotationId, id));
         // 鍒犻櫎鎶ヤ环瀹℃壒
         ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
                 .eq(ApproveProcess::getApproveType, 6)
                 .eq(ApproveProcess::getApproveReason, salesQuotation.getQuotationNo()));
-        if (one != null) {
+        if(one != null){
             approveProcessService.delByIds(Collections.singletonList(one.getId()));
         }
         return true;
     }
 
-    @Override
-    public QuotationRecordJSON importData(MultipartFile file, String approveUserIdsJson) {
-        try (InputStream inputStream = file.getInputStream();
-             Workbook workbook = WorkbookFactory.create(inputStream)) {
-            Sheet sheet = workbook.getNumberOfSheets() > 1 ? workbook.getSheetAt(1) : workbook.getSheetAt(0);
-            DataFormatter dataFormatter = new DataFormatter();
 
-            QuotationRecordJSON result = new QuotationRecordJSON();
-            // 妯℃澘涓鎴蜂俊鎭浐瀹氬湪绗�2琛�(A2-F2)锛屼笖鍙湁涓�琛�
-            Row customerRow = sheet.getRow(1);
-            List<Customer> customers = customerMapper.selectList(new LambdaQueryWrapper<Customer>()
-                    .eq(Customer::getCustomerName, getStringCell(customerRow, 0, dataFormatter)));
-            if (CollectionUtils.isEmpty(customers)) {
-                throw new RuntimeException("瀹㈡埛涓嶅瓨鍦�");
-            }
-            List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
-                    .eq(SysUser::getNickName, getStringCell(customerRow, 1, dataFormatter)));
-            if (CollectionUtils.isEmpty(sysUsers)) {
-                throw new RuntimeException("涓氬姟鍛樹笉瀛樺湪");
-            }
-
-            if (customerRow != null) {
-                result.setCustomer(getStringCell(customerRow, 0, dataFormatter));
-                result.setSalesperson(getStringCell(customerRow, 1, dataFormatter));
-                result.setQuotationDate(getStringCell(customerRow, 2, dataFormatter));
-                result.setValidDate(getStringCell(customerRow, 3, dataFormatter));
-                result.setPaymentMethod(getStringCell(customerRow, 4, dataFormatter));
-                result.setRemark(getStringCell(customerRow, 5, dataFormatter));
-            }
-
-            // 妯℃澘涓骇鍝佽〃澶村湪绗�7琛岋紝鏁版嵁浠庣8琛屽紑濮�
-            List<QuotationRecordJSON.ProductJSON> products = new ArrayList<>();
-            int startRow = 7;
-            for (int i = startRow; i <= sheet.getLastRowNum(); i++) {
-                Row row = sheet.getRow(i);
-                if (row == null) {
-                    continue;
-                }
-                String product = getStringCell(row, 0, dataFormatter);
-                String specification = getStringCell(row, 1, dataFormatter);
-                List<ProductModel> productModels = productModelMapper.selectList(new LambdaQueryWrapper<ProductModel>()
-                        .eq(ProductModel::getModel, specification));
-                if (CollectionUtils.isEmpty(productModels)) {
-                    throw new RuntimeException("浜у搧涓嶅瓨鍦�");
-                }
-                ProductModel productModel = productModels.get(0);
-
-                BigDecimal unitPrice = getDecimalCell(row, 2, dataFormatter);
-                if (isBlank(product) && isBlank(specification) && unitPrice == null) {
-                    continue;
-                }
-                QuotationRecordJSON.ProductJSON item = new QuotationRecordJSON.ProductJSON();
-                item.setProduct(product);
-                item.setSpecification(specification);
-                item.setUnit(productModel.getUnit());
-                item.setUnitPrice(unitPrice);
-                products.add(item);
-            }
-            result.setProducts(products);
-            // 澶勭悊鎶ヤ环鍗�
-            SalesQuotation salesQuotation = addOrUpdateApproveProcess(result, approveUserIdsJson);
-
-            Integer insertResult = quotationRecordsService.add(salesQuotation.getId(), result);
-            if (insertResult <= 0) {
-                throw new RuntimeException("鎶ヤ环璁板綍鏂板澶辫触");
-            }
-            return result;
-        } catch (Exception e) {
-            throw new RuntimeException("瀵煎叆閿�鍞姤浠锋ā鏉垮け璐ワ細" + e.getMessage(), e);
-        }
-    }
-
-    private SalesQuotation addOrUpdateApproveProcess(QuotationRecordJSON quotationRecordJSON, String approveUserIdsJson) {
-        List<SalesQuotation> salesQuotations = salesQuotationMapper.selectList(new LambdaQueryWrapper<SalesQuotation>()
-                .eq(SalesQuotation::getCustomer, quotationRecordJSON.getCustomer())
-                .eq(SalesQuotation::getStatus, "寰呭鎵�"));
-
-        if (CollectionUtils.isEmpty(salesQuotations)) {
-            LoginUser loginUser = SecurityUtils.getLoginUser();
-            SalesQuotation salesQuotation = new SalesQuotation();
-            String quotationNo = OrderUtils.countTodayByCreateTime(salesQuotationMapper, "QT", "quotation_no");
-            salesQuotation.setQuotationNo(quotationNo);
-            salesQuotation.setCustomer(quotationRecordJSON.getCustomer());
-            salesQuotation.setSalesperson(quotationRecordJSON.getSalesperson());
-            salesQuotation.setQuotationDate(LocalDate.parse(quotationRecordJSON.getQuotationDate()));
-            salesQuotation.setValidDate(LocalDate.parse(quotationRecordJSON.getValidDate()));
-            salesQuotation.setPaymentMethod(quotationRecordJSON.getPaymentMethod());
-            salesQuotation.setStatus("寰呭鎵�");
-            BigDecimal totalAmount = quotationRecordJSON.getProducts().stream()
-                    .map(QuotationRecordJSON.ProductJSON::getUnitPrice)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-            salesQuotation.setTotalAmount(totalAmount);
-            salesQuotationMapper.insert(salesQuotation);
-
-            List<SalesQuotationProduct> products = quotationRecordJSON.getProducts().stream().map(product -> {
-                SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct();
-                salesQuotationProduct.setProduct(product.getProduct());
-                salesQuotationProduct.setSpecification(product.getSpecification());
-                salesQuotationProduct.setUnit(product.getUnit());
-                salesQuotationProduct.setUnitPrice(product.getUnitPrice().doubleValue());
-                salesQuotationProduct.setSalesQuotationId(salesQuotation.getId());
-                return salesQuotationProduct;
-            }).collect(Collectors.toList());
-            salesQuotationProductService.saveBatch(products);
-            // 鎶ヤ环瀹℃壒
-            ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-            approveProcessVO.setApproveType(6);
-            approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
-            approveProcessVO.setApproveReason(quotationNo);
-            approveProcessVO.setApproveUserIds(approveUserIdsJson);
-            approveProcessVO.setApproveUser(loginUser.getUserId());
-            approveProcessVO.setApproveTime(LocalDate.now().toString());
-            approveProcessVO.setPrice(salesQuotation.getTotalAmount());
-            try {
-                approveProcessService.addApprove(approveProcessVO);
-            } catch (Exception e) {
-                log.error("SalesQuotationServiceImpl error:{}", e);
-                throw new RuntimeException("瀹℃壒澶辫触");
-            }
-            return salesQuotation;
-        } else {
-            if (salesQuotations.size() > 1) {
-                throw new RuntimeException("瀛樺湪澶氫釜寰呭鎵圭殑鎶ヤ环鍗�");
-            } else {
-                SalesQuotation salesQuotation = salesQuotations.get(0);
-                salesQuotation.setSalesperson(quotationRecordJSON.getSalesperson());
-                salesQuotation.setQuotationDate(LocalDate.parse(quotationRecordJSON.getQuotationDate()));
-                salesQuotation.setValidDate(LocalDate.parse(quotationRecordJSON.getValidDate()));
-                salesQuotation.setPaymentMethod(quotationRecordJSON.getPaymentMethod());
-                BigDecimal totalAmount = quotationRecordJSON.getProducts().stream()
-                        .map(QuotationRecordJSON.ProductJSON::getUnitPrice)
-                        .reduce(BigDecimal.ZERO, BigDecimal::add);
-                salesQuotation.setTotalAmount(totalAmount);
-                salesQuotationMapper.updateById(salesQuotation);
-
-                // 鍒犻櫎鍘熸潵鐨勬姤浠蜂骇鍝�
-                salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>()
-                        .eq(SalesQuotationProduct::getSalesQuotationId, salesQuotation.getId()));
-
-                List<SalesQuotationProduct> products = quotationRecordJSON.getProducts().stream().map(product -> {
-                    SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct();
-                    salesQuotationProduct.setProduct(product.getProduct());
-                    salesQuotationProduct.setSpecification(product.getSpecification());
-                    salesQuotationProduct.setUnit(product.getUnit());
-                    salesQuotationProduct.setUnitPrice(product.getUnitPrice().doubleValue());
-                    salesQuotationProduct.setSalesQuotationId(salesQuotation.getId());
-                    return salesQuotationProduct;
-                }).collect(Collectors.toList());
-                salesQuotationProductService.saveBatch(products);
-                return salesQuotation;
-            }
-        }
-    }
-
-    private String getStringCell(Row row, int columnIndex, DataFormatter dataFormatter) {
-        if (row == null) {
-            return null;
-        }
-        Cell cell = row.getCell(columnIndex);
-        if (cell == null) {
-            return null;
-        }
-        if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
-            return cell.getLocalDateTimeCellValue().toLocalDate().format(DateTimeFormatter.ISO_LOCAL_DATE);
-        }
-        String value = dataFormatter.formatCellValue(cell);
-        return isBlank(value) ? null : value.trim();
-    }
-
-    private BigDecimal getDecimalCell(Row row, int columnIndex, DataFormatter dataFormatter) {
-        String value = getStringCell(row, columnIndex, dataFormatter);
-        if (isBlank(value)) {
-            return null;
-        }
-        try {
-            return new BigDecimal(value.replace(",", ""));
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    private boolean isBlank(String value) {
-        return value == null || value.trim().isEmpty();
-    }
 }

--
Gitblit v1.9.3