ソースを参照

将新增的统计字段同步到team表,返回接口

wilhelm wong 2 ヶ月 前
コミット
0cffaeebd5
3 ファイル変更53 行追加6 行削除
  1. 8 0
      src/dto/team.dto.ts
  2. 12 0
      src/entities/team.entity.ts
  3. 33 6
      src/services/team.service.ts

+ 8 - 0
src/dto/team.dto.ts

@@ -5,6 +5,10 @@ export interface CreateTeamBody {
   name: string
   totalRevenue?: number
   todayRevenue?: number
+  totalSales?: number
+  todaySales?: number
+  todayDAU?: number
+  totalUsers?: number
   commissionRate?: number
   password?: string
 }
@@ -14,6 +18,10 @@ export interface UpdateTeamBody {
   name?: string
   totalRevenue?: number
   todayRevenue?: number
+  totalSales?: number
+  todaySales?: number
+  todayDAU?: number
+  totalUsers?: number
   commissionRate?: number
 }
 

+ 12 - 0
src/entities/team.entity.ts

@@ -17,6 +17,18 @@ export class Team {
   @Column({ type: 'decimal', precision: 10, scale: 5, default: 0 })
   todayRevenue: number
 
+  @Column({ type: 'decimal', precision: 10, scale: 5, default: 0 })
+  totalSales: number
+
+  @Column({ type: 'decimal', precision: 10, scale: 5, default: 0 })
+  todaySales: number
+
+  @Column({ type: 'int', default: 0 })
+  todayDAU: number
+
+  @Column({ type: 'int', default: 0 })
+  totalUsers: number
+
   @Column({ type: 'decimal', precision: 5, scale: 2, default: 0 })
   commissionRate: number
 

+ 33 - 6
src/services/team.service.ts

@@ -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
       })
     }
   }