|
@@ -19,9 +19,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.Calendar;
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -39,13 +41,15 @@ public class UserController {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
AdRecordMapper adRecordMapper;
|
|
AdRecordMapper adRecordMapper;
|
|
|
|
|
|
|
|
|
|
+ private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 查询app 所有玩家
|
|
* 查询app 所有玩家
|
|
|
*/
|
|
*/
|
|
|
@PostMapping("/queryAll")
|
|
@PostMapping("/queryAll")
|
|
|
- public ResultTable<YtDyzUser> queryAll(@RequestBody YtAppUserListParam param){
|
|
|
|
|
|
|
+ public ResultTable<YtDyzUser> queryAll(@RequestBody YtAppUserListParam param) {
|
|
|
List<YtDyzUser> dyzUsers = appUserMapper.queryAll(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(
|
|
List<YtDyzAdRecord> ids = adRecordMapper.getByUserIds(
|
|
|
dyzUsers.stream().map(YtDyzUser::getUserId).collect(Collectors.joining(",")));
|
|
dyzUsers.stream().map(YtDyzUser::getUserId).collect(Collectors.joining(",")));
|
|
|
Map<String, List<YtDyzAdRecord>> userAdMap = ids.stream().collect(
|
|
Map<String, List<YtDyzAdRecord>> userAdMap = ids.stream().collect(
|
|
@@ -54,10 +58,93 @@ public class UserController {
|
|
|
user.setLoginRecordList(loginRecordMapper.getLoginRecords(user.getUserId()));
|
|
user.setLoginRecordList(loginRecordMapper.getLoginRecords(user.getUserId()));
|
|
|
user.setTodayVideo(userAdMap.containsKey(user.getUserId()) ?
|
|
user.setTodayVideo(userAdMap.containsKey(user.getUserId()) ?
|
|
|
userAdMap.get(user.getUserId()).size() : 0);
|
|
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));
|
|
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;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 主键查询用户信息
|
|
* 主键查询用户信息
|
|
|
*/
|
|
*/
|