Browse Source

feat:三张表统计根据播出时间分别统计会员数量

caoliqin 1 ngày trước cách đây
mục cha
commit
0da8c59c68

+ 2 - 1
fs-service-system/src/main/java/com/fs/course/domain/FsUserWatchCourseStatistics.java

@@ -112,7 +112,8 @@ public class FsUserWatchCourseStatistics extends BaseEntity{
     @Excel(name = "红包领取总额")
     private BigDecimal redPacketAmount;
 
-
+    /** 用户的创建日期 */
+    private Date userCreateDate;
 
 
 }

+ 14 - 11
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserWatchCourseStatisticsServiceImpl.java

@@ -1,8 +1,8 @@
 package com.fs.course.service.impl;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -126,12 +126,8 @@ public class FsUserWatchCourseStatisticsServiceImpl extends ServiceImpl<FsUserWa
         Map<String, FsUserWatchCourseStatistics> watchLogMap = watchLog.stream().collect(Collectors.toMap(k -> String.format("%s-%s-%s", k.getPeriodId(), k.getVideoId(), k.getCompanyUserId()), v -> v));
         Map<String, FsUserWatchCourseStatistics> redPacketLogMap = redPacketLog.stream().collect(Collectors.toMap(k -> String.format("%s-%s-%s", k.getPeriodId(), k.getVideoId(), k.getCompanyUserId()), v -> v));
         Map<String, FsUserWatchCourseStatistics> answerLogMap = answerLog.stream().collect(Collectors.toMap(k -> String.format("%s-%s-%s", k.getPeriodId(), k.getVideoId(), k.getCompanyUserId()), v -> v));
-        Map<Long, FsUserWatchCourseStatistics> userTotalMap = userTotal.stream()
-                .collect(Collectors.toMap(
-                        FsUserWatchCourseStatistics::getCompanyUserId,
-                        Function.identity()
-                ));
-
+        Map<Long, List<FsUserWatchCourseStatistics>> userTotalMap = userTotal.stream()
+                .collect(Collectors.groupingBy(FsUserWatchCourseStatistics::getCompanyUserId));
 
         // 处理数据
         List<FsUserWatchCourseStatistics> list = new ArrayList<>();
@@ -141,13 +137,20 @@ public class FsUserWatchCourseStatisticsServiceImpl extends ServiceImpl<FsUserWa
             FsUserWatchCourseStatistics watchLogData = watchLogMap.get(key);
             FsUserWatchCourseStatistics redPacketLogData = redPacketLogMap.get(key);
             FsUserWatchCourseStatistics answerLogData = answerLogMap.get(key);
-            FsUserWatchCourseStatistics userTotalData = userTotalMap.get(data.getCompanyUserId());
+            List<FsUserWatchCourseStatistics> userTotalDataList = userTotalMap.get(data.getCompanyUserId());
             BeanUtils.copyProperties(data, vo);
 
             // 单独一个一个set,不用copy,避免copy出来的结果被前面的覆盖
-            if(userTotalData != null){
-                vo.setUserNum(userTotalData.getUserNum());
-                vo.setNewUserNum(userTotalData.getNewUserNum());
+            if(userTotalDataList != null && !userTotalDataList.isEmpty()){
+                // 获取过滤时间后的销售会员数量
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+
+                int userNum = userTotalDataList.stream()
+                        .filter(v -> v.getUserCreateDate().before(data.getCourseStartDateTime())).mapToInt(FsUserWatchCourseStatistics::getUserNum).sum();
+                int newUserNum = userTotalDataList.stream()
+                        .filter(v -> sdf.format(v.getUserCreateDate()).equals(sdf.format(data.getCourseStartDateTime()))).mapToInt(FsUserWatchCourseStatistics::getUserNum).sum();
+                vo.setUserNum(userNum);
+                vo.setNewUserNum(newUserNum);
             } else {
                 vo.setUserNum(0);
                 vo.setNewUserNum(0);

+ 3 - 2
fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

@@ -1543,7 +1543,8 @@
     <select id="selectFsUserDetail" resultType="FsUserWatchCourseStatistics">
         SELECT
         count( fs_user.user_id ) as userNum,
-        count( DISTINCT CASE WHEN to_days( fs_user.create_time ) = to_days( now()) THEN fs_user.user_id END ) as newUserNum
+        count( DISTINCT CASE WHEN to_days( fs_user.create_time ) = to_days( now()) THEN fs_user.user_id END ) as newUserNum,
+        date(fs_user.create_time) as userCreateDate
         ,company.company_id,
         company.company_name,
         company_user.user_id AS companyUserId,
@@ -1558,7 +1559,7 @@
         AND fs_user.`status` = 1
         AND company_user.user_id is not null
         GROUP BY
-        fs_user.company_user_id
+        fs_user.company_user_id, date(fs_user.create_time)
     </select>
 
 </mapper>