|
|
@@ -36,6 +36,7 @@ import { RcsNumber } from '../rcs-number/entities/rcs-number.entity'
|
|
|
import axios from 'axios'
|
|
|
import { BalanceRecord, BalanceType } from '../balance/entities/balance-record.entity'
|
|
|
import { Device } from '../device/entities/device.entity'
|
|
|
+import Decimal from 'decimal.js'
|
|
|
|
|
|
@Injectable()
|
|
|
export class TaskService implements OnModuleInit {
|
|
|
@@ -64,8 +65,7 @@ export class TaskService implements OnModuleInit {
|
|
|
private readonly balanceService: BalanceService,
|
|
|
private readonly userService: UsersService,
|
|
|
private readonly operatorConfigService: OperatorConfigService
|
|
|
- ) {
|
|
|
- }
|
|
|
+ ) {}
|
|
|
|
|
|
onModuleInit() {
|
|
|
this.lock.acquire('dispatchTask', async () => {
|
|
|
@@ -138,13 +138,13 @@ export class TaskService implements OnModuleInit {
|
|
|
task.confusion = 'both'
|
|
|
}
|
|
|
// 定时任务
|
|
|
- let cost = 0
|
|
|
+ let cost = new Decimal(0)
|
|
|
if (task.startedAt) {
|
|
|
task.status = TaskStatus.SCHEDULED
|
|
|
const user = await this.userService.findById(task.userId)
|
|
|
// 创建任务前扣费
|
|
|
cost = await this.getCost(task, user)
|
|
|
- if (cost > (user.balance || 0)) {
|
|
|
+ if (new Decimal(cost).comparedTo(user.balance || new Decimal(0)) > 0) {
|
|
|
throw new Error('余额不足,请充值后创建定时任务!')
|
|
|
}
|
|
|
task.paid = true
|
|
|
@@ -227,7 +227,6 @@ export class TaskService implements OnModuleInit {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
return this.refineContent(message)
|
|
|
}
|
|
|
|
|
|
@@ -275,9 +274,9 @@ export class TaskService implements OnModuleInit {
|
|
|
if (user.roles.includes(Role.Admin)) {
|
|
|
return 0
|
|
|
}
|
|
|
- const cost: number = await this.getCost(task, user)
|
|
|
+ const cost = await this.getCost(task, user)
|
|
|
// 验证余额
|
|
|
- if (cost > (user.balance || 0)) {
|
|
|
+ if (cost.comparedTo(user.balance || new Decimal(0)) > 0) {
|
|
|
return -1
|
|
|
} else {
|
|
|
return cost
|
|
|
@@ -306,7 +305,7 @@ export class TaskService implements OnModuleInit {
|
|
|
if (!user.roles.includes(Role.Admin)) {
|
|
|
// 开始任务前扣费
|
|
|
const cost = await this.getCost(task, user)
|
|
|
- if (cost > (user.balance || 0)) {
|
|
|
+ if (cost.comparedTo(user.balance || new Decimal(0)) > 0) {
|
|
|
throw new Error('Insufficient balance!')
|
|
|
}
|
|
|
await this.balanceService.feeDeduction(task.userId, cost, task.id)
|
|
|
@@ -695,8 +694,7 @@ export class TaskService implements OnModuleInit {
|
|
|
if (durianRes.data.code === 200) {
|
|
|
res.durian = durianRes.data.data.score
|
|
|
}
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})(),
|
|
|
(async () => {
|
|
|
try {
|
|
|
@@ -717,8 +715,7 @@ export class TaskService implements OnModuleInit {
|
|
|
if (cowboyRes.data.code === 200) {
|
|
|
res.cowboy = cowboyRes.data.data.score
|
|
|
}
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})(),
|
|
|
(async () => {
|
|
|
try {
|
|
|
@@ -732,8 +729,7 @@ export class TaskService implements OnModuleInit {
|
|
|
if (parts[0] === '0') {
|
|
|
res.xyz = parts[1] < 0 ? 0 : parts[1]
|
|
|
}
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})(),
|
|
|
(async () => {
|
|
|
try {
|
|
|
@@ -746,8 +742,7 @@ export class TaskService implements OnModuleInit {
|
|
|
if (cloud033Res.data.code === '1001') {
|
|
|
res.cloud033 = cloud033Res.data.data.integral
|
|
|
}
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})(),
|
|
|
(async () => {
|
|
|
try {
|
|
|
@@ -760,8 +755,7 @@ export class TaskService implements OnModuleInit {
|
|
|
if (cloud034Res.data.code === '1001') {
|
|
|
res.cloud034 = cloud034Res.data.data.integral
|
|
|
}
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})(),
|
|
|
(async () => {
|
|
|
try {
|
|
|
@@ -774,8 +768,7 @@ export class TaskService implements OnModuleInit {
|
|
|
if (cloud037Res.data.code === '1001') {
|
|
|
res.cloud037 = cloud037Res.data.data.integral
|
|
|
}
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})()
|
|
|
])
|
|
|
return res
|
|
|
@@ -787,7 +780,7 @@ export class TaskService implements OnModuleInit {
|
|
|
|
|
|
return await this.taskItemRepository
|
|
|
.createQueryBuilder()
|
|
|
- .select(['COUNT(*) AS sent', 'DATE_FORMAT(sendAt, \'%Y-%m-%d %H:00:00\') AS hour'])
|
|
|
+ .select(['COUNT(*) AS sent', "DATE_FORMAT(sendAt, '%Y-%m-%d %H:00:00') AS hour"])
|
|
|
.where('sendAt BETWEEN :start AND :end', { start: twelveHoursAgo, end: new Date() })
|
|
|
.groupBy('hour')
|
|
|
.orderBy('hour', 'DESC')
|
|
|
@@ -812,8 +805,7 @@ export class TaskService implements OnModuleInit {
|
|
|
.andWhere('task.startedAt < CURDATE()')
|
|
|
.getRawOne()
|
|
|
res.orderCountYesterday = yesterdayOrderCount.sum
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})(),
|
|
|
(async () => {
|
|
|
try {
|
|
|
@@ -825,8 +817,7 @@ export class TaskService implements OnModuleInit {
|
|
|
.andWhere('task.startedAt < CURDATE() + INTERVAL 1 DAY')
|
|
|
.getRawOne()
|
|
|
res.orderCountToday = todayOrderCount.sum
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
})()
|
|
|
])
|
|
|
|
|
|
@@ -991,7 +982,7 @@ export class TaskService implements OnModuleInit {
|
|
|
// const rate = new Decimal(String(user.rate))
|
|
|
// const num = new Decimal(String(number))
|
|
|
// const cost = rate.mul(num)
|
|
|
- return number
|
|
|
+ return new Decimal(number)
|
|
|
}
|
|
|
|
|
|
@Interval(2000)
|
|
|
@@ -1296,12 +1287,7 @@ export class TaskService implements OnModuleInit {
|
|
|
}
|
|
|
|
|
|
public async updateSend(id: number) {
|
|
|
- const user = await this.userRepository.findOneBy({ id })
|
|
|
- user.send = await this.balanceRecordRepository.sum('amount', {
|
|
|
- userId: id,
|
|
|
- type: BalanceType.CONSUMPTION
|
|
|
- })
|
|
|
- return await this.userRepository.save(user)
|
|
|
+ return await this.balanceService.sumAmount(id, BalanceType.CONSUMPTION)
|
|
|
}
|
|
|
|
|
|
@Cron('0 0,30 * * * *')
|