From 366b67926809852c1090f14c5a24fe00109a81b5 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期一, 28 七月 2025 17:59:52 +0800
Subject: [PATCH] yys  首页接口开发

---
 src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java                    |   35 ++
 src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java     |   29 ++
 src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java                 |    9 
 src/main/java/com/ruoyi/home/controller/HomeController.java              |   80 ++++++
 src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java              |   28 ++
 src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java           |    2 
 src/main/java/com/ruoyi/dto/MapDto.java                                  |   26 ++
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java           |  368 ++++++++++++++++++++++++++++
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java      |    4 
 src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java               |   29 ++
 src/main/java/com/ruoyi/home/service/HomeService.java                    |   28 ++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java   |   92 ++++--
 src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java |   32 ++
 13 files changed, 725 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
index 8ede335..02e9f45 100644
--- a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -6,6 +6,8 @@
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -14,6 +16,7 @@
  */
 @Data
 @TableName("approve_process")
+@ApiModel
 public class ApproveProcess{
     /**
      * 
@@ -24,6 +27,7 @@
     /**
      * 娴佺▼缂栧彿
      */
+    @ApiModelProperty(value = "娴佺▼缂栧彿")
     private String approveId;
 
     /**
@@ -44,6 +48,7 @@
     /**
      * 鐢宠閮ㄩ棬鍚嶇О
      */
+    @ApiModelProperty(value = "鐢宠閮ㄩ棬鍚嶇О")
     private String approveDeptName;
 
     /**
@@ -59,6 +64,7 @@
     /**
      * 鐢宠鍘熷洜
      */
+    @ApiModelProperty(value = "鐢宠鍘熷洜")
     private String approveReason;
 
     /**
@@ -75,6 +81,7 @@
      * 鐢宠鏃ユ湡
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鐢宠鏃ユ湡")
     private Date approveTime;
 
     /**
@@ -86,6 +93,7 @@
     /**
      * 瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜�
      */
+    @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜�")
     private Integer approveStatus;
 
     /**
@@ -107,6 +115,7 @@
     /**
      * 瀹℃壒澶囨敞
      */
+    @ApiModelProperty(value = "瀹℃壒澶囨敞")
     private String approveRemark;
 
     /**
diff --git a/src/main/java/com/ruoyi/dto/MapDto.java b/src/main/java/com/ruoyi/dto/MapDto.java
new file mode 100644
index 0000000..f6822a5
--- /dev/null
+++ b/src/main/java/com/ruoyi/dto/MapDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 10:37
+ */
+@Data
+@ApiModel
+public class MapDto {
+
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鏁伴噺")
+    private BigDecimal value;
+
+    @ApiModelProperty(value = "鍗犳瘮")
+    private String rate;
+
+}
diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
new file mode 100644
index 0000000..137b4b8
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -0,0 +1,80 @@
+package com.ruoyi.home.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.home.dto.AnalysisCustomerContractAmountsDto;
+import com.ruoyi.home.dto.HomeBusinessDto;
+import com.ruoyi.home.dto.QualityStatisticsDto;
+import com.ruoyi.home.dto.StatisticsReceivablePayableDto;
+import com.ruoyi.home.service.HomeService;
+import com.ruoyi.production.dto.SalesLedgerWorkDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:15
+ */
+@RestController
+@Api(tags = "棣栭〉缁熻")
+@RequestMapping("/home")
+public class HomeController extends BaseController {
+
+    @Autowired
+    private HomeService homeService;
+
+    @GetMapping("/business")
+    @Log(title = "閿�鍞�-閲囪喘-搴撳瓨鏁版嵁", businessType = BusinessType.OTHER)
+    @ApiOperation("閿�鍞�-閲囪喘-搴撳瓨鏁版嵁")
+    public AjaxResult business(HomeBusinessDto req) {
+        HomeBusinessDto homeBusinessDto = homeService.business();
+        return AjaxResult.success(homeBusinessDto);
+    }
+
+
+    @GetMapping("/analysisCustomerContractAmounts")
+    @Log(title = "瀹㈡埛鍚堝悓閲戦鍒嗘瀽", businessType = BusinessType.OTHER)
+    @ApiOperation("瀹㈡埛鍚堝悓閲戦鍒嗘瀽")
+    public AjaxResult analysisCustomerContractAmounts(AnalysisCustomerContractAmountsDto req) {
+        AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts = homeService.analysisCustomerContractAmounts();
+        return AjaxResult.success(analysisCustomerContractAmounts);
+    }
+
+    @GetMapping("/qualityStatistics")
+    @Log(title = "璐ㄩ噺鍒嗘瀽", businessType = BusinessType.OTHER)
+    @ApiOperation("璐ㄩ噺鍒嗘瀽")
+    public AjaxResult qualityStatistics(QualityStatisticsDto req) {
+        QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics();
+        return AjaxResult.success(qualityStatisticsDto);
+    }
+
+    @GetMapping("/todos")
+    @Log(title = "寰呭姙浜嬮」", businessType = BusinessType.OTHER)
+    @ApiOperation("寰呭姙浜嬮」")
+    public AjaxResult todos(ApproveProcess req) {
+        List<ApproveProcess> approveProcessList = homeService.todos();
+        return AjaxResult.success(approveProcessList);
+    }
+
+    @GetMapping("/statisticsReceivablePayable")
+    @Log(title = "搴旀敹搴斾粯缁熻", businessType = BusinessType.OTHER)
+    @ApiOperation("搴旀敹搴斾粯缁熻")
+    public AjaxResult statisticsReceivablePayable(StatisticsReceivablePayableDto req, @RequestParam(value = "type", defaultValue = "1") Integer type ) {
+        StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type);
+        return AjaxResult.success(statisticsReceivablePayable);
+    }
+
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java b/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java
new file mode 100644
index 0000000..4801705
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.dto.MapDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 10:31
+ */
+@Data
+@ApiModel
+public class AnalysisCustomerContractAmountsDto {
+
+    @ApiModelProperty(value = "鍚堝悓鎬婚噾棰�")
+    private BigDecimal sum;
+
+    @ApiModelProperty(value = "鏃ョ幆姣�")
+    private String chain;
+
+    @ApiModelProperty(value = "鍛ㄥ悓姣�")
+    private String yny;
+
+   private List<MapDto> item;
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java
new file mode 100644
index 0000000..9acd9c6
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java
@@ -0,0 +1,35 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:25
+ */
+@Data
+@ApiModel
+public class HomeBusinessDto {
+
+    @ApiModelProperty("鏈湀閿�鍞噾棰�")
+    private BigDecimal monthSaleMoney;
+
+    @ApiModelProperty("鏈湀閿�鍞湭寮�绁ㄩ噾棰�")
+    private BigDecimal monthSaleHaveMoney;
+
+    @ApiModelProperty("鏈湀閲囪喘閲戦")
+    private BigDecimal monthPurchaseMoney;
+
+    @ApiModelProperty("鏈湀閲囪喘鏈紑绁ㄩ噾棰�")
+    private BigDecimal monthPurchaseHaveMoney;
+
+    @ApiModelProperty("褰撳墠搴撳瓨鏁伴噺")
+    private BigDecimal inventoryNum;
+
+    @ApiModelProperty("浠婃棩搴撳瓨鏁伴噺")
+    private BigDecimal todayInventoryNum;
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java
new file mode 100644
index 0000000..970449a
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 11:22
+ */
+@Data
+@ApiModel
+public class QualityStatisticsDto {
+
+    @ApiModelProperty(value = "鍘熸潗鏂欏凡妫�娴嬫暟")
+    private BigDecimal supplierNum;
+
+    @ApiModelProperty(value = "鍑哄巶宸叉娴嬫暟")
+    private BigDecimal factoryNum;
+
+    @ApiModelProperty(value = "杩囩▼宸叉娴嬫暟")
+    private BigDecimal processNum;
+
+    private List<QualityStatisticsItem> item;
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java b/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java
new file mode 100644
index 0000000..38ca74a
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java
@@ -0,0 +1,28 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 11:27
+ */
+@Data
+@ApiModel
+public class QualityStatisticsItem {
+
+    @ApiModelProperty(value = "鍘熸潗鏂欎笉鍚堟牸鏁�")
+    private BigDecimal supplierNum;
+
+    @ApiModelProperty(value = "鍑哄巶涓嶅悎鏍兼暟")
+    private BigDecimal factoryNum;
+
+    @ApiModelProperty(value = "杩囩▼涓嶅悎鏍兼暟")
+    private BigDecimal processNum;
+
+    private String date;
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java b/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java
new file mode 100644
index 0000000..c929543
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 13:34
+ */
+@Data
+@ApiModel
+public class StatisticsReceivablePayableDto {
+
+    @ApiModelProperty("搴旀敹閲戦")
+    private BigDecimal receivableMoney;
+
+    @ApiModelProperty("搴斾粯閲戦")
+    private BigDecimal payableMoney;
+
+    @ApiModelProperty("棰勬敹閲戦")
+    private BigDecimal advanceMoney;
+
+    @ApiModelProperty("棰勪粯閲戦")
+    private BigDecimal prepayMoney;
+
+}
diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java
new file mode 100644
index 0000000..49e7530
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/service/HomeService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.home.service;
+
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.home.dto.AnalysisCustomerContractAmountsDto;
+import com.ruoyi.home.dto.HomeBusinessDto;
+import com.ruoyi.home.dto.QualityStatisticsDto;
+import com.ruoyi.home.dto.StatisticsReceivablePayableDto;
+
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:23
+ */
+public interface HomeService {
+
+
+    HomeBusinessDto business();
+
+
+    AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts();
+
+    QualityStatisticsDto qualityStatistics();
+
+    List<ApproveProcess> todos();
+
+    StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type);
+}
diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
new file mode 100644
index 0000000..d346d41
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -0,0 +1,368 @@
+package com.ruoyi.home.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.approve.mapper.ApproveProcessMapper;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.dto.MapDto;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.home.dto.*;
+import com.ruoyi.home.service.HomeService;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.mapper.SysDeptMapper;
+import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.pojo.PaymentRegistration;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.ReceiptPayment;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.*;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:23
+ */
+@Service
+@Slf4j
+public class HomeServiceImpl implements HomeService {
+
+    @Autowired
+    private SalesLedgerMapper salesLedgerMapper;
+
+    @Autowired
+    private PurchaseLedgerMapper purchaseLedgerMapper;
+
+    @Autowired
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+
+    @Autowired
+    private ProcurementRecordOutMapper procurementRecordOutMapper;
+
+    @Autowired
+    private ProcurementRecordMapper procurementRecordStorageMapper;
+
+    @Autowired
+    private QualityInspectMapper qualityStatisticsMapper;
+
+    @Autowired
+    private ApproveProcessMapper approveProcessMapper;
+
+    @Autowired
+    private ReceiptPaymentMapper receiptPaymentMapper;
+
+    @Autowired
+    private PaymentRegistrationMapper paymentRegistrationMapper;
+
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+
+    @Override
+    public HomeBusinessDto business() {
+        LocalDate now = LocalDate.now();
+        YearMonth currentMonth = YearMonth.from(now);
+        // 鍒涘缓LambdaQueryWrapper
+        LambdaQueryWrapper<SalesLedger> salesLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        salesLedgerLambdaQueryWrapper.ge(SalesLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay())  // 澶т簬绛変簬鏈湀绗竴澶�
+                .lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
+        List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(salesLedgerLambdaQueryWrapper);
+        // 鍚堣鍚堝悓閲戦
+        BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerProduct>();
+        salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 1)
+                .in(SalesLedgerProduct::getSalesLedgerId, salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList()));
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapper);
+        // 鏈紑绁ㄩ噾棰�
+        BigDecimal noInvoiceAmountTotal = salesLedgerProducts.stream().map(SalesLedgerProduct::getNoInvoiceAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        // 鍒涘缓LambdaQueryWrapper
+        LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ge(PurchaseLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay())  // 澶т簬绛変簬鏈湀绗竴澶�
+                .lt(PurchaseLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
+
+        // 鎵ц鏌ヨ骞惰绠楁�诲拰
+        List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(queryWrapper);
+
+        LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>();
+        salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 2)
+                .in(SalesLedgerProduct::getSalesLedgerId, purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList()));
+        List<SalesLedgerProduct> salesLedgerProductsCopy = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapperCopy);
+        // 鍚堣鍚堝悓閲戦
+        BigDecimal receiveAmount = purchaseLedgers.stream()
+                .map(PurchaseLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 鏈紑绁ㄩ噾棰�
+        BigDecimal unReceiptPaymentAmount = salesLedgerProductsCopy.stream()
+                .map(SalesLedgerProduct::getNoInvoiceAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        // 缁熻搴撳瓨
+        List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordStorageMapper.selectList(null);
+        BigDecimal stockAmount = procurementRecordStorages.stream()
+                .map(ProcurementRecordStorage::getInboundNum)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(null);
+        BigDecimal outboundAmount = procurementRecordOuts.stream()
+                .map(ProcurementRecordOut::getInboundNum)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal stock = stockAmount.subtract(outboundAmount);
+        // 鑾峰彇褰撳ぉ鍏ュ簱鏁伴噺
+        LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        procurementRecordStorageLambdaQueryWrapper.ge(ProcurementRecordStorage::getCreateTime, now)  // 澶т簬绛変簬褰撳ぉ
+                .lt(ProcurementRecordStorage::getCreateTime, now.plusDays(1)); // 灏忎簬鏄庡ぉ
+        List<ProcurementRecordStorage> procurementRecordStorages1 = procurementRecordStorageMapper.selectList(procurementRecordStorageLambdaQueryWrapper);
+        BigDecimal stockAmount1 = procurementRecordStorages1.stream()
+                .map(ProcurementRecordStorage::getInboundNum)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 鏋勫缓缁撴灉
+        HomeBusinessDto homeBusinessDto = new HomeBusinessDto();
+        homeBusinessDto.setMonthSaleMoney(contractAmount);
+        homeBusinessDto.setMonthSaleHaveMoney(noInvoiceAmountTotal);
+        homeBusinessDto.setMonthPurchaseMoney(receiveAmount);
+        homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount);
+        homeBusinessDto.setInventoryNum(stock);
+        homeBusinessDto.setTodayInventoryNum(stockAmount1);
+
+        return homeBusinessDto;
+    }
+
+    @Override
+    public AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts() {
+        List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(null);
+        // 鍚堣鍚堝悓閲戦
+        BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 璁$畻鍛ㄥ悓姣�
+        // 鑾峰彇褰撳墠鏃堕棿
+        LocalDate today = LocalDate.now();
+
+        // 鑾峰彇鏈懆鍛ㄤ竴
+        LocalDate startOfWeek = today.with(DayOfWeek.MONDAY);
+
+        // 鑾峰彇鏈懆鍛ㄦ棩
+        LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY);
+        List<SalesLedger> salesLedgers1 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+                .ge(SalesLedger::getEntryDate, startOfWeek)  // 澶т簬绛変簬鏈懆鍛ㄤ竴
+                .gt(SalesLedger::getEntryDate, endOfWeek));
+        BigDecimal weekContractAmount = salesLedgers1.stream().map(SalesLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 鑾峰彇鍘诲勾鏈懆鏃堕棿
+        LocalDate lastYearStartOfWeek = today.minusYears(1).with(DayOfWeek.MONDAY);
+        LocalDate lastYearEndOfWeek = today.minusYears(1).with(DayOfWeek.SUNDAY);
+        List<SalesLedger> salesLedgers2 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+                .ge(SalesLedger::getEntryDate, lastYearStartOfWeek)  // 澶т簬绛変簬鍘诲勾鏈懆鍛ㄤ竴
+                .gt(SalesLedger::getEntryDate, lastYearEndOfWeek));
+        BigDecimal lastYearWeekContractAmount = salesLedgers2.stream().map(SalesLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal subtract = weekContractAmount.subtract(lastYearWeekContractAmount);
+        String weekYny = "";
+        // 鍛ㄥ悓姣�
+        if(subtract.compareTo(BigDecimal.ZERO) == 0 || lastYearWeekContractAmount.compareTo(BigDecimal.ZERO) == 0){
+            weekYny = "0.00";
+        }else{
+            weekYny = String.format("%.2f", subtract.divide(lastYearWeekContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+
+        }
+
+        // 璁$畻鏃ョ幆姣�
+        LocalDate yesterday = today.minusDays(1);
+        LocalDate plusDays = today.plusDays(1);
+        List<SalesLedger> salesLedgers3 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+                .ge(SalesLedger::getEntryDate, today)  // 澶т簬绛変簬鏄ㄥぉ
+                .lt(SalesLedger::getEntryDate, plusDays));
+        BigDecimal yesterdayContractAmount = salesLedgers3.stream().map(SalesLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        List<SalesLedger> salesLedgers4 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+                .ge(SalesLedger::getEntryDate, yesterday)  // 澶т簬绛変簬鍘诲勾鏄ㄥぉ
+                .lt(SalesLedger::getEntryDate, today));
+        BigDecimal lastYearYesterdayContractAmount = salesLedgers4.stream().map(SalesLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal subtract1 = yesterdayContractAmount.subtract(lastYearYesterdayContractAmount);
+        // 鏃ョ幆姣�
+        String chain = "";
+        if(subtract1.compareTo(BigDecimal.ZERO) == 0 || lastYearYesterdayContractAmount.compareTo(BigDecimal.ZERO) == 0){
+            chain = "0.00";
+        }else{
+            chain = String.format("%.2f", subtract1.divide(lastYearYesterdayContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+        }
+
+
+        AnalysisCustomerContractAmountsDto analysisCustomerContractAmountsDto = new AnalysisCustomerContractAmountsDto();
+        analysisCustomerContractAmountsDto.setSum(contractAmount);
+        analysisCustomerContractAmountsDto.setYny(weekYny);
+        analysisCustomerContractAmountsDto.setChain(chain);
+
+        Map<String, BigDecimal> collect = salesLedgers.stream().collect(Collectors.groupingBy(SalesLedger::getCustomerName, Collectors.reducing(BigDecimal.ZERO,
+                SalesLedger::getContractAmount, BigDecimal::add)));
+        List<MapDto> mapDtos = new ArrayList<>();
+        collect.forEach((k,v)->{
+            MapDto mapDto = new MapDto();
+            mapDto.setName(k);
+            mapDto.setValue(v);
+            if(contractAmount.compareTo(new BigDecimal(0)) == 0){
+                mapDto.setRate("0");
+            }else{
+                mapDto.setRate(String.format("%.2f", v.divide(contractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))));
+            }
+            mapDtos.add(mapDto);
+        });
+        analysisCustomerContractAmountsDto.setItem(mapDtos);
+        return analysisCustomerContractAmountsDto;
+    }
+
+    @Override
+    public QualityStatisticsDto qualityStatistics() {
+        // 鑾峰彇涓�鍛ㄦ暟鎹�
+        // 鑾峰彇褰撳墠鏃堕棿
+        LocalDate today = LocalDate.now();
+        // 鑾峰彇鏈懆鍛ㄤ竴
+        LocalDate startOfWeek = today.with(DayOfWeek.MONDAY);
+        // 鑾峰彇鏈懆鍛ㄦ棩
+        LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY);
+        LambdaQueryWrapper<QualityInspect> qualityInspectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        qualityInspectLambdaQueryWrapper.ge(QualityInspect::getCheckTime, startOfWeek)
+                .gt(QualityInspect::getCheckTime, endOfWeek);
+        List<QualityInspect> qualityInspects = qualityStatisticsMapper.selectList(qualityInspectLambdaQueryWrapper);
+        QualityStatisticsDto qualityStatisticsDto = new QualityStatisticsDto();
+        qualityStatisticsDto.setSupplierNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(0)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+        qualityStatisticsDto.setProcessNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(1)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+        qualityStatisticsDto.setFactoryNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(2)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+        List<QualityStatisticsItem> qualityStatisticsItems = new ArrayList<>();
+        for (int j = 1; j < 8; j++) {
+            LocalDate endTime = startOfWeek.plusDays(j);
+            LocalDate startTime = endTime.minusDays(1);
+            QualityStatisticsItem qualityStatisticsItem = new QualityStatisticsItem();
+            qualityStatisticsItem.setDate(startTime.toString());
+            qualityStatisticsItem.setSupplierNum(qualityInspects.stream()
+                    .filter(item -> item.getInspectType().equals(0) && "涓嶅悎鏍�".equals(item.getCheckResult())
+                            && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                            && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                    .map(QualityInspect::getQuantity)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add)
+            );
+            qualityStatisticsItem.setFactoryNum(qualityInspects.stream()
+                    .filter(item -> item.getInspectType().equals(1) && "涓嶅悎鏍�".equals(item.getCheckResult())
+                            && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                            && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                    .map(QualityInspect::getQuantity)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add)
+            );
+            qualityStatisticsItem.setProcessNum(qualityInspects.stream()
+                    .filter(item -> item.getInspectType().equals(2) && "涓嶅悎鏍�".equals(item.getCheckResult())
+                            && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                            && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                    .map(QualityInspect::getQuantity)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add));
+            qualityStatisticsItems.add(qualityStatisticsItem);
+        }
+        qualityStatisticsDto.setItem(qualityStatisticsItems);
+        return qualityStatisticsDto;
+    }
+
+    @Override
+    public List<ApproveProcess> todos() {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveDelete, 0)
+                .eq(ApproveProcess::getApproveUserCurrentId, loginUser.getUserId())
+                .ne(ApproveProcess::getApproveStatus, 2)
+                .eq(ApproveProcess::getTenantId, loginUser.getTenantId());
+        return approveProcessMapper.selectList(approveProcessLambdaQueryWrapper);
+    }
+
+    /**
+     *
+     * @param type 1-鍛� 2-鏈� 3-瀛e害
+     * @return
+     */
+    @Override
+    public StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type) {
+        LocalDate today = LocalDate.now();
+        LocalDate startDate = null;
+        LocalDate endDate = null;
+        switch (type){
+            case 1:
+                // 鑾峰彇鏈懆鍛ㄤ竴
+                startDate = today.with(DayOfWeek.MONDAY);
+                // 鑾峰彇鏈懆鍛ㄦ棩
+                endDate = today.with(DayOfWeek.SUNDAY);
+                break;
+            case 2:
+                startDate = today.with(TemporalAdjusters.firstDayOfMonth());
+                endDate = today.with(TemporalAdjusters.lastDayOfMonth());
+                break;
+            case 3:
+                Month currentMonth = today.getMonth();
+                Month firstMonthOfQuarter = currentMonth.firstMonthOfQuarter();
+                Month lastMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
+
+                startDate = today.withMonth(firstMonthOfQuarter.getValue())
+                        .with(TemporalAdjusters.firstDayOfMonth());
+                endDate = today.withMonth(lastMonthOfQuarter.getValue())
+                        .with(TemporalAdjusters.lastDayOfMonth());
+                break;
+        }
+        // 搴旀敹
+        List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+                .ge(SalesLedger::getEntryDate, startDate)
+                .lt(SalesLedger::getEntryDate, endDate)
+        );
+        BigDecimal receivableMoney = salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 搴斾粯
+        List<PurchaseLedger> procurementRecords = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+                .ge(PurchaseLedger::getEntryDate, startDate)
+                .lt(PurchaseLedger::getEntryDate, endDate)
+        );
+        BigDecimal payableMoney = procurementRecords.stream().map(PurchaseLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 棰勬敹
+        List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(new LambdaQueryWrapper<ReceiptPayment>()
+                .ge(ReceiptPayment::getReceiptPaymentDate, startDate)
+                .lt(ReceiptPayment::getReceiptPaymentDate, endDate));
+        BigDecimal advanceMoney = receiptPayments.stream().map(ReceiptPayment::getReceiptPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 棰勪粯
+        List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new LambdaQueryWrapper<PaymentRegistration>()
+                .ge(PaymentRegistration::getPaymentDate, startDate)
+                .lt(PaymentRegistration::getPaymentDate, endDate));
+        BigDecimal prepayMoney = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        StatisticsReceivablePayableDto statisticsReceivablePayableDto = new StatisticsReceivablePayableDto();
+        statisticsReceivablePayableDto.setPayableMoney(payableMoney);
+        statisticsReceivablePayableDto.setReceivableMoney(receivableMoney);
+        statisticsReceivablePayableDto.setAdvanceMoney(advanceMoney);
+        statisticsReceivablePayableDto.setPrepayMoney(prepayMoney);
+
+        return statisticsReceivablePayableDto;
+    }
+}
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 8853bb0..a18d5c4 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -161,8 +161,8 @@
      * 杩戝崐骞村紑绁�,鍥炴閲戦
      */
     @GetMapping("/getAmountHalfYear")
