diff --git a/game-service/src/main/java/awesome/group/game/service/AdminDeviceService.java b/game-service/src/main/java/awesome/group/game/service/AdminDeviceService.java index bc7d178..807d4fd 100644 --- a/game-service/src/main/java/awesome/group/game/service/AdminDeviceService.java +++ b/game-service/src/main/java/awesome/group/game/service/AdminDeviceService.java @@ -138,6 +138,23 @@ public class AdminDeviceService { return incomeOverviewByAppIds(appIds, adminId); } + public Map incomeOverview(List adminIds) { + if (CollectionUtils.isEmpty(adminIds)) { + return new HashMap<>(); + } + Map res = adminIds.stream().collect(Collectors.toMap(x -> x, x -> new OverviewBo())); + Map totalIncome = aggregationSubService.getIncome(adminIds, null, null); + Map lastMonthIncome = aggregationSubService.getIncomeLastMonth(adminIds); + Map thisMonthIncome = aggregationSubService.getIncomeThisMonth(adminIds); + adminIds.forEach(x->{ + OverviewBo bo = res.get(x); + bo.totalIncome = totalIncome.getOrDefault(x, 0L); + bo.lastMonthIncome = lastMonthIncome.getOrDefault(x, 0L); + bo.thisMonthIncome = thisMonthIncome.getOrDefault(x, 0L); + }); + return res; + } + private OverviewBo incomeOverviewByAppIds(List appIds, int adminId) { if (CollectionUtils.isEmpty(appIds)) { return new OverviewBo(); diff --git a/game-service/src/main/java/awesome/group/game/service/AdminService.java b/game-service/src/main/java/awesome/group/game/service/AdminService.java index 8f05c87..7a0e440 100644 --- a/game-service/src/main/java/awesome/group/game/service/AdminService.java +++ b/game-service/src/main/java/awesome/group/game/service/AdminService.java @@ -61,6 +61,10 @@ public class AdminService { @Autowired private AdminService adminService; + @Lazy + @Autowired + private AdminDeviceService deviceService; + public static final int SUPER_ADMIN = 1;//超级管理员 public static final int NORMAL_ADMIN = 2;//普通管理员 public static final int OTHER = 3;//普通账号 @@ -170,7 +174,11 @@ public class AdminService { query.eq(MatrixAdmin::getParentAdminId, adminId); List res = adminMapper.selectList(query); - return res.stream().map(MatrixAdminBo::new).toList(); + List data = res.stream().map(MatrixAdminBo::new).toList(); + List deviceOwners = data.stream().filter(x -> x.getRole() == DEVICE_OWNER).map(MatrixAdminBo::getId).toList(); + Map overviewBoMap = deviceService.incomeOverview(deviceOwners); + data.forEach(x -> x.overview = overviewBoMap.get(x.getId())); + return data; } public void saveAdmin(int adminId, MatrixAdminBo bo, String channel) { diff --git a/game-service/src/main/java/awesome/group/game/service/AggregationSubService.java b/game-service/src/main/java/awesome/group/game/service/AggregationSubService.java index 79d33b2..806b13a 100644 --- a/game-service/src/main/java/awesome/group/game/service/AggregationSubService.java +++ b/game-service/src/main/java/awesome/group/game/service/AggregationSubService.java @@ -2,13 +2,18 @@ package awesome.group.game.service; import awesome.group.game.dao.bean.MatrixAdvAggregationSub; import awesome.group.game.dao.mapper.MatrixAdvAggregationSubMapper; +import awesome.group.game.service.util.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.time.LocalDate; +import java.time.YearMonth; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class AggregationSubService { @@ -31,4 +36,38 @@ public class AggregationSubService { return data.getIncome(); } + public Map getIncome(List adminIds, Integer startDate, Integer endDate) { + LambdaQueryWrapper query = new QueryWrapper() + .select("sum(income_real) as income").lambda(); + query.in(MatrixAdvAggregationSub::getAdminId, adminIds); + if (startDate != null) { + query.ge(MatrixAdvAggregationSub::getDate, startDate); + } + if (endDate != null) { + query.le(MatrixAdvAggregationSub::getDate, endDate); + } + query.groupBy(MatrixAdvAggregationSub::getAdminId); + List data = subMapper.selectList(query); + return data.stream().collect(Collectors.toMap(MatrixAdvAggregationSub::getAdminId, MatrixAdvAggregationSub::getIncome)); + } + + public Map getIncomeLastMonth(List adminIds) { + LocalDate now = LocalDate.now(); + // 获取上个月的年份和月份 + YearMonth lastMonth = YearMonth.from(now).minusMonths(1); + + // 获取上个月的第一天和最后一天 + LocalDate firstDayOfLastMonth = lastMonth.atDay(1); + LocalDate lastDayOfLastMonth = lastMonth.atEndOfMonth(); + return getIncome(adminIds, DateUtil.date2Number(firstDayOfLastMonth), DateUtil.date2Number(lastDayOfLastMonth)); + } + + public Map getIncomeThisMonth(List adminIds) { + LocalDate now = LocalDate.now(); + YearMonth thisMonth = YearMonth.from(now); + + LocalDate firstDayOfThisMonth = thisMonth.atDay(1); + return getIncome(adminIds, DateUtil.date2Number(firstDayOfThisMonth), DateUtil.currentDate()); + } + } diff --git a/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdminBo.java b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdminBo.java index af3d799..75b69e3 100644 --- a/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdminBo.java +++ b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdminBo.java @@ -17,6 +17,7 @@ public class MatrixAdminBo { private Integer role;//1超级管理员,2管理员,3普通账号 private Integer deviceCnt; private Integer incomeRate; + public OverviewBo overview; public MatrixAdminBo() { }