Commit Graph

209 Commits

Author SHA1 Message Date
hailin f43124894d fix(admin-web): 登录页面改用真实 API 并添加调试日志
- 移除模拟登录,改为调用 identity-service /v1/auth/login
- 添加详细的 console.log 日志用于调试
- 记录 API URL、请求数据、响应和错误信息
- 移除不存在的 /register 页面链接

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 04:58:29 -08:00
hailin b6bb772b0e fix(admin-web): 修复生产环境 API 地址为 rwaapi.szaiai.com 2025-12-19 04:23:29 -08:00
hailin 917e3094a2 fix(api-gateway,admin-web): 修复仪表板API路由配置
Kong 网关:
- 添加 /api/v1/dashboard 路由到 reporting-service

Admin-Web 前端:
- 修复所有 API endpoints 添加 /v1 前缀
- 确保与 Kong 路由配置一致

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 04:21:53 -08:00
hailin 5b2d255506 feat(auth): 增强提现安全验证
- 集成阿里云短信服务 (dysmsapi20170525)
- 提现需同时验证短信验证码和登录密码
- identity-service 添加 /verify-password API
- wallet-service 调用双重验证
- 移动端提现确认页添加密码输入

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 03:05:53 -08:00
hailin 9d693b743b fix(dashboard): 修复 ActivityType 类型不兼容错误
将 RecentActivity 组件的 ActivityItem 接口替换为
使用统一的 DashboardActivity 类型,确保类型一致性。

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 02:41:37 -08:00
hailin bd5250c7a7 fix(scss): 添加缺失的语义化颜色变量别名
添加 $color-bg-secondary, $color-bg-tertiary, $color-border,
$color-text-secondary, $color-text-tertiary 变量别名,
修复 dashboard.module.scss 和 TrendChart.module.scss 构建错误。

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 02:31:14 -08:00
hailin ca619bff0b feat(admin): 实现用户管理功能完整前后端架构
## 概述
为 admin-web 用户管理页面实现完整的前后端架构,采用事件驱动 CQRS 模式,
通过 Kafka 事件同步用户数据到本地物化视图,避免跨服务 HTTP 调用。

## admin-service 后端变更

### 数据库 Schema
- UserQueryView: 用户查询视图表 (通过 Kafka 事件同步)
- EventConsumerOffset: 事件消费位置追踪
- ProcessedEvent: 已处理事件记录 (幂等性)

### 新增组件
- IUserQueryRepository: 用户查询仓储接口
- UserQueryRepositoryImpl: 用户查询仓储实现
- UserEventConsumerService: Kafka 事件消费者
- UserController: 用户管理 API 控制器

### API 端点
- GET /admin/users: 用户列表 (分页/筛选/排序)
- GET /admin/users/🆔 用户详情
- GET /admin/users/stats/summary: 用户统计

## identity-service 变更
- 新增 UserProfileUpdatedEvent 事件
- updateProfile 方法现在会发布事件

## admin-web 前端变更
- userService: 用户 API 服务封装
- useUsers/useUserDetail: React Query hooks
- 用户管理页面接入真实 API
- 添加加载骨架屏/错误重试/空数据提示

## 架构特点
- CQRS: 读从本地视图,写触发事件
- 事件驱动: Kafka 事件同步,微服务解耦
- Outbox 模式: 可靠事件发布
- 幂等性: ProcessedEvent 防重复处理

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 02:29:11 -08:00
hailin 900db13e8d feat(admin-web): 实现 Dashboard 页面真实 API 接入
## 概述
将 admin-web Dashboard 页面从模拟数据改为真实 API 调用,
使用 React Query 实现数据获取、缓存和自动刷新。

## 新增文件
- dashboardService.ts: Dashboard API 服务封装
- useDashboard.ts: React Query hooks
- dashboard.types.ts: Dashboard 类型定义

## API 接入
- /dashboard/stats: 统计卡片(总认种量、总用户数、省/市公司数)
- /dashboard/charts: 趋势图表(支持 7d/30d/90d 周期切换)
- /dashboard/region: 区域分布
- /dashboard/activities: 最近活动

