Procházet zdrojové kódy

我的创客页面接口已完成

Pota1ovO před 2 roky
rodič
revize
7c5d0f80ff
18 změnil soubory, kde provedl 721 přidání a 120 odebrání
  1. 4 1
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/statUser/PercentVO.java
  2. 1 1
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/statUser/StatUserGetUserStatByDayOrMonthVO.java
  3. 18 1
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserActTradeMapper.java
  4. 4 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserNewTradeMapper.java
  5. 16 3
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java
  6. 149 90
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java
  7. 54 6
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserActTradeMapper.xml
  8. 34 0
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserNewTradeMapper.xml
  9. 29 14
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml
  10. 26 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/user/UserMyUserListDTO.java
  11. 115 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/UserMyUserDetailVO.java
  12. 71 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/UserMyUserListVO.java
  13. 59 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/UserMyUserStatisticsVO.java
  14. 39 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/KxsUserController.java
  15. 11 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/mapper/KxsUserMapper.java
  16. 7 1
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserService.java
  17. 42 3
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserServiceImpl.java
  18. 42 0
      kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserMapper.xml

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

@@ -23,5 +23,8 @@ public class PercentVO {
      * 交易额
      */
     private BigDecimal amount;
-
+    /**
+     * 激活数
+     */
+    private Integer total;
 }

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

@@ -69,7 +69,7 @@ public class StatUserGetUserStatByDayOrMonthVO implements Serializable {
      * 新增用户趋势
      */
     @Schema(description = "新增用户趋势")
-    private List<TrendVO> userAddTrend;
+    private TrendVO userAddTrend;
 
 
 

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

@@ -2,6 +2,7 @@ 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.statUser.TrendTimesVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -26,6 +27,22 @@ public interface KxsUserActTradeMapper extends BaseMapper<KxsUserActTrade> {
      */
     Cursor<KxsUserActTrade> getUserTradeMonthList(String thisMoth);
 
-    List<TrendTimesVO> getUserActListByDay(@Param("times") List<String> times, @Param("userId") Long userId);
+    /**
+     * 获取传入日期激活商户,根据品牌分组
+     * @param times 传入日期
+     * @param userId 用户id
+     * @return
+     */
+    List<PercentVO> getUserTradeTotal(@Param("times") List<String> times, @Param("userId") Long userId,@Param("type") Integer type);
+
+    /**
+     * 查询用户激活量   全部或根据品牌分组   获取半年或近七天
+     * @param times 查询日期
+     * @param userId 用户id
+     * @param brandId 是否根据品牌分组  否传null
+     * @param type 根据月份或者根据日查询  1日  2月
+     * @return
+     */
+    List<TrendTimesVO> getUserActListByDayOrMonth(@Param("times") List<String> times, @Param("userId") Long userId, @Param("brandId") Integer brandId, @Param("type") Integer type);
 }
 

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

@@ -2,8 +2,11 @@ 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.statUser.TrendTimesVO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 创客新增统计表(KxsUserNewTrade)表数据库访问层
  *
@@ -13,5 +16,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KxsUserNewTradeMapper extends BaseMapper<KxsUserNewTrade> {
 
+    List<TrendTimesVO> getUserAddTrend(Long userId, List<String> times, Integer type);
 }
 

+ 16 - 3
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java

@@ -3,7 +3,6 @@ package com.kxs.stat.biz.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kxs.stat.api.model.KxsUserTrade;
 import com.kxs.stat.api.vo.ShdTradeAmtVO;
-import com.kxs.stat.api.vo.statUser.GetUserTradeTotalVO;
 import com.kxs.stat.api.vo.statUser.PercentVO;
 import com.kxs.stat.api.vo.statUser.TrendTimesVO;
 import org.apache.ibatis.annotations.Mapper;
@@ -54,9 +53,23 @@ public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
 
     void removeTempTable(String tempTableName);
 
-    List<TrendTimesVO> getUserTradeListByDay(@Param("tableName") String tableName, @Param("times") List<String> times, @Param("userId") Long userId, @Param("brandId") Integer brandId);
+    /**
+     * 查询用户全部交易额根据日期分组以及或根据品牌分组
+     * @param tableName 表名
+     * @param times 查询日期  日  type = 2时可不传
+     * @param userId 用户id
+     * @param brandId 是否根据品牌分组  否:null  是:随意传值
+     * @Param type 根据类型查询日期  1 日  2月
+     * @return
+     */
+    List<TrendTimesVO> getUserTradeListByDayOrMonth(@Param("tableName") String tableName, @Param("times") List<String> times, @Param("userId") Long userId, @Param("brandId") Integer brandId, @Param("type") Integer type);
 
-    List<PercentVO> getUserTradeTotal(Long userId);
+    /**
+     * 获取传入日期的交易额根据品牌分组
+     * @param userId
+     * @return
+     */
+    List<PercentVO> getUserTradeTotal(@Param("tableName")String tableName,@Param("userId") Long userId,@Param("times") List<String> times,@Param("type") Integer type);
 
 
 }

