From beddea151f8995d56efa0e133ddfa4e567f5a671 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 14 五月 2026 14:28:58 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' of http://114.132.189.42:9002/r/product-inventory-management-after into dev_西宁_青铝绿行

---
 src/main/java/com/ruoyi/account/bean/vo/financial/FinLedgerRowVo.java             |    2 ++
 src/main/java/com/ruoyi/account/bean/dto/financial/FinVoucherDto.java             |    3 +++
 src/main/java/com/ruoyi/account/service/impl/financial/FinLedgerServiceImpl.java  |   33 ++++++++++++++++++++++++++++++++-
 src/main/resources/application-dev.yml                                            |    2 +-
 src/main/java/com/ruoyi/account/bean/vo/financial/FinVoucherDetailVo.java         |    3 +++
 src/main/java/com/ruoyi/account/service/impl/financial/FinVoucherServiceImpl.java |    8 ++++++++
 src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java                           |    1 +
 7 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/account/bean/dto/financial/FinVoucherDto.java b/src/main/java/com/ruoyi/account/bean/dto/financial/FinVoucherDto.java
index c7c6258..3f90ea2 100644
--- a/src/main/java/com/ruoyi/account/bean/dto/financial/FinVoucherDto.java
+++ b/src/main/java/com/ruoyi/account/bean/dto/financial/FinVoucherDto.java
@@ -1,6 +1,7 @@
 package com.ruoyi.account.bean.dto.financial;
 
 import com.ruoyi.account.pojo.financial.FinVoucher;
+import com.ruoyi.basic.dto.StorageBlobDTO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -17,4 +18,6 @@
      * 鍑瘉鏄庣粏鍒嗗綍銆�
      */
     private List<FinVoucherEntryDto> entries;
+
+    private List<StorageBlobDTO> storageBlobDTOs;
 }
diff --git a/src/main/java/com/ruoyi/account/bean/vo/financial/FinLedgerRowVo.java b/src/main/java/com/ruoyi/account/bean/vo/financial/FinLedgerRowVo.java
index d01baf5..da4131f 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/financial/FinLedgerRowVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/financial/FinLedgerRowVo.java
@@ -1,5 +1,6 @@
 package com.ruoyi.account.bean.vo.financial;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -9,6 +10,7 @@
  * 绉戠洰璐﹁鏁版嵁杩斿洖瀵硅薄銆�
  */
 @Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
 public class FinLedgerRowVo {
 
     /**
diff --git a/src/main/java/com/ruoyi/account/bean/vo/financial/FinVoucherDetailVo.java b/src/main/java/com/ruoyi/account/bean/vo/financial/FinVoucherDetailVo.java
index d1eab48..4b23545 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/financial/FinVoucherDetailVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/financial/FinVoucherDetailVo.java
@@ -2,6 +2,8 @@
 
 import com.ruoyi.account.pojo.financial.FinVoucher;
 import com.ruoyi.account.pojo.financial.FinVoucherEntry;
+import com.ruoyi.basic.dto.StorageBlobDTO;
+import com.ruoyi.basic.dto.StorageBlobVO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -18,4 +20,5 @@
      * 鍑瘉鍒嗗綍鍒楄〃銆�
      */
     private List<FinVoucherEntry> entries;
+    private List<StorageBlobVO> storageBlobVOList;
 }
diff --git a/src/main/java/com/ruoyi/account/service/impl/financial/FinLedgerServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/financial/FinLedgerServiceImpl.java
index a489c67..a36b241 100644
--- a/src/main/java/com/ruoyi/account/service/impl/financial/FinLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/financial/FinLedgerServiceImpl.java
@@ -41,7 +41,7 @@
         if (startMonth.isAfter(endMonth)) {
             throw new ServiceException("寮�濮嬫湀浠戒笉鑳藉ぇ浜庣粨鏉熸湀浠�");
         }
-        return buildLedgerRows(queryDto.getSubjectCode(), startMonth, endMonth, null, null);
+        return Collections.singletonList(buildGeneralLedgerTotalRow(queryDto.getSubjectCode(), startMonth, endMonth));
     }
 
     @Override
@@ -117,6 +117,37 @@
         return rows;
     }
 
