ExtensionBillingModuleExtensionBillingServiceuser.power。packages/@buildingai/extension-sdk/src/modules/billing/
├── extension-billing.module.ts
└── extension-billing.service.tsBaseBillingServiceUserAccountLogaccount_loguser.power,会丢失:ExtensionBillingModuleimport { ExtensionBillingModule } from "@buildingai/extension-sdk";
@Module({
imports: [ExtensionBillingModule],
providers: [ArticleService],
})
export class ArticleModule {}@Global(),但仍建议由插件某个根模块显式导入一次,避免运行时 provider 不可见。@Injectable()
export class ArticleService {
constructor(
private readonly extensionBillingService: ExtensionBillingService,
) {}
}ExtensionBillingService 提供的方法hasSufficientPower(userId, requiredAmount)const ok = await this.extensionBillingService.hasSufficientPower(userId, 5);
if (!ok) {
throw HttpErrorFactory.badRequest("积分不足");
}deductUserPower(options, entityManager?)addUserPower(options, entityManager?)@Injectable()
export class ArticleService {
constructor(
private readonly extensionBillingService: ExtensionBillingService,
) {}
async polish(userId: string, taskNo: string) {
await this.extensionBillingService.deductUserPower({
userId,
amount: 5,
remark: "文章润色消耗",
associationNo: taskNo,
});
}
}sourceaccountTypeExtensionBillingService 自动补。await this.extensionBillingService.deductUserPower({
userId,
amount: 5,
remark: "文章生成消耗",
associationNo: taskNo,
});accountType: ACCOUNT_LOG_TYPE.PLUGIN_DECsource.type: ACCOUNT_LOG_SOURCE.PLUGINsource.source: 当前插件名称await this.extensionBillingService.addUserPower({
userId,
amount: 10,
remark: "任务失败返还积分",
associationNo: taskNo,
});