-    public AjaxResult getAmountHalfYear() {
-        return AjaxResult.success(salesLedgerService.getAmountHalfYear());
+    public AjaxResult getAmountHalfYear(@RequestParam(value = "type",defaultValue = "1") Integer type) {
+        return AjaxResult.success(salesLedgerService.getAmountHalfYear(type));
     }
 
     /**
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index b38e4af..b4cf320 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -32,7 +32,7 @@
 
     List getTopFiveList();
 
-    List<MonthlyAmountDto> getAmountHalfYear();
+    List<MonthlyAmountDto> getAmountHalfYear(Integer type);
 
     IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto);
 }
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 b6c43ed..fa807c9 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -204,53 +204,77 @@
     }
 
     @Override
-    public List<MonthlyAmountDto> getAmountHalfYear() {
+    public List<MonthlyAmountDto> getAmountHalfYear(Integer type) {
         LocalDate now = LocalDate.now();
-        YearMonth currentMonth = YearMonth.from(now);
+        LocalDateTime currentDateTime = LocalDateTime.now();
 
-        List<MonthlyAmountDto> monthlyAmounts = new ArrayList<>();
+        // 鏍规嵁 type 纭畾鏌ヨ鐨勬椂闂撮棿闅旓紙澶╂暟锛夊拰鎬绘煡璇㈠ぉ鏁�
+        int daysPerPeriod;
+        int totalDays;
+        switch (type) {
+            case 1:
+                daysPerPeriod = 5;   // 姣�5澶╂煡涓�娆�
+                totalDays = 30;       // 6娆� 脳 5澶� = 30澶�
+                break;
+            case 2:
+                daysPerPeriod = 15;    // 姣�15澶╂煡涓�娆�
+                totalDays = 90;       // 6娆� 脳 15澶� = 90澶�
+                break;
+            case 3:
+                daysPerPeriod = 30;   // 姣�30澶╂煡涓�娆�
+                totalDays = 180;      // 6娆� 脳 30澶� = 180澶�
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid type value: " + type);
+        }
 
+        List<MonthlyAmountDto> result = new ArrayList<>();
+
+        // 寰幆6娆★紝姣忔鏌ヨ涓�涓椂闂存鐨勬暟鎹�
         for (int i = 0; i < 6; i++) {
-            YearMonth targetMonth = currentMonth.minusMonths(i);
-            LocalDate firstDayOfMonth = targetMonth.atDay(1);
-            LocalDate firstDayOfNextMonth = targetMonth.plusMonths(1).atDay(1);
+            // 璁$畻褰撳墠鏃堕棿娈电殑璧峰鍜岀粨鏉熸椂闂�
+            LocalDateTime endTime = currentDateTime.minusDays(i * daysPerPeriod);
+            LocalDateTime startTime = endTime.minusDays(daysPerPeriod);
 
-            LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
-            LocalDateTime startOfNextMonth = firstDayOfNextMonth.atStartOfDay();
+            // 鏌ヨ鍥炴閲戦
+            LambdaQueryWrapper<ReceiptPayment> receiptPaymentQuery = new LambdaQueryWrapper<>();
+            receiptPaymentQuery
+                    .ge(ReceiptPayment::getCreateTime, startTime)
+                    .lt(ReceiptPayment::getCreateTime, endTime);
+            List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(receiptPaymentQuery);
 
-            LambdaQueryWrapper<ReceiptPayment> receiptPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            receiptPaymentLambdaQueryWrapper.ge(ReceiptPayment::getCreateTime, startOfMonth)
-                    .lt(ReceiptPayment::getCreateTime, startOfNextMonth);
+            // 鏌ヨ寮�绁ㄩ噾棰�
+            LambdaQueryWrapper<InvoiceLedger> invoiceLedgerQuery = new LambdaQueryWrapper<>();
+            invoiceLedgerQuery
+                    .ge(InvoiceLedger::getCreateTime, startTime)
+                    .lt(InvoiceLedger::getCreateTime, endTime);
+            List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(invoiceLedgerQuery);
 
-            LambdaQueryWrapper<InvoiceLedger> invoiceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            invoiceLedgerLambdaQueryWrapper.ge(InvoiceLedger::getCreateTime, startOfMonth)
-                    .lt(InvoiceLedger::getCreateTime, startOfNextMonth);
-
-            // 鑾峰彇鍥炴閲戦
-            List<ReceiptPayment> receiptPaymentList = receiptPaymentMapper.selectList(receiptPaymentLambdaQueryWrapper);
-            //寮�绁ㄩ噾棰�
-            List<InvoiceLedger> invoiceLedgerList = invoiceLedgerMapper.selectList(invoiceLedgerLambdaQueryWrapper);
-
-            // 浣跨敤 Stream 姹傚拰
-            BigDecimal invoiceAmount = invoiceLedgerList.stream()
-                    .map(InvoiceLedger::getInvoiceTotal)
-                    .filter(Objects::nonNull)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-
-            BigDecimal receiptAmount = receiptPaymentList.stream()
+            // 璁$畻鍥炴鎬婚
+            BigDecimal receiptAmount = receiptPayments.stream()
                     .map(ReceiptPayment::getReceiptPaymentAmount)
                     .filter(Objects::nonNull)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
 
-            MonthlyAmountDto monthlyAmount = new MonthlyAmountDto();
-            monthlyAmount.setMonth(targetMonth.format(DateTimeFormatter.ofPattern("yyyy-MM")));
-            monthlyAmount.setInvoiceAmount(invoiceAmount);
-            monthlyAmount.setReceiptAmount(receiptAmount);
+            // 璁$畻寮�绁ㄦ�婚
+            BigDecimal invoiceAmount = invoiceLedgers.stream()
+                    .map(InvoiceLedger::getInvoiceTotal)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
 
-            monthlyAmounts.add(monthlyAmount);
+            // 鏋勯�犺繑鍥炵殑 DTO
+            MonthlyAmountDto dto = new MonthlyAmountDto();
+            dto.setMonth(startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " ~ " +
+                    endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            dto.setReceiptAmount(receiptAmount);
+            dto.setInvoiceAmount(invoiceAmount);
+
+            result.add(dto);
         }
-        Collections.reverse(monthlyAmounts);
-        return monthlyAmounts;
+
+        // 鍙嶈浆鍒楄〃锛屼娇鏃堕棿椤哄簭浠庢棭鍒版櫄
+        Collections.reverse(result);
+        return result;
     }
 
     @Override

--
Gitblit v1.9.3