## UI 优化
- 添加加载骨架屏
- 添加错误重试机制
- 添加空数据提示
- 优化图表周期切换交互

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 00:31:49 -08:00
hailin 0310865834 fix(ui): 暂时隐藏我的页面所有贡献值显示
用 TODO 注释隐藏以下位置的贡献值:
- 待领取区域的贡献值汇总
- 待领取明细卡片中的贡献值
- 可结算明细卡片中的贡献值
- 已过期区域的贡献值汇总
- 已过期明细卡片中的贡献值
- 领取确认对话框中的贡献值

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 08:55:04 -08:00
hailin 30db6b4238 fix(ledger): 优化账本明细流水类型显示
前端:
- 删除 '充值 (BSC)' 筛选选项
- '充值 (KAVA)' → '充值绿积分'
- 添加 '提取' 筛选选项 (REWARD_SETTLED)

后端:
- '充值 (KAVA)' → '充值绿积分'
- '奖励结算' → '提取'

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 08:44:34 -08:00
hailin 5c7d43b6ca fix(ui): 我的页面 '算力' → '贡献值'
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 08:35:49 -08:00
hailin a5d5f78f17 fix(reward): 为 ExpiredRewardItem 添加 rightTypeName getter 别名
解决 profile_page.dart 编译错误:
- 添加 rightTypeName getter 作为 allocationTypeName 的别名
- 保持与 PendingRewardItem/SettleableRewardItem 的接口一致

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 08:09:11 -08:00
hailin 15e2bfe236 feat(trading): 添加账本明细页面,含统计图表和流水筛选
后端新增:
- GET /wallet/ledger/statistics 流水统计API(按类型汇总)
- GET /wallet/ledger/trend 流水趋势API(按日期统计)
- LedgerStatisticsResponseDTO, LedgerTrendResponseDTO 等DTO

前端新增:
- 账本明细页面(统计概览Tab + 流水明细Tab)
- 收支概览卡片、趋势柱状图、按类型统计
- 流水列表支持分页加载和类型筛选
- 兑换页面右上角添加账本明细入口

授权服务:
- 5种授权方法添加认种前置检查(需至少认种1棵树才能授权)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 07:41:07 -08:00
hailin 36074948d7 feat(reward): 可结算列表改为从 reward-service 读取
将前端可结算奖励列表的数据源从 wallet-service 改为 reward-service:
- 后端:在 reward-service 添加 GET /rewards/settleable 接口
- 前端:修改 getSettleableRewards() 调用 /rewards/settleable
- 前端:更新 SettleableRewardItem 字段映射 (rightType, claimedAt, sourceOrderNo, memo)

解决权益收益(社区权益、市区域权益)无法在可结算列表显示的问题。
遵循单一数据源原则,reward-service 是奖励的权威数据源。

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 06:55:41 -08:00
hailin 76108328c3 fix(ui): 优化"我的"页面已过期和结算栏的显示格式
将绿积分和贡献值的数字改为跟在标签后面显示:
- 已过期栏:绿积分:xxx,贡献值:xxx
- 可结算栏:可结算 (绿积分):xxx
- 已结算栏:已结算 (绿积分):xxx

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 03:31:31 -08:00
hailin 7ab1d73f5b fix(ui): 优化我的页面待领取和已过期区域布局
待领取区域:
- 改为竖排布局:待领取 00:00:00 / 绿积分:/ 贡献值:
- 第一行加粗,后两行正常粗细

已过期区域:
- '已过期 (绿积分)' → '绿积分:'
- '已过期 (贡献值)' → '贡献值:'

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 00:57:07 -08:00
hailin 4504d6cb39 chore: 更新版本号和项目名称以匹配新包名
- pubspec.yaml 版本更新为 2.0.0(大版本更新)
- 项目名称改为 durianqueen_app

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 00:29:43 -08:00
hailin 9508861fd1 refactor: 更换包名和签名证书以绕过华为风险软件检测
## 更改内容
- 包名: com.rwadurian.rwa_android_app → com.durianqueen.app
- 签名证书: 使用新的 durianqueen-release.keystore
- MethodChannel: 更新为新包名前缀

