浏览代码

动态内容

wuyi 1 年之前
父节点
当前提交
69347040d8
共有 4 个文件被更改,包括 64 次插入5 次删除
  1. 5 0
      src/task/entities/task.entity.ts
  2. 5 0
      src/task/task.controller.ts
  3. 4 2
      src/task/task.module.ts
  4. 50 3
      src/task/task.service.ts

+ 5 - 0
src/task/entities/task.entity.ts

@@ -1,4 +1,5 @@
 import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'
+import { Exclude } from 'class-transformer'
 
 export enum TaskStatus {
     IDLE = 'idle',
@@ -55,4 +56,8 @@ export class Task {
 
     @Column({ nullable: true })
     channelId: string
+
+    @Exclude()
+    dynamicMessage: string
+
 }

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

@@ -55,4 +55,9 @@ export class TaskController {
         }
     }
 
+    @Get('/toBeSentNum')
+    async getTobeSentNum() {
+        return await this.taskService.getToBeSentNum()
+    }
+
 }

+ 4 - 2
src/task/task.module.ts

@@ -12,10 +12,11 @@ import { Users } from '../users/entities/users.entity'
 import { UsersModule } from '../users/users.module'
 import { Balance } from '../balance/entities/balance.entities'
 import { BalanceModule } from '../balance/balance.module'
+import { Phone } from '../phone-list/entities/phone.entity'
 
 @Module({
     imports: [
-        TypeOrmModule.forFeature([Task, TaskItem,Users,Balance]),
+        TypeOrmModule.forFeature([Task, TaskItem, Users, Balance, Phone]),
         forwardRef(() => EventsModule),
         PhoneListModule,
         DeviceModule,
@@ -27,4 +28,5 @@ import { BalanceModule } from '../balance/balance.module'
     providers: [TaskService],
     exports: [TaskService]
 })
-export class TaskModule {}
+export class TaskModule {
+}

+ 50 - 3
src/task/task.service.ts

@@ -18,6 +18,8 @@ import * as moment from 'moment'
 import { BalanceService } from '../balance/balance.service'
 import Decimal from 'decimal.js'
 import { Role } from '../model/role.enum'
+import { Phone } from '../phone-list/entities/phone.entity'
+import { ta } from 'date-fns/locale'
 
 @Injectable()
 export class TaskService implements OnModuleInit {
@@ -28,6 +30,8 @@ export class TaskService implements OnModuleInit {
         private taskItemRepository: Repository<TaskItem>,
         @InjectRepository(Users)
         private userRepository: Repository<Users>,
+        @InjectRepository(Phone)
+        private phoneRepository: Repository<Phone>,
         @InjectRepository(Balance)
         private balanceRepository: Repository<Balance>,
         @Inject(forwardRef(() => EventsGateway))
@@ -83,6 +87,10 @@ export class TaskService implements OnModuleInit {
     }
 
     async createTask(task: Task): Promise<Task> {
+        let dynamicMessageList = null
+        if (task.dynamicMessage !== '' || task.dynamicMessage !== null) {
+            dynamicMessageList = task.dynamicMessage.split(',')
+        }
         task = await this.taskRepository.save(task)
         const phones = await this.phoneListService.findPhoneByListId(task.listId)
         await this.taskItemRepository.save(
@@ -90,7 +98,11 @@ export class TaskService implements OnModuleInit {
                 const taskItem = new TaskItem()
                 taskItem.taskId = task.id
                 taskItem.number = phone.number
-                taskItem.message = task.message
+                if (dynamicMessageList === null) {
+                    taskItem.message = task.message
+                } else {
+                    taskItem.message = task.message.replace('[#random#]', dynamicMessageList[Math.floor(Math.random() * dynamicMessageList.length)])
+                }
                 taskItem.status = TaskStatus.IDLE
                 return taskItem
             })
@@ -251,6 +263,43 @@ export class TaskService implements OnModuleInit {
         return await workbook.xlsx.writeBuffer()
     }
 
+    async getToBeSentNum() {
+        let total = 0
+        // 任务队列
+        const tasks = await this.taskRepository.find(
+            {
+                where: {
+                    status: TaskStatus.QUEUED
+                },
+                order: {
+                    createdAt: 'ASC'
+                }
+            })
+        if (tasks.length > 0) {
+            const list = tasks.map(task => task.id)
+            // 队列中剩余任务发送数
+            const number = await this.phoneRepository.countBy({
+                listId: In(list)
+            })
+            total += number
+        }
+
+        // 正在执行的任务
+        const current = await this.taskRepository.find(
+            {
+                where: {
+                    status: TaskStatus.PENDING
+                }
+            })
+        if (current.length > 0) {
+            const number = await this.phoneRepository.countBy({
+                listId: current[0].listId
+            })
+            total += number
+        }
+        return total
+    }
+
     async runTask(task: Task) {
         let controller = new AbortController()
         this.taskControllers[task.id] = controller
@@ -325,10 +374,8 @@ export class TaskService implements OnModuleInit {
                         })
                     // 异步执行startTask方法
                     if (tasks.length > 0) {
-                        console.log('异步执行队列下一个任务')
                         this.startTask(tasks[0].id)
                     }
-                    console.log('当前任务结束')
                     break
                 }