Przeglądaj źródła

我的创客详情交易额趋势图

mac 2 lat temu
rodzic
commit
a4474e864f
22 zmienionych plików z 636 dodań i 505 usunięć
  1. 40 1
      kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/util/TotalDateUtil.java
  2. 0 8
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/dto/statUser/StatUserGetUserStatByDayOrMonthDTO.java
  3. 30 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/MchActPercentVO.java
  4. 9 9
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/PercentVO.java
  5. 7 22
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/StatUserGetUserStatByDayOrMonthVO.java
  6. 4 2
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/TrendVO.java
  7. 25 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/UserAddTrendVO.java
  8. 1 1
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/statUser/TrendTimesVO.java
  9. 5 9
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/controller/KxsStatUserController.java
  10. 25 1
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserActTradeMapper.java
  11. 13 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserNewTradeMapper.java
  12. 47 26
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java
  13. 30 1
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserActTradeService.java
  14. 13 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserNewTradeService.java
  15. 56 9
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserActTradeServiceImpl.java
  16. 26 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserNewTradeServiceImpl.java
  17. 151 221
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java
  18. 71 17
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserActTradeMapper.xml
  19. 32 0
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserNewTradeMapper.xml
  20. 43 168
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml
  21. 5 5
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsSchoolMenuServiceImpl.java
  22. 3 5
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserServiceImpl.java

+ 40 - 1
kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/util/TotalDateUtil.java

@@ -2,8 +2,11 @@ package com.kxs.common.core.util;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import com.google.common.collect.Lists;
 
 import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 仓库模块 日期操作
@@ -28,10 +31,46 @@ public class TotalDateUtil {
      *
      * @return {@link String}
      */
-
     public static Integer getMonthNumber(LocalDate date){
 
         return Integer.valueOf(LocalDateTimeUtil.format(date, DatePattern.SIMPLE_MONTH_PATTERN));
     }
 
+    /**
+     * 获取过去某几个的月份列表
+     *
+     * @param date 日期
+     * @return {@link Integer}
+     */
+    public static List<Integer> getMonthList(LocalDate date, Integer num){
+
+        List<Integer> times = Lists.newArrayList();
+        for (int i = 0; i < num; i++) {
+            // 计算过去半年每月月份
+            LocalDate currentDay = date.minusMonths(i);
+
+            times.add(getMonthNumber(currentDay));
+        }
+        return times;
+    }
+
+    /**
+     * 获取过去某几天的日列表
+     *
+     * @param date 日期
+     * @return {@link List}<{@link Integer}>
+     */
+    public static List<Integer> getDayList(LocalDate date, Integer num){
+
+        List<Integer> times = Lists.newArrayList();
+
+        for (int i = 0; i < num; i++) {
+            // 计算每一天的日期
+            LocalDate currentDay = date.minusDays(i);
+            //获取当前日的月份值
+            times.add(getDateNumber(currentDay));
+        }
+        return times;
+    }
+
 }

+ 0 - 8
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/dto/statUser/StatUserGetUserStatByDayOrMonthDTO.java

@@ -29,12 +29,4 @@ public class StatUserGetUserStatByDayOrMonthDTO {
     @NotNull(message = "获取类型不能为空")
     private Integer type;
 
-
-    /**
-     * 统计类型  0个人  1团队
-     */
-    @Schema(description = "统计类型  0个人  1团队")
-    @NotNull(message = "统计类型不能为空")
-    private Integer totalType;
-
 }

+ 30 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/MchActPercentVO.java

@@ -0,0 +1,30 @@
+package com.kxs.stat.api.vo.myUser;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ *   用户详情-获取用户统计数据vo - 激活商户占比
+ *   @author Pota1ovO
+ *   @date 2024-05-15 11:18:44
+ */
+@Data
+public class MchActPercentVO {
+
+    /**
+     * 类型名
+     */
+    private String name;
+
+    /**
+     * 激活商户占比
+     */
+    private Integer actNum;
+
+    /**
+     * 品牌 ID
+     */
+    private Integer brandId;
+
+}

+ 9 - 9
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/statUser/PercentVO.java → kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/PercentVO.java

@@ -1,30 +1,30 @@
-package com.kxs.stat.api.vo.statUser;
+package com.kxs.stat.api.vo.myUser;
 
 import lombok.Data;
 
 import java.math.BigDecimal;
 
 /**
- *   用户详情-获取用户统计数据vo - 百分比数据vo
+ *   用户详情-获取用户统计数据vo - 交易占比数据
  *   @author Pota1ovO
  *   @date 2024-05-15 11:18:44
  */
 @Data
 public class PercentVO {
+
     /**
      * 类型名
      */
     private String name;
-    /**
-     * 占比 %
-     */
-    private BigDecimal percent;
+
     /**
      * 交易额
      */
-    private BigDecimal amount;
+    private BigDecimal tradeAmt;
+
     /**
-     * 激活数
+     * 品牌 ID
      */
-    private Integer total;
+    private Integer brandId;
+
 }

+ 7 - 22
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/statUser/StatUserGetUserStatByDayOrMonthVO.java → kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/StatUserGetUserStatByDayOrMonthVO.java

