From a52081a94efef3da857a9d1b3c03e8b791aea91b Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 13 Mar 2026 11:23:12 -0700 Subject: [PATCH] =?UTF-8?q?fix(reward-service/admin-web):=20=E7=9C=81?= =?UTF-8?q?=E5=B8=82=E5=9B=A2=E9=98=9F=E6=94=B6=E7=9B=8A=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=9D=A5=E6=BA=90=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题根因: - planting-service 发出的 Kafka 事件体未包含 accountSequence 字段 - 导致 reward_ledger_entries.source_account_sequence 列全部为 NULL - 前端"来源用户"列因此始终显示 '-' 修复方案: - reward-service getRewardEntriesByType 返回结果新增 memo 字段透传 - 前端 RewardEntryDTO 类型加 memo: string | null - 省市团队收益明细"来源用户"列优先用 sourceAccountSequence, 为空时通过正则 /来自用户([^\s的]+)/ 从 memo 中解析 (memo 格式:'市团队权益(441300):来自用户D26031300003的认种') 涉及服务:reward-service、admin-web Co-Authored-By: Claude Sonnet 4.6 --- .../src/application/services/reward-application.service.ts | 7 +++++++ .../features/system-account-report/SystemAccountsTab.tsx | 4 ++-- frontend/admin-web/src/types/system-account.types.ts | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/backend/services/reward-service/src/application/services/reward-application.service.ts b/backend/services/reward-service/src/application/services/reward-application.service.ts index 94212252..d411cc63 100644 --- a/backend/services/reward-service/src/application/services/reward-application.service.ts +++ b/backend/services/reward-service/src/application/services/reward-application.service.ts @@ -1343,6 +1343,12 @@ export class RewardApplicationService { createdAt: string; claimedAt: string | null; expiredAt: string | null; + // [2026-03-13] 新增:返回 memo 字段,用于前端在 sourceAccountSequence 为空时从 memo 解析来源用户。 + // 背景:planting-service 发出的 Kafka 事件未携带 accountSequence,导致历史记录 + // source_account_sequence 列全部为 NULL;但 memo 中已记录了来源用户信息 + // (格式:'市团队权益(441300):来自用户D26031300003的认种'), + // 前端通过正则 /来自用户([^\s的]+)/ 从中提取账户序列号展示。 + memo: string | null; }>; total: number; page: number; @@ -1388,6 +1394,7 @@ export class RewardApplicationService { createdAt: entry.createdAt.toISOString(), claimedAt: entry.claimedAt?.toISOString() ?? null, expiredAt: entry.expiredAt?.toISOString() ?? null, + memo: entry.memo ?? null, // [2026-03-13] 新增:透传 memo 供前端解析来源用户 })), total, page, diff --git a/frontend/admin-web/src/components/features/system-account-report/SystemAccountsTab.tsx b/frontend/admin-web/src/components/features/system-account-report/SystemAccountsTab.tsx index ae2d138d..a6ece873 100644 --- a/frontend/admin-web/src/components/features/system-account-report/SystemAccountsTab.tsx +++ b/frontend/admin-web/src/components/features/system-account-report/SystemAccountsTab.tsx @@ -1742,8 +1742,8 @@ function RewardTypeSummarySection({ {new Date(entry.createdAt).toLocaleString('zh-CN')} {/* [2026-01-07] 更新:使用 getAccountDisplayName 显示账户名称和编码 */} {getAccountDisplayName(entry.accountSequence)} - {/* [2026-02-05] 新增:显示来源用户账户序列号 */} - {entry.sourceAccountSequence ?? '-'} + {/* [2026-02-05] 新增:显示来源用户账户序列号,从 memo 解析 */} + {entry.sourceAccountSequence ?? entry.memo?.match(/来自用户([^\s的]+)/)?.[1] ?? '-'} {entry.sourceOrderId} {formatAmount(entry.usdtAmount)} diff --git a/frontend/admin-web/src/types/system-account.types.ts b/frontend/admin-web/src/types/system-account.types.ts index be88a73a..a11c4976 100644 --- a/frontend/admin-web/src/types/system-account.types.ts +++ b/frontend/admin-web/src/types/system-account.types.ts @@ -329,6 +329,9 @@ export interface RewardEntryDTO { createdAt: string; claimedAt: string | null; expiredAt: string | null; + // [2026-03-13] 新增:memo 原始备注,用于在 sourceAccountSequence 为空时解析来源用户 + // 格式示例:'市团队权益(441300):来自用户D26031300003的认种' + memo: string | null; } /**