wuyi 1 vuosi sitten
vanhempi
commit
cbb4560761
2 muutettua tiedostoa jossa 77 lisäystä ja 0 poistoa
  1. 8 0
      src/task/task.controller.ts
  2. 69 0
      src/task/task.service.ts

+ 8 - 0
src/task/task.controller.ts

@@ -147,6 +147,14 @@ export class TaskController {
         return await this.taskService.hourSentStatistics()
     }
 
+    @Get('/numStatistics')
+    async numStatistics(@Req() req) {
+        if (!req.user.roles.includes('admin')) {
+            return null
+        }
+        return await this.taskService.numStatistics()
+    }
+
     @Get('/sentCountryStatistics')
     async sentCountryStatistics(@Req() req) {
         return await this.taskService.sentCountryStatistics(req)

+ 69 - 0
src/task/task.service.ts

@@ -739,6 +739,75 @@ export class TaskService implements OnModuleInit {
             .getRawMany()
     }
 
+    async numStatistics() {
+        const res = {
+            totalHoursYesterday: 0,
+            totalHoursToday: 0,
+            orderCountYesterday: 0,
+            orderCountToday: 0
+        }
+        await Promise.all([
+            (async () => {
+                // 查询昨日发送总时长
+                const totalHoursYesterday = await this.taskItemRepository
+                    .createQueryBuilder()
+                    .select('SUM(tmp.c) / 60', 'hour')
+                    .from(subQuery => {
+                        return subQuery
+                            .select('1', 'c')
+                            .addSelect('UNIX_TIMESTAMP(task_item.sendAt) DIV 60 * 60', 'time')
+                            .from(TaskItem, 'task_item')
+                            .where('task_item.sendAt >= CURDATE() - INTERVAL 1 DAY')
+                            .andWhere('task_item.sendAt < CURDATE()')
+                            .andWhere('task_item.status != :status', { status: 'idle' })
+                            .groupBy('time')
+                    }, 'tmp')
+                    .getRawOne()
+                res.totalHoursYesterday = totalHoursYesterday.hour === null ? 0 : totalHoursYesterday.hour
+            })(),
+            (async () => {
+                // 查询今日发送总时长
+                const totalHoursToday = await this.taskItemRepository
+                    .createQueryBuilder()
+                    .select('SUM(tmp.c) / 60', 'hour')
+                    .from(subQuery => {
+                        return subQuery
+                            .select('1', 'c')
+                            .addSelect('UNIX_TIMESTAMP(task_item.sendAt) DIV 60 * 60', 'time')
+                            .from(TaskItem, 'task_item')
+                            .where('task_item.sendAt >= CURDATE()')
+                            .andWhere('task_item.status != :status', { status: 'idle' })
+                            .groupBy('time')
+                    }, 'tmp')
+                    .getRawOne()
+                res.totalHoursToday = totalHoursToday.hour === null ? 0 : totalHoursToday.hour
+            })(),
+            (async () => {
+                // 查询昨日订单数
+                const yesterdayOrderCount = await this.taskRepository
+                    .createQueryBuilder()
+                    .select('COUNT(1)', 'sum')
+                    .where('task.startedAt >= CURDATE() - INTERVAL 1 DAY')
+                    .andWhere('task.startedAt < CURDATE()')
+                    .getRawOne()
+                res.orderCountYesterday = yesterdayOrderCount.sum
+            })(),
+            (async () => {
+                // 查询今日订单数
+                const todayOrderCount = await this.taskRepository
+                    .createQueryBuilder()
+                    .select('COUNT(1)', 'sum')
+                    .where('task.startedAt >= CURDATE()')
+                    .andWhere('task.startedAt < CURDATE() + INTERVAL 1 DAY')
+                    .getRawOne()
+                res.orderCountToday = todayOrderCount.sum
+            })()
+        ])
+
+        return res
+    }
+
+
     async sentCountryStatistics(req: any) {
         let where = {}
         if (req.user.roles.includes('api') || req.user.roles.includes('superApi')) {