Quellcode durchsuchen

更新团队控制器和服务,重命名统计方法,新增用户登录验证逻辑,调整路由以支持团队统计数据的获取,同时移除重置今日收入的功能。

wuyi vor 3 Monaten
Ursprung
Commit
21e7c06c4c
3 geänderte Dateien mit 23 neuen und 22 gelöschten Zeilen
  1. 10 6
      src/controllers/team.controller.ts
  2. 6 7
      src/routes/team.routes.ts
  3. 7 9
      src/services/team.service.ts

+ 10 - 6
src/controllers/team.controller.ts

@@ -97,18 +97,22 @@ export class TeamController {
     }
   }
 
-  async resetTodayRevenue(request: FastifyRequest, reply: FastifyReply) {
+  async getStatistics(request: FastifyRequest, reply: FastifyReply) {
     try {
-      await this.teamService.resetTodayRevenue()
-      return reply.send({ message: '今日收入已重置' })
+      const statistics = await this.teamService.getStatistics()
+      return reply.send(statistics)
     } catch (error) {
-      return reply.code(500).send({ message: '重置今日收入失败', error })
+      return reply.code(500).send({ message: '获取统计数据失败', error })
     }
   }
 
-  async getStatistics(request: FastifyRequest, reply: FastifyReply) {
+  async getTeamStatistics(request: FastifyRequest, reply: FastifyReply) {
     try {
-      const statistics = await this.teamService.getStatistics()
+      const user = request.user
+      if (!user) {
+        return reply.code(403).send({ message: '用户未登录' })
+      }
+      const statistics = await this.teamService.getTeamStatistics(user.id)
       return reply.send(statistics)
     } catch (error) {
       return reply.code(500).send({ message: '获取统计数据失败', error })

+ 6 - 7
src/routes/team.routes.ts

@@ -49,13 +49,6 @@ export default async function teamRoutes(fastify: FastifyInstance) {
     teamController.delete.bind(teamController)
   )
 
-  // 重置今日收入
-  fastify.post(
-    '/reset-today-revenue',
-    { onRequest: [authenticate, hasRole(UserRole.ADMIN)] },
-    teamController.resetTodayRevenue.bind(teamController)
-  )
-
   // 获取统计数据
   fastify.get(
     '/statistics/summary',
@@ -63,6 +56,12 @@ export default async function teamRoutes(fastify: FastifyInstance) {
     teamController.getStatistics.bind(teamController)
   )
 
+  fastify.get(
+    '/statistics/team',
+    { onRequest: [authenticate, hasAnyRole(UserRole.ADMIN, UserRole.TEAM)] },
+    teamController.getTeamStatistics.bind(teamController)
+  )
+
   // 获取团队
   fastify.get(
     '/all',

+ 7 - 9
src/services/team.service.ts

@@ -96,16 +96,12 @@ export class TeamService {
     return this.teamRepository.save(team)
   }
 
-  async resetTodayRevenue(): Promise<void> {
-    await this.teamRepository.update({}, { todayRevenue: 0 })
-  }
-
   async getStatistics(): Promise<{
     totalTeams: number
     totalRevenue: number
     todayRevenue: number
     averageCommissionRate: number
-    topTeams: Array<{ id: number; name: string; totalRevenue: number; todayRevenue: number }>
+    allTeams: Array<{ id: number; name: string; totalRevenue: number; todayRevenue: number }>
   }> {
     const teams = await this.teamRepository.find({
       select: ['id', 'name', 'totalRevenue', 'todayRevenue', 'commissionRate']
@@ -116,7 +112,7 @@ export class TeamService {
       totalRevenue: 0,
       todayRevenue: 0,
       averageCommissionRate: 0,
-      topTeams: [] as Array<{ id: number; name: string; totalRevenue: number; todayRevenue: number }>
+      allTeams: [] as Array<{ id: number; name: string; totalRevenue: number; todayRevenue: number }>
     }
 
     let totalCommissionRate = 0
@@ -129,10 +125,8 @@ export class TeamService {
 
     statistics.averageCommissionRate = teams.length > 0 ? totalCommissionRate / teams.length : 0
 
-    // 获取收入前5的团队
-    statistics.topTeams = teams
+    statistics.allTeams = teams
       .sort((a, b) => Number(b.totalRevenue) - Number(a.totalRevenue))
-      .slice(0, 5)
       .map(team => ({
         id: team.id,
         name: team.name,
@@ -143,6 +137,10 @@ export class TeamService {
     return statistics
   }
 
+  async getTeamStatistics(userId: number): Promise<Team> {
+    return this.teamRepository.findOneOrFail({ where: { userId } })
+  }
+
   async getTeams(): Promise<Array<{ id: number; name: string; userId: number }>> {
     return await this.teamRepository.find({
       select: ['id', 'name', 'userId']