## 原因
华为应用市场 13.2+ 版本对未上架应用检测更严格,
会记录包名和签名,标记为"风险应用"。
更换包名和签名证书让华为识别为全新应用。

## 注意
- 用户需要卸载旧版本重新安装
- 本地数据会丢失

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 00:24:22 -08:00
hailin 1dfa02b386 feat(ui): 将待领取、可结算、已过期列表改为堆叠卡片展示
- 恢复待领取列表的堆叠卡片展示(StackedCardsView)
- 将可结算明细列表改为堆叠卡片展示
- 将已过期明细列表改为堆叠卡片展示
- 新增 _buildStackedSettleableRewardCard 方法
- 新增 _buildStackedExpiredRewardCard 方法
- 添加各列表的条目数量显示

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 00:13:43 -08:00
hailin cceae5452a test: 暂时禁用堆叠卡片组件以测试华为恶意软件检测
- 注释掉 stacked_cards_widget.dart 的导入
- 注释掉 StackedCardsView 组件的使用
- 注释掉 _buildStackedPendingRewardCard 方法
- 恢复原始的待领取明细列表展示方式

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:54:29 -08:00
hailin 60b41f991c fix: 移除未使用的区块链依赖库
移除 web3dart, bip39, ed25519_hd_key, hex 等未使用的库
这些库底层使用 sun.misc.Unsafe,可能触发华为安全检测

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:45:32 -08:00
hailin 1d3407d157 fix(ui): 重构堆叠卡片组件为可折叠列表
- 改用 CollapsibleCardList 替代 Stack 布局
- 设置最大高度限制 (280px),避免穿透下方区域
- 超出高度时启用内部滚动
- 点击卡片展开/折叠,带动画效果

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:17:35 -08:00
hailin e3300a1163 fix(ui): 移除堆叠卡片组件的震动反馈功能
移除 HapticFeedback 调用,避免触发华为安全检测

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:11:37 -08:00
hailin 92772f071a feat(ui): 优化待领取明细显示和移除认种数量限制
- 移除单次认种100棵的数量限制 (planting-service)
- 龙虎榜省市信息分两行显示
- 待领取明细改为堆叠卡片样式,节省屏幕空间
  - 支持上下滑动选择卡片
  - 滑动时有震动反馈
  - 选中卡片展开显示完整信息

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 22:46:48 -08:00
hailin effd34cd0a fix(ui): "已过期 (算力)"改为"已过期 (贡献值)"
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 16:40:54 -08:00
hailin 6fb18c6ef2 fix(ui): "待领取 (算力)"改为"待领取 (贡献值)"
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 07:50:53 -08:00
hailin 7b25ffd4dd feat(ui): 将全部"积分"更名为"绿积分"
更新以下页面中的"积分"显示文本为"绿积分":
- 充值页面 (deposit_usdt_page.dart)
- 提取页面 (withdraw_usdt_page.dart, withdraw_confirm_page.dart)
- 个人中心页面 (profile_page.dart)
- 认种数量页面 (planting_quantity_page.dart)
- 交易页面 (trading_page.dart)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 07:49:45 -08:00
hailin dc42565ab8 fix(ui): 修正"上线社区"为"上级社区"
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 07:39:05 -08:00
hailin f24b15b34e fix(ui): 认种页面省市选择器选择后禁用
- 首次选择省市后保存到本地存储
- 非首次进入时禁用省市选择器(不可重新选择)
- 添加"已锁定"标签和锁定图标显示禁用状态
- UI 显示灰色背景表示禁用

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 07:22:46 -08:00
hailin 257236480f feat(wallet/profile): 添加可结算和已过期奖励逐笔显示功能
后端:
- wallet-service 新增 getSettleableRewards() 和 getExpiredRewards() 方法
- 新增 GET /wallet/settleable-rewards 和 GET /wallet/expired-rewards API

