|
|
@@ -237,6 +237,16 @@ export class TeamService {
|
|
|
.getRawMany()
|
|
|
: []
|
|
|
|
|
|
+ // 查询总用户数统计(基于会员的teamId)
|
|
|
+ const totalUsersStats = teamIds.length > 0
|
|
|
+ ? await this.memberRepository
|
|
|
+ .createQueryBuilder('member')
|
|
|
+ .select(['member.teamId as teamId', 'COUNT(member.id) as totalUsers'])
|
|
|
+ .where('member.teamId IN (:...teamIds)', { teamIds })
|
|
|
+ .groupBy('member.teamId')
|
|
|
+ .getRawMany()
|
|
|
+ : []
|
|
|
+
|
|
|
// 构建统计数据映射(使用 userId 作为键)
|
|
|
const totalRevenueMap = new Map<number, number>()
|
|
|
const todayRevenueMap = new Map<number, number>()
|
|
|
@@ -244,6 +254,7 @@ export class TeamService {
|
|
|
const todaySalesMap = new Map<number, number>()
|
|
|
const todayDAUMap = new Map<number, number>()
|
|
|
const todayNewUsersMap = new Map<number, number>()
|
|
|
+ const totalUsersMap = new Map<number, number>()
|
|
|
|
|
|
totalRevenueStats.forEach(stat => {
|
|
|
totalRevenueMap.set(stat.userId, Number(stat.totalRevenue) || 0)
|
|
|
@@ -269,6 +280,10 @@ export class TeamService {
|
|
|
todayNewUsersMap.set(stat.teamId, Number(stat.newUsers) || 0)
|
|
|
})
|
|
|
|
|
|
+ totalUsersStats.forEach(stat => {
|
|
|
+ totalUsersMap.set(stat.teamId, Number(stat.totalUsers) || 0)
|
|
|
+ })
|
|
|
+
|
|
|
// 计算统计数据
|
|
|
const statistics = {
|
|
|
totalTeams: teams.length,
|
|
|
@@ -279,7 +294,7 @@ export class TeamService {
|
|
|
todayDAU: 0,
|
|
|
todayNewUsers: 0,
|
|
|
averageCommissionRate: 0,
|
|
|
- allTeams: [] as Array<{ id: number; name: string; totalRevenue: number; todayRevenue: number; totalSales: number; todaySales: number; todayDAU: number; todayNewUsers: number }>
|
|
|
+ allTeams: [] as Array<{ id: number; name: string; totalRevenue: number; todayRevenue: number; totalSales: number; todaySales: number; todayDAU: number; todayNewUsers: number; totalUsers: number }>
|
|
|
}
|
|
|
|
|
|
let totalCommissionRate = 0
|
|
|
@@ -292,6 +307,7 @@ export class TeamService {
|
|
|
const teamTodaySales = todaySalesMap.get(team.userId) || 0
|
|
|
const teamTodayDAU = todayDAUMap.get(team.id) || 0
|
|
|
const teamTodayNewUsers = todayNewUsersMap.get(team.id) || 0
|
|
|
+ const teamTotalUsers = totalUsersMap.get(team.id) || 0
|
|
|
|
|
|
statistics.totalRevenue += teamTotalRevenue
|
|
|
statistics.todayRevenue += teamTodayRevenue
|
|
|
@@ -309,7 +325,8 @@ export class TeamService {
|
|
|
totalSales: Number(teamTotalSales.toFixed(5)),
|
|
|
todaySales: Number(teamTodaySales.toFixed(5)),
|
|
|
todayDAU: Number(teamTodayDAU),
|
|
|
- todayNewUsers: Number(teamTodayNewUsers)
|
|
|
+ todayNewUsers: Number(teamTodayNewUsers),
|
|
|
+ totalUsers: Number(teamTotalUsers)
|
|
|
})
|
|
|
})
|
|
|
|
|
|
@@ -320,6 +337,7 @@ export class TeamService {
|
|
|
const defaultTodaySales = todaySalesMap.get(0) || 0
|
|
|
const defaultTodayDAU = todayDAUMap.get(0) || 0
|
|
|
const defaultTodayNewUsers = todayNewUsersMap.get(0) || 0
|
|
|
+ const defaultTotalUsers = totalUsersMap.get(0) || 0
|
|
|
|
|
|
statistics.totalRevenue += defaultTotalRevenue
|
|
|
statistics.todayRevenue += defaultTodayRevenue
|
|
|
@@ -337,7 +355,8 @@ export class TeamService {
|
|
|
totalSales: Number(defaultTotalSales.toFixed(5)),
|
|
|
todaySales: Number(defaultTodaySales.toFixed(5)),
|
|
|
todayDAU: Number(defaultTodayDAU),
|
|
|
- todayNewUsers: Number(defaultTodayNewUsers)
|
|
|
+ todayNewUsers: Number(defaultTodayNewUsers),
|
|
|
+ totalUsers: Number(defaultTotalUsers)
|
|
|
})
|
|
|
|
|
|
statistics.averageCommissionRate = teams.length > 0 ? Number((totalCommissionRate / teams.length).toFixed(2)) : 0
|
|
|
@@ -388,18 +407,26 @@ export class TeamService {
|
|
|
}
|
|
|
|
|
|
private async updateTeamDataAsync(
|
|
|
- teams: Array<{ id: number; totalRevenue: number; todayRevenue: number }>
|
|
|
+ teams: Array<{ id: number; totalRevenue: number; todayRevenue: number; totalSales: number; todaySales: number; todayDAU: number; totalUsers: number }>
|
|
|
): Promise<void> {
|
|
|
const updates = teams.map(team => ({
|
|
|
id: team.id,
|
|
|
totalRevenue: team.totalRevenue,
|
|
|
- todayRevenue: team.todayRevenue
|
|
|
+ todayRevenue: team.todayRevenue,
|
|
|
+ totalSales: team.totalSales,
|
|
|
+ todaySales: team.todaySales,
|
|
|
+ todayDAU: team.todayDAU,
|
|
|
+ totalUsers: team.totalUsers
|
|
|
}))
|
|
|
|
|
|
for (const update of updates) {
|
|
|
await this.teamRepository.update(update.id, {
|
|
|
totalRevenue: update.totalRevenue,
|
|
|
- todayRevenue: update.todayRevenue
|
|
|
+ todayRevenue: update.todayRevenue,
|
|
|
+ totalSales: update.totalSales,
|
|
|
+ todaySales: update.todaySales,
|
|
|
+ todayDAU: update.todayDAU,
|
|
|
+ totalUsers: update.totalUsers
|
|
|
})
|
|
|
}
|
|
|
}
|