From e02dcb551f00acff083f7241cd815ac4016c01c7 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期六, 25 四月 2026 11:22:29 +0800
Subject: [PATCH] 修改销售台账关联附件

---
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                  |    3 +
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                  |    2 
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java    |   37 +++++++-----
 src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java            |    3 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java |   83 ++++++++++++++-------------
 src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java                    |   13 ++++
 src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java         |    3 
 src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java                |    5 +
 8 files changed, 89 insertions(+), 60 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
index aa75bce..cca8977 100644
--- a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -3,7 +3,10 @@
 public enum RecordTypeEnum {
     SHIPPING_INFO("shipping_info"),
     INSPECTION_TASK("inspection_task"),
-    PDA_VERSION("pda_version");
+    PDA_VERSION("pda_version"),
+    SALES_LEDGER("sales_ledger"),
+    SUPPLIER_MANAGE("supplier_manage"),
+    APPROVAL_PROCESS("approval_process");
 
     private final String type;
     RecordTypeEnum(String type) { this.type = type; }
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 05d2505..ceb3702 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -19,6 +21,7 @@
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.service.ICommonFileService;
 import com.ruoyi.sales.service.ISalesLedgerService;
+import com.ruoyi.sales.vo.SalesLedgerVo;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.annotations.ApiParam;
@@ -28,6 +31,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.basic.utils.FileUtil;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -55,6 +59,7 @@
     private ICommonFileService commonFileService;
     private InvoiceLedgerMapper invoiceLedgerMapper;
     private ReceiptPaymentMapper receiptPaymentMapper;
+    private final FileUtil fileUtil;
 
     /**
      * 瀵煎叆閿�鍞彴璐�
@@ -149,13 +154,13 @@
     @PostMapping("/export")
     public void export(HttpServletResponse response, SalesLedgerDto salesLedgerDto) {
         Page page = new Page(-1,-1);
-        IPage<SalesLedger> salesLedgerIPage = listPage(page, salesLedgerDto);
-        ExcelUtil<SalesLedger> util = new ExcelUtil<SalesLedger>(SalesLedger.class);
+        IPage<SalesLedgerVo> salesLedgerIPage = listPage(page, salesLedgerDto);
+        ExcelUtil<SalesLedgerVo> util = new ExcelUtil<SalesLedgerVo>(SalesLedgerVo.class);
         if(salesLedgerIPage == null){
             util.exportExcel(response, new ArrayList<>(), "閿�鍞彴璐︽暟鎹�");
             return;
         }
-        List<SalesLedger> list = salesLedgerIPage.getRecords();
+        List<SalesLedgerVo> list = salesLedgerIPage.getRecords();
         util.exportExcel(response, list, "閿�鍞彴璐︽暟鎹�");
     }
 
@@ -168,8 +173,8 @@
         Page page = new Page();
         page.setCurrent(-1);
         page.setSize(-1);
-        IPage<SalesLedger> salesLedgerIPage = listPage(page, salesLedgerDto);
-        ExcelUtil<SalesLedger> util = new ExcelUtil<SalesLedger>(SalesLedger.class);
+        IPage<SalesLedgerVo> salesLedgerIPage = listPage(page, salesLedgerDto);
+        ExcelUtil<SalesLedgerVo> util = new ExcelUtil<SalesLedgerVo>(SalesLedgerVo.class);
         util.exportExcel(response, salesLedgerIPage == null ? new ArrayList<>() : salesLedgerIPage.getRecords(), "瀵煎嚭寮�绁ㄧ櫥璁板垪琛�");
     }
 
@@ -251,8 +256,8 @@
      * 鏌ヨ閿�鍞彴璐﹀垪琛�
      */
     @GetMapping("/listPage")
-    public IPage<SalesLedger> listPage(Page page, SalesLedgerDto salesLedgerDto) {
-        IPage<SalesLedger> iPage = salesLedgerService.selectSalesLedgerListPage(page, salesLedgerDto);
+    public IPage<SalesLedgerVo> listPage(Page page, SalesLedgerDto salesLedgerDto) {
+        IPage<SalesLedgerVo> iPage = salesLedgerService.selectSalesLedgerListPage(page, salesLedgerDto);
 
         //  鏌ヨ缁撴灉涓虹┖,鐩存帴杩斿洖
         if (CollectionUtils.isEmpty(iPage.getRecords())) {
@@ -295,10 +300,10 @@
             }
         }
 
-        for (SalesLedger salesLedger : iPage.getRecords()) {
-            Long ledgerId = salesLedger.getId();
+        for (SalesLedgerVo salesLedgerVo : iPage.getRecords()) {
+            Long ledgerId = salesLedgerVo.getId();
             // 鍚堝悓鎬婚噾棰�
-            BigDecimal contractAmount = salesLedger.getContractAmount() == null ? BigDecimal.ZERO : salesLedger.getContractAmount();
+            BigDecimal contractAmount = salesLedgerVo.getContractAmount() == null ? BigDecimal.ZERO : salesLedgerVo.getContractAmount();
             // 寮�绁ㄦ�婚鍜屽洖娆炬�婚
             BigDecimal invoiceTotal = invoiceTotals.getOrDefault(ledgerId, BigDecimal.ZERO);
             BigDecimal receiptPaymentAmountTotal = receiptTotals.getOrDefault(ledgerId, BigDecimal.ZERO);
@@ -315,15 +320,17 @@
                 noReceiptPaymentAmountTotal = BigDecimal.ZERO;
             }
 
-            salesLedger.setNoInvoiceAmountTotal(noInvoiceAmountTotal);
-            salesLedger.setInvoiceTotal(invoiceTotal);
-            salesLedger.setReceiptPaymentAmountTotal(receiptPaymentAmountTotal);
-            salesLedger.setNoReceiptAmount(noReceiptPaymentAmountTotal);
+            salesLedgerVo.setNoInvoiceAmountTotal(noInvoiceAmountTotal);
+            salesLedgerVo.setInvoiceTotal(invoiceTotal);
+            salesLedgerVo.setReceiptPaymentAmountTotal(receiptPaymentAmountTotal);
+            salesLedgerVo.setNoReceiptAmount(noReceiptPaymentAmountTotal);
 
             //  濡傛灉宸茬粡鏈夎繃寮�绁ㄦ垨鍥炴鎿嶄綔,鍒欎笉鍏佽缂栬緫
             boolean hasInvoiceOperation = invoiceTotal.compareTo(BigDecimal.ZERO) > 0;
             boolean hasReceiptOperation = receiptPaymentAmountTotal.compareTo(BigDecimal.ZERO) > 0;
-            salesLedger.setIsEdit(!(hasInvoiceOperation || hasReceiptOperation));
+            salesLedgerVo.setIsEdit(!(hasInvoiceOperation || hasReceiptOperation));
+
+            salesLedgerVo.setStorageBlobVOs(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.FILE, RecordTypeEnum.SALES_LEDGER, ledgerId));
         }
 
         if (ObjectUtils.isNotEmpty(salesLedgerDto.getStatus())) {
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index 204f688..61773c2 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.basic.dto.StorageBlobDTO;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -58,4 +59,6 @@
 
     @Schema(description = "浜よ揣鏃ユ湡")
     private LocalDate deliveryDate;
+
+    private List<StorageBlobDTO> storageBlobDTOs;
 }
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
index 69140f3..9f49265 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -10,6 +10,7 @@
 import com.ruoyi.sales.dto.SalesTrendDto;
 import com.ruoyi.sales.dto.StatisticsTableDto;
 import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.vo.SalesLedgerVo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -52,7 +53,7 @@
      * @param salesLedgerDto
      * @return
      */
-    IPage<SalesLedger> selectSalesLedgerListPage(Page page, @Param("salesLedgerDto") SalesLedgerDto salesLedgerDto);
+    IPage<SalesLedgerVo> selectSalesLedgerListPage(Page page, @Param("salesLedgerDto") SalesLedgerDto salesLedgerDto);
 
     /**
      * 鎸夋湀浠界粺璁¤鍗曟暟銆侀攢鍞锛堟敮鎸佷骇鍝佸ぇ绫汇�佸鎴峰悕绉扮瓫閫夛級
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index 0ed193b..539e67c 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -11,6 +11,7 @@
 import com.ruoyi.sales.dto.SalesLedgerDto;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.vo.SalesLedgerVo;
 import org.springframework.web.multipart.MultipartFile;
 
 import jakarta.annotation.Nullable;
@@ -47,7 +48,7 @@
 
     List<MonthlyAmountDto> getAmountHalfYear(Integer type);
 
-    IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto);
+    IPage<SalesLedgerVo> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto);
 
     AjaxResult importData(MultipartFile file);
 
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 32d6069..9ba0e6f 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -10,10 +10,13 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.service.AccountIncomeService;
 import com.ruoyi.basic.dto.CustomerPrivatePoolDto;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.basic.mapper.CustomerPrivatePoolMapper;
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.basic.utils.FileUtil;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.SaleEnum;
 import com.ruoyi.common.exception.base.BaseException;
@@ -41,6 +44,7 @@
 import com.ruoyi.sales.mapper.*;
 import com.ruoyi.sales.pojo.*;
 import com.ruoyi.sales.service.ISalesLedgerService;
+import com.ruoyi.sales.vo.SalesLedgerVo;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
@@ -111,6 +115,7 @@
     private final PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper;
     private final SysUserMapper sysUserMapper;
     private final CustomerPrivatePoolMapper customerPrivatePoolMapper;
+    private final FileUtil fileUtil;
 
     @Override
     public List<SalesLedger> selectSalesLedgerList(SalesLedgerDto salesLedgerDto) {
@@ -317,7 +322,7 @@
     }
 
     @Override
-    public IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto) {
+    public IPage<SalesLedgerVo> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto) {
         return salesLedgerMapper.selectSalesLedgerListPage(page, salesLedgerDto);
     }
 
@@ -575,47 +580,43 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int addOrUpdateSalesLedger(SalesLedgerDto salesLedgerDto) {
-        try {
-            // 1. 鏍¢獙瀹㈡埛淇℃伅
-            CustomerPrivatePoolDto customer = customerPrivatePoolMapper.selectInfo(salesLedgerDto.getCustomerId());
-            if (customer == null) {
-                throw new BaseException("瀹㈡埛涓嶅瓨鍦�");
-            }
-
-            // 2. DTO杞珽ntity
-            SalesLedger salesLedger = convertToEntity(salesLedgerDto);
-            salesLedger.setCustomerName(customer.getCustomerName());
-            salesLedger.setTenantId(customer.getTenantId());
-            // 3. 鏂板鎴栨洿鏂颁富琛�
-            if (salesLedger.getId() == null) {
-                String contractNo = generateSalesContractNo();
-                salesLedger.setSalesContractNo(contractNo);
-                salesLedgerMapper.insert(salesLedger);
-            } else {
-                salesLedgerMapper.updateById(salesLedger);
-            }
-
-            // 4. 澶勭悊瀛愯〃鏁版嵁
-            List<SalesLedgerProduct> productList = salesLedgerDto.getProductData();
-            if (productList != null && !productList.isEmpty()) {
-                handleSalesLedgerProducts(salesLedger.getId(), productList, EnumUtil.fromCode(SaleEnum.class, salesLedgerDto.getType()));
-                updateMainContractAmount(
-                        salesLedger.getId(),
-                        productList,
-                        SalesLedgerProduct::getTaxInclusiveTotalPrice,
-                        salesLedgerMapper,
-                        SalesLedger.class
-                );
-            }
-
-            // 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
-            if (salesLedgerDto.getTempFileIds() != null && !salesLedgerDto.getTempFileIds().isEmpty()) {
-                migrateTempFilesToFormal(salesLedger.getId(), salesLedgerDto.getTempFileIds());
-            }
-            return 1;
-        } catch (IOException e) {
-            throw new BaseException("鏂囦欢杩佺Щ澶辫触: " + e.getMessage());
+        // 1. 鏍¢獙瀹㈡埛淇℃伅
+        CustomerPrivatePoolDto customer = customerPrivatePoolMapper.selectInfo(salesLedgerDto.getCustomerId());
+        if (customer == null) {
+            throw new BaseException("瀹㈡埛涓嶅瓨鍦�");
         }
+
+        // 2. DTO杞珽ntity
+        SalesLedger salesLedger = convertToEntity(salesLedgerDto);
+        salesLedger.setCustomerName(customer.getCustomerName());
+        salesLedger.setTenantId(customer.getTenantId());
+        // 3. 鏂板鎴栨洿鏂颁富琛�
+        if (salesLedger.getId() == null) {
+            String contractNo = generateSalesContractNo();
+            salesLedger.setSalesContractNo(contractNo);
+            salesLedgerMapper.insert(salesLedger);
+        } else {
+            salesLedgerMapper.updateById(salesLedger);
+        }
+
+        // 4. 澶勭悊瀛愯〃鏁版嵁
+        List<SalesLedgerProduct> productList = salesLedgerDto.getProductData();
+        if (productList != null && !productList.isEmpty()) {
+            handleSalesLedgerProducts(salesLedger.getId(), productList, EnumUtil.fromCode(SaleEnum.class, salesLedgerDto.getType()));
+            updateMainContractAmount(
+                    salesLedger.getId(),
+                    productList,
+                    SalesLedgerProduct::getTaxInclusiveTotalPrice,
+                    salesLedgerMapper,
+                    SalesLedger.class
+            );
+        }
+
+        // 5. 淇濆瓨鏂囦欢
+        if (salesLedgerDto.getStorageBlobDTOs() != null && !salesLedgerDto.getStorageBlobDTOs().isEmpty()) {
+            fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.SALES_LEDGER, salesLedger.getId(), salesLedgerDto.getStorageBlobDTOs());
+        }
+        return 1;
     }
 
     /**
diff --git a/src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java b/src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java
new file mode 100644
index 0000000..fb932f8
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java
@@ -0,0 +1,13 @@
+package com.ruoyi.sales.vo;
+
+import com.ruoyi.basic.dto.StorageBlobVO;
+import com.ruoyi.sales.pojo.SalesLedger;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SalesLedgerVo extends SalesLedger {
+
+    private List<StorageBlobVO> storageBlobVOs;
+}
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 84e1673..e08632a 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -42,7 +42,7 @@
         </where>
     </select>
 
-    <select id="selectSalesLedgerListPage" resultType="com.ruoyi.sales.pojo.SalesLedger">
+    <select id="selectSalesLedgerListPage" resultType="com.ruoyi.sales.vo.SalesLedgerVo">
         SELECT T1.id,
         T1.sales_contract_no,
         T1.customer_contract_no,

--
Gitblit v1.9.3