前端:
- reward_service.dart 新增 SettleableRewardItem、ExpiredRewardItem 数据模型
- profile_page.dart 可结算区域和已过期区域支持逐笔明细显示

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 07:20:44 -08:00
hailin 7aa93d6c6f fix(ui): 隐藏我的页面的 '进入交易' 按钮
- 注释掉 '进入交易 (卖出 DST → 积分)' 按钮
- 代码保留在程序中,便于后续恢复

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 23:57:59 -08:00
hailin bffea27f48 fix(ui): 我的页面 '充值 积分 (KAVA / BSC)' → '充值积分'
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 23:55:58 -08:00
hailin d41bbbb5d1 fix(ui): 充值页面隐藏 BSC 和 DST 网络选项
- 注释掉 BSC 和 DST 网络按钮,只保留 KAVA
- 代码保留在程序中,便于后续恢复

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 23:54:45 -08:00
hailin b672932480 fix(ui): 兑换页面 '人民币' → 'RMB/CNY'
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 23:53:13 -08:00
hailin 044266a169 fix(ui): 修改提取相关文字
- 兑换页面:'提取 / 转动' → '提取'
- 提款页面:'提款 积分' → '提取积分'

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 23:50:05 -08:00
hailin c22d5ceb75 fix(profile): 移除骨架屏替换整个widget的逻辑
- Widget 结构始终保持不变,不受数据加载状态影响
- 数据值根据加载状态显示 "--" 或实际值
- 用户可正常滚动页面,静态标签始终可见

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 21:21:41 -08:00
hailin 0208022615 fix(profile): 修复懒加载骨架屏一直显示的问题
- 将懒加载区域的加载状态初始值改为 false
- 只有真正在加载时才显示骨架屏
- 修复条件判断逻辑导致的死锁问题

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 21:19:22 -08:00
hailin d29ff0975b feat(profile): 添加懒加载、防抖和失败重试机制
- 添加 VisibilityDetector 实现懒加载,滚动到可见区域才加载数据
- 添加 300ms 防抖机制,防止快速滑动触发大量 API 请求
- 添加失败自动重试(最多3次,指数退避:1s→2s→4s)
- 添加 60 秒定时刷新可见区域数据
- 添加下拉刷新功能
- 添加 Shimmer 骨架屏加载状态
- 添加错误状态 UI 和手动重试按钮
- 创建通用 LazyLoadSection 组件

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 20:50:27 -08:00
hailin 8d27c90bdc fix(android): 升级 Kotlin 版本至 2.1.0
按 Flutter 建议升级 Kotlin 版本以避免兼容性问题

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 20:00:07 -08:00
hailin 390bb1c22b fix(android): 降级 Kotlin 版本至 1.9.22 修复构建错误
sentry_flutter 插件不兼容 Kotlin 2.2.20,降级到稳定版本

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 19:53:01 -08:00
hailin bbd6f2ee38 feat(mobile-app): 优化创建钱包页面UI
- 添加背景图片 onboarding_bg.jpg
- 移除重复的logo和标题(背景图已包含)
- 添加白色半透明卡片背景提高文字可读性
- 调整颜色主题为绿色系匹配背景
- 修改认种确认弹窗标题为"一旦确认,无法更改"

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 19:33:04 -08:00
hailin ebb0b85ab5 fix(sentry): 修复 Flutter 代码分析错误
- 修复 bootstrap.dart 中 deviceModel 属性访问错误 (使用 brand + model)
- 移除 sentry_navigation_observer.dart 中未使用的 _previousRouteName 字段
- 更新 sentry_service.dart 使用新版 Sentry API (captureFeedback)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 11:04:28 -08:00
hailin 80b74e9877 feat(sentry): 集成 Sentry 自建崩溃收集与错误追踪系统
Backend (infrastructure/sentry):
- 添加 Sentry 自建部署 Docker Compose 配置
- 包含 PostgreSQL, Redis, Kafka, ClickHouse, Snuba 等组件
- 添加 Relay (事件网关) 和 Symbolicator (符号化服务) 配置
- 添加部署脚本 deploy.sh 和配置文件
- 更新 infrastructure README 文档

