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