|
|
@@ -5,7 +5,7 @@ import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { RcsNumber, RcsNumberSource, RcsNumberStatus } from './entities/rcs-number.entity'
|
|
|
import { PageRequest } from '../common/dto/page-request'
|
|
|
import { paginate, Pagination } from 'nestjs-typeorm-paginate'
|
|
|
-import { Between, MoreThan, Not, Repository } from 'typeorm'
|
|
|
+import { Between, In, MoreThan, Not, Repository } from 'typeorm'
|
|
|
import { DeviceService } from 'src/device/device.service'
|
|
|
import { TaskService } from 'src/task/task.service'
|
|
|
import { OperatorConfigService } from 'src/operator_config/operator_config.service'
|
|
|
@@ -282,7 +282,7 @@ export class RcsNumberService {
|
|
|
if (rcsNumber) {
|
|
|
const numberService = this.getNumberService(rcsNumber.from)
|
|
|
let param = rcsNumber.rawNumber
|
|
|
- if (rcsNumber.from === RcsNumberSource.smspva) {
|
|
|
+ if (rcsNumber.from === RcsNumberSource.smspva || rcsNumber.from === RcsNumberSource.svenkvint) {
|
|
|
param = rcsNumber.orderId
|
|
|
}
|
|
|
await numberService.releaseNumber(param)
|
|
|
@@ -418,50 +418,56 @@ export class RcsNumberService {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- // 释放smspva号码
|
|
|
+ // 释放号码 smspva svenkvint
|
|
|
@Cron('0 * * * * *')
|
|
|
async scheduledRelease() {
|
|
|
Logger.log('Scheduled release started.')
|
|
|
+ try {
|
|
|
+ const now = new Date()
|
|
|
+ now.setSeconds(0, 0)
|
|
|
+ const prevMinute = new Date(now)
|
|
|
+ prevMinute.setMinutes(prevMinute.getMinutes() - 1)
|
|
|
+
|
|
|
+ const rcsNumbers = await this.rcsNumberRepository.findBy({
|
|
|
+ expiryTime: Between(prevMinute, now),
|
|
|
+ status: RcsNumberStatus.EXPIRED
|
|
|
+ })
|
|
|
|
|
|
- const now = new Date()
|
|
|
- now.setSeconds(0, 0)
|
|
|
- const prevMinute = new Date(now)
|
|
|
- prevMinute.setMinutes(prevMinute.getMinutes() - 1)
|
|
|
+ if (rcsNumbers.length === 0) {
|
|
|
+ Logger.log('No expired numbers to release.')
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- const rcsNumbers = await this.rcsNumberRepository.findBy({
|
|
|
- from: RcsNumberSource.smspva,
|
|
|
- expiryTime: Between(prevMinute, now),
|
|
|
- status: RcsNumberStatus.EXPIRED
|
|
|
- })
|
|
|
+ const results = await Promise.allSettled(
|
|
|
+ rcsNumbers.map(async (rcsNumber) => {
|
|
|
+ const numberService = this.getNumberService(rcsNumber.from)
|
|
|
+ if (!numberService) {
|
|
|
+ throw new Error(`Unknown source: ${rcsNumber.from}`)
|
|
|
+ }
|
|
|
|
|
|
- if (rcsNumbers.length === 0) {
|
|
|
- Logger.log('No expired numbers to release.')
|
|
|
- return
|
|
|
- }
|
|
|
+ try {
|
|
|
+ await numberService.releaseNumber(rcsNumber.orderId)
|
|
|
+ return { orderId: rcsNumber.orderId, success: true }
|
|
|
+ } catch (error) {
|
|
|
+ Logger.error(`Failed to release orderId ${rcsNumber.orderId}: ${error.message}`)
|
|
|
+ throw error
|
|
|
+ }
|
|
|
+ })
|
|
|
+ )
|
|
|
|
|
|
- const results = await Promise.allSettled(
|
|
|
- rcsNumbers.map((rcsNumber) => {
|
|
|
- if (rcsNumber.from === RcsNumberSource.smspva) {
|
|
|
- this.smspva.releaseNumber(rcsNumber.orderId).catch((e) => {
|
|
|
- Logger.error(`Failed to release orderId ${rcsNumber.orderId}: ${e.message}`)
|
|
|
- throw e
|
|
|
- })
|
|
|
- } else if (rcsNumber.from === RcsNumberSource.smspva02) {
|
|
|
- this.smspva02.releaseNumber(rcsNumber.orderId).catch((e) => {
|
|
|
- Logger.error(`Failed to release orderId ${rcsNumber.orderId}: ${e.message}`)
|
|
|
- throw e
|
|
|
- })
|
|
|
+ const successful = results.filter((r) => r.status === 'fulfilled').length
|
|
|
+ const failed = results.filter((r) => r.status === 'rejected').length
|
|
|
+
|
|
|
+ results.forEach((result, index) => {
|
|
|
+ if (result.status === 'rejected') {
|
|
|
+ Logger.error(`Order ID ${rcsNumbers[index].orderId} release failed: ${result.reason}`)
|
|
|
}
|
|
|
})
|
|
|
- )
|
|
|
|
|
|
- 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.`)
|
|
|
+ Logger.log(`Scheduled release completed: ${successful} successful, ${failed} failed.`)
|
|
|
+ } catch (error) {
|
|
|
+ Logger.error(`Scheduled release encountered an error: ${error.message}`)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// @Cron('0 0 8 * * *')
|