+ 149 - 90
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java

@@ -17,10 +17,7 @@ import com.kxs.stat.api.model.KxsUserTrade;
 import com.kxs.stat.api.vo.ShdTradeAmtVO;
 import com.kxs.stat.api.vo.statUser.*;
 import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
-import com.kxs.stat.biz.mapper.KxsLkbTradeMapper;
-import com.kxs.stat.biz.mapper.KxsUserActTradeMapper;
-import com.kxs.stat.biz.mapper.KxsUserLogoutTradeMapper;
-import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
+import com.kxs.stat.biz.mapper.*;
 import com.kxs.stat.biz.service.KxsUserTradeService;
 import com.kxs.user.api.dto.kxsapp.IntegralStatDTO;
 import com.kxs.user.api.feign.RemoteKxsUserService;
@@ -36,7 +33,6 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -62,6 +58,7 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
 
     private final KxsUserLogoutTradeMapper kxsUserLogoutTradeMapper;
 
+    private final KxsUserNewTradeMapper kxsUserNewTradeMapper;
     private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
     private final static String PREFIX_TABLE_NAME_TEMP = "kxs_user_trade_temp_";
 
@@ -230,110 +227,172 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
                     lastMonthTimes.add(currentDateString);
                 }
             }
-            //开始查询
-            //查询全部pos交易
-            String thisMoth = LocalDateTimeUtil.format(now, DatePattern.SIMPLE_MONTH_PATTERN);
-            String tableName = PREFIX_TABLE_NAME + thisMoth;
-            //获取到日期以及金额
-            List<TrendTimesVO> trendTimesVOS = baseMapper.getUserTradeListByDay(tableName,times,userId,null);
-            //判断是否需要二次查询
-            if (lastMonthTimes != null){
-                List<TrendTimesVO> trendTimesVOSByLastMonthTimes = baseMapper.getUserTradeListByDay(tableName, lastMonthTimes, userId,null);
-                trendTimesVOS.addAll(trendTimesVOSByLastMonthTimes);
-            }
-            Map<String,List<TrendTimesVO>> treadTrend = new HashMap<>();
-            treadTrend.put("all",trendTimesVOS);
-            //查询品牌数据
-            List<TrendTimesVO> trendTimesVOListBrand = baseMapper.getUserTradeListByDay(tableName, lastMonthTimes, userId,1);
-            //循环将查询到的数据加入map
-            for (TrendTimesVO trendTimesVO : trendTimesVOListBrand) {
-                List<TrendTimesVO> trendTimesVOSBrand = treadTrend.get(trendTimesVO.getBrandId().toString());
-                if (trendTimesVOSBrand == null){
-                    //未查询到则构造map  key为品牌id
-                    trendTimesVOSBrand = new ArrayList<>();
-                    trendTimesVOSBrand.add(trendTimesVO);
-                    treadTrend.put(trendTimesVO.getBrandId().toString(),trendTimesVOSBrand);
-                }else {
-                    trendTimesVOSBrand.add(trendTimesVO);
-                }
-            }
-            ArrayList<TrendVO> trendVOS = new ArrayList<>();
-            for (Map.Entry<String, List<TrendTimesVO>> entry : treadTrend.entrySet()) {
-                TrendVO trendVO = new TrendVO();
-                trendVO.setName(entry.getKey());
-                trendVO.setTimes(entry.getValue());
-                trendVOS.add(trendVO);
-            }
-            //获取全部品牌总交易额
-            List<PercentVO> percentVOS = baseMapper.getUserTradeTotal(userId);
-            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.HALF_UP));
-            }
-            //获取激活商户
-            List<TrendTimesVO> trendTimesVOSAct = kxsUserActTradeMapper.getUserActListByDay(times,userId);
-            Integer totalCount = 0;
-            for (TrendTimesVO trendTimesVO : trendTimesVOSAct) {
-                totalCount += trendTimesVO.getTotal();
-            }
-//            for (){
-//
-//            }
-            StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = new StatUserGetUserStatByDayOrMonthVO();
-            statUserGetUserStatByDayOrMonthVO.setTreadePercent(percentVOS);//交易百分比
-            statUserGetUserStatByDayOrMonthVO.setTreadeTotal(totalAmout);//交易总额
-//            statUserGetUserStatByDayOrMonthVO.setTreadeTrend(trendVOS);//交易趋势
-//            statUserGetUserStatByDayOrMonthVO.setActMerchantPercent();
-//            statUserGetUserStatByDayOrMonthVO.setActMerchantTotal(totalCount);
-//            statUserGetUserStatByDayOrMonthVO.setActMerchantTrend();
-//            statUserGetUserStatByDayOrMonthVO.setUserAddTrend();
-
+            StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes,type);
+            return R.ok(statUserGetUserStatByDayOrMonthVO);
         } 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);
