fix(wallet-service): 修复待领取奖励显示和结算触发问题

Bug 1: allocateToUserWallet 同步更新 wallet_accounts.pending_usdt
- 写入 pending_rewards 表时同步调用 wallet.addPendingReward()
- 修复前端待领取金额显示为 0 的问题

Bug 2: Kafka 事件类型匹配兼容 planting-service 格式
- 支持 eventName 字段解析 (planting-service 使用)
- 支持 data 字段解析 (planting-service 使用)
- 新增 PlantingOrderPaid 事件类型支持
- 修复用户认种后待领取无法转换为可结算的问题

其他: 定时任务频率改为每分钟一次 (测试用途)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-13 05:51:28 -08:00
parent e4389a5733
commit 28864e6160
3 changed files with 15 additions and 8 deletions

View File

@ -5,7 +5,7 @@ import { WalletApplicationService } from '@/application/services';
/**
*
*
*
*
* 1. pending_rewards status=PENDING expire_at < now
* 2. EXPIRED
* 3. (S0000000001)
@ -19,9 +19,9 @@ export class ExpiredRewardsScheduler {
) {}
/**
*
*
*/
@Cron(CronExpression.EVERY_HOUR)
@Cron(CronExpression.EVERY_MINUTE)
async handleExpiredRewards(): Promise<void> {
this.logger.log('Starting expired rewards processing job...');

View File

@ -668,6 +668,10 @@ export class WalletApplicationService {
});
await this.pendingRewardRepo.save(pendingReward);
// 同步更新 wallet_accounts 表的 pending_usdt 字段
wallet.addPendingReward(amount, Hashpower.create(0), expireAt, orderId);
await this.walletRepo.save(wallet);
// 记录流水
const ledgerEntry = LedgerEntry.create({
accountSequence: wallet.accountSequence,

View File

@ -111,14 +111,17 @@ export class PlantingEventConsumerService implements OnModuleInit, OnModuleDestr
this.logger.debug(`[RECEIVE] Raw message: ${value.substring(0, 500)}...`);
const parsed = JSON.parse(value);
const eventType = parsed.eventType || parsed.type;
const payload = parsed.payload || parsed;
// 兼容多种事件格式: eventType, type, eventName
const eventType = parsed.eventType || parsed.type || parsed.eventName;
// 兼容多种数据格式: payload, data, 或直接在根级别
const payload = parsed.payload || parsed.data || parsed;
this.logger.log(`[RECEIVE] Event type: ${eventType}`);
// 监听认种创建事件 - 用户认种后,结算其所有待领取奖励
if (eventType === 'planting.planting.created' || eventType === 'PlantingOrderCreated') {
this.logger.log(`[HANDLE] Processing PlantingCreated event`);
// 监听认种支付完成事件 - 用户认种后,结算其所有待领取奖励
// 支持: PlantingOrderPaid, PlantingOrderCreated, planting.planting.created
if (eventType === 'PlantingOrderPaid' || eventType === 'planting.planting.created' || eventType === 'PlantingOrderCreated') {
this.logger.log(`[HANDLE] Processing PlantingPaid event`);
this.logger.log(`[HANDLE] orderNo: ${payload.orderNo}`);
this.logger.log(`[HANDLE] accountSequence: ${payload.accountSequence}`);
this.logger.log(`[HANDLE] userId: ${payload.userId}`);