@@ -1,4 +1,4 @@
-package com.kxs.stat.api.vo.statUser;
+package com.kxs.stat.api.vo.myUser;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -6,8 +6,8 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户详情-获取用户统计数据vo
@@ -27,49 +27,34 @@ public class StatUserGetUserStatByDayOrMonthVO implements Serializable {
      * 交易分类百分比
      */
     @Schema(description = "交易分类百分比")
-    private List<PercentVO> treadePercent;
-
-
-    /**
-     * 交易总额
-     */
-    @Schema(description = "交易总额")
-    private BigDecimal treadeTotal;
+    private List<PercentVO> tradePercent;
 
 
     /**
      * 交易趋势数据
      */
     @Schema(description = "交易趋势数据")
-    private List<TrendVO> treadeTrend;
+    private List<TrendVO> tradeTrend;
 
 
     /**
      * 激活商户占比
      */
     @Schema(description = "激活商户占比")
-    private List<PercentVO> actMerchantPercent;
-
-
-    /**
-     * 激活商户总数
-     */
-    @Schema(description = "激活商户总数")
-    private Integer actMerchantTotal;
-
+    private List<MchActPercentVO> actMchPercent;
 
     /**
      * 激活商户趋势数据
      */
     @Schema(description = "激活商户趋势数据")
-    private List<TrendVO> actMerchantTrend;
+    private List<TrendVO> mchAddTrend;
 
 
     /**
      * 新增用户趋势
      */
     @Schema(description = "新增用户趋势")
-    private TrendVO userAddTrend;
+    private List<UserAddTrendVO> userAddTrend;
 
 
 

+ 4 - 2
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/statUser/TrendVO.java → kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/TrendVO.java

@@ -1,8 +1,10 @@
-package com.kxs.stat.api.vo.statUser;
+package com.kxs.stat.api.vo.myUser;
 
 import lombok.Data;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户详情-获取用户统计数据vo  趋势分类数据vo
@@ -18,5 +20,5 @@ public class TrendVO {
     /**
      * 趋势类型数据
      */
-    private List<TrendTimesVO> times;
+    private List<Map<String, Object>> times;
 }

+ 25 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/myUser/UserAddTrendVO.java

@@ -0,0 +1,25 @@
+package com.kxs.stat.api.vo.myUser;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户详情-获取用户统计数据vo  新增用户趋势
+ *   @author Pota1ovO
+ *   @date 2024-05-15 11:18:44
+ */
+@Data
+public class UserAddTrendVO {
+
+    /**
+     * 日期
+     */
+    private Integer time;
+
+    /**
+     * 数量
+     */
+    private Integer num;
+}

+ 1 - 1
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/statUser/TrendTimesVO.java

@@ -14,7 +14,7 @@ public class TrendTimesVO {
     /**
      * 趋势统计时间  格式  yyyyMMdd   Or  yyyyMM
      */
-    private String time;
+    private Integer time;
     /**
      * 交易金额
      */

+ 5 - 9
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/controller/KxsStatUserController.java

@@ -1,25 +1,21 @@
 package com.kxs.stat.biz.controller;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.common.core.util.R;
-
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.stat.api.dto.statUser.StatUserGetMyTradeDTO;
-
 import com.kxs.stat.api.dto.statUser.StatUserGetTradeDetailDTO;
 import com.kxs.stat.api.dto.statUser.StatUserGetUserStatByDayOrMonthDTO;
 import com.kxs.stat.api.dto.statUser.StatUserGetUserTradeListDTO;
-import com.kxs.stat.api.model.KxsUserActTrade;
 import com.kxs.stat.biz.service.KxsMerchantTradeService;
 import com.kxs.stat.biz.service.KxsUserActTradeService;
 import com.kxs.stat.biz.service.KxsUserTradeService;
-
-import io.swagger.v3.oas.annotations.parameters.RequestBody;
 import jakarta.validation.Valid;
-import org.springdoc.core.annotations.ParameterObject;
-import org.springframework.web.bind.annotation.*;
-
 import lombok.RequiredArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+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;
 
 /**
  * 我的创客(StatUser)控制层

+ 25 - 1
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserActTradeMapper.java

@@ -2,7 +2,8 @@ package com.kxs.stat.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kxs.stat.api.model.KxsUserActTrade;
-import com.kxs.stat.api.vo.statUser.PercentVO;
+import com.kxs.stat.api.vo.myUser.MchActPercentVO;
+import com.kxs.stat.api.vo.myUser.PercentVO;
 import com.kxs.stat.api.vo.statUser.TrendTimesVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -81,5 +82,28 @@ public interface KxsUserActTradeMapper extends BaseMapper<KxsUserActTrade> {
      * @return
      */
     Integer getUserActListByAll(@Param("userId") Long userId, @Param("totalType")  Integer totalType, @Param("type") Integer type,@Param("toMonth") Integer toMonth, @Param("month") Integer month);
+
+    /**
+     * 创客详情-激活商户占比 按日和月查询
+     *
+     * @param userId 用户 ID
+     * @param times  次
+     * @param dateType   类型 0月 1天
+     * @param totalType   类型 1团队 0个人
+     * @return {@link List}<{@link MchActPercentVO}>
+     */
+    List<MchActPercentVO> getMchActTimePercent(@Param("userId") Long userId, @Param("times") List<Integer> times, @Param("dateType") Integer dateType, @Param("totalType") Integer totalType);
+
+    /**
+     * 创客详情-激活商户趋势图 按日和月查询
+     *
+     * @param userId 用户 ID
+     * @param times  次
+     * @param dateType   类型 0月 1天
+     * @param totalType   类型 1团队 0个人
+     * @return {@link List}<{@link TrendTimesVO}>
+     */
+    List<TrendTimesVO> getAddActMchTrend(@Param("userId") Long userId, @Param("times") List<Integer> times, @Param("dateType") Integer dateType, @Param("totalType") Integer totalType);
+
 }
 

+ 13 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserNewTradeMapper.java

@@ -2,7 +2,9 @@ package com.kxs.stat.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kxs.stat.api.model.KxsUserNewTrade;
+import com.kxs.stat.api.vo.myUser.UserAddTrendVO;
 import com.kxs.stat.api.vo.statUser.TrendTimesVO;
+import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -27,5 +29,16 @@ public interface KxsUserNewTradeMapper extends BaseMapper<KxsUserNewTrade> {
     List<TrendTimesVO> getUserAddTrend(@Param("userId") Long userId, @Param("times") List<String> times,@Param("type") Integer type,@Param("totalType") Integer totalType);
 
     Integer getUserAllTrend(@Param("userId")Long userId, @Param("type")Integer type);
+
+    /**
+     * 创客详情-新增创客趋势图 按日和月查询
+     *
+     * @param userId 用户 ID
+     * @param times  次
+     * @param dateType   类型 0月 1天
+     * @param totalType   类型 1团队 0个人
+     * @return {@link List}<{@link TrendTimesVO}>
+     */
+    List<UserAddTrendVO> getAddUserTrend(@Param("userId") Long userId, @Param("times") List<Integer> times, @Param("dateType") Integer dateType, @Param("totalType") Integer totalType);
 }
 

+ 47 - 26
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java

@@ -5,9 +5,8 @@ import com.kxs.stat.api.dto.statUser.StatUserGetMyTradeDTO;
 import com.kxs.stat.api.model.KxsUserTrade;
 import com.kxs.stat.api.vo.ShdTradeAmtVO;
 import com.kxs.stat.api.vo.TotalTradeAmtVO;
-import com.kxs.stat.api.vo.statUser.PercentVO;
+import com.kxs.stat.api.vo.myUser.PercentVO;
 import com.kxs.stat.api.vo.statUser.StatUserBrandTradeVO;
-import com.kxs.stat.api.vo.statUser.StatUserGetHomeAmoutVO;
 import com.kxs.stat.api.vo.statUser.TrendTimesVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -45,6 +44,14 @@ public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
      */
     void createTemporaryShdTable(String tableName);
 
+    /**
+     * 删除临时表
+     *
+     * @param tempTableName 临时表名称
+     */
+    void removeTempTable(String tempTableName);
+
+
     ShdTradeAmtVO getTempShdTableData(@Param("tableName") String tableName, @Param("userId") Integer userId);
 
     void updateTempShdTableData(@Param("tableName") String tableName, @Param("data") ShdTradeAmtVO shdTradeAmtVO);
@@ -55,39 +62,49 @@ public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
 
     BigDecimal getStatAmount(String tableName);
 
-    void removeTempTable(String tempTableName);
+
 
     /**
-     * 查询用户全部交易额根据日期分组以及或根据品牌分组
+     * 创客详情-获取用户交易趋势图 按照品牌分组
+     *
      * @param tableName 表名
-     * @param times 查询日期  日  type = 2时可不传
-     * @param userId 用户id
-     * @param brandId 是否根据品牌分组  否:null  是:随意传值
-     * @Param type 根据类型查询日期  1 日  2月
-     * @Param totalType 0 个人 1团队
-     * @return
+     * @param userId    用户 ID
+     * @param totalType 总类型
+     * @return {@link List}<{@link TrendTimesVO}>
      */
-    List<TrendTimesVO> getUserTradeListByDayOrMonth(@Param("tableName") String tableName, @Param("times") List<String> times, @Param("userId") Long userId, @Param("brandId") Integer brandId, @Param("type") Integer type,@Param("totalType") Integer totalType);
+    List<TrendTimesVO> getUserTradeMonthTrend(@Param("tableName") String tableName, @Param("userId") Long userId, @Param("totalType") Integer totalType);
 
     /**
-     * 获取传入日期的交易额根据品牌分组
-     * @param userId
-     * @param times 查询时间列表
+     * 创客详情-获取用户交易趋势图 按照品牌和天分组
+     *
+     * @param tableName 表名
+     * @param userId    用户 ID
+     * @param tradeDate 交易日期
+     * @param totalType 总类型
+     * @return {@link List}<{@link TrendTimesVO}>
+     */
+    List<TrendTimesVO> getUserTradeDayTrend(@Param("tableName") String tableName,
+                                            @Param("userId") Long userId,
+                                            @Param("tradeDate") Integer tradeDate,
+                                            @Param("totalType") Integer totalType);
+
+    /**
+     * 创客详情-用户交易分品牌占比 按月查询
+     * @param userId 用户ID
      * @param totalType  0个人 1团体
-     * @param type 1日查询 2月查询
-     * @return
      */
-    List<PercentVO> getUserTradeTotal(@Param("tableName")String tableName,@Param("userId") Long userId,@Param("times") List<String> times,@Param("type") Integer type,@Param("totalType") Integer totalType);
+    List<PercentVO> getUserTradeMonthTotal(@Param("tableName")String tableName, @Param("userId") Long userId, @Param("totalType") Integer totalType);
 
     /**
-     * 获取首页交易额
-     * @param userId
-     * @param tableName 表名
-     * @param date 交易日
-     * @param month 交易月
-     * @return
+     * 创客详情-用户交易分品牌占比 按日查询
+     * @param userId 用户ID
+     * @param totalType  0个人 1团体
      */
-    StatUserGetHomeAmoutVO getHomeAmout(@Param("userId")Long userId, @Param("tableName")String tableName,@Param("date")String date,@Param("month")String month);
+    List<PercentVO> getUserTradeDayTotal(@Param("tableName")String tableName,
+                                         @Param("userId") Long userId,
+                                         @Param("tradeDate") Integer tradeDate,
+                                         @Param("totalType") Integer totalType);
+
 
     /**
      * 获取月或日pos交易额
@@ -106,7 +123,11 @@ public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
      * @param date 该参数为是否根据日查询   不根据传""
      * @return
      */
-    KxsUserTrade getMyPosOrCloudTrade(@Param("param")StatUserGetMyTradeDTO param, @Param("tableName")String tableName, @Param("tradeType")Integer tradeType,@Param("userId")Long userId,@Param("date") String date);
+    KxsUserTrade getMyPosOrCloudTrade(@Param("param")StatUserGetMyTradeDTO param,
+                                      @Param("tableName")String tableName,
+                                      @Param("tradeType")Integer tradeType,
+                                      @Param("userId")Long userId,
+                                      @Param("date") String date);
 
     /**
      * 查询用户所有交易额汇总
@@ -118,7 +139,7 @@ public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
      * @param totalType 0:个人 1:计奖
      * @return
      */
-    KxsUserTrade getAllUserTrderSum(@Param("userId")Long userId,
+    KxsUserTrade getAllUserTradeSum(@Param("userId")Long userId,
                                     @Param("date") Integer date,
                                     @Param("getType") Integer getType,
                                     @Param("tradeType")Integer tradeType,

+ 30 - 1
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserActTradeService.java

@@ -1,13 +1,16 @@
 package com.kxs.stat.biz.service;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.common.core.util.R;
+import com.kxs.product.api.model.KxsBrand;
 import com.kxs.stat.api.dto.statUser.GetActivityStatByIdAndTimeDTO;
 import com.kxs.stat.api.model.KxsUserActTrade;
 import com.kxs.stat.api.vo.GetActivityStatByIdAndTimeVO;
+import com.kxs.stat.api.vo.myUser.TrendVO;
+import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 创客激活统计表(KxsUserActTrade)表服务接口
@@ -18,8 +21,34 @@ import java.util.List;
 public interface KxsUserActTradeService extends IService<KxsUserActTrade> {
 
 
+    /**
+     * 百城千团活动期间团队激活商户统计
+     *
+     * @param param 参数
+     * @return {@link List}<{@link GetActivityStatByIdAndTimeVO}>
+     */
     List<GetActivityStatByIdAndTimeVO> getActivityStatByIdAndTime(List<GetActivityStatByIdAndTimeDTO> param);
 
+    /**
+     * 计奖交易-激活商户统计
+     *
+     * @param totalType 总类型
+     * @param userId    用户 ID
+     * @param month     月
+     * @return {@link R}
+     */
     R getActivateMerchantList(Integer totalType,Long userId,String month);
+
+    /**
+     * 获取 Add ACT MCH 趋势
+     *
+     * @param userId    用户 ID
+     * @param times     次
+     * @param dateType  日期类型 0月 1日
+     * @param totalType 统计类型枚举
+     * @param brandMap 品牌map
+     * @return {@link List}<{@link TrendVO}>
+     */
+    List<TrendVO> getAddActMchTrend(Long userId, List<Integer> times, Integer dateType, TotalTypeEnum totalType, Map<Integer, KxsBrand> brandMap);
 }
 

+ 13 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserNewTradeService.java

@@ -2,6 +2,9 @@ package com.kxs.stat.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.stat.api.model.KxsUserNewTrade;
+import com.kxs.stat.api.vo.myUser.UserAddTrendVO;
+
+import java.util.List;
 
 /**
  * 创客新增统计表(KxsUserNewTrade)表服务接口
@@ -11,5 +14,15 @@ import com.kxs.stat.api.model.KxsUserNewTrade;
  */
 public interface KxsUserNewTradeService extends IService<KxsUserNewTrade> {
 
+    /**
+     * 创客详情-新增用户趋势图
+     *
+     * @param userId 用户 ID
+     * @param times  次
+     * @param dateType    查询日期类型 0月 1日
+     * @param totalType   类型 1团队
+     * @return {@link List}<{@link UserAddTrendVO}>
+     */
+    List<UserAddTrendVO> getAddUserTrend(Long userId, List<Integer> times, Integer dateType, Integer totalType);
 }
 

+ 56 - 9
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserActTradeServiceImpl.java

@@ -1,26 +1,27 @@
 package com.kxs.stat.biz.service.impl;
-import java.math.BigDecimal;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import cn.hutool.core.map.MapUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.util.AssertUtil;
 import com.kxs.common.core.util.R;
+import com.kxs.product.api.model.KxsBrand;
 import com.kxs.stat.api.dto.statUser.GetActivityStatByIdAndTimeDTO;
 import com.kxs.stat.api.vo.GetActivityStatByIdAndTimeVO;
+import com.kxs.stat.api.vo.myUser.TrendVO;
 import com.kxs.stat.api.vo.statUser.*;
+import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
 import com.kxs.stat.biz.mapper.KxsUserActTradeMapper;
 import com.kxs.stat.api.model.KxsUserActTrade;
 import com.kxs.stat.biz.service.KxsUserActTradeService;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 创客激活统计表(KxsUserActTrade)表服务实现类
@@ -100,16 +101,62 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
         return R.ok(timeVOArrayList);
     }
 
+    @Override
+    public List<TrendVO> getAddActMchTrend(Long userId, List<Integer> times, Integer dateType, TotalTypeEnum totalType, Map<Integer, KxsBrand> brandMap) {
+
+        List<TrendVO> trendVOList = new ArrayList<>();
+
+        List<TrendTimesVO> trendTimesVOList = baseMapper.getAddActMchTrend(userId, times, dateType, totalType.getType());
+
+        Map<Integer, List<TrendTimesVO>> tradeTrendMap =  trendTimesVOList.stream().collect(Collectors.groupingBy(TrendTimesVO::getTime));
+
+        LinkedHashMap<Integer, List<TrendTimesVO>> tradeTrend = new LinkedHashMap<>();
+        for (Integer time : times) {
+            if(tradeTrendMap.containsKey(time)){
+                tradeTrend.put(time, tradeTrendMap.get(time));
+            }else{
+                tradeTrend.put(time, new ArrayList<>());
+            }
+        }
+
+        //全部交易额
+        TrendVO trendVO = new TrendVO();
+        trendVO.setName("全部");
+        LinkedList<Map<String, Object>> allActNum = new LinkedList<>();
+        for (Integer date : tradeTrend.keySet()) {
+            List<TrendTimesVO> trendTimesList = tradeTrend.get(date);
+            //当前月份的所有总和
+            int actNum = trendTimesList.stream().mapToInt(TrendTimesVO::getTotal).sum();
+            allActNum.addFirst(MapUtil.<String, Object>builder().put("time", date).put("actNum", actNum).build());
+        }
+        trendVO.setTimes(allActNum);
+        trendVOList.add(trendVO);
+        //各品牌交易额
+        for (Integer brandId : brandMap.keySet()) {
+            TrendVO trendBrandVO = new TrendVO();
+            trendBrandVO.setName(brandMap.get(brandId).getName());
+            LinkedList<Map<String, Object>> brandActNum = new LinkedList<>();
+            for (Integer date : tradeTrend.keySet()) {
+                List<TrendTimesVO> trendTimesList = tradeTrend.get(date);
+                int actNum = trendTimesList.stream().filter(item -> Objects.equals(brandId, item.getBrandId())).mapToInt(TrendTimesVO::getTotal).sum();
+                brandActNum.addFirst(MapUtil.<String, Object>builder().put("time", date).put("actNum", actNum).build());
+            }
+            trendBrandVO.setTimes(brandActNum);
+            trendVOList.add(trendBrandVO);
+        }
+        return trendVOList;
+    }
+
     private ArrayList<TimeVO> getTimeVOArrayList(Integer totalType,Long userId, List<String> times, int type) {
         //构造数据
         //将全部激活量  或   品牌激活量  构造进入map  key为品牌id  或  all  或来客吧码牌
-        Map<String,List<ActivityAddVO>> timeActivityMap = new HashMap<>();
+        Map<Integer,List<ActivityAddVO>> timeActivityMap = new HashMap<>();
         //查询来客吧码牌激活
         List<TrendTimesVO> trendTimesVOLkbList = baseMapper.getActivityStatByLkbList(userId, times,totalType);
         //来客吧码牌不再品牌列表中 同all 需要做特殊处理
         for (TrendTimesVO trendTimesVO : trendTimesVOLkbList) {
             ArrayList<ActivityAddVO> activityAddVOS = new ArrayList<>();
-            String time = trendTimesVO.getTime();
+            Integer time = trendTimesVO.getTime();
             Integer total = trendTimesVO.getTotal();
             ActivityAddVO activityAddVO = new ActivityAddVO();
             activityAddVO.setName("来客吧码牌");
@@ -124,7 +171,7 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
         for (TrendTimesVO trendTimesVO : trendTimesVOS) {
             //先查询map中是否包含有改时间日期的来客吧码牌激活数据
             Integer total = trendTimesVO.getTotal();
-            String time = trendTimesVO.getTime();
+            Integer time = trendTimesVO.getTime();
             List<ActivityAddVO> activityAddVOList = timeActivityMap.get(time);
             if (activityAddVOList == null){
                 //当前全部的时间点不存在码牌激活数据时,走正常逻辑构造map

+ 26 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserNewTradeServiceImpl.java

@@ -1,11 +1,16 @@
 package com.kxs.stat.biz.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.stat.api.vo.myUser.UserAddTrendVO;
+import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
 import com.kxs.stat.biz.mapper.KxsUserNewTradeMapper;
 import com.kxs.stat.api.model.KxsUserNewTrade;
 import com.kxs.stat.biz.service.KxsUserNewTradeService;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * 创客新增统计表(KxsUserNewTrade)表服务实现类
  *
@@ -15,5 +20,26 @@ import org.springframework.stereotype.Service;
 @Service("kxsUserNewTradeService")
 public class KxsUserNewTradeServiceImpl extends ServiceImpl<KxsUserNewTradeMapper, KxsUserNewTrade> implements KxsUserNewTradeService {
 
+    @Override
+    public List<UserAddTrendVO> getAddUserTrend(Long userId, List<Integer> times, Integer dateType, Integer totalType) {
+
+        List<UserAddTrendVO> userAddTrendVOList = baseMapper.getAddUserTrend(userId, times, dateType, TotalTypeEnum.TEAM.getType());
+
+        Map<Integer, UserAddTrendVO> tradeTrendMap = userAddTrendVOList.stream().collect(Collectors.toMap(UserAddTrendVO::getTime, each -> each, (v1, v2) -> v2));
+        LinkedHashMap<Integer, UserAddTrendVO> tradeTrend = new LinkedHashMap<>();
+        for (Integer time : times) {
+            if(tradeTrendMap.containsKey(time)){
+                tradeTrend.put(time, tradeTrendMap.get(time));
+            }else{
+                //没有数据填充为0
+                UserAddTrendVO userAddTrendVO = new UserAddTrendVO();
+                userAddTrendVO.setNum(0);
+                userAddTrendVO.setTime(time);
+                tradeTrend.put(time, userAddTrendVO);
+            }
+        }
+
+        return tradeTrend.values().stream().toList();
+    }
 }
 

+ 151 - 221
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java

@@ -2,6 +2,7 @@ package com.kxs.stat.biz.service.impl;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -11,7 +12,12 @@ import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.AssertUtil;
 import com.kxs.common.core.util.R;
+import com.kxs.common.core.util.RetOps;
+import com.kxs.common.core.util.TotalDateUtil;
+import com.kxs.common.mybatis.handler.MonthTableNameHandler;
 import com.kxs.common.security.util.SecurityUtils;
+import com.kxs.product.api.feign.RemoteKxsProductService;
+import com.kxs.product.api.model.KxsBrand;
 import com.kxs.stat.api.dto.statUser.StatUserGetMyTradeDTO;
 import com.kxs.stat.api.dto.statUser.StatUserGetTradeDetailDTO;
 import com.kxs.stat.api.dto.statUser.StatUserGetUserStatByDayOrMonthDTO;
@@ -22,9 +28,12 @@ import com.kxs.stat.api.model.KxsUserLogoutTrade;
 import com.kxs.stat.api.model.KxsUserTrade;
 import com.kxs.stat.api.vo.ShdTradeAmtVO;
 import com.kxs.stat.api.vo.TotalTradeAmtVO;
+import com.kxs.stat.api.vo.myUser.*;
 import com.kxs.stat.api.vo.statUser.*;
 import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
 import com.kxs.stat.biz.mapper.*;
+import com.kxs.stat.biz.service.KxsUserActTradeService;
+import com.kxs.stat.biz.service.KxsUserNewTradeService;
 import com.kxs.stat.biz.service.KxsUserTradeService;
 import com.kxs.user.api.dto.kxsapp.IntegralStatDTO;
 import com.kxs.user.api.feign.RemoteKxsUserService;
@@ -37,11 +46,12 @@ import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.support.TransactionTemplate;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 个人交易统计总表(KxsUserTrade)表服务实现类
@@ -54,28 +64,33 @@ import java.util.*;
 @Slf4j
 public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, KxsUserTrade> implements KxsUserTradeService {
     private final RemoteKxsUserService remoteKxsUserService;
+    private final RemoteKxsProductService remoteKxsProductService;
 
     private final PlatformTransactionManager platformTransactionManager;
 
+    private final KxsUserActTradeService kxsUserActTradeService;
     private final KxsUserActTradeMapper kxsUserActTradeMapper;
 
     private final KxsLkbTradeMapper kxsLkbTradeMapper;
 
     private final KxsUserLogoutTradeMapper kxsUserLogoutTradeMapper;
 
+    private final KxsUserNewTradeService kxsUserNewTradeService;
     private final KxsUserNewTradeMapper kxsUserNewTradeMapper;
 
     private final KxsZlbTradeMapper kxsZlbTradeMapper;
-    private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
+    private final static String PREFIX_TABLE_NAME = CommonConstants.USER_TABLE_PREFIX;
 
-    private final static String PREFIX_TABLE_NAME_AFTER = "kxs_user_trade_after_";
-    private final static String PREFIX_TABLE_NAME_BEFORE = "kxs_user_trade_before_";
+    private final static String PREFIX_TABLE_NAME_AFTER = CommonConstants.USER_TABLE_AFTER_PREFIX;
+    private final static String PREFIX_TABLE_NAME_BEFORE = CommonConstants.USER_TABLE_BEFORE_PREFIX;
 
 
     private final static String PREFIX_TABLE_NAME_TEMP = "kxs_user_trade_temp_";
     private final KxsUserGdTradeMapper kxsUserGdTradeMapper;
     private final KxsLkbActTradeMapper kxsLkbActTradeMapper;
 
+    private static Map<Integer, KxsBrand> brandsMap;
+
     @Override
     @Async
     public void getUserTradeList(String para) {
@@ -216,47 +231,40 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
     public R getUserStatByDayOrMonth(StatUserGetUserStatByDayOrMonthDTO param) {
         Long userId = param.getUserId();
         Integer type = param.getType();
-        Integer totalType = param.getTotalType();
         LocalDate now = LocalDate.now();
-        List<String> times = new ArrayList<>();
-        List<String> lastMonthTimes = null;
+        List<Integer> times;
+        StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = new StatUserGetUserStatByDayOrMonthVO();
         if (type == 1) {
-            //获取今日月份 用以校验是否跨越月份
-            int toDayMonth = now.getMonthValue();
-            //近七日
-            for (int i = 0; i < 7; i++) {
-                // 计算每一天的日期
-                LocalDate currentDay = now.minusDays(i);
-                // 将LocalDate转换为字符串 yyyyMMdd  获取到所需查询日期
-                String currentDateString = LocalDateTimeUtil.format(currentDay, DatePattern.PURE_DATE_PATTERN);
-                //获取当前日的月份值
-                int monthValue = now.getMonthValue();//判断今日月份值与当前查询日月份是否一致
-                if (toDayMonth == monthValue) {
-                    //一致加入正常查询序列
-                    times.add(currentDateString);
-                } else {
-                    //不一致构造加入二次查询序列
-                    lastMonthTimes = new ArrayList<>();
-                    lastMonthTimes.add(currentDateString);
-                }
-            }
-            //开始查询   该方法整合全部查询
-            StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes, type, totalType);
-            return R.ok(statUserGetUserStatByDayOrMonthVO);
+            times = TotalDateUtil.getDayList(now.minusDays(1), 7);
         } else if (type == 2) {
             //近半年
-            for (int i = 0; i < 6; i++) {
-                // 计算过去半年每月月份
-                LocalDate currentDay = now.minusMonths(i);
-                // 将LocalDate转换为字符串
-                String currentDateString = LocalDateTimeUtil.format(currentDay, DatePattern.SIMPLE_MONTH_PATTERN);
-                times.add(currentDateString);
-            }
-            StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes, type, totalType);
-            return R.ok(statUserGetUserStatByDayOrMonthVO);
+            times = TotalDateUtil.getMonthList(now.minusDays(1), 6);
         } else {
             return R.failed("类型错误");
         }
+
+        //交易趋势图
+        List<TrendVO> trendVOList = setTradeTrend(userId, times, type);
+        statUserGetUserStatByDayOrMonthVO.setTradeTrend(trendVOList);
+
+        //交易占比
+        List<PercentVO> percentVOList = setTradeTotalAndPercent(userId, times, type);
+        statUserGetUserStatByDayOrMonthVO.setTradePercent(percentVOList);
+
+        //激活商户占比
+        List<MchActPercentVO> mchActPercentList = kxsUserActTradeMapper.getMchActTimePercent(userId, times, type == 1 ? 1 : 0, TotalTypeEnum.TEAM.getType());
+        mchActPercentList.forEach(item -> item.setName(getBrandMap().get(item.getBrandId()).getName()));
+        statUserGetUserStatByDayOrMonthVO.setActMchPercent(mchActPercentList);
+
+        //新增激活商户趋势图
+        List<TrendVO> addMchTrendList = kxsUserActTradeService.getAddActMchTrend(userId, times,  type == 1 ? 1 : 0, TotalTypeEnum.TEAM, getBrandMap());
+        statUserGetUserStatByDayOrMonthVO.setMchAddTrend(addMchTrendList);
+
+        //新增创客趋势图
+        List<UserAddTrendVO> userAddTrendVOList = kxsUserNewTradeService.getAddUserTrend(userId, times, type == 1 ? 1 : 0, TotalTypeEnum.TEAM.getType());
+        statUserGetUserStatByDayOrMonthVO.setUserAddTrend(userAddTrendVOList);
+
+        return R.ok(statUserGetUserStatByDayOrMonthVO);
     }
 
     @Override
@@ -526,7 +534,7 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
         StatUserTradeVo proBstatUserTradeVo = new StatUserTradeVo();
 
         //pos交易
-        KxsUserTrade kxsUserTradePos = baseMapper.getAllUserTrderSum(userId, month, getType, 0, brandId, totalType, tableName);
+        KxsUserTrade kxsUserTradePos = baseMapper.getAllUserTradeSum(userId, month, getType, 0, brandId, totalType, tableName);
         if (kxsUserTradePos != null) {
             statUserTradeVo.setDirectTradeAmt(kxsUserTradePos.getHelpDirectTradeAmt());//扶持期贷记卡
             statUserTradeVo.setDebitTradeAmt(kxsUserTradePos.getHelpDebitTradeAmt());//扶持期借记卡
@@ -561,7 +569,7 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
             proBstatUserTradeVo.setPosTrade(kxsUserTradePos.getProBDirectTradeAmt().add(kxsUserTradePos.getProBDebitTradeAmt()));//交易总和
         }
         //云闪付
-        KxsUserTrade kxsUserTradeCloud = baseMapper.getAllUserTrderSum(userId, month, getType, 1, brandId, totalType, tableName);
+        KxsUserTrade kxsUserTradeCloud = baseMapper.getAllUserTradeSum(userId, month, getType, 1, brandId, totalType, tableName);
         if (kxsUserTradeCloud != null) {
             BigDecimal helpTrade = kxsUserTradeCloud.getHelpDebitCapTradeAmt().add(kxsUserTradeCloud.getHelpDirectTradeAmt());//计算扶持期云闪付交易额
             statUserTradeVo.setCloudTrade(helpTrade);//扶持期云闪付交易额
@@ -820,201 +828,123 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
     }
 
 
-    private StatUserGetUserStatByDayOrMonthVO getStatUserGetUserStatByDayOrMonthVO(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, Integer type, Integer totalType) {
-        StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = new StatUserGetUserStatByDayOrMonthVO();
-        /* ------ 交易趋势图 ------ */
-        setTreadeTrend(userId, now, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO, type, totalType);
-        /* ------ 交易百分比及总额 ------ */
-        setTreadeTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO, type, totalType);
-        /* ------ 激活百分比及总额 ------ */
-        setActTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO, type, totalType);
-        /* ------ 激活趋势图 ------ */
-        setActTrend(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO, type, totalType);
-        /* ------ 新增用户趋势图 ------ */
-        setUserAddTrend(userId, times, type, statUserGetUserStatByDayOrMonthVO, totalType);
-        return statUserGetUserStatByDayOrMonthVO;
-    }
-
-    private void setUserAddTrend(Long userId, List<String> times, Integer type, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer totalType) {
-        TrendVO trendVO = new TrendVO();
-        List<TrendTimesVO> trendTimesVOS = kxsUserNewTradeMapper.getUserAddTrend(userId, times, type, totalType);
-        repZero(times, trendTimesVOS);
-        trendVO.setName("all");
-        trendVO.setTimes(trendTimesVOS);
-        statUserGetUserStatByDayOrMonthVO.setUserAddTrend(trendVO);
-    }
-
-    private void setActTrend(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type, Integer totalType) {
-
+    /**
+     * 创客交易品牌占比
+     *
+     * @param userId 用户 ID
+     * @param times  时间区间
+     * @param type   类型
+     * @return {@link List}<{@link PercentVO}>
+     */
+    private List<PercentVO> setTradeTotalAndPercent(Long userId, List<Integer> times, Integer type) {
+
+        List<PercentVO> percentVOList = new ArrayList<>();
+        if(type == 1){
+            //近7天
+            for (Integer day : times) {
+                Integer month = TotalDateUtil.getMonthNumber(LocalDateTimeUtil.parseDate(String.valueOf(day), DatePattern.PURE_DATE_PATTERN));
+                List<PercentVO> userTradeTotal = baseMapper.getUserTradeDayTotal(CommonConstants.USER_TABLE_PREFIX + month, userId, day, TotalTypeEnum.TEAM.getType());
+                percentVOList.addAll(userTradeTotal);
+            }
+            return percentVOList.stream()
+                    .peek(item -> item.setName(getBrandMap().get(item.getBrandId()).getName()))
+                    .collect(Collectors.toMap(PercentVO::getBrandId, a -> a, (o1, o2) -> {
+                        o1.setTradeAmt(o1.getTradeAmt().add(o2.getTradeAmt()));
+                        return o1;
+                    })).values().stream().toList();
+
+        }else{
+            //近半年
+            for (Integer month : times) {
+                List<PercentVO> userTradeTotal = baseMapper.getUserTradeMonthTotal(CommonConstants.USER_TABLE_PREFIX + month, userId, TotalTypeEnum.TEAM.getType());
+                percentVOList.addAll(userTradeTotal);
+            }
+            return percentVOList.stream()
+                    .peek(item -> item.setName(getBrandMap().get(item.getBrandId()).getName()))
+                    .collect(Collectors.toMap(PercentVO::getBrandId, a -> a, (o1, o2) -> {
+                        o1.setTradeAmt(o1.getTradeAmt().add(o2.getTradeAmt()));
+                        return o1;
+                    })).values().stream().toList();
 
-        //查询用户全部激活根据日期分组
-        List<TrendTimesVO> trendTimesActVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId, null, type, totalType);
-        //判断是否二次查询
-        if (lastMonthTimes != null) {
-            List<TrendTimesVO> trendTimesActVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId, null, type, totalType);
-            trendTimesActVOS.addAll(trendTimesActVOSLast);
         }
-        //查询用户全部激活量根据 日期以及品牌 分组
-        List<TrendTimesVO> trendTimesActBrandVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId, 1, type, totalType);
-        //判断是否二次查询
-        if (lastMonthTimes != null) {
-            List<TrendTimesVO> trendTimesActBrandVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId, 1, type, totalType);
-            trendTimesActBrandVOS.addAll(trendTimesActBrandVOSLast);
-        }
-        //构造数据
-        ArrayList<TrendVO> trendVOSBrand = getTrendVOS(trendTimesActVOS, trendTimesActBrandVOS, times);
-        statUserGetUserStatByDayOrMonthVO.setActMerchantTrend(trendVOSBrand);//激活趋势图
-    }
-
-    private void setActTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type, Integer totalType) {
-        //获取传入日期激活商户数根据品牌分组
-        List<PercentVO> percentVOSAct = kxsUserActTradeMapper.getUserTradeTotal(times, userId, type, totalType);
-        //判断是否二次查询
-        if (lastMonthTimes != null) {
-            List<PercentVO> percentVOSActLast = kxsUserActTradeMapper.getUserTradeTotal(lastMonthTimes, userId, type, totalType);
-            percentVOSAct.addAll(percentVOSActLast);
-        }
-        //总激活数
-        Integer actTotalCount = 0;
-        for (PercentVO percentVO : percentVOSAct) {
-            actTotalCount += percentVO.getTotal();
-        }
-        //计算百分比
-        for (PercentVO percentVO : percentVOSAct) {
-            percentVO.setPercent(BigDecimal.valueOf(percentVO.getTotal()).divide(BigDecimal.valueOf(actTotalCount), 6, RoundingMode.FLOOR));
-        }
-        statUserGetUserStatByDayOrMonthVO.setActMerchantPercent(percentVOSAct);//激活百分比
-        statUserGetUserStatByDayOrMonthVO.setActMerchantTotal(actTotalCount);//激活总数
-    }
-
-    private void setTreadeTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type, Integer totalType) {
-        String thisMoth = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.SIMPLE_MONTH_PATTERN);
-        String tableName = PREFIX_TABLE_NAME + thisMoth;
-        //获取全部品牌总交易额
-        List<PercentVO> percentVOS = baseMapper.getUserTradeTotal(tableName, userId, times, type, totalType);
-        //判断是否二次查询
-        if (lastMonthTimes != null) {
-            //需要构造上月表名
-            LocalDate date = LocalDate.now().minusMonths(1);//月份减一
-            String lastMoth = LocalDateTimeUtil.format(date, DatePattern.SIMPLE_MONTH_PATTERN);
-            String lastTableName = PREFIX_TABLE_NAME + lastMoth;
-            List<PercentVO> percentVOSLast = baseMapper.getUserTradeTotal(lastTableName, userId, lastMonthTimes, type, totalType);
-            percentVOS.addAll(percentVOSLast);
-        }
-        BigDecimal totalAmout = BigDecimal.ZERO;
-        //计算总金额
-        for (PercentVO percentVO : percentVOS) {
-            totalAmout = totalAmout.add(percentVO.getAmount());
-        }
-        //计算百分比
-        for (PercentVO percentVO : percentVOS) {
-            percentVO.setPercent(percentVO.getAmount().divide(totalAmout, 6, RoundingMode.FLOOR));
-        }
-        statUserGetUserStatByDayOrMonthVO.setTreadePercent(percentVOS);//交易百分比
-        statUserGetUserStatByDayOrMonthVO.setTreadeTotal(totalAmout);//交易总额
     }
 