+            return R.ok(statUserGetUserStatByDayOrMonthVO);
         } else {
             return R.failed("类型错误");
         }
-
-        return null;
     }
 
+    private StatUserGetUserStatByDayOrMonthVO getStatUserGetUserStatByDayOrMonthVO(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, Integer type) {
+        StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = new StatUserGetUserStatByDayOrMonthVO();
+        /* ------ 交易趋势图 ------ */
+        setTreadeTrend(userId, now, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
+        /* ------ 交易百分比及总额 ------ */
+        setTreadeTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
+        /* ------ 激活百分比及总额 ------ */
+        setActTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
+        /* ------ 激活趋势图 ------ */
+        setActTrend(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
+        /* ------ 新增用户趋势图 ------ */
+        setUserAddTrend(userId, times, type, statUserGetUserStatByDayOrMonthVO);
+        return statUserGetUserStatByDayOrMonthVO;
+    }
 
+    private void setUserAddTrend(Long userId, List<String> times, Integer type, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO) {
+        TrendVO trendVO = new TrendVO();
+        List<TrendTimesVO> trendTimesVOS = kxsUserNewTradeMapper.getUserAddTrend(userId, times, type);
+        trendVO.setName("all");
+        trendVO.setTimes(trendTimesVOS);
+        statUserGetUserStatByDayOrMonthVO.setUserAddTrend(trendVO);
+    }
 
+    private void setActTrend(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
+        //查询用户全部激活根据日期分组
+        List<TrendTimesVO> trendTimesActVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,null,type);
+        //判断是否二次查询
+        if (lastMonthTimes != null){
+            List<TrendTimesVO> trendTimesActVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,null,type);
+            trendTimesActVOS.addAll(trendTimesActVOSLast);
+        }
+        //查询用户全部激活量根据 日期以及品牌 分组
+        List<TrendTimesVO> trendTimesActBrandVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,1,type);
+        //判断是否二次查询
+        if (lastMonthTimes != null){
+            List<TrendTimesVO> trendTimesActBrandVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,1,type);
+            trendTimesActBrandVOS.addAll(trendTimesActBrandVOSLast);
+        }
+        //构造数据
+        ArrayList<TrendVO> trendVOSBrand = getTrendVOS(trendTimesActVOS, trendTimesActBrandVOS);
+        statUserGetUserStatByDayOrMonthVO.setActMerchantTrend(trendVOSBrand);//激活趋势图
+    }
 
+    private void setActTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type) {
+        //获取传入日期激活商户数根据品牌分组
+        List<PercentVO> percentVOSAct = kxsUserActTradeMapper.getUserTradeTotal(times, userId,type);
+        //判断是否二次查询
+        if (lastMonthTimes != null){
+            List<PercentVO> percentVOSActLast = kxsUserActTradeMapper.getUserTradeTotal(lastMonthTimes, userId,type);
+            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.HALF_UP));
+        }
+        statUserGetUserStatByDayOrMonthVO.setActMerchantPercent(percentVOSAct);//激活百分比
+        statUserGetUserStatByDayOrMonthVO.setActMerchantTotal(actTotalCount);//激活总数
+    }
 