Frontend (mobile-app):
- 添加 sentry_flutter SDK 依赖
- 创建 SentryService 封装类,统一管理崩溃收集
- 创建 SentryConfig 配置类,支持开发/生产环境配置
- 创建 SentryNavigationObserver 自动追踪页面导航
- 创建 SentryDioInterceptor 自动追踪 HTTP 请求
- 在 bootstrap.dart 中集成 Sentry 初始化
- 支持 Flutter 错误和异步错误捕获
- 自动过滤敏感信息 (密码、助记词、私钥等)
- 在登录/登出/切换账号时同步 Sentry 用户信息

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 07:15:13 -08:00
hailin cc06638e0e feat(telemetry): 将userId改为userSerialNum字符串格式并完善遥测追踪
Backend (presence-service):
- 将EventLog.userId从BigInt改为String类型,存储userSerialNum(如D25121400005)
- 更新Prisma schema,userId字段改为VarChar(20)并添加索引
- 更新心跳相关命令和事件,统一使用userSerialNum字符串
- 添加数据库迁移文件
- 更新相关单元测试和集成测试

Frontend (mobile-app):
- TelemetryEvent新增toServerJson()方法,格式化为后端API期望的格式
- AccountService登录/恢复时设置TelemetryService的userId
- MultiAccountService切换账号时同步更新TelemetryService的userId
- 退出登录时清除TelemetryService的userId
- AuthProvider初始化时设置userId

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 06:55:25 -08:00
hailin 3942cb405a fix(frontend): 添加新账号时显示加载状态提示
- 添加 _isAddingAccount 状态变量
- 点击"添加新账号"时显示"正在准备..."加载提示
- 添加 try-catch 错误处理,失败时显示错误提示
- 防止重复点击

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 06:14:49 -08:00
hailin 2a4efe0828 fix(frontend): 修复添加新账号时旧状态未清除的问题
问题: logoutCurrentAccount() 方法只清除了 5 个状态,导致添加新账号时
旧账号的钱包地址、助记词备份状态等仍然存在,影响新账号创建/导入流程。

修复: 现在清除全部 16 个账号相关状态:
- Token: accessToken, refreshToken
- 账号信息: userSerialNum, username, avatarSvg, avatarUrl,
  referralCode, inviterSequence, isAccountCreated
- 钱包信息: walletAddressBsc, walletAddressKava, walletAddressDst,
  mnemonic, isWalletReady, isMnemonicBackedUp

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 06:07:23 -08:00
hailin b01277ab7d feat(withdraw): 实现完整的提取功能 - TOTP验证和KAVA转账
功能实现:
- identity-service: 添加TOTP二次验证功能
  - 新增 UserTotp 数据模型
  - 实现 TotpService (生成/验证/启用/禁用)
  - 添加 /totp/* API端点

- wallet-service: 提取API添加TOTP验证
  - withdrawal.dto 添加可选 totpCode 字段
  - 添加 IdentityClientService 调用identity-service验证TOTP
  - 添加 WithdrawalStatusHandler 处理区块链确认/失败事件

- blockchain-service: 实现真实KAVA ERC20转账
  - 新增 Erc20TransferService (热钱包USDT转账)
  - 更新 withdrawal-requested.handler 执行真实转账
  - 发布确认/失败事件回wallet-service

- 前端: 对接真实提取API
  - withdraw_confirm_page 调用 walletService.withdrawUsdt

环境变量配置:
- TOTP_ENCRYPTION_KEY (identity-service)
- IDENTITY_SERVICE_URL (wallet-service)
- HOT_WALLET_PRIVATE_KEY (blockchain-service)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 05:16:42 -08:00
hailin 2dba7633d8 fix(withdraw): 将确认页面中的提款改为提取
- 页面标题"确认提款" → "确认提取"
- "提款详情" → "提取详情"
- "提款网络" → "提取网络"
- "提款地址" → "接收地址"
- "提款金额" → "提取数量"
- "提款申请已提交" → "提取申请已提交"
- 按钮文字"确认提款" → "确认提取"
- 错误提示"提款失败" → "提取失败"

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:54:28 -08:00
hailin 9cc66d8c61 fix(trading): 将提取/转动按钮下的人民币改为积分
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:49:44 -08:00
hailin 53cc4623ff chore(trading): 暂时屏蔽BNB、OG、DST结算币种,只保留人民币
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:39:34 -08:00