From 6a298ac3319fa95cfe96cbab90983b2253e13dc2 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 24 七月 2025 19:16:52 +0800
Subject: [PATCH] 修改

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java |   89 +++++++++++++++++++++++++++++++++-----------
 1 files changed, 67 insertions(+), 22 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
index a99449f..f860599 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
@@ -26,6 +26,7 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
@@ -69,18 +70,23 @@
 
         String startTime = query.getStartTime();
         String endTime = query.getEndTime();
-        if (startTime == null || endTime == null) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (!StringUtils.hasLength(startTime) || !StringUtils.hasLength(endTime)) {
             if(Objects.isNull(query.getType())){
                 return R.fail("请选择时间");
             }
             switch (query.getType()){
                 case 1:
-                    startTime = DateUtils.getYearDate(new Date()).get("first").toString();
-                    endTime = DateUtils.getYearDate(new Date()).get("last").toString();
+                    Date startDate = DateUtils.getYearDate(new Date()).get("first");
+                    Date endDate = DateUtils.getYearDate(new Date()).get("last");
+                    startTime = format.format(startDate);
+                    endTime = format.format(endDate);
                     break;
                 case 2:
-                    startTime = DateUtils.getMonthDate(new Date()).get("first").toString();
-                    endTime = DateUtils.getMonthDate(new Date()).get("last").toString();
+                    Date startDate1 = DateUtils.getMonthDate(new Date()).get("first");
+                    Date endDate1 = DateUtils.getMonthDate(new Date()).get("last");
+                    startTime = format.format(startDate1);
+                    endTime = format.format(endDate1);
                     break;
             }
         }else {
@@ -137,19 +143,27 @@
         List<YcFinancialManagement> lastMonth = new ArrayList<>();
         List<YcFinancialManagement> lastYearMonth = new ArrayList<>();
         // 如果选择的是本月
-        if(query.getType() == 2){
+        if(Objects.nonNull(query.getType()) && query.getType() == 2){
             // 获取上个月的数据
             LocalDateTime localDateTime = DateUtils.dateToLocalDateTime(new Date()).minusMonths(1);
             Date date = DateUtils.localDateTimeToDate(localDateTime);
-            startTime = DateUtils.getMonthDate(date).get("first").toString();
-            endTime = DateUtils.getMonthDate(date).get("last").toString();
+
+            Date monthStartDate1 = DateUtils.getMonthDate(date).get("first");
+            Date monthEndDate1 = DateUtils.getMonthDate(date).get("last");
+
+            startTime = format.format(monthStartDate1);
+            endTime = format.format(monthEndDate1);
             lastMonth = ycFinancialManagementService.list(Wrappers.lambdaQuery(YcFinancialManagement.class)
                     .between(YcFinancialManagement::getPayTime, startTime, endTime));
             // 获取去年本月的数据
             LocalDateTime localDateTimeYear = DateUtils.dateToLocalDateTime(new Date()).minusYears(1);
             Date dateYear = DateUtils.localDateTimeToDate(localDateTimeYear);
-            startTime = DateUtils.getMonthDate(dateYear).get("first").toString();
-            endTime = DateUtils.getMonthDate(dateYear).get("last").toString();
+
+            Date monthStartDate2 = DateUtils.getMonthDate(dateYear).get("first");
+            Date monthEndDate2 = DateUtils.getMonthDate(dateYear).get("last");
+
+            startTime = format.format(monthStartDate2);
+            endTime = format.format(monthEndDate2);
             lastYearMonth = ycFinancialManagementService.list(Wrappers.lambdaQuery(YcFinancialManagement.class)
                     .between(YcFinancialManagement::getPayTime, startTime, endTime));
 
@@ -165,13 +179,21 @@
             // 环比
             BigDecimal lastMonthMoney = lastMonth.stream().filter(item -> item.getRevenueType() == 1).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal subtract = incomeSum.subtract(lastMonthMoney);
-            topDataStatisticsVO.setChain(subtract.divide(incomeSum, 2, RoundingMode.HALF_UP));
+            if(lastMonthMoney.compareTo(BigDecimal.ZERO) == 0){
+                topDataStatisticsVO.setChain(subtract.multiply(new BigDecimal(100)));
+            }else {
+                topDataStatisticsVO.setChain(subtract.divide(lastMonthMoney, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
+            }
         }
         if(!CollectionUtils.isEmpty(lastYearMonth)){
             // 同比
             BigDecimal lastYearMonthMoney = lastYearMonth.stream().filter(item -> item.getRevenueType() == 1).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal subtract = incomeSum.subtract(lastYearMonthMoney);
-            topDataStatisticsVO.setProportion(subtract.divide(incomeSum, 2, RoundingMode.HALF_UP));
+            if(lastYearMonthMoney.compareTo(BigDecimal.ZERO) == 0){
+                topDataStatisticsVO.setProportion(subtract.multiply(new BigDecimal(100)));
+            }else {
+                topDataStatisticsVO.setProportion(subtract.divide(lastYearMonthMoney, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
+            }
         }
 
         topDataStatisticsVOList.add(topDataStatisticsVO);
@@ -185,13 +207,21 @@
             // 环比
             BigDecimal lastMonthMoney = lastMonth.stream().filter(item -> item.getRevenueType() == 2).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal subtract = expensesSum.subtract(lastMonthMoney);
-            topDataStatisticsVO.setChain(subtract.divide(expensesSum, 2, RoundingMode.HALF_UP).negate());
+            if(lastMonthMoney.compareTo(BigDecimal.ZERO) == 0){
+                topDataStatisticsVO.setChain(subtract.multiply(new BigDecimal(100)));
+            }else {
+                topDataStatisticsVO.setChain(subtract.divide(lastMonthMoney, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
+            }
         }
         if(!CollectionUtils.isEmpty(lastYearMonth)){
             // 同比
             BigDecimal lastYearMonthMoney = lastYearMonth.stream().filter(item -> item.getRevenueType() == 2).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal subtract = expensesSum.subtract(lastYearMonthMoney);
-            topDataStatisticsVO.setProportion(subtract.divide(expensesSum, 2, RoundingMode.HALF_UP).negate());
+            if(lastYearMonthMoney.compareTo(BigDecimal.ZERO) == 0){
+                topDataStatisticsVO.setProportion(subtract.multiply(new BigDecimal(100)));
+            }else {
+                topDataStatisticsVO.setProportion(subtract.divide(lastYearMonthMoney, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
+            }
         }
         topDataStatisticsVOList.add(topDataStatisticsVO);
 
@@ -200,18 +230,28 @@
         topDataStatisticsVO = new TopDataStatisticsVO();
         topDataStatisticsVO.setType(3);
         topDataStatisticsVO.setAmount(profitSum);
-        if(!CollectionUtils.isEmpty(lastMonth) && !CollectionUtils.isEmpty(lastYearMonth)){
+        if(!CollectionUtils.isEmpty(lastMonth) || !CollectionUtils.isEmpty(lastYearMonth)){
             // 环比
             BigDecimal lastMonthMoneyIncome = lastMonth.stream().filter(item -> item.getRevenueType() == 1).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal lastMonthMoneyExpenses = lastMonth.stream().filter(item -> item.getRevenueType() == 2).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal monthProfitSum = lastMonthMoneyIncome.subtract(lastMonthMoneyExpenses);
-            BigDecimal chain = profitSum.subtract(monthProfitSum).divide(profitSum, 2, RoundingMode.HALF_UP);
+            BigDecimal chain;
+            if(monthProfitSum.compareTo(BigDecimal.ZERO) == 0){
+                chain = profitSum.subtract(monthProfitSum).multiply(new BigDecimal(100));
+            }else {
+                chain = profitSum.subtract(monthProfitSum).divide(monthProfitSum, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+            }
             topDataStatisticsVO.setChain(chain);
             // 同比
             BigDecimal lastYearMonthMoneyIncome = lastYearMonth.stream().filter(item -> item.getRevenueType() == 1).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal lastYearMonthMoneyExpenses = lastYearMonth.stream().filter(item -> item.getRevenueType() == 2).map(YcFinancialManagement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
             BigDecimal yearMonthProfitSum = lastYearMonthMoneyIncome.subtract(lastYearMonthMoneyExpenses);
-            BigDecimal proportion = profitSum.subtract(yearMonthProfitSum).divide(profitSum, 2, RoundingMode.HALF_UP);
+            BigDecimal proportion;
+            if(yearMonthProfitSum.compareTo(BigDecimal.ZERO) == 0){
+                proportion = profitSum.subtract(yearMonthProfitSum).multiply(new BigDecimal(100));
+            }else {
+                proportion = profitSum.subtract(yearMonthProfitSum).divide(yearMonthProfitSum, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+            }
             topDataStatisticsVO.setProportion(proportion);
 
         }
@@ -228,18 +268,23 @@
     public R<ExpensesIncomeStatisticsVO> expensesIncomeStatistics(@RequestBody DataStatisticsQuery query) {
         String startTime = query.getStartTime();
         String endTime = query.getEndTime();
-        if (startTime == null || endTime == null) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (!StringUtils.hasLength(startTime) || !StringUtils.hasLength(endTime)) {
             if(Objects.isNull(query.getType())){
                 return R.fail("请选择时间");
             }
             switch (query.getType()){
                 case 1:
-                    startTime = DateUtils.getYearDate(new Date()).get("first").toString();
-                    endTime = DateUtils.getYearDate(new Date()).get("last").toString();
+                    Date startDate = DateUtils.getYearDate(new Date()).get("first");
+                    Date endDate = DateUtils.getYearDate(new Date()).get("last");
+                    startTime = format.format(startDate);
+                    endTime = format.format(endDate);
                     break;
                 case 2:
-                    startTime = DateUtils.getMonthDate(new Date()).get("first").toString();
-                    endTime = DateUtils.getMonthDate(new Date()).get("last").toString();
+                    Date startDate1 = DateUtils.getMonthDate(new Date()).get("first");
+                    Date endDate1 = DateUtils.getMonthDate(new Date()).get("last");
+                    startTime = format.format(startDate1);
+                    endTime = format.format(endDate1);
                     break;
             }
         }

--
Gitblit v1.7.1