-    private void setTreadeTrend(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type, Integer totalType) {
-        String thisMoth = LocalDateTimeUtil.format(now, DatePattern.SIMPLE_MONTH_PATTERN);
-        String tableName = PREFIX_TABLE_NAME + thisMoth;
-        List<TrendTimesVO> trendTimesVOS = new ArrayList<>();
-        if (type == 1) {
-            //查询用户全部交易额根据日期分组
-            trendTimesVOS = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId, null, type, totalType);
-            //判断是否需要二次查询
-            if (lastMonthTimes != null) {
-                //需要构造上月表名
-                LocalDate date = now.minusMonths(1);//月份减一
-                String lastMoth = LocalDateTimeUtil.format(date, DatePattern.SIMPLE_MONTH_PATTERN);
-                String lastTableName = PREFIX_TABLE_NAME + lastMoth;
-                try {
-                    //因为这里可能存在查询的月份的表未创建的原因  使用try包裹跳过报错  视为该月无数据
-                    List<TrendTimesVO> trendTimesVOSByLastMonthTimes = baseMapper.getUserTradeListByDayOrMonth(lastTableName, lastMonthTimes, userId, null, type, totalType);
-                    trendTimesVOS.addAll(trendTimesVOSByLastMonthTimes);
-                } catch (Exception e) {
-                    log.info(e.getMessage());
-                }
-            }
-        } else {
-            for (String month : times) {
-                //拼接表名
-                String newTableName = PREFIX_TABLE_NAME + month;
-                //因为这里可能存在查询的月份的表未创建的原因  使用try包裹跳过报错  视为该月无数据
-                try {
-                    List<TrendTimesVO> userTradeListByDayOrMonth = baseMapper.getUserTradeListByDayOrMonth(newTableName, times, userId, null, type, totalType);
-                    trendTimesVOS.addAll(userTradeListByDayOrMonth);
-                } catch (Exception e) {
-                    log.info(e.getMessage());
-                }
+    /**
+     * 创客交易趋势图
+     *
+     * @param userId 用户 ID
+     * @param times  时间区间
+     * @param type   类型
+     * @return {@link List}<{@link TrendVO}>
+     */
+    private List<TrendVO> setTradeTrend(Long userId, List<Integer> times, Integer type) {
+
+        MonthTableNameHandler.setData(MonthTableNameHandler.getThisMoth());
+        List<TrendVO> trendVOList = new ArrayList<>();
+        if(type == 1){
+            //近7天交易趋势图
+            LinkedHashMap<Integer, List<TrendTimesVO>> tradeTrend = new LinkedHashMap<>();
+            for (Integer day : times) {
+                Integer month = TotalDateUtil.getMonthNumber(LocalDateTimeUtil.parseDate(String.valueOf(day), DatePattern.PURE_DATE_PATTERN));
+                //每个月表统计查询出来后再合并进map里
+                List<TrendTimesVO> monthTradeTrend = baseMapper.getUserTradeDayTrend(CommonConstants.USER_TABLE_PREFIX + month, userId, day, TotalTypeEnum.TEAM.getType());
+                tradeTrend.put(day, monthTradeTrend);
             }
+            initUserTrend(trendVOList, tradeTrend);
         }
-        //查询用户全部交易额根据 日期以及品牌 分组
-        List<TrendTimesVO> trendTimesVOListBrand = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId, 1, type, totalType);
-        //判断是否需要二次查询
-        if (lastMonthTimes != null) {
-            //需要构造上月表名
-            LocalDate date = now.minusMonths(1);//月份减一
-            String lastMoth = LocalDateTimeUtil.format(date, DatePattern.SIMPLE_MONTH_PATTERN);
-            String lastTableName = PREFIX_TABLE_NAME + lastMoth;
-            List<TrendTimesVO> trendTimesVOListBrandLast = baseMapper.getUserTradeListByDayOrMonth(lastTableName, lastMonthTimes, userId, 1, type, totalType);
-            trendTimesVOListBrand.addAll(trendTimesVOListBrandLast);
-        }
-        //构造数据
-        ArrayList<TrendVO> trendVOS = getTrendVOS(trendTimesVOS, trendTimesVOListBrand, times);
-        statUserGetUserStatByDayOrMonthVO.setTreadeTrend(trendVOS);//交易趋势
-    }
+        if(type == 2){
+            //近半年
+            LinkedHashMap<Integer, List<TrendTimesVO>> tradeTrend = new LinkedHashMap<>();
 
-    private static void repZero(List<String> times, List<TrendTimesVO> trendTimesVOS) {
-        for (String time : times) {
-            //补充标识
-            int repFlag = 0;
-            Integer brandId = null;
-            for (TrendTimesVO trendTimesVO : trendTimesVOS) {
-                brandId = trendTimesVO.getBrandId();
-                //如果存在则开启标识
-                if (time.equals(trendTimesVO.getTime())) {
-                    repFlag = 1;
-                }
-            }
-            //当返回集合中不存在查询的时间则构造一条0数据加入trendTimesVOS集合
-            if (repFlag == 0) {
-                TrendTimesVO trendTimesVO = new TrendTimesVO();
-                trendTimesVO.setTime(time);
-                trendTimesVO.setTotal(0);
-                trendTimesVO.setBrandId(brandId);
-                trendTimesVOS.add(trendTimesVO);
+            for (Integer month : times) {
+                //每个月表统计查询出来后再合并进map里
+                List<TrendTimesVO> monthTradeTrend = baseMapper.getUserTradeMonthTrend(CommonConstants.USER_TABLE_PREFIX + month, userId, TotalTypeEnum.TEAM.getType());
+                tradeTrend.put(month, monthTradeTrend);
             }
+            initUserTrend(trendVOList, tradeTrend);
         }
-    }
 
-    private static ArrayList<TrendVO> getTrendVOS(List<TrendTimesVO> trendTimesVOS, List<TrendTimesVO> trendTimesVOListBrand, List<String> times) {
-        //将全部交易额以及品牌交易额构造进入map  key为品牌id  或  all
-        Map<String, List<TrendTimesVO>> treadTrend = new HashMap<>();
-        treadTrend.put("all", trendTimesVOS);
-        for (TrendTimesVO trendTimesVO : trendTimesVOListBrand) {
-            List<TrendTimesVO> trendTimesVOSBrand = treadTrend.get(trendTimesVO.getBrandId() == null ? null : trendTimesVO.getBrandId().toString());
-            if (trendTimesVOSBrand == null) {
-                //未查询到则构造map  key为品牌id
-                trendTimesVOSBrand = new ArrayList<>();
-                trendTimesVOSBrand.add(trendTimesVO);
-                treadTrend.put(trendTimesVO.getBrandId() != null ? trendTimesVO.getBrandId().toString() : "all", trendTimesVOSBrand);
-            } else {
-                trendTimesVOSBrand.add(trendTimesVO);
+        return trendVOList;
+    }
+    private void initUserTrend(List<TrendVO> trendVOList, LinkedHashMap<Integer, List<TrendTimesVO>> tradeTrend){
+        //全部交易额
+        TrendVO trendVO = new TrendVO();
+        trendVO.setName("全部");
+        LinkedList<Map<String, Object>> allAmt = new LinkedList<>();
+        for (Integer date : tradeTrend.keySet()) {
+            List<TrendTimesVO> trendTimesList = tradeTrend.get(date);
+            //当前月份的所有总和
+            BigDecimal totalAmt = trendTimesList.stream().map(TrendTimesVO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            allAmt.addFirst(MapUtil.<String, Object>builder().put("time", date).put("tradeAmt", totalAmt).build());
+        }
+        trendVO.setTimes(allAmt);
+        trendVOList.add(trendVO);
+        //各品牌交易额
+        for (Integer brandId : getBrandMap().keySet()) {
+            TrendVO trendBrandVO = new TrendVO();
+            trendBrandVO.setName(getBrandMap().get(brandId).getName());
+            LinkedList<Map<String, Object>> brandAmt = new LinkedList<>();
+            for (Integer date : tradeTrend.keySet()) {
+                List<TrendTimesVO> trendTimesList = tradeTrend.get(date);
+                BigDecimal totalAmt = trendTimesList.stream().filter(item -> Objects.equals(brandId, item.getBrandId())).map(TrendTimesVO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                brandAmt.addFirst(MapUtil.<String, Object>builder().put("time", date).put("tradeAmt", totalAmt).build());
             }
+            trendBrandVO.setTimes(brandAmt);
+            trendVOList.add(trendBrandVO);
         }
-        //将map转换为返回实体类
-        ArrayList<TrendVO> trendVOS = new ArrayList<>();
-        for (Map.Entry<String, List<TrendTimesVO>> entry : treadTrend.entrySet()) {
-            //补0数据
-            repZero(times, entry.getValue());
-            TrendVO trendVO = new TrendVO();
-            trendVO.setName(entry.getKey());
-            trendVO.setTimes(entry.getValue());
-            trendVOS.add(trendVO);
-        }
-        return trendVOS;
     }
 
 
+    private Map<Integer, KxsBrand>getBrandMap(){
+        if(brandsMap == null){
+            R<List<KxsBrand>> brandRes = remoteKxsProductService.loadByAllBrand();
+            List<KxsBrand> brands = RetOps.of(brandRes)
+                    .getData()
+                    .orElseThrow(() -> new GlobalCustomerException("获取品牌列表为空"));
+            brandsMap = brands.stream().collect(Collectors.toMap(KxsBrand::getId, Function.identity()));
+        }
+        return brandsMap;
+
+    }
 }
 

+ 71 - 17
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserActTradeMapper.xml

@@ -25,7 +25,7 @@
         </where>
         GROUP BY user_id
     </select>
-    <select id="getUserTradeTotal" resultType="com.kxs.stat.api.vo.statUser.PercentVO">
+    <select id="getUserTradeTotal" resultType="com.kxs.stat.api.vo.myUser.PercentVO">
         SELECT
         SUM(act_num) AS total,
         brand_id as name
@@ -91,23 +91,23 @@
     </select>
     <select id="getActivityStatByGdOrPos" resultType="java.lang.Integer">
         select
-            sum(act_num)
+        sum(act_num)
         from
-            kxs_user_act_trade
+        kxs_user_act_trade
         where
-            del_flag != 1
-            and total_type = 0
-            and user_id = #{userId}
-            and trade_date in
-            <foreach collection="times" item="time" open="(" separator="," close=")">
-                #{time}
-            </foreach>
-            <if test="type == 1">
-                and brand_id != 14
-            </if>
-            <if test="type == 2">
-                and brand_id = 14
-            </if>
+        del_flag != 1
+        and total_type = 0
+        and user_id = #{userId}
+        and trade_date in
+        <foreach collection="times" item="time" open="(" separator="," close=")">
+            #{time}
+        </foreach>
+        <if test="type == 1">
+            and brand_id != 14
+        </if>
+        <if test="type == 2">
+            and brand_id = 14
+        </if>
     </select>
     <select id="getActivityStatByLkb" resultType="java.lang.Integer">
         select
@@ -148,7 +148,7 @@
     </select>
     <select id="getActivityStatByLkbList" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
         select
-        sum(act_num) as total,  trade_date as `time`
+        sum(act_num) as total, trade_date as `time`
         from
         kxs_lkb_act_trade
         where
@@ -162,6 +162,60 @@
         group by
         `time`
     </select>
+    <select id="getMchActTimePercent" resultType="com.kxs.stat.api.vo.myUser.MchActPercentVO">
+        select sum(act_num) as act_num, brand_id
+        from kxs_user_act_trade
+        <where>
+            and user_id = #{userId}
+            and total_type = #{totalType}
+            <if test="dateType != null and dateType == 0">
+                and trade_month in
+                <foreach collection="times" item="time" open="(" separator="," close=")">
+                    #{time}
+                </foreach>
+            </if>
+            <if test="dateType != null and dateType == 1">
+                and trade_date in
+                <foreach collection="times" item="time" open="(" separator="," close=")">
+                    #{time}
+                </foreach>
+            </if>
+        </where>
+        group by brand_id
+    </select>
+    <select id="getAddActMchTrend" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
+        select sum(act_num) as total,
+            <if test="dateType != null and dateType == 0">
+                trade_month as time,
+            </if>
+            <if test="dateType != null and dateType == 1">
+                trade_date as time,
+            </if>
+        brand_id
+        from kxs_user_act_trade
+        <where>
+            and user_id = #{userId}
+            and total_type = #{totalType}
+            <if test="dateType != null and dateType == 0">
+                and trade_month in
+                <foreach collection="times" item="time" open="(" separator="," close=")">
+                    #{time}
+                </foreach>
+            </if>
+            <if test="dateType != null and dateType == 1">
+                and trade_date in
+                <foreach collection="times" item="time" open="(" separator="," close=")">
+                    #{time}
+                </foreach>
+            </if>
+        </where>
+        <if test="dateType != null and dateType == 0">
+            group by brand_id, trade_month
+        </if>
+        <if test="dateType != null and dateType == 1">
+            group by brand_id, trade_date
+        </if>
+    </select>
 
 
 </mapper>

+ 32 - 0
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserNewTradeMapper.xml

@@ -57,5 +57,37 @@
         and user_id = #{userId}
         and total_type = #{type}
     </select>
+    <select id="getAddUserTrend" resultType="com.kxs.stat.api.vo.myUser.UserAddTrendVO">
+        select sum(new_count) as num,
+        <if test="dateType != null and dateType == 0">
+            trade_month as time
+        </if>
+        <if test="dateType != null and dateType == 1">
+            trade_date as time
+        </if>
+        from kxs_user_new_trade
+        <where>
+            and user_id = #{userId}
+            and total_type = #{totalType}
+            <if test="dateType != null and dateType == 0">
+                and trade_month in
+                <foreach collection="times" item="time" open="(" separator="," close=")">
+                    #{time}
+                </foreach>
+            </if>
+            <if test="dateType != null and dateType == 1">
+                and trade_date in
+                <foreach collection="times" item="time" open="(" separator="," close=")">
+                    #{time}
+                </foreach>
+            </if>
+        </where>
+        <if test="dateType != null and dateType == 0">
+            group by trade_month
+        </if>
+        <if test="dateType != null and dateType == 1">
+            group by trade_date
+        </if>
+    </select>
 
 </mapper>

+ 43 - 168
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml

@@ -72,176 +72,28 @@
     <select id="getStatAmount" resultType="java.math.BigDecimal">
         select sum(pro_debit_trade_amt + pro_direct_trade_amt) from `${tableName}` where user_id = 1 and del_flag != 1
     </select>
-    <select id="getUserTradeListByDayOrMonth" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
-        SELECT
-        SUM(
-        COALESCE(kut.pro_b_direct_trade_amt,0)
-        + COALESCE(kut.pro_b_debit_trade_amt,0)
-        + COALESCE(kut.pro_a_debit_trade_amt,0)
-        + COALESCE(kut.pro_a_direct_trade_amt,0)
-        + COALESCE(kut.pro_debit_trade_amt,0)
-        + COALESCE(kut.pro_direct_trade_amt,0)
-        + COALESCE(kut.help_debit_trade_amt,0)
-        + COALESCE(kut.help_direct_trade_amt,0)
-        + COALESCE(klt.act_trade_amt,0)
-        + COALESCE(klt.trade_amt,0)
-        + COALESCE(kzt.trade_amt,0)
-        ) AS amount
-        <if test="type == 1">
-            ,kut.trade_date as time
-        </if>
-        <if test="type == 2">
-            ,kut.trade_month as time
-        </if>
-        <if test="brandId != null">
-            ,kut.brand_id
-        </if>
-        FROM
-        `${tableName}` kut
-        LEFT JOIN kxs_lkb_trade klt ON kut.user_id = klt.user_id
-        AND kut.trade_date = klt.trade_date
-        LEFT JOIN kxs_zlb_trade kzt ON kut.user_id = kzt.user_id
-        AND kut.trade_date = kzt.trade_date
-        where kut.del_flag != 1
-        and kut.user_id = #{userId}
-        and kut.total_type = #{totalType}
-        <if test="type == 1">
-            and kut.trade_date in
-            <foreach collection="times" item="time" open="(" separator="," close=")">
-                #{time}
-            </foreach>
-        </if>
-        GROUP BY
-        <if test="type == 1">
-            kut.trade_date
-        </if>
-        <if test="type == 2">
-            kut.trade_month
-        </if>
-        <if test="brandId != null">
-            ,kut.brand_id
-        </if>
+    <select id="getUserTradeMonthTotal" resultType="com.kxs.stat.api.vo.myUser.PercentVO">
+        select sum(pro_b_direct_trade_amt + pro_b_debit_trade_amt + pro_a_debit_trade_amt + pro_a_direct_trade_amt +
+        pro_debit_trade_amt + pro_direct_trade_amt + help_debit_trade_amt + help_direct_trade_amt) as tradeAmt, brand_id
+        from `${tableName}`
+        <where>
+            and user_id = #{userId}
+            and total_type = #{totalType}
+        </where>
+        group by brand_id
     </select>
-    <select id="getUserTradeTotal" resultType="com.kxs.stat.api.vo.statUser.PercentVO">
-        select SUM(
-            COALESCE(kut.pro_b_direct_trade_amt,0)
-            + COALESCE(kut.pro_b_debit_trade_amt,0)
-            + COALESCE(kut.pro_a_debit_trade_amt,0)
-            + COALESCE(kut.pro_a_direct_trade_amt,0)
-            + COALESCE(kut.pro_debit_trade_amt,0)
-            + COALESCE(kut.pro_direct_trade_amt,0)
-            + COALESCE(kut.help_debit_trade_amt,0)
-            + COALESCE(kut.help_direct_trade_amt,0)
-            + COALESCE(klt.act_trade_amt,0)
-            + COALESCE(klt.trade_amt,0)
-            + COALESCE(kzt.trade_amt,0)
-            ) AS amount,
-            kut.brand_id as name
-        from
-            `${tableName}` kut
-                LEFT JOIN kxs_lkb_trade klt ON kut.user_id = klt.user_id
-                AND kut.trade_date = klt.trade_date
-                LEFT JOIN kxs_zlb_trade kzt ON kut.user_id = kzt.user_id
-                AND kut.trade_date = kzt.trade_date
-        where kut.del_flag != 1
-        <if test="type == 1">
-            and kut.trade_date in
-            <foreach collection="times" item="time" open="(" separator="," close=")">
-                #{time}
-            </foreach>
-        </if>
-        and kut.user_id = #{userId}
-        and kut.total_type = #{totalType}
-        GROUP BY kut.brand_id
+    <select id="getUserTradeDayTotal" resultType="com.kxs.stat.api.vo.myUser.PercentVO">
+        select sum(pro_b_direct_trade_amt + pro_b_debit_trade_amt + pro_a_debit_trade_amt + pro_a_direct_trade_amt +
+        pro_debit_trade_amt + pro_direct_trade_amt + help_debit_trade_amt + help_direct_trade_amt) as tradeAmt, brand_id
+        from `${tableName}`
+        <where>
+            and user_id = #{userId}
+            and total_type = #{totalType}
+            and trade_date = #{tradeDate}
+        </where>
+        group by brand_id
     </select>
 
-    <select id="getHomeAmout" resultType="com.kxs.stat.api.vo.statUser.StatUserGetHomeAmoutVO">
-        select
-            SUM(
-                        COALESCE(kut.pro_b_direct_trade_amt,0)
-                        + COALESCE(kut.pro_b_debit_trade_amt,0)
-                        + COALESCE(kut.pro_a_debit_trade_amt,0)
-                        + COALESCE(kut.pro_a_direct_trade_amt,0)
-                        + COALESCE(kut.pro_debit_trade_amt,0)
-                        + COALESCE(kut.pro_direct_trade_amt,0)
-                        + COALESCE(kut.help_debit_trade_amt,0)
-                        + COALESCE(kut.help_direct_trade_amt,0)
-                        + COALESCE(klt.act_trade_amt,0)
-                        + COALESCE(klt.trade_amt,0)
-                        + COALESCE(kzt.trade_amt,0)
-                ) AS amountToDay,
-            SUM(kuat.act_num) as merchantAddToDay,
-            SUM(tunt.new_count) as userAddToDay,
-            (
-                select
-                    SUM(
-                                COALESCE(kut.pro_b_direct_trade_amt,0)
-                                + COALESCE(kut.pro_b_debit_trade_amt,0)
-                                + COALESCE(kut.pro_a_debit_trade_amt,0)
-                                + COALESCE(kut.pro_a_direct_trade_amt,0)
-                                + COALESCE(kut.pro_debit_trade_amt,0)
-                                + COALESCE(kut.pro_direct_trade_amt,0)
-                                + COALESCE(kut.help_debit_trade_amt,0)
-                                + COALESCE(kut.help_direct_trade_amt,0)
-                                + COALESCE(klt.act_trade_amt,0)
-                                + COALESCE(klt.trade_amt,0)
-                                + COALESCE(kzt.trade_amt,0)
-                        ) AS amountMonth
-                from
-                    `${tableName}` kut
-                        LEFT JOIN kxs_lkb_trade klt ON kut.user_id = klt.user_id
-                        AND kut.trade_date = klt.trade_date
-                        AND klt.total_type = 1
-                        LEFT JOIN kxs_zlb_trade kzt ON kut.user_id = kzt.user_id
-                        AND kut.trade_date = kzt.trade_date
-                        AND kzt.total_type = 1
-                where kut.del_flag != 1
-                and kut.user_id = #{userId}
-                and kut.total_type = 1
-        group by
-            kut.trade_month
-            ) as amountMonth,
-            (
-        SELECT
-            SUM(new_count)
-        FROM
-            kxs_user_new_trade
-        WHERE
-            del_flag != 1
-          AND total_type = 1
-          AND user_id = #{userId}
-          AND trade_month = #{month}
-            ) AS userAddMonth,
-            (
-        SELECT
-            SUM(kuat.act_num)
-        FROM
-            kxs_user_act_trade
-        WHERE
-            del_flag != 1
-          AND total_type = 1
-          AND user_id = #{userId}
-          AND trade_month = #{month}
-            ) AS merchantAddMonth
-        from
-            `${tableName}` kut
-            LEFT JOIN kxs_lkb_trade klt ON kut.user_id = klt.user_id
-            AND kut.trade_date = klt.trade_date
-            AND klt.total_type = 0
-            LEFT JOIN kxs_zlb_trade kzt ON kut.user_id = kzt.user_id
-            AND kut.trade_date = kzt.trade_date
-            AND kzt.total_type = 0
-            LEFT JOIN kxs_user_act_trade kuat ON kuat.user_id = kut.user_id
-            AND kut.trade_date = kuat.trade_date
-            AND kuat.total_type = 0
-            LEFT JOIN kxs_user_new_trade tunt ON kut.user_id = tunt.user_id
-            AND kut.trade_date = tunt.trade_date
-            AND tunt.total_type = 0
-        where kut.del_flag != 1
-          and kut.user_id = #{userId}
-          and kut.trade_date = #{date}
-          and kut.total_type = 0
-    </select>
     <select id="getPosTrade" resultType="com.kxs.stat.api.vo.TotalTradeAmtVO">
         select
         sum(pro_b_direct_trade_amt + pro_b_debit_trade_amt + pro_a_debit_trade_amt + pro_a_direct_trade_amt +
@@ -278,7 +130,7 @@
             </if>
         </where>
     </select>
-    <select id="getAllUserTrderSum" resultType="com.kxs.stat.api.model.KxsUserTrade">
+    <select id="getAllUserTradeSum" resultType="com.kxs.stat.api.model.KxsUserTrade">
         select
         sum(pro_b_debit_cap_num) as pro_b_debit_cap_num,
         sum(pro_b_debit_cap_trade_amt) as pro_b_debit_cap_trade_amt,
@@ -325,6 +177,29 @@
         group by
             brand_id
     </select>
+    <select id="getUserTradeMonthTrend" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
+        select
+        sum(pro_b_direct_trade_amt + pro_b_debit_trade_amt + pro_a_debit_trade_amt + pro_a_direct_trade_amt +
+        pro_debit_trade_amt + pro_direct_trade_amt + help_debit_trade_amt + help_direct_trade_amt) as amount, brand_id, trade_month as `time`
+        from ${tableName}
+        <where>
+            and total_type = #{totalType}
+            and user_id = #{userId}
+        </where>
+        group by brand_id, trade_month
+    </select>
+    <select id="getUserTradeDayTrend" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
+        select
+        sum(pro_b_direct_trade_amt + pro_b_debit_trade_amt + pro_a_debit_trade_amt + pro_a_direct_trade_amt +
+        pro_debit_trade_amt + pro_direct_trade_amt + help_debit_trade_amt + help_direct_trade_amt) as amount, brand_id, trade_date as `time`
+        from ${tableName}
+        <where>
+            and total_type = #{totalType}
+            and user_id = #{userId}
+            and trade_date = #{tradeDate}
+        </where>
+        group by brand_id, trade_date
+    </select>
 
 
     <insert id="insertTempShdTableData">

+ 5 - 5
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsSchoolMenuServiceImpl.java

@@ -31,8 +31,8 @@ public class KxsSchoolMenuServiceImpl extends ServiceImpl<KxsSchoolMenuMapper, K
     private final KxsSchoolStudyMapper kxsSchoolStudyMapper;
     @Override
     public Object firstMenu() {
-        List<KxsSchoolMenu> list = list(Wrappers.<KxsSchoolMenu>query().lambda().isNotNull(KxsSchoolMenu::getPid).ne(KxsSchoolMenu::getPid,0));
-        ArrayList<SchoolFirstMenuVO> schoolFirstMenuVOS = new ArrayList<>();
+        List<KxsSchoolMenu> list = list(Wrappers.<KxsSchoolMenu>query().lambda().eq(KxsSchoolMenu::getPid,0));
+        ArrayList<SchoolFirstMenuVO> schoolFirstMenuVOList = new ArrayList<>();
         for (KxsSchoolMenu kxsSchoolMenu : list) {
             SchoolFirstMenuVO schoolFirstMenuVO = new SchoolFirstMenuVO();
             BeanUtil.copyProperties(kxsSchoolMenu,schoolFirstMenuVO);
@@ -45,14 +45,14 @@ public class KxsSchoolMenuServiceImpl extends ServiceImpl<KxsSchoolMenuMapper, K
             LocalDateTime threeDaysBefore = now.minusDays(3);
             List<KxsSchoolStudy> kxsSchoolStudies = kxsSchoolStudyMapper.selectList(Wrappers.<KxsSchoolStudy>query().lambda().eq(KxsSchoolStudy::getMenuId,kxsSchoolMenu.getId()).between(KxsSchoolStudy::getCreateTime, threeDaysBefore, now));
             //三天内存在数据则返回有更新
-            if (kxsSchoolStudies != null && kxsSchoolStudies.size() != 0){
+            if (kxsSchoolStudies != null && !kxsSchoolStudies.isEmpty()){
                 schoolFirstMenuVO.setIsUpdate(1);//是否更新
             }else {
                 schoolFirstMenuVO.setIsUpdate(0);//是否更新
             }
-            schoolFirstMenuVOS.add(schoolFirstMenuVO);
+            schoolFirstMenuVOList.add(schoolFirstMenuVO);
         }
-        return schoolFirstMenuVOS;
+        return schoolFirstMenuVOList;
     }
 }
 

+ 3 - 5
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserServiceImpl.java

@@ -528,12 +528,10 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
 
     @Override
     public R myUserDetail(Integer id) {
-        KxsUser byId = getById(id);
+
+        KxsUser user = getById(id);
         UserMyUserDetailVO userMyUserDetailVO = new UserMyUserDetailVO();
-//        if (!Objects.equals(Long.valueOf(byId.getPid()), SecurityUtils.getUser().getId())){
-//            return R.failed("非法参数,该用户非当前用户直属用户");
-//        }
-        BeanUtils.copyProperties(byId,userMyUserDetailVO);
+        BeanUtils.copyProperties(user, userMyUserDetailVO);
         KxsUserReal kxsUserReal = kxsUserRealMapper.selectOne(Wrappers.<KxsUserReal>query().lambda().eq(KxsUserReal::getUserId, id));
         if (kxsUserReal != null){
             userMyUserDetailVO.setRealTime(kxsUserReal.getCreateTime());