|
@@ -5,7 +5,7 @@ import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { RcsNumber, RcsNumberSource, RcsNumberStatus } from './entities/rcs-number.entity'
|
|
import { RcsNumber, RcsNumberSource, RcsNumberStatus } from './entities/rcs-number.entity'
|
|
|
import { PageRequest } from '../common/dto/page-request'
|
|
import { PageRequest } from '../common/dto/page-request'
|
|
|
import { paginate, Pagination } from 'nestjs-typeorm-paginate'
|
|
import { paginate, Pagination } from 'nestjs-typeorm-paginate'
|
|
|
-import { MoreThan, Not, Repository } from 'typeorm'
|
|
|
|
|
|
|
+import { Between, LessThan, MoreThan, MoreThanOrEqual, Not, Repository } from 'typeorm'
|
|
|
import { DeviceService } from 'src/device/device.service'
|
|
import { DeviceService } from 'src/device/device.service'
|
|
|
import { TaskService } from 'src/task/task.service'
|
|
import { TaskService } from 'src/task/task.service'
|
|
|
import { OperatorConfigService } from 'src/operator_config/operator_config.service'
|
|
import { OperatorConfigService } from 'src/operator_config/operator_config.service'
|
|
@@ -271,7 +271,11 @@ export class RcsNumberService {
|
|
|
const rcsNumber = await this.rcsNumberRepository.findOneBy({ id })
|
|
const rcsNumber = await this.rcsNumberRepository.findOneBy({ id })
|
|
|
if (rcsNumber) {
|
|
if (rcsNumber) {
|
|
|
const numberService = this.getNumberService(rcsNumber.from)
|
|
const numberService = this.getNumberService(rcsNumber.from)
|
|
|
- await numberService.releaseNumber(rcsNumber.rawNumber)
|
|
|
|
|
|
|
+ let param = rcsNumber.rawNumber
|
|
|
|
|
+ if (rcsNumber.from === RcsNumberSource.smspva) {
|
|
|
|
|
+ param = rcsNumber.orderId
|
|
|
|
|
+ }
|
|
|
|
|
+ await numberService.releaseNumber(param)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -398,6 +402,45 @@ export class RcsNumberService {
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 释放smspva号码
|
|
|
|
|
+ @Cron('0 * * * * *')
|
|
|
|
|
+ async scheduledRelease() {
|
|
|
|
|
+ Logger.log('Scheduled release started.')
|
|
|
|
|
+
|
|
|
|
|
+ const now = new Date()
|
|
|
|
|
+ now.setSeconds(0, 0)
|
|
|
|
|
+ const prevMinute = new Date(now)
|
|
|
|
|
+ prevMinute.setMinutes(prevMinute.getMinutes() - 1)
|
|
|
|
|
+
|
|
|
|
|
+ const rcsNumbers = await this.rcsNumberRepository.findBy({
|
|
|
|
|
+ from: RcsNumberSource.smspva,
|
|
|
|
|
+ expiryTime: Between(prevMinute, now),
|
|
|
|
|
+ status: RcsNumberStatus.EXPIRED
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ if (rcsNumbers.length === 0) {
|
|
|
|
|
+ Logger.log('No expired numbers to release.')
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const results = await Promise.allSettled(
|
|
|
|
|
+ rcsNumbers.map((rcsNumber) =>
|
|
|
|
|
+ this.smspva.releaseNumber(rcsNumber.orderId).catch((e) => {
|
|
|
|
|
+ Logger.error(`Failed to release orderId ${rcsNumber.orderId}: ${e.message}`)
|
|
|
|
|
+ throw e
|
|
|
|
|
+ })
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ results.forEach((result, index) => {
|
|
|
|
|
+ if (result.status === 'rejected') {
|
|
|
|
|
+ Logger.error(`Order ID ${rcsNumbers[index].orderId} release failed: ${result.reason}`)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ Logger.log(`Scheduled release completed: ${results.length} numbers processed.`)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// @Cron('0 0 8 * * *')
|
|
// @Cron('0 0 8 * * *')
|
|
|
// async addBlack(): Promise<void> {
|
|
// async addBlack(): Promise<void> {
|
|
|
// try {
|
|
// try {
|