1
0

2 Commits 771e80e849 ... 311fdc8fe8

Autor SHA1 Mensagem Data
  小杜 311fdc8fe8 Merge remote-tracking branch 'origin/master' há 4 meses atrás
  小杜 364c992462 用户查询今日收益 há 4 meses atrás

+ 89 - 2
yt-app/app-service/src/main/java/com/ytpm/controller/UserController.java

@@ -19,9 +19,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -39,13 +41,15 @@ public class UserController {
     @Autowired
     AdRecordMapper adRecordMapper;
 
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
     /**
      * 查询app 所有玩家
      */
     @PostMapping("/queryAll")
-    public ResultTable<YtDyzUser> queryAll(@RequestBody YtAppUserListParam param){
+    public ResultTable<YtDyzUser> queryAll(@RequestBody YtAppUserListParam param) {
         List<YtDyzUser> dyzUsers = appUserMapper.queryAll(param);
-        if(dyzUsers.isEmpty()) return ResultTable.resultTableOk(new PageInfo<YtDyzUser>(dyzUsers));
+        if (dyzUsers.isEmpty()) return ResultTable.resultTableOk(new PageInfo<YtDyzUser>(dyzUsers));
         List<YtDyzAdRecord> ids = adRecordMapper.getByUserIds(
                 dyzUsers.stream().map(YtDyzUser::getUserId).collect(Collectors.joining(",")));
         Map<String, List<YtDyzAdRecord>> userAdMap = ids.stream().collect(
@@ -54,10 +58,93 @@ public class UserController {
             user.setLoginRecordList(loginRecordMapper.getLoginRecords(user.getUserId()));
             user.setTodayVideo(userAdMap.containsKey(user.getUserId()) ?
                     userAdMap.get(user.getUserId()).size() : 0);
+            //获取今日收益
+            if (userAdMap.containsKey(user.getUserId())) {
+                List<YtDyzAdRecord> ytDyzAdRecords = userAdMap.get(user.getUserId());
+                BigDecimal todayIncome = calculateTodayIncome(ytDyzAdRecords);
+                user.setTotalIncome(todayIncome);
+            } else {
+                user.setTodayIncome(BigDecimal.ZERO);
+            }
+
         }
         return ResultTable.resultTableOk(new PageInfo<YtDyzUser>(dyzUsers));
     }
 
+    /**
+     * 计算广告记录列表中今日的收益
+     *
+     * @param records 广告记录列表
+     * @return 今日收益总额(BigDecimal)
+     */
+    public static BigDecimal calculateTodayIncome(List<YtDyzAdRecord> records) {
+        // 空列表快速返回
+        if (records == null || records.isEmpty()) {
+            return BigDecimal.ZERO;
+        }
+
+        // 获取今天的日期范围
+        LocalDate today = LocalDate.now();
+        LocalDateTime startOfDay = today.atStartOfDay();
+        LocalDateTime endOfDay = today.plusDays(1).atStartOfDay();
+
+        // 预计算今天的日期字符串前缀(优化性能)
+        String todayPrefix = today.format(DateTimeFormatter.ISO_DATE) + " ";
+
+        return calculateTodayIncome(records, startOfDay, endOfDay, todayPrefix);
+    }
+
+    /**
+     * 计算广告记录列表中今日的收益(带日期范围参数,适用于批量处理)
+     *
+     * @param records     广告记录列表
+     * @param startOfDay  今日开始时间
+     * @param endOfDay    今日结束时间
+     * @param todayPrefix 今日日期前缀(格式:"yyyy-MM-dd ")
+     * @return 今日收益总额(BigDecimal)
+     */
+    public static BigDecimal calculateTodayIncome(
+            List<YtDyzAdRecord> records,
+            LocalDateTime startOfDay,
+            LocalDateTime endOfDay,
+            String todayPrefix) {
+
+        // 空列表快速返回
+        if (records == null || records.isEmpty()) {
+            return BigDecimal.ZERO;
+        }
+
+        BigDecimal totalToday = BigDecimal.ZERO;
+
+        for (YtDyzAdRecord record : records) {
+            String dateStr = record.getFinishTime();
+
+            // 1. 日期字符串是否存在且以今日日期开头
+            if (dateStr == null || !dateStr.startsWith(todayPrefix)) {
+                continue;
+            }
+            try {
+                // 2. 解析日期时间
+                LocalDateTime recordTime = LocalDateTime.parse(dateStr, DATE_TIME_FORMATTER);
+
+                // 3. 检查是否在今日范围内
+                if (recordTime.isBefore(startOfDay) || recordTime.isAfter(endOfDay.minusNanos(1))) {
+                    continue;
+                }
+                // 4. 累加
+                BigDecimal revenue = record.getRevenue();
+                if (revenue != null) {
+                    totalToday = totalToday.add(revenue);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return totalToday;
+    }
+
+
+
     /**
      * 主键查询用户信息
      */

+ 2 - 0
yt-common/src/main/java/com/ytpm/app/model/YtDyzUser.java

@@ -110,4 +110,6 @@ public class YtDyzUser {
     private int todayVideo;
     @ApiModelProperty(value = "渠道ID")
     private Long ditchId;
+    @ApiModelProperty(value = "今日收益")
+    private BigDecimal todayIncome;
 }