From 84aa8181a93bcc4dd8228b1168d5dda7e4d64dff Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 7 Jan 2026 06:58:33 -0800 Subject: [PATCH] =?UTF-8?q?fix(reporting-service):=20=E5=85=BC=E5=AE=B9=20?= =?UTF-8?q?referral-service=20=E7=9A=84=E8=AE=A4=E7=A7=8D=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - planting.order.paid 事件现在由 referral-service 发送 - 消息格式为 { eventName, data: {...} },与原 planting-service 格式不同 - 添加兼容逻辑,同时支持两种格式 - 修复今日认种统计为0的问题 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../activity-event-consumer.controller.ts | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) 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({