Files
wwjcloud-nest-v1/wwjcloud-nest/src/core/member/jobs/SetMemberNoJob.ts

87 lines
2.5 KiB
TypeScript
Raw Normal View History

import { Injectable, Logger } from '@nestjs/common';
import { InjectQueue } from '@nestjs/bullmq';
import { Queue } from 'bullmq';
import { BusinessException } from '@wwjCommon/exceptions/business.exception';
/**
* SetMemberNoJob - NestJS BullMQ
* 参考: https://docs.nestjs.com/techniques/queues
* Java: @Async + RabbitMQ
* PHP: thinkqueue
*/
@Injectable()
export class SetMemberNoJob {
private readonly logger = new Logger(SetMemberNoJob.name);
constructor(@InjectQueue('member') private readonly queue: Queue) {}
/**
* - 使BullMQ标准API
* 参考: https://docs.nestjs.com/techniques/queues#producers
*/
async addJob(data: any, options?: any) {
try {
const job = await this.queue.add('SetMemberNo', data, options);
this.logger.log(`SetMemberNo job added to queue: ${job.id}`, data);
return job;
} catch (error) {
this.logger.error('Failed to add SetMemberNo job to queue:', error);
throw new BusinessException('SetMemberNo任务添加失败');
}
}
/**
*
* 使Core层基础设施
*/
async processJob(data: any) {
this.logger.log('SetMemberNo job processing:', data);
try {
// 任务逻辑
await this.executeJob(data);
this.logger.log('SetMemberNo job completed successfully');
} catch (error) {
this.logger.error('SetMemberNo job failed:', error);
// 使用Core层异常处理
throw new BusinessException('SetMemberNo任务处理失败', error);
}
}
/**
*
* 使Core层基础设施
*/
private async executeJob(data: any) {
// 实现具体的任务逻辑
// 例如:
// - 数据清理
// - 报表生成
// - 邮件发送
// - 数据同步
// - 备份操作
this.logger.log('Executing SetMemberNo job logic with data:', data);
// 模拟异步操作
await new Promise((resolve) => setTimeout(resolve, 1000));
this.logger.log('SetMemberNo job logic completed');
}
/**
*
* 使Core层基础设施
*/
async triggerJob(data?: any) {
this.logger.log('Manually triggering SetMemberNo job...');
try {
await this.executeJob(data || {});
} catch (error) {
this.logger.error('Failed to trigger SetMemberNo job:', error);
// 使用Core层异常处理
throw new BusinessException('SetMemberNo任务触发失败', error);
}
}
}