+    private void setTreadeTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
+        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);
+        //判断是否二次查询
+        if (lastMonthTimes != null){
+            List<PercentVO> percentVOSLast = baseMapper.getUserTradeTotal(tableName,userId, lastMonthTimes,type);
+            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.HALF_UP));
+        }
+        statUserGetUserStatByDayOrMonthVO.setTreadePercent(percentVOS);//交易百分比
+        statUserGetUserStatByDayOrMonthVO.setTreadeTotal(totalAmout);//交易总额
+    }
 
+    private void setTreadeTrend(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
+        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);
+            //判断是否需要二次查询
+            if (lastMonthTimes != null){
+                List<TrendTimesVO> trendTimesVOSByLastMonthTimes = baseMapper.getUserTradeListByDayOrMonth(tableName, lastMonthTimes, userId,null,type);
+                trendTimesVOS.addAll(trendTimesVOSByLastMonthTimes);
+            }
+        }else {
+            for (String month : times) {
+                //拼接表名
+                String newTableName = PREFIX_TABLE_NAME + month;
+                try{
+                    List<TrendTimesVO> userTradeListByDayOrMonth = baseMapper.getUserTradeListByDayOrMonth(newTableName, times, userId, null, type);
+                    trendTimesVOS.addAll(userTradeListByDayOrMonth);
+                }catch (Exception e){
+                    log.info(e.getMessage());
+                }
+            }
+        }
+        //查询用户全部交易额根据 日期以及品牌 分组
+        List<TrendTimesVO> trendTimesVOListBrand = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId,1,type);
+        //判断是否需要二次查询
+        if (lastMonthTimes != null){
+            List<TrendTimesVO> trendTimesVOListBrandLast = baseMapper.getUserTradeListByDayOrMonth(tableName, lastMonthTimes, userId,1,type);
+            trendTimesVOListBrand.addAll(trendTimesVOListBrandLast);
+        }
+        //构造数据
+        ArrayList<TrendVO> trendVOS = getTrendVOS(trendTimesVOS, trendTimesVOListBrand);
+        statUserGetUserStatByDayOrMonthVO.setTreadeTrend(trendVOS);//交易趋势
+    }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    private static ArrayList<TrendVO> getTrendVOS(List<TrendTimesVO> trendTimesVOS, List<TrendTimesVO> trendTimesVOListBrand) {
+        //将全部交易额以及品牌交易额构造进入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().toString());
+            if (trendTimesVOSBrand == null){
+                //未查询到则构造map  key为品牌id
+                trendTimesVOSBrand = new ArrayList<>();
+                trendTimesVOSBrand.add(trendTimesVO);
+                treadTrend.put(trendTimesVO.getBrandId().toString(),trendTimesVOSBrand);
+            }else {
+                trendTimesVOSBrand.add(trendTimesVO);
+            }
+        }
+        //将map转换为返回实体类
+        ArrayList<TrendVO> trendVOS = new ArrayList<>();
+        for (Map.Entry<String, List<TrendTimesVO>> entry : treadTrend.entrySet()) {
+            TrendVO trendVO = new TrendVO();
+            trendVO.setName(entry.getKey());
+            trendVO.setTimes(entry.getValue());
+            trendVOS.add(trendVO);
+        }
+        return trendVOS;
+    }
 
 
 }

+ 54 - 6
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserActTradeMapper.xml

@@ -25,21 +25,69 @@
         </where>
         GROUP BY user_id
     </select>
-    <select id="getUserActListByDay" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
+    <select id="getUserTradeTotal" resultType="com.kxs.stat.api.vo.statUser.PercentVO">
         SELECT
         SUM(act_num) AS total,
         brand_id
         FROM
         kxs_user_act_trade
         WHERE del_flag != 1
-        AND user_id = 1
+        AND user_id = #{userId}
         AND total_type = 1
-        AND trade_date in
-        <foreach collection="times" item="time" open="(" separator="," close=")">
-            #{time}
-        </foreach>
+        <if test="type == 1">
+            and trade_date in
+            <foreach collection="times" item="time" open="(" separator="," close=")">
+                #{time}
+            </foreach>
+        </if>
+        <if test="type == 2">
+            and trade_month in
+            <foreach collection="times" item="time" open="(" separator="," close=")">
+                #{time}
+            </foreach>
+        </if>
         GROUP BY
         brand_id
     </select>
