xdd 3 dienas atpakaļ
vecāks
revīzija
e49d819dd2

+ 2 - 2
fs-admin/src/main/java/com/fs/api/controller/IndexStatisticsController.java

@@ -59,7 +59,7 @@ public class IndexStatisticsController {
     /**
      * 奖励金额top10
      */
-    @GetMapping("/rewardMoneyTopTen")
+    @PostMapping("/rewardMoneyTopTen")
     public R rewardMoneyTopTen(@RequestBody AnalysisPreviewQueryDTO param){
         List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = statisticsService1.rewardMoneyTopTen(param);
         return R.ok().put("data", rewardMoneyTopTenDTOS);
@@ -68,7 +68,7 @@ public class IndexStatisticsController {
     /**
      * 答题红包金额趋势图
      */
-    @GetMapping("/rewardMoneyTrend")
+    @PostMapping("/rewardMoneyTrend")
     public R rewardMoneyTrend(@RequestBody AnalysisPreviewQueryDTO param){
         List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = statisticsService1.rewardMoneyTrendDTO(param);
         return R.ok().put("data", rewardMoneyTrendDTOS);

+ 4 - 1
fs-service-system/src/main/java/com/fs/statis/dto/AnalysisPreviewQueryDTO.java

@@ -32,6 +32,9 @@ public class AnalysisPreviewQueryDTO implements Serializable {
      */
     private String sort;
 
-    private Integer dateType;
+    /**
+     * 0 按公司统计 1 按课程统计
+     */
+    private Integer dataType;
 
 }

+ 2 - 0
fs-service-system/src/main/java/com/fs/statis/dto/RewardMoneyTopTenDTO.java

@@ -7,6 +7,8 @@ import java.math.BigDecimal;
 
 @Data
 public class RewardMoneyTopTenDTO implements Serializable {
+    private Long courseId;
+    private String courseName;
     private Long companyId;
     private String companyName;
     private BigDecimal rewardMoney;

+ 2 - 0
fs-service-system/src/main/java/com/fs/statis/dto/RewardMoneyTrendDTO.java

@@ -8,4 +8,6 @@ import java.math.BigDecimal;
 @Data
 public class RewardMoneyTrendDTO implements Serializable {
     private BigDecimal rewardMoney;
+    private String x;
+    private String startDate;
 }

+ 10 - 0
fs-service-system/src/main/java/com/fs/statis/mapper/ConsumptionBalanceMapper.java

@@ -105,7 +105,17 @@ public interface ConsumptionBalanceMapper {
      */
     List<CourseStatsDTO> watchCourseTopTen(AnalysisPreviewQueryDTO param);
 
+    /**
+     * 奖励金额TOP10
+     * @param param 请求参数
+     * @return TOP10
+     */
     List<RewardMoneyTopTenDTO> rewardMoneyTopTen(AnalysisPreviewQueryDTO param);
 
+    /**
+     * 奖励金额趋势
+     * @param param 请求参数
+     * @return 趋势
+     */
     List<RewardMoneyTrendDTO> rewardMoneyTrendDTO(AnalysisPreviewQueryDTO param);
 }

+ 22 - 0
fs-service-system/src/main/java/com/fs/statis/service/impl/StatisticsServiceImpl.java

@@ -26,6 +26,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
 
     @Autowired
     private ICompanyCacheService companyCacheService;
+
     @Override
     public DealerAggregatedDTO dealerAggregated() {
         return consumptionBalanceMapper.dealerAggregated();
@@ -182,12 +183,33 @@ public class StatisticsServiceImpl implements IStatisticsService {
     @Override
     public List<RewardMoneyTopTenDTO> rewardMoneyTopTen(AnalysisPreviewQueryDTO param) {
         List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = consumptionBalanceMapper.rewardMoneyTopTen(param);
+        for (RewardMoneyTopTenDTO dto : rewardMoneyTopTenDTOS) {
+            if(dto.getCompanyId() != null) {
+                String companyName = companyCacheService.selectCompanyNameById(dto.getCompanyId());
+                dto.setCompanyName(companyName);
+            }
+            if(dto.getCourseId() != null){
+                String courseName = fsUserCourseCacheService.selectCourseNameByCourseId(dto.getCourseId());
+                dto.setCourseName(courseName);
+            }
+
+        }
         return rewardMoneyTopTenDTOS;
     }
 
     @Override
     public List<RewardMoneyTrendDTO> rewardMoneyTrendDTO(AnalysisPreviewQueryDTO param) {
         List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = consumptionBalanceMapper.rewardMoneyTrendDTO(param);
+
+        // 今日,昨日 格式为24小时
+        if(ObjectUtils.equals(param.getType(),0) || ObjectUtils.equals(param.getType(),1)){
+            rewardMoneyTrendDTOS = TrendDataFiller.fillRewardHourData(rewardMoneyTrendDTOS);
+            // 否则都是按天为维度的时间范围
+        } else {
+            rewardMoneyTrendDTOS = TrendDataFiller.fillRewardDateSegmentData(rewardMoneyTrendDTOS, param.getStartTime(), param.getEndTime());
+        }
+
+
         return rewardMoneyTrendDTOS;
     }
 }

+ 75 - 0
fs-service-system/src/main/java/com/fs/statis/service/utils/TrendDataFiller.java

@@ -1,7 +1,9 @@
 package com.fs.statis.service.utils;
 
+import com.fs.statis.dto.RewardMoneyTrendDTO;
 import com.fs.statis.dto.WatchEndPlayTrendDTO;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Collections;
@@ -12,6 +14,79 @@ import java.util.List;
  * 时序数据补全工具类
  */
 public class TrendDataFiller {
+    public static List<RewardMoneyTrendDTO> fillRewardHourData(List<RewardMoneyTrendDTO> data){
+
+        boolean[] hourExists = new boolean[24];
+
+        for (RewardMoneyTrendDTO dto : data) {
+            int hour = Integer.parseInt(dto.getStartDate());
+            if (hour >= 0 && hour < 24) {
+                hourExists[hour] = true;
+                dto.setX(String.valueOf(hour));
+            }
+        }
+
+        // 填充不存在的小时数据
+        for (int i = 0; i < 24; i++) {
+            if (!hourExists[i]) {
+                RewardMoneyTrendDTO dto = new RewardMoneyTrendDTO();
+                dto.setX(String.valueOf(i));
+                dto.setRewardMoney(BigDecimal.ZERO);
+                data.add(dto);
+            }
+        }
+
+        data.sort((a, b) -> {
+            int intA = Integer.parseInt(a.getX());
+            int intB = Integer.parseInt(b.getX());
+            return Integer.compare(intA, intB);
+        });
+        return data;
+    }
+
+    /**
+     * 填充日期段数据
+     * @param data
+     * @return
+     */
+    public static List<RewardMoneyTrendDTO> fillRewardDateSegmentData(List<RewardMoneyTrendDTO> data,String startDate,String endDate){
+        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
+        LocalDate end = LocalDate.parse(endDate, dateTimeFormatter);
+
+        LocalDate current = start;
+        while (!current.isAfter(end)) {
+            String dateStr = current.format(dateFormatter);
+            boolean found = false;
+
+            for (RewardMoneyTrendDTO dto : data) {
+                if (dateStr.equals(dto.getStartDate())) {
+                    found = true;
+                    dto.setX(dateStr);
+                    break;
+                }
+            }
+
+            if (!found) {
+                RewardMoneyTrendDTO dto = new RewardMoneyTrendDTO();
+                dto.setStartDate(dateStr);
+                dto.setX(dateStr);
+                dto.setRewardMoney(BigDecimal.ZERO);
+                data.add(dto);
+            }
+
+            current = current.plusDays(1);
+        }
+
+        data.sort((a, b) -> {
+            LocalDate dateA = LocalDate.parse(a.getX(), dateFormatter);
+            LocalDate dateB = LocalDate.parse(b.getX(), dateFormatter);
+            return dateA.compareTo(dateB);
+        });
+
+        return data;
+    }
 
     /**
      * 填充24小时类数据

+ 54 - 2
fs-service-system/src/main/resources/mapper/statis/ConsumptionBalanceMapper.xml

@@ -157,10 +157,62 @@
         LIMIT 10
     </select>
     <select id="rewardMoneyTopTen" resultType="com.fs.statis.dto.RewardMoneyTopTenDTO">
-
+        SELECT
+            -- 按公司
+            <if test="dataType == 0">
+                company_id,
+            </if>
+            -- 按课程
+            <if test="dataType == 1">
+                course_id,
+            </if>
+            SUM(money) as rewardMoney
+        FROM
+            company_red_package_logs
+        <where>
+            operate_type = 1
+            AND status = 1
+            <if test="startTime != null">
+                AND create_time <![CDATA[>=]]> #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND create_time <![CDATA[<]]> #{endTime}
+            </if>
+        </where>
+        GROUP BY
+            <if test="dataType == 0">
+                company_id
+            </if>
+            <if test="dataType == 1">
+                course_id
+            </if>
+        ORDER BY
+            rewardMoney DESC
+            LIMIT 10
     </select>
     <select id="rewardMoneyTrendDTO" resultType="com.fs.statis.dto.RewardMoneyTrendDTO">
-
+        select
+        --             今日/昨日 小时
+        <if test="type == 0 or type == 1">
+            DATE_FORMAT(create_time, '%H') AS start_date,
+        </if>
+        --                 本周/本月/上月 天
+        <if test="type == 2 or type == 3 or type == 4">
+            DATE_FORMAT(create_time, '%Y-%m-%d') AS start_date,
+        </if>
+               SUM(money) as rewardMoney
+        from company_red_package_logs
+        <where>
+            <if test="startTime != null">
+                create_time <![CDATA[>=]]> #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND create_time <![CDATA[<]]> #{endTime}
+            </if>
+            AND operate_type = 1
+            AND status = 1
+        </where>
+        group by start_date
     </select>
 
 </mapper>