rwadurian/backend/services/contribution-service
hailin 4c6fd424b5 feat(pre-planting): 合成树后算力切换(预种 5 份合同签署触发)
当用户购买满5份预种后合成1棵树并签署合同时,自动执行算力切换:
1. 作废5份份额的算力记录(is_expired=true,remark 标注合成原因,已挖积分不受影响)
2. 从认种人账户扣减旧个人算力(保持账户余额准确)
3. 以1棵完整树的算力单价创建新算力记录(remark 标注来源订单)
4. 写入 pre_planting_synced_merges 幂等标记

== 实现方式 ==
- 触发节点:Debezium CDC on pre_planting_merges.mining_enabled_at(null → 非null)
- 新增 Debezium table:public.pre_planting_merges
- 新增 Kafka topic 订阅:cdc.pre-planting.public.pre_planting_merges
- 新增 handler:PrePlantingMergeSyncedHandler(解析 CDC 事件)
- 新增 service 方法:swapContributionForMerge(核心算力切换逻辑)
- 新增常量:PRE_PLANTING_MERGE_SOURCE_ID_OFFSET = 20B(区别于份额的 10B 偏移)
- 新增 DB 表:pre_planting_synced_merges(幂等标记,migration 已包含)

== 幂等保证 ==
- CDC 层:processedCdcEvent 表(sourceTopic + offset 唯一)
- 业务层:contribution_records WHERE sourceAdoptionId=20B+mergeId 存在性检查
- 标记层:pre_planting_synced_merges(best-effort,事务提交后写入)

== 对现有系统的影响 ==
- 零修改现有 contribution 调度器 / freeze scheduler
- 团队分润账户净效果≈0(旧5份=1棵树,切换后金额一致)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 07:22:09 -08:00
..
prisma feat(pre-planting): 合成树后算力切换(预种 5 份合同签署触发) 2026-02-28 07:22:09 -08:00
src feat(pre-planting): 合成树后算力切换(预种 5 份合同签署触发) 2026-02-28 07:22:09 -08:00
.env.example refactor(cdc): 统一使用 Debezium CDC 进行数据同步 2026-01-11 23:19:34 -08:00
DEVELOPMENT_GUIDE.md feat(contribution-service): 添加算力管理微服务 2026-01-10 17:39:25 -08:00
Dockerfile fix(contribution): 复制预种Prisma生成客户端到dist目录修复运行时MODULE_NOT_FOUND 2026-02-26 20:35:26 -08:00
nest-cli.json feat(contribution-service): 添加算力管理微服务 2026-01-10 17:39:25 -08:00
package-lock.json feat(contribution-service): 添加算力管理微服务 2026-01-10 17:39:25 -08:00
package.json feat(pre-planting): 3171 预种计划 2.0 算力集成(contribution-service CDC 模块) 2026-02-18 05:25:14 -08:00
tsconfig.json feat(contribution-service): 添加算力管理微服务 2026-01-10 17:39:25 -08:00