+    <select id="getUserActListByDayOrMonth" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
+        SELECT
+        SUM(act_num) AS total
+        <if test="type == 1">
+            ,trade_date as time
+        </if>
+        <if test="type == 2">
+            ,trade_month as time
+        </if>
+        <if test="brandId != null">
+            ,brand_id
+        </if>
+        FROM
+        kxs_user_act_trade
+        WHERE del_flag != 1
+        AND user_id = #{userId}
+        AND total_type = 1
+        <if test="type == 1">
+            AND trade_date IN
+            <foreach collection="times" item="time" open="(" separator="," close=")">
+                #{time}
+            </foreach>
+        </if>
+        <if test="type == 2">
+            AND trade_month IN
+            <foreach collection="times" item="time" open="(" separator="," close=")">
+                #{time}
+            </foreach>
+        </if>
+        GROUP BY
+        <if test="type == 1">
+            trade_date
+        </if>
+        <if test="type == 2">
+            trade_month
+        </if>
+        <if test="brandId != null">
+            ,brand_id
+        </if>
+    </select>
 
 </mapper>

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

@@ -15,5 +15,39 @@
         <result column="new_count" property="newCount" />
 
     </resultMap>
+    <select id="getUserAddTrend" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
+        select
+            sum(new_count) as total
+        <if test="type == 1">
+            ,trade_date
+        </if>
+        <if test="type == 2">
+            ,trade_month
+        </if>
+        from kxs_user_new_trade
+        where
+            del_flag != 1
+        and user_id = #{userId}
+        <if test="type == 1">
+            and trade_date in
+            <foreach collection="times" item="time" open="(" separator="," close=")">
+                #{time}
+            </foreach>
+        </if>
+        <if test="type == 2">
+            and trade_month in
+            <foreach collection="times" item="time" open="(" separator="," close=")">
+                #{time}
+            </foreach>
+        </if>
+        and total_type = 1
+        GROUP BY
+        <if test="type == 1">
+            trade_date
+        </if>
+        <if test="type == 2">
+            trade_month
+        </if>
+    </select>
 
 </mapper>

+ 29 - 14
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml

@@ -72,7 +72,7 @@
     <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="getUserTradeListByDay" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
+    <select id="getUserTradeListByDayOrMonth" resultType="com.kxs.stat.api.vo.statUser.TrendTimesVO">
         SELECT
         SUM(
         COALESCE(kut.pro_b_direct_trade_amt,0)
@@ -86,8 +86,13 @@
         + COALESCE(klt.act_trade_amt,0)
         + COALESCE(klt.trade_amt,0)
         + COALESCE(kzt.trade_amt,0)
-        ) AS amount,
-        kut.trade_date
+        ) 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>
@@ -99,12 +104,20 @@
         AND kut.trade_date = kzt.trade_date
         where kut.del_flag != 1
         and kut.user_id = #{userId}
-        and total_type = 1
-        and kut.trade_date in
-        <foreach collection="times" item="time" open="(" separator="," close=")">
-            #{time}
-        </foreach>
-        GROUP BY kut.trade_date
+        and kut.total_type = 1
+        <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>
@@ -123,7 +136,7 @@
             + COALESCE(klt.trade_amt,0)
             + COALESCE(kzt.trade_amt,0)
             ) AS amount,
-            brand_id as name
+            kut.brand_id as name
         from
             `${tableName}` kut
                 LEFT JOIN kxs_lkb_trade klt ON kut.user_id = klt.user_id
@@ -131,10 +144,12 @@
                 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.trade_date in
-        <foreach collection="times" item="time" open="(" separator="," close=")">
-            #{time}
-        </foreach>
+        <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 = 1
         GROUP BY kut.brand_id

+ 26 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/user/UserMyUserListDTO.java

@@ -0,0 +1,26 @@
+package com.kxs.user.api.dto.kxsapp.user;
+
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+/**
+ * 我的用户  用户列表搜索dto
+ */
+@Data
+public class UserMyUserListDTO {
+    /**
+     * 搜索等级
+     */
+    private String userLevel;
+    /**
+     * 搜索关键字
+     */
+    private String keyword;
+    /**
+     * 排序条件
+     */
+    @NotEmpty(message = "排序值不能为空")
+    private String sort;
+    private String tableName;
+    private Long userId;
+}