+    private FinLedgerRowVo buildGeneralLedgerTotalRow(String subjectCode, YearMonth startMonth, YearMonth endMonth) {
+        LocalDate startDate = startMonth.atDay(1);
+        LocalDate endDate = endMonth.atEndOfMonth();
+
+        List<FinLedgerEntryRecordVo> openingEntries = finVoucherEntryMapper.listPostedEntriesBefore(
+                subjectCode, startDate, null, null
+        );
+        BigDecimal openingBalance = calculateBalance(openingEntries);
+
+        List<FinLedgerEntryRecordVo> currentPeriodEntries = finVoucherEntryMapper.listPostedEntries(
+                subjectCode, startDate, endDate, null, null
+        );
+
+        BigDecimal totalDebit = ZERO;
+        BigDecimal totalCredit = ZERO;
+        for (FinLedgerEntryRecordVo entry : currentPeriodEntries) {
+            totalDebit = totalDebit.add(money(entry.getDebit()));
+            totalCredit = totalCredit.add(money(entry.getCredit()));
+        }
+
+        BigDecimal endingBalance = openingBalance.add(totalDebit).subtract(totalCredit);
+        FinLedgerRowVo totalRow = new FinLedgerRowVo();
+        totalRow.setRowType("yearly_total");
+        totalRow.setDate(endDate);
+        totalRow.setDebit(money(totalDebit));
+        totalRow.setCredit(money(totalCredit));
+        totalRow.setBalance(money(endingBalance));
+        totalRow.setDirection(resolveDirection(endingBalance));
+        return totalRow;
+    }
+
     private Map<YearMonth, List<FinLedgerEntryRecordVo>> groupEntriesByMonth(List<FinLedgerEntryRecordVo> entries) {
         Map<YearMonth, List<FinLedgerEntryRecordVo>> map = new LinkedHashMap<>();
         for (FinLedgerEntryRecordVo entry : entries) {
diff --git a/src/main/java/com/ruoyi/account/service/impl/financial/FinVoucherServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/financial/FinVoucherServiceImpl.java
index 9e09020..b7548ef 100644
--- a/src/main/java/com/ruoyi/account/service/impl/financial/FinVoucherServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/financial/FinVoucherServiceImpl.java
@@ -15,6 +15,9 @@
 import com.ruoyi.account.pojo.financial.FinVoucher;
 import com.ruoyi.account.pojo.financial.FinVoucherEntry;
 import com.ruoyi.account.service.financial.FinVoucherService;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
@@ -38,6 +41,7 @@
 
     private final FinVoucherEntryMapper finVoucherEntryMapper;
     private final AccountSubjectMapper accountSubjectMapper;
+    private final FileUtil fileUtil;
 
     @Override
     public IPage<FinVoucher> pageList(Page<FinVoucher> page, FinVoucherPageDto queryDto) {
@@ -80,6 +84,8 @@
         }
         save(voucher);
         saveEntries(voucher.getId(), validEntries);
+        // 5. 淇濆瓨閿�鍞彴璐﹂檮浠�
+        fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.FIN_VOUCHER, voucher.getId(), dto.getStorageBlobDTOs());
         return true;
     }
 
@@ -113,6 +119,7 @@
         deleteWrapper.eq(FinVoucherEntry::getVoucherId, voucher.getId());
         finVoucherEntryMapper.delete(deleteWrapper);
         saveEntries(voucher.getId(), validEntries);
+        fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.FIN_VOUCHER, voucher.getId(), dto.getStorageBlobDTOs());
         return true;
     }
 
@@ -159,6 +166,7 @@
         FinVoucherDetailVo vo = new FinVoucherDetailVo();
         BeanUtils.copyProperties(voucher, vo);
         vo.setEntries(entries);
+        vo.setStorageBlobVOList(fileUtil.getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum.FIN_VOUCHER, id));
         return vo;
     }
 
diff --git a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
index 9c63efb..ef7e57c 100644
--- a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -204,6 +204,7 @@
     SALES_REFUND_AMOUNT_ORDER("sales_refund_amount_order"),
     SALES_RECEIPT_RETURN("sales_receipt_return"),
     ACCOUNT_EXPENSE("account_expense"),
+    FIN_VOUCHER("fin_voucher"),
     ACCOUNT_FILE("account_file");
 
     private final String type;
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index bda6bcf..6d34f6b 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -260,7 +260,7 @@
   upload-dir: D:/ruoyi/prod/uploads # 姝e紡鐩綍 鍚庢湡鍒犻櫎
   path: D:/ruoyi/prod/uploads # 涓婁紶鐩綍
   urlPrefix: /common # 閾炬帴鍓嶇紑
-  domain: http://127.0.0.1:7005 # 鍩熷悕鍓嶇紑
+  domain: http://127.0.0.1:7006 # 鍩熷悕鍓嶇紑
   expired: 120 # 杩囨湡鏃堕棿(鍗曚綅:鍒嗛挓)
   useLimit: 10 # 浣跨敤娆℃暟
   compress: true # 鏄惁鍘嬬缉

--
Gitblit v1.9.3