rwadurian/backend/services
hailin 37d3300b17 fix(contribution-service): CDC planting_orders 阶段按 order_id 排序处理
## 问题背景

用户 D25122700018 的层级已解锁(unlocked_level_depth=5),但缺少 TEAM_LEVEL 算力记录。
其下级用户 D25122700019 的团队算力被错误地分配给了 D25122700015(level 2)而非 D25122700018(level 1)。

## 根本原因分析

1. 源系统数据顺序正确:
   - D25122700018: order_id=55, created_at=2026-01-09 11:57:01 (先认种)
   - D25122700019: order_id=57, created_at=2026-01-09 12:00:38 (后认种)

2. Kafka 消息顺序错误:
   - D25122700019: offset=732, synced_at=10:15:32 (先处理)
   - D25122700018: offset=798, synced_at=10:15:41 (后处理)

3. 原因:Debezium snapshot 按 PostgreSQL 物理存储顺序(heap order)读取数据,
   而非按主键顺序。即使 topic 只有 1 个分区,消息顺序仍然错误。

4. 后果:当处理 D25122700019 的认种时,D25122700018 的 unlocked_level_depth 还是 0,
   导致 D25122700019 的 TEAM_LEVEL 算力跳过 level 1 直接分配给 level 2。

## 解决方案

对 planting_orders 阶段实现"收集-排序-处理"模式:
1. 先收集所有消息到内存数组(不立即处理)
2. 按 order_id(源系统主键)升序排序
3. 再按排序后的顺序逐条处理

这确保上游用户的认种记录先于下游用户处理,避免算力分配错误。

## 受影响用户案例

- 上游用户: D25122700018 (order_id=55)
- 下游用户: D25122700019 (order_id=57, 58, 59)
- 错误分配: D25122700019 的 TEAM_LEVEL 给了 D25122700015 而非 D25122700018

## 回滚方法

如需回滚此修改,将 consumePhaseToEnd 方法中的判断条件改为 false:
```typescript
const needsSorting = false; // 原: phase.tableName === 'planting_orders'
```
或直接 revert 此 commit。

## 风险评估

- 业务逻辑完全不变,只改变处理顺序
- user_accounts 和 referral_relationships 阶段保持原有逻辑
- 内存开销可控(10000 条记录约 5MB)
- 排序开销可忽略(O(n log n))

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 03:41:14 -08:00
..
.claude fix(mpc-service): change healthcheck from wget to curl 2025-12-06 23:42:48 -08:00
admin-service fix(admin-service): 修复uploads目录权限问题 2026-01-09 02:14:37 -08:00
auth-service refactor(migrations): 合并各服务的 migration 文件为单个 0001_init 2026-01-20 20:34:56 -08:00
authorization-service fix(authorization-service): 修复授权查询使用错误字段导致省市互斥验证失效 2026-01-08 10:15:40 -08:00
backup-service fix(docker): 修复 referral-service Dockerfile 健康检查 URL 2025-12-14 03:05:18 -08:00
blockchain-service feat(blockchain): 部署 eUSDT 和 fUSDT 代币合约 2026-01-19 05:30:25 -08:00
contribution-service fix(contribution-service): CDC planting_orders 阶段按 order_id 排序处理 2026-01-23 03:41:14 -08:00
docs feat(contribution/wallet): 实现贡献值2.0计算与钱包存储架构 2026-01-12 06:13:18 -08:00
identity-service feat(wallet/blockchain/identity): implement system account withdrawal feature 2026-01-06 10:22:15 -08:00
leaderboard-service fix(leaderboard-service): 修复健康检查 API 路径 2026-01-07 18:48:34 -08:00
mining-admin-service fix(mining-admin-service): 修正调用 mining-service admin API 路径 2026-01-22 02:15:12 -08:00
mining-service feat(batch-mining): 动态获取批量补发计算起始日期 2026-01-23 02:01:40 -08:00
mining-wallet-service fix(system-accounts): 修复省市系统账户自动创建的数据流问题 2026-01-21 00:28:48 -08:00
mpc-service perf(docker): 优化Dockerfile构建,避免最后chown整个目录 2025-12-21 19:31:58 -08:00
planting-service fix(cdc): 添加 Debezium heartbeat 机制防止 WAL 堆积 2026-01-19 17:42:41 -08:00
presence-service perf(docker): 优化Dockerfile构建,避免最后chown整个目录 2025-12-21 19:31:58 -08:00
referral-service fix(cdc): 添加 Debezium heartbeat 机制防止 WAL 堆积 2026-01-19 17:42:41 -08:00
reporting-service fix(reporting-service): 修复 roleType 可能为 undefined 的类型错误 2026-01-08 10:21:36 -08:00
reward-service fix(reward-service): 修复 getExpiredRewardsEntries 的 userId 类型转换 2026-01-06 22:38:50 -08:00
scripts fix(deploy): 完善 cdc-resnapshot 自动从配置文件创建连接器 2026-01-20 07:55:19 -08:00
trading-service refactor(migrations): 合并各服务的 migration 文件为单个 0001_init 2026-01-20 20:34:56 -08:00
wallet-service fix(cdc): 添加 Debezium heartbeat 机制防止 WAL 堆积 2026-01-19 17:42:41 -08:00
.env.example docs(backend): 添加阿里云短信服务配置到 .env.example 2025-12-20 05:55:42 -08:00
.gitignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
README.md refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
deploy-mining.sh fix(deploy): 完善 cdc-resnapshot 自动从配置文件创建连接器 2026-01-20 07:55:19 -08:00
deploy.sh feat(admin-service): 添加 CDC 分类账流水同步 2026-01-07 19:29:27 -08:00
docker-compose.2.0.yml feat(frontend): 实现我的页面其他设置4项功能 2026-01-17 01:08:21 -08:00
docker-compose.infra.yml feat(identity): store complete deviceInfo JSON from frontend 2025-12-07 11:08:37 -08:00
docker-compose.yml fix(postgres): 增加数据库最大连接数到 300 2026-01-12 02:29:35 -08:00
init-multiple-dbs.sh feat(identity): store complete deviceInfo JSON from frontend 2025-12-07 11:08:37 -08:00

README.md

RWA Backend Services

统一部署管理 RWA 后端微服务。

架构概览

┌─────────────────────────────────────────────────────────────────┐
│                    192.168.1.100 (Gateway)                       │
│  ┌─────────────┐  ┌─────────────────────────────────────────┐  │
│  │   Nginx     │  │          MPC-System (Go)                 │  │
│  │  (Reverse   │  │  - session-coordinator (:8081)           │  │
│  │   Proxy)    │  │  - message-router (:8082)                │  │
│  │             │  │  - server-party-1/2/3 (:8083-8085)       │  │
│  └─────────────┘  │  - account-service (:8080)               │  │
│                   └─────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ Internal Network
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    192.168.1.111 (Backend)                       │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │              Docker Compose Services                     │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │  PostgreSQL │ │    Redis    │ │    Kafka    │       │    │
│  │  │   (:5432)   │ │   (:6379)   │ │   (:9092)   │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │  identity   │ │   wallet    │ │   backup    │       │    │
│  │  │  (:3000)    │ │  (:3001)    │ │  (:3002)    │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │  planting   │ │  referral   │ │   reward    │       │    │
│  │  │  (:3003)    │ │  (:3004)    │ │  (:3005)    │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │    mpc      │ │ leaderboard │ │  reporting  │       │    │
│  │  │  (:3006)    │ │  (:3007)    │ │  (:3008)    │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐                        │    │
│  │  │authorization│ │   admin     │                        │    │
│  │  │  (:3009)    │ │  (:3010)    │                        │    │
│  │  └─────────────┘ └─────────────┘                        │    │
│  └─────────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────┘

快速开始

1. 首次安装

# 进入服务目录
cd ~/rwadurian/backend/services

# 运行安装(自动生成安全密钥)
./deploy.sh install

2. 构建镜像

./deploy.sh build

3. 启动服务

./deploy.sh up

4. 检查状态

./deploy.sh status
./deploy.sh health

常用命令

命令 说明
./deploy.sh install 首次安装,生成配置
./deploy.sh build 构建所有 Docker 镜像
./deploy.sh up 启动所有服务
./deploy.sh down 停止所有服务
./deploy.sh restart 重启所有服务
./deploy.sh status 查看服务状态
./deploy.sh health 检查服务健康
./deploy.sh logs 查看所有日志
./deploy.sh logs <service> 查看指定服务日志
./deploy.sh migrate 运行数据库迁移
./deploy.sh rebuild-svc <name> 重建指定服务

服务列表

服务 端口 说明
identity-service 3000 身份认证服务
wallet-service 3001 钱包账本服务
backup-service 3002 MPC 备份服务
planting-service 3003 认种服务
referral-service 3004 推荐系统服务
reward-service 3005 奖励服务
mpc-service 3006 MPC 中间层服务
leaderboard-service 3007 排行榜服务
reporting-service 3008 报表服务
authorization-service 3009 授权服务
admin-service 3010 管理后台服务

基础设施

服务 端口 说明
PostgreSQL 5432 主数据库
Redis 6379 缓存/会话
Kafka 9092 消息队列
Zookeeper 2181 Kafka 协调

环境配置

配置文件 .env./deploy.sh install 自动生成,包含:

  • 数据库密码
  • JWT 密钥
  • 加密密钥
  • MPC 系统地址

重要: .env 文件包含敏感信息,请勿提交到 Git

与 MPC-System 集成

mpc-service 需要连接到运行在 192.168.1.100 上的 MPC-System

  • Session Coordinator: http://192.168.1.100:8081
  • Message Router: ws://192.168.1.100:8082

确保 192.168.1.111 能够访问 192.168.1.100 的这些端口。

故障排除

查看服务日志

./deploy.sh logs identity-service

重建单个服务

./deploy.sh rebuild-svc mpc-service

数据库连接问题

# 进入 postgres 容器
docker exec -it rwa-postgres psql -U rwa_user -d rwa_identity

清理重新开始

./deploy.sh clean  # 删除所有容器和数据
./deploy.sh install
./deploy.sh build
./deploy.sh up