+ 115 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/UserMyUserDetailVO.java

@@ -0,0 +1,115 @@
+package com.kxs.user.api.vo.kxsapp.user;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 用户详情vo
+ *
+ * @author 系统
+ * @date 2024-05-16 15:25:54
+ */
+@Data
+@Schema(description = "用户详情返回实体")
+public class UserMyUserDetailVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    private Integer id;
+
+
+    /**
+     * 隐藏推荐关系0默认 1隐藏
+     */
+    @Schema(description = "隐藏推荐关系0默认 1隐藏")
+    private Integer hiddenLevel;
+
+
+    /**
+     * 用户名
+     */
+    @Schema(description = "用户名")
+    private String username;
+
+
+    /**
+     * 手机号
+     */
+    @Schema(description = "手机号")
+    private String phone;
+
+
+    /**
+     * 邀请码
+     */
+    @Schema(description = "邀请码")
+    private String userCode;
+
+
+    /**
+     * 头像
+     */
+    @Schema(description = "头像")
+    private String avatar;
+
+
+    /**
+     * 用户等级
+     */
+    @Schema(description = "用户等级")
+    private Integer userLevel;
+
+
+    /**
+     * 实名状态 0未实名 1已实名
+     */
+    @Schema(description = "实名状态 0未实名 1已实名")
+    private Integer realStatus;
+
+
+    /**
+     * 状态 0注销 1正常 2锁定不可登陆和提现
+     */
+    @Schema(description = "状态 0注销 1正常 2锁定不可登陆和提现")
+    private Integer status;
+
+
+    /**
+     * 是否商户型创客 0否 1是
+     */
+    @Schema(description = "是否商户型创客 0否 1是")
+    private Integer isMerchantMaker;
+
+
+    /**
+     * 成为商户型创客时间
+     */
+    @Schema(description = "成为商户型创客时间")
+    private LocalDateTime toMerchantMakerTime;
+
+
+    /**
+     * 实名时间
+     */
+    @Schema(description = "实名时间")
+    private Object realTime;
+
+
+
+
+
+	
+
+}

+ 71 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/UserMyUserListVO.java

@@ -0,0 +1,71 @@
+package com.kxs.user.api.vo.kxsapp.user;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 创客列表vo
+ *
+ * @author 系统
+ * @date 2024-05-16 15:25:54
+ */
+@Data
+@Schema(description = "创客列表返回实体")
+public class UserMyUserListVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 用户名
+     */
+    @Schema(description = "用户名")
+    private String username;
+
+    /**
+     * 头像
+     */
+    @Schema(description = "头像")
+    private String avatar;
+
+    /**
+     * 用户本月交易额
+     */
+    @Schema(description = "用户本月交易额")
+    private Object thisMonthTrade;
+
+
+    /**
+     * 实名时间
+     */
+    @Schema(description = "实名时间")
+    private Object realTime;
+
+
+
+
+
+	
+
+}

+ 59 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/UserMyUserStatisticsVO.java

@@ -0,0 +1,59 @@
+package com.kxs.user.api.vo.kxsapp.user;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 用户统计vo
+ *
+ * @author 系统
+ * @date 2024-05-16 15:25:54
+ */
+@Data
+@Schema(description = "用户统计返回实体")
+public class UserMyUserStatisticsVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 用户总数
+     */
+    @Schema(description = "用户总数")
+    private Object userCountTotal;
+
+
+    /**
+     * 本月新增
+     */
+    @Schema(description = "本月新增")
+    private Object thisMonthAddTotal;
+
+
+    /**
+     * 实名总数
+     */
+    @Schema(description = "实名总数")
+    private Object realTotal;
+
+
+    /**
+     * 未实名总数
+     */
+    @Schema(description = "未实名总数")
+    private Object notRealTotal;
+
+
+
+
+
+	
+
+}

+ 39 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/KxsUserController.java

@@ -7,12 +7,15 @@ import com.kxs.common.security.annotation.Inner;
 import com.kxs.user.api.dto.kxsapp.user.*;
 import com.kxs.user.api.model.KxsUser;
 import com.kxs.user.api.model.KxsUserReal;
