核心概念
科技树
科技树定义
权威来源: 用户与领地系统设计v1.0.md
最后更新: 2026-02-01
状态: ✅ 已实施 - CronJob 和 organization-service 已部署
2026-02-01 更新: 高级单位 KPI 计算改为"方案 A"(每个级别计算自身 KPI)
科技树加成
科技树加成是领地为成员提供的铸造效率提升,加成累加:
| 领地级别 | 加成 | 累计加成 |
|---|---|---|
| Station | +10% | +10% |
| Matrix | +20% | +30% |
| Sector | +30% | +60% |
| System | +40% | +100% |
最高累计加成: +100%(所有4级科技树都点亮)
加成公式:
总加成 = Station加成 + Matrix加成 + Sector加成 + System加成
铸造产出 = 基础产出 × (1 + 总加成%)
科技树点亮规则
所有级别使用统一规则:过去 30 天内 ≥ 21 天 KPI 达标
KPI 达标条件(所有级别相同)
- 满员率 ≥ 90%
- 人均铸造投入 ≥ 20 USDC/天
- 两个条件同时满足才算当日达标
各级容量及阈值
| 领地级别 | 容量 | 90% 阈值 | 每日铸造阈值 |
|---|---|---|---|
| Station | 1,000 | ≥ 900人 | ≥ 18,000 USDC |
| Matrix | 10,000 | ≥ 9,000人 | ≥ 180,000 USDC |
| Sector | 100,000 | ≥ 90,000人 | ≥ 1,800,000 USDC |
| System | 1,000,000 | ≥ 900,000人 | ≥ 18,000,000 USDC |
方案 A: 每个级别计算自身 KPI
2026-02-01 确认: 采用方案 A,每个级别计算自身的 KPI(成员数、总铸造投入)
KPI 计算逻辑:
- Station: 计算该 Station 的成员数和铸造投入
- Matrix: 计算该 Matrix 下所有 Station 的成员总数和总铸造投入
- Sector: 计算该 Sector 下所有 Matrix → Station 的成员总数和总铸造投入
- System: 计算该 System 下所有 Sector → Matrix → Station 的成员总数和总铸造投入
示例:
Matrix M-0001 包含 10 个 Station:
- 总成员数 = S-00001 成员数 + S-00002 成员数 + ... + S-00010 成员数
- 总铸造 = S-00001 铸造 + S-00002 铸造 + ... + S-00010 铸造
- 满员率 = 总成员数 / 10,000
- 人均铸造 = 总铸造 / 总成员数
科技树点亮逻辑
每日 UTC 00:30 执行 CronJob,分三个步骤:
步骤 1: 计算所有单位的每日 KPI
- Station: 直接计算成员数和铸造
- Matrix: 计算所辖 Station 的成员总数和总铸造
- Sector: 计算所辖 Matrix --> Station 的成员总数和总铸造
- System: 计算所辖 Sector --> Matrix --> Station 的成员总数和总铸造
步骤 2: 更新科技树状态
- 查询过去 30 天 KPI 达标天数
- 如果达标天数 >= 21,则点亮科技树
- 更新 bonus_percentage
步骤 3: 更新用户铸造加成缓存
- 遍历所有用户
- 向上遍历单位链 (Station --> Matrix --> Sector --> System)
- 累加所有点亮科技树的加成
科技树折扣
科技树加成 = 铸造折扣(支付更少 USDC 获得相同 MCC)
| 科技树加成 | 支付比例 | 1000 USDC 基础 → 实际支付 |
|---|---|---|
| 0% | 100% | 1000 USDC |
| +10% | 90% | 900 USDC |
| +30% | 70% | 700 USDC |
| +60% | 40% | 400 USDC |
| +100% | 0% | 0 USDC (免费铸造) |
折扣公式:
实际 USDC = 基础 USDC × (1 - 科技树加成%)
数据库表
unit_kpi_daily - 单位每日 KPI 记录
| 字段 | 类型 | 说明 |
|---|---|---|
| territory_id | VARCHAR(50) | 领地 ID (如 S-00001, M-0001) |
| kpi_date | DATE | KPI 日期 |
| is_compliant | BOOLEAN | 是否达标 |
| member_count | INT | 成员数 |
| occupancy_rate | DECIMAL(5,4) | 满员率 |
| total_mining_usdc | DECIMAL(18,6) | 当日总铸造 USDC |
| mining_per_user | DECIMAL(18,6) | 人均铸造 USDC |
unit_tech_tree_status - 单位科技树状态
| 字段 | 类型 | 说明 |
|---|---|---|
| territory_id | VARCHAR(50) | 领地 ID |
| territory_type | VARCHAR(20) | 领地类型 |
| is_lit | BOOLEAN | 是否点亮 |
| bonus_percentage | DECIMAL(5,2) | 加成百分比 |
| compliant_days | INT | 过去30天达标天数 |
| last_check_date | DATE | 最后检查日期 |
user_mining_bonus_cache - 用户铸造加成缓存
| 字段 | 类型 | 说明 |
|---|---|---|
| user_id | VARCHAR(50) | 用户 UID |
| territory_id | VARCHAR(50) | 用户所属 Station |
| station_bonus | DECIMAL(5,2) | Station 加成 |
| matrix_bonus | DECIMAL(5,2) | Matrix 加成 |
| sector_bonus | DECIMAL(5,2) | Sector 加成 |
| system_bonus | DECIMAL(5,2) | System 加成 |
| total_bonus | DECIMAL(5,2) | 总加成 |
CronJob 配置
| CronJob | 时间 (UTC) | 说明 |
|---|---|---|
| tech-tree-daily-update | 00:30 | 科技树 KPI 计算和状态更新 |
部署文件: k8s/tech-tree-update-cronjob.yaml
API 端点
获取用户科技树加成 (Open API)
GET /v1/tech-tree/bonus
Authorization: Bearer {token}
Response:
{
"user_id": "abc123",
"territory_id": "S-00001",
"bonuses": {
"station": {"is_lit": true, "bonus": 10},
"matrix": {"is_lit": true, "bonus": 20},
"sector": {"is_lit": false, "bonus": 0},
"system": {"is_lit": false, "bonus": 0}
},
"total_bonus": 30,
"multiplier": 1.30
}
版本历史
| 日期 | 变更 |
|---|---|
| 2026-02-01 | 方案 A 实施: 高级单位 KPI 改为计算自身成员总数和总铸造(非平均下级 Station 达标天数) |
| 2026-02-01 | 加成更正: Station +10%, Matrix +20%, Sector +30%, System +40% (非 +5/+10/+15/+20) |
| 2026-02-01 | 初始版本 |
询问 AI