Jelajahi Sumber

feat: middle 今日收益/今日视频播放数 调整为 当日收益/当日视频播放数

hidewnd 3 minggu lalu
induk
melakukan
365090ead7

+ 37 - 1
yt-common/src/main/java/com/ytpm/util/DateUtil.java

@@ -7,7 +7,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
 
-public class DateUtil {
+public class DateUtil extends cn.hutool.core.date.DateUtil {
 
     /**
      * 获取日期数字
@@ -60,6 +60,7 @@ public class DateUtil {
         ).atTime(23, 59, 59);
         return localDateTimeToDate(monthEnd);
     }
+
     // 获取本周周一
     public static Date getWeekStart() {
         Calendar calendar = Calendar.getInstance();
@@ -79,4 +80,39 @@ public class DateUtil {
     }
 
 
+    /**
+     * 判断date1的日期(yyyy-MM-dd)是否在date2之前或相等
+     *
+     * @param date1 第一个日期
+     * @param date2 第二个日期
+     * @return 若date1在date2之前或相等则返回true,否则返回false(任意日期为null时返回false)
+     */
+    public static boolean beforeSameDay(Date date1, Date date2) {
+        if (date1 != null && date2 != null) {
+            // 获取两个日期的当天起始时间(00:00:00),忽略时分秒
+            Date beginOfDate1 = DateUtil.beginOfDay(date1);
+            Date beginOfDate2 = DateUtil.beginOfDay(date2);
+            // 比较起始时间:<= 表示date1在date2之前或同一天
+            return beginOfDate1.compareTo(beginOfDate2) <= 0;
+        }
+        return false;
+    }
+
+    /**
+     * 判断date1的日期(yyyy-MM-dd)是否在date2之后或相等
+     *
+     * @param date1 第一个日期
+     * @param date2 第二个日期
+     * @return 若date1在date2之后或相等则返回true,否则返回false(任意日期为null时返回false)
+     */
+    public static boolean afterSameDay(Date date1, Date date2) {
+        if (date1 != null && date2 != null) {
+            // 获取两个日期的当天起始时间(00:00:00),忽略时分秒
+            Date beginOfDate1 = DateUtil.beginOfDay(date1);
+            Date beginOfDate2 = DateUtil.beginOfDay(date2);
+            // 比较起始时间:>= 表示date1在date2之后或同一天
+            return beginOfDate1.compareTo(beginOfDate2) >= 0;
+        }
+        return false;
+    }
 }

+ 43 - 15
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/controller/UserController.java

@@ -1,7 +1,7 @@
 package com.ytpm.lemonios.controller;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -28,6 +28,7 @@ import com.ytpm.lemonios.redis.RedisService;
 import com.ytpm.risk.enums.BannedTypeEnum;
 import com.ytpm.risk.view.RiskConfigView;
 import com.ytpm.risk.view.RiskTemplateView;
+import com.ytpm.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.Errors;
@@ -79,31 +80,58 @@ public class UserController {
                 Collectors.groupingBy(YtDyzAdRecord::getUserId));
         Map<String, List<YtDyzLoginRecord>> loginMap = dyzLogins.stream().collect(
                 Collectors.groupingBy(YtDyzLoginRecord::getUserId));
-        setUserExtInfo(result,userAdMap,loginMap);
+        setUserExtInfo(result,param, userAdMap,loginMap);
         return ResultTable.resultTableOk(new PageInfo<>(result));
     }
 
     /**
      * 设置视频记录和登录信息
      */