+import com.kxs.user.api.vo.kxsapp.user.UserMyUserListVO;
 import com.kxs.user.biz.constant.enums.UserErrorTypeEnum;
 import com.kxs.user.biz.service.KxsUserBankService;
 import com.kxs.user.biz.service.KxsUserRealService;
 import com.kxs.user.biz.service.KxsUserService;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -278,5 +281,41 @@ public class KxsUserController {
         return R.ok(kxsUserService.removeUser());
     }
 
+
+    /**
+     * 创客列表
+     *
+     * @param page 分页对象
+     * @param param 查询实体
+     * @return 创客列表
+     */
+    @GetMapping("/myUserList")
+    public R myUserList(@ParameterObject Page<KxsUser> page, @Valid @ParameterObject UserMyUserListDTO param) {
+        return R.ok(kxsUserService.myUserList(page,param));
+    }
+
+
+    /**
+     * 用户统计
+     *
+     * @return 用户统计
+     */
+    @GetMapping("/myUserStatistics")
+    public R myUserStatistics() {
+        return R.ok(kxsUserService.myUserStatistics());
+    }
+
+
+    /**
+     * 用户详情
+     *
+     * @param id 主键ID
+     * @return 用户详情
+     */
+    @GetMapping("/myUserDetail")
+    public R myUserDetail(@RequestParam("id") Integer id) {
+
+        return kxsUserService.myUserDetail(id);
+    }
 }
 

+ 11 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/mapper/KxsUserMapper.java

@@ -1,10 +1,13 @@
 package com.kxs.user.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.user.api.dto.kxsapp.user.UserMyUserListDTO;
 import com.kxs.user.api.model.KxsUser;
 import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
+import com.kxs.user.api.vo.kxsapp.user.UserMyUserListVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 /**
  * 用户表(KxsSecurityUser)表数据库访问层
@@ -37,5 +40,13 @@ public interface KxsUserMapper extends BaseMapper<KxsUser> {
      * @return
      */
     KxsUser getParenUser(Long userId);
+    /**
+     * 创客列表
+     *
+     * @param page 分页对象
+     * @param param 查询实体
+     * @return 创客列表
+     */
+    Page<UserMyUserListVO> myUserList(Page<KxsUser> page, @Param("param") UserMyUserListDTO param);
 }
 

+ 7 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserService.java

@@ -11,6 +11,7 @@ import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
 import com.kxs.user.api.vo.kxsapp.user.UserCodeInfoVO;
 import com.kxs.user.api.vo.kxsapp.user.UserInfoVO;
 import com.kxs.user.api.vo.kxsapp.userLevel.LevelDetailVO;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 /**
  * 用户表(KxsSecurityUser)表服务接口
@@ -23,7 +24,7 @@ public interface KxsUserService extends IService<KxsUser> {
     /**
      * 注册
      *
-     * @param registerDTO 注册dto
+     * @param registerDTO  注册dto
      * @return {@link R}
      */
     R register(RegisterDTO registerDTO);
@@ -211,5 +212,10 @@ public interface KxsUserService extends IService<KxsUser> {
      */
     R forgetPayPwd(ForgetPayPwdDTO param);
 
+    Object myUserList(Page<KxsUser> page, UserMyUserListDTO param);
+
+    Object myUserStatistics();
+
+    R myUserDetail(Integer id);
 }
 

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

@@ -1,5 +1,7 @@
 package com.kxs.user.biz.service.impl;
 
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -29,9 +31,7 @@ import com.kxs.user.api.dto.kxsapp.app.ForgetPwdDTO;
 import com.kxs.user.api.dto.kxsapp.app.RegisterDTO;
 import com.kxs.user.api.dto.kxsapp.user.*;
 import com.kxs.user.api.model.*;
-import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
-import com.kxs.user.api.vo.kxsapp.user.UserCodeInfoVO;
-import com.kxs.user.api.vo.kxsapp.user.UserInfoVO;
+import com.kxs.user.api.vo.kxsapp.user.*;
 import com.kxs.user.api.vo.kxsapp.userLevel.LevelDetailVO;
 import com.kxs.user.api.vo.kxsapp.userLevel.LevelsVO;
 import com.kxs.user.biz.constant.UserConstants;
@@ -43,8 +43,10 @@ import com.kxs.user.biz.service.KxsUserService;
 import com.kxs.user.biz.util.SmsUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.RequiredArgsConstructor;
+import org.checkerframework.checker.units.qual.K;
 import org.springframework.beans.BeanUtils;
 import org.springframework.cache.CacheManager;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.security.authentication.event.LogoutSuccessEvent;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -382,6 +384,43 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
         return R.ok();
     }
 
+    @Override
+    public Object myUserList(Page<KxsUser> page, UserMyUserListDTO param) {
+        //拼接表名
+        param.setTableName("kxs_user_trade_" + LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.SIMPLE_MONTH_PATTERN));
+        param.setUserId(SecurityUtils.getUser().getId());
+        return baseMapper.myUserList(page,param);
+    }
+
+    @Override
+    public Object myUserStatistics() {
+        Long userId = SecurityUtils.getUser().getId();
+        UserMyUserStatisticsVO userMyUserStatisticsVO = new UserMyUserStatisticsVO();
+        Long totalCount = baseMapper.selectCount(Wrappers.<KxsUser>query().lambda().eq(KxsUser::getPid, userId));
+        userMyUserStatisticsVO.setUserCountTotal(totalCount);
+        Long addTotal = baseMapper.selectCount(Wrappers.<KxsUser>query().lambda().eq(KxsUser::getPid, userId).apply("DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')"));
+        userMyUserStatisticsVO.setThisMonthAddTotal(addTotal);
+        Long realTotal = baseMapper.selectCount(Wrappers.<KxsUser>query().lambda().eq(KxsUser::getPid, userId).eq(KxsUser::getRealStatus,1));
+        userMyUserStatisticsVO.setRealTotal(realTotal);
+        userMyUserStatisticsVO.setNotRealTotal(totalCount - realTotal);
+        return userMyUserStatisticsVO;
+    }
+
+    @Override
+    public R myUserDetail(Integer id) {
+        KxsUser byId = getById(id);
+        UserMyUserDetailVO userMyUserDetailVO = new UserMyUserDetailVO();
+        if (!Objects.equals(Long.valueOf(byId.getPid()), SecurityUtils.getUser().getId())){
+            return R.failed("非法参数,该用户非当前用户直属用户");
+        }
+        BeanUtils.copyProperties(byId,userMyUserDetailVO);
+        KxsUserReal kxsUserReal = kxsUserRealMapper.selectOne(Wrappers.<KxsUserReal>query().lambda().eq(KxsUserReal::getUserId, id));
+        if (kxsUserReal != null){
+            userMyUserDetailVO.setRealTime(kxsUserReal.getCreateTime());
+        }
+        return R.ok(userMyUserDetailVO);
+    }
+
 
     @Override
     public R updatePwd(UserUpdatePwdDTO param) {

+ 42 - 0
kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserMapper.xml

@@ -56,6 +56,48 @@
             select pid from kxs_user where id = #{userId}
                                      )
     </select>
+    <select id="myUserList" resultType="com.kxs.user.api.vo.kxsapp.user.UserMyUserListVO">
+        SELECT
+        ku.id, ku.username,ku.create_time,kur.create_time as realTime,
+        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 thisMonthTrade
+        FROM
+        kxs_user ku
+        LEFT JOIN kxs_user_real kur ON kur.user_id = ku.id
+        LEFT JOIN kxs_stat.${param.tableName} kut ON kut.user_id = ku.id AND kut.total_type = 1
+        LEFT JOIN kxs_stat.kxs_lkb_trade klt ON kut.user_id = klt.user_id
+        AND kut.trade_month = klt.trade_month
+        LEFT JOIN kxs_stat.kxs_zlb_trade kzt ON kut.user_id = kzt.user_id
+        AND kut.trade_month = kzt.trade_month
+        WHERE
+        ku.del_flag != 1
+        AND ku.pid = #{param.userId}
+        <if test="param.keyword != null and param.keyword != ''">
+            AND ku.username = #{param.keyword}
+        </if>
+        <if test="param.userLevel != null and param.userLevel != ''">
+            AND ku.user_level = #{param.userLevel}
+        </if>
+        AND ku.real_status = 1
+        GROUP BY ku.id, ku.username,ku.create_time,kur.create_time
+        <if test="param.sort != null and param.sort !='' and param.sort == 'amount'">
+            ORDER BY thisMonthTrade DESC
+        </if>
+        <if test="param.sort != null and param.sort !='' and param.sort == 'time'">
+            ORDER BY realTime
+        </if>
+    </select>
 
 </mapper>