diff --git a/backend/services/reporting-service/src/infrastructure/kafka/activity-event-consumer.controller.ts b/backend/services/reporting-service/src/infrastructure/kafka/activity-event-consumer.controller.ts index 53dc58b9..606724fb 100644 --- a/backend/services/reporting-service/src/infrastructure/kafka/activity-event-consumer.controller.ts +++ b/backend/services/reporting-service/src/infrastructure/kafka/activity-event-consumer.controller.ts @@ -65,15 +65,31 @@ interface AuthorizationRoleEvent { } /** - * 认种订单支付事件 (planting-service) + * 认种订单支付事件 (referral-service 或 planting-service) * Topic: planting.order.paid - * 注意:planting-service 发送的消息是直接数据,不包含 payload 包装 - * [2026-01-05] 更新:移除 userId 依赖,改用 accountSequence + * [2026-01-07] 更新:兼容两种消息格式 + * - referral-service 发送: { eventName, data: {...} } + * - planting-service 发送: { orderId, treeCount, ... } (直接数据) */ interface PlantingOrderPaidEvent { + // referral-service 格式 + eventName?: string; + data?: PlantingOrderPaidData; + // planting-service 直接格式 + orderId?: string; + userId?: string; + accountSequence?: string; + treeCount?: number; + provinceCode?: string; + cityCode?: string; + totalAmount?: string; + paidAt?: string; +} + +interface PlantingOrderPaidData { orderId: string; - userId?: string; // 可能为空,不依赖此字段 - accountSequence?: string; // 用户账户序列号 + userId?: string; + accountSequence?: string; treeCount: number; provinceCode?: string; cityCode?: string; @@ -243,18 +259,28 @@ export class ActivityEventConsumerController { } /** - * 监听认种订单支付成功事件 (planting-service) + * 监听认种订单支付成功事件 (referral-service 或 planting-service) * Topic: planting.order.paid - * 注意:planting-service 发送的消息是直接数据,不包含 payload 包装 - * [2026-01-05] 更新:移除 relatedUserId,改用 accountSequence 存入 metadata + * [2026-01-07] 更新:兼容两种消息格式 + * - referral-service: { eventName, data: {...} } + * - planting-service: { orderId, treeCount, ... } */ @MessagePattern('planting.order.paid') async handlePlantingOrderPaid(@Payload() message: PlantingOrderPaidEvent) { - this.logger.log(`Received planting.order.paid event`); + this.logger.log(`Received planting.order.paid event: ${JSON.stringify(message).substring(0, 200)}`); try { - // planting-service 直接发送数据,不包装在 payload 中 - const data = message; + // [2026-01-07] 兼容两种格式:referral-service 的 data 包装格式和 planting-service 的直接格式 + const data: PlantingOrderPaidData = message.data || { + orderId: message.orderId || '', + userId: message.userId, + accountSequence: message.accountSequence, + treeCount: message.treeCount || 0, + provinceCode: message.provinceCode, + cityCode: message.cityCode, + totalAmount: message.totalAmount, + paidAt: message.paidAt || new Date().toISOString(), + }; // 记录活动日志 - 不依赖 userId,使用 accountSequence await this.activityRepo.create({