-    private void setUserExtInfo(List<YtAppUserListView> result, Map<String, List<YtDyzAdRecord>> userAdMap,Map<String, List<YtDyzLoginRecord>> loginMap) {
+    private void setUserExtInfo(List<YtAppUserListView> result,YtAppUserListParam param,
+                                Map<String, List<YtDyzAdRecord>> userAdMap, Map<String, List<YtDyzLoginRecord>> loginMap) {
+        List<YtDyzAdRecord> ytDyzAdRecords;
+        DateTime currentDate = DateUtil.date();
         for (YtAppUserListView user : result) {
-            if(loginMap.containsKey(user.getUserId())){
+            if (loginMap.containsKey(user.getUserId())) {
                 user.setLoginRecordList(loginMap.get(user.getUserId()));
             }
-            //获取今日收益 | 今日视频播放数
+            //获取当日收益收益 | 当日收益视频播放数 = 统计筛选登陆时间段
+            int todayVideo = 0;
+            BigDecimal todayIncome = BigDecimal.ZERO;
             if (userAdMap.containsKey(user.getUserId())) {
-                List<YtDyzAdRecord> ytDyzAdRecords = userAdMap.get(user.getUserId());
-                List<YtDyzAdRecord> collect = ytDyzAdRecords.stream().filter(
-                        s -> DateUtil.isSameDay(DateUtil.date(),DateUtil.parseDate(s.getFinishTime()))).collect(Collectors.toList());
-                BigDecimal todayIncome = collect.stream().map(YtDyzAdRecord::getRevenue).reduce(BigDecimal.ZERO, BigDecimal::add);
-                user.setTodayVideo((int) collect.stream().filter(
-                        s->s.getAdSourceType()== AdSourceTypeEnum.rewarded_video.getAdSourceType()).count());
-                user.setTodayIncome(todayIncome);
-            } else {
-                user.setTodayIncome(BigDecimal.ZERO);
-                user.setTodayVideo(0);
+                // 默认筛选今日广告记录 并计算前三日收益
+                ytDyzAdRecords = userAdMap.get(user.getUserId()).stream()
+                        .filter(s -> DateUtil.isSameDay(currentDate, DateUtil.parseDate(s.getFinishTime())))
+                        .collect(Collectors.toList());
+                todayIncome = ytDyzAdRecords.stream().map(YtDyzAdRecord::getRevenue)
+                        .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+                // 统计4天-今日收益=前三日收益
+                if (user.getNearlyIncome() != null && user.getNearlyIncome().compareTo(todayIncome) >= 0) {
+                    user.setNearlyIncome(user.getNearlyIncome().subtract(todayIncome));
+                }
+                // 如果传递时间段 则按时间段筛选广告记录
+                if(param.getLastLoginTimeBegin() != null || param.getLastLoginTimeEnd() != null) {
+                    if (param.getLastLoginTimeEnd() != null) {
+                        ytDyzAdRecords = userAdMap.get(user.getUserId()).stream()
+                                .filter(record -> DateUtil.afterSameDay(
+                                        param.getLastLoginTimeEnd(), DateUtil.parseDate(record.getFinishTime())))
+                                .collect(Collectors.toList());
+                    }
+                    if (param.getLastLoginTimeEnd() != null) {
+                        ytDyzAdRecords = ytDyzAdRecords.stream()
+                                .filter(record -> DateUtil.beforeSameDay(
+                                        param.getLastLoginTimeEnd(), DateUtil.parseDate(record.getFinishTime())))
+                                .collect(Collectors.toList());
+                    }
+                    todayIncome = ytDyzAdRecords.stream().map(YtDyzAdRecord::getRevenue)
+                            .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+                }
+                todayVideo = (int) ytDyzAdRecords.stream()
+                        .filter(record -> record.getAdSourceType() == AdSourceTypeEnum.rewarded_video.getAdSourceType())
+                        .count();
             }
+            user.setTodayVideo(todayVideo);
+            user.setTodayIncome(todayIncome);
         }
     }
 

+ 38 - 15
yt-question/yt-question-service/src/main/java/com/ytpm/question/controller/UserController.java

@@ -1,7 +1,7 @@
 package com.ytpm.question.controller;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -34,6 +34,7 @@ import com.ytpm.question.redis.RedisService;
 import com.ytpm.risk.enums.BannedTypeEnum;
 import com.ytpm.risk.view.RiskConfigView;
 import com.ytpm.risk.view.RiskTemplateView;
+import com.ytpm.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -99,36 +100,58 @@ public class UserController {
                 Collectors.groupingBy(YtDyzAdRecord::getUserId));
         Map<String, List<YtDyzLoginRecord>> loginMap = dyzLogins.stream().collect(
                 Collectors.groupingBy(YtDyzLoginRecord::getUserId));
-        setUserExtInfo(result, userAdMap, loginMap);
+        setUserExtInfo(result, param, userAdMap, loginMap);
         return ResultTable.resultTableOk(new PageInfo<>(result));
     }
 
     /**
      * 设置视频记录和登录信息
      */
-    private void setUserExtInfo(List<YtAppUserListView> result, Map<String, List<YtDyzAdRecord>> userAdMap, Map<String,
-            List<YtDyzLoginRecord>> loginMap) {
+    private void setUserExtInfo(List<YtAppUserListView> result,YtAppUserListParam param,
+                                Map<String, List<YtDyzAdRecord>> userAdMap, Map<String, List<YtDyzLoginRecord>> loginMap) {
+        List<YtDyzAdRecord> ytDyzAdRecords;
+        DateTime currentDate = DateUtil.date();
         for (YtAppUserListView user : result) {
             if (loginMap.containsKey(user.getUserId())) {
                 user.setLoginRecordList(loginMap.get(user.getUserId()));
             }
-            //获取今日收益 | 今日视频播放数
+            //获取当日收益收益 | 当日收益视频播放数 = 统计筛选登陆时间段
+            int todayVideo = 0;
+            BigDecimal todayIncome = BigDecimal.ZERO;
             if (userAdMap.containsKey(user.getUserId())) {
-                List<YtDyzAdRecord> ytDyzAdRecords = userAdMap.get(user.getUserId());
-                List<YtDyzAdRecord> collect = ytDyzAdRecords.stream().filter(
-                        s -> DateUtil.isSameDay(DateUtil.date(), DateUtil.parseDate(s.getFinishTime()))).collect(Collectors.toList());
-                BigDecimal todayIncome = collect.stream().map(YtDyzAdRecord::getRevenue).reduce(BigDecimal.ZERO, BigDecimal::add);
-                user.setTodayVideo((int) collect.stream().filter(
-                        s -> s.getAdSourceType() == AdSourceTypeEnum.rewarded_video.getAdSourceType()).count());
-                user.setTodayIncome(todayIncome);
+                // 默认筛选今日广告记录 并计算前三日收益
+                ytDyzAdRecords = userAdMap.get(user.getUserId()).stream()
+                        .filter(s -> DateUtil.isSameDay(currentDate, DateUtil.parseDate(s.getFinishTime())))
+                        .collect(Collectors.toList());
+                todayIncome = ytDyzAdRecords.stream().map(YtDyzAdRecord::getRevenue)
+                        .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
                 // 统计4天-今日收益=前三日收益
                 if (user.getNearlyIncome() != null && user.getNearlyIncome().compareTo(todayIncome) >= 0) {
                     user.setNearlyIncome(user.getNearlyIncome().subtract(todayIncome));
                 }
-            } else {
-                user.setTodayIncome(BigDecimal.ZERO);
-                user.setTodayVideo(0);
+                // 如果传递时间段 则按时间段筛选广告记录
+                if(param.getLastLoginTimeBegin() != null || param.getLastLoginTimeEnd() != null) {
+                    if (param.getLastLoginTimeEnd() != null) {
+                        ytDyzAdRecords = userAdMap.get(user.getUserId()).stream()
+                                .filter(record -> DateUtil.afterSameDay(
+                                        param.getLastLoginTimeEnd(), DateUtil.parseDate(record.getFinishTime())))
+                                .collect(Collectors.toList());
+                    }
+                    if (param.getLastLoginTimeEnd() != null) {
+                        ytDyzAdRecords = ytDyzAdRecords.stream()
+                                .filter(record -> DateUtil.beforeSameDay(
+                                        param.getLastLoginTimeEnd(), DateUtil.parseDate(record.getFinishTime())))
+                                .collect(Collectors.toList());
+                    }
+                    todayIncome = ytDyzAdRecords.stream().map(YtDyzAdRecord::getRevenue)
+                            .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+                }
+                todayVideo = (int) ytDyzAdRecords.stream()
+                        .filter(record -> record.getAdSourceType() == AdSourceTypeEnum.rewarded_video.getAdSourceType())
+                        .count();
             }
+            user.setTodayVideo(todayVideo);
+            user.setTodayIncome(todayIncome);
         }
     }