制定日期: 2026-06-05
制定依据: docs/requirements-changelog.md (v20260604.3~v20260604.5), docs/test-coverage-report.md, docs/distribution-model-v2.md, docs/points-system.md, docs/quota-design.md
当前版本: v20260604.5
测试基线: 183 tests, 0 failures, 5 skipped (pre-existing @Disabled)
Admin 构建: ✅ 成功 (21.77s)
| 功能 | 版本 | 状态 | 说明 |
|---|---|---|---|
| 关系能量分析重设计 | v20260604.2 | ✅ 完成 | 后端6API+前端3页+Chatflow集成 |
| 提现管理 | v20260604.3 | ✅ 完成 | WithdrawService/Controller/Entity/前端页+测试 |
| 主题系统 | v20260604.3 | ✅ 完成 | ThemeToggle+theme.scss+store |
| 术语统一 | v20260604.3 | ✅ 完成 | 命盘→能量盘,文档+代码 |
| 关系人CRUD | v20260604.3 | ✅ 完成 | RelationController/Entity/Repository |
| 配额系统(新) | c5021ee |
✅ 完成 | QuotaService(174行)+UserConsultationQuota实体+Repository |
| 分销v2文档 | v20260604.5 | ✅ 完成 | 40%统一/间接10积分/删除补签/100分解1次 |
| SCSS 构建修复 | v20260605 | ✅ 完成 | uni.scss内联theme.scss + 11个页面移除冗余import + 4个darken()/CSS var兼容修复 |
| 功能 | 版本 | 状态 | 优先级 |
|---|---|---|---|
| 分销v2 代码实现 | v20260604.5 | ❌ 未编码 | P1 🔴 |
| 打卡积分体系 | v20260604.4 | ❌ 未编码(设计待确认) | P1 🔴 |
| QuotaService 集成 | c5021ee |
⚠️ 已编码未集成 | P1 🟡 |
| 推送代码到远程 | — | ⚠️ 已编码未推送 | P1 🟡 |
| 模块 | 代码行数 | 测试数 | 优先级 |
|---|---|---|---|
| WxPayService | 189 | 0 | 高 🔴 |
| RelationAnalysisService | 新模块 | 0 | 中 🟡 |
| ExportService | - | 0 | 低 🟢 |
| @Disabled 测试 | - | 5个 | 低 🟢 |
| # | 问题 | 修复内容 | 涉及文件数 |
|---|---|---|---|
| 1 | uni.scss root stylesheet 相对 import 在页面内联时路径错误 |
内联 theme.scss 全部内容到 uni.scss |
1 |
| 2 | 11 个页面的 <style> 冗余 @import "@/styles/theme.scss"(@ 别名不解析) |
全部移除(theme 已全局可用) | 11 |
| 3 | darken(var(--color-brand), 4%) — SCSS 颜色函数不能处理 CSS var |
改用 SCSS 字面变量 $brand-color: #1E3A5F |
4 (relations/analysis/common) |
| 4 | darken($warm-white, 2%) — 同上,$warm-white: var(--color-bg) |
$warm-white 改用字面量 #F8F6F1 |
1 |
| 5 | QuotaService.existing.isEmpty() Java 8 不兼容 |
!existing.isPresent() |
1 |
| 6 | 微信开发者工具 __subPageFrameEndTime__ / __global 运行时错误 |
⚠️ 环境问题(DevTools 2.01.2510290 + lib 3.15.2 内部错误),非代码问题,需用户侧确认 | — |
将本地代码推送到远程,堵住 WxPayService 无测试的风险缺口,将新配额系统接入核心链路。
说明: 本地 master 领先 origin/master 10+ 个 commit(含 withdraw/theme/quota/relation/SCSS修复等),需立即推送避免丢失。
操作: git push origin master
前置条件: 无
说明: 支付核心服务无测试,一旦出错直接影响收入。需覆盖全部公共方法。
需要 Mock 的外部依赖:
WxPayProperties — 微信支付配置(appId/mchKey/apiV3Key/privateKey/serialNo)CloseableHttpClient — HTTP 客户端ConfigService — sys_config 读取OrderService — 订单状态更新UserService — VIP 类型变更需要测试的场景:
createOrder() — 正常创建微信订单、支付金额计算、签名验证handleNotify() — 成功回调、失败回调、重复通知幂等refund() — 退款成功/失败/余额不足涉及文件:
num-server/src/test/java/com/etotem/num/service/WxPayServiceTest.java(新建)说明: QuotaService (c5021ee) 已完成,但 ChatService 仍调用旧的 userService.checkDailyQuota() 和 userService.consumeQuota()。需替换为新的 quotaService.checkAndConsume()。
工作量评估:
ChatService.sendChatMessage() — 替换 quota 检查行(~2行改)checkDailyQuota() / consumeQuota() 是否被其他调用者使用涉及文件:
num-server/.../service/ChatService.java(替换 quota 调用)num-server/.../service/ChatServiceTest.java(更新测试)num-server/.../service/UserService.java(视情况清理旧方法)依据: docs/distribution-model-v2.md
变更清单:
| # | 变更 | 说明 | 涉及文件 |
|---|---|---|---|
| 1 | 删除二级佣金结算 | level=2 的分支全部移除 |
CommissionService.java |
| 2 | 统一一级佣金 40% | 从 commission.level1.rate_unified 读取,不再按角色区分 |
CommissionService.java |
| 3 | 新增间接邀请积分 | 间接邀请人不拿佣金,奖励 10 积分/次 | CommissionService.java |
| 4 | 佣金 level 语义更新 |
0=团队分红, 1=一级佣金, 2=预留 | Commission.java |
| 5 | sys_config 种子数据 | 新增 commission.level1.rate_unified, commission.indirect_invite.points 等 |
ConfigService.java |
依据: docs/distribution-model-v2.md §八
| # | 变更 | 说明 |
|---|---|---|
| 1 | 删除 handleSecondLevelCommission() 调用 |
二级佣金逻辑移除 |
| 2 | 统一调用一级佣金结算(40%) | 所有付费产品走统一逻辑 |
| 3 | 间接邀请人积分发放 | 在创建订单时检查上级的上级 |
变更: 推广权限从 practitioner 扩展为所有付费用户(C端/家庭/超级/能量师)
涉及文件: UserService.java
| # | 变更 | 说明 |
|---|---|---|
| 1 | 佣金记录标签更新 | 一级佣金(蓝) / 团队分红(金) |
| 2 | 推广码面板可见范围扩展 | 所有付费用户可见,不再限能量师 |
| 3 | 能量师团队展示 | "我的团队"板块(直接下级数/团队销售额/分红) |
涉及文件: client/pages/commission/index.vue, client/pages/profile/index.vue
依据: docs/points-system.md (v20260604.4) + v20260604.5 修正(取消补签,100分解1次)
| 表名 | 说明 | 依据 |
|---|---|---|
points_points |
积分主表(userId/year/balance/consecutiveDays/lastCheckinDate) | §7.1 |
points_records |
积分流水表(userId/type/amount/balanceAfter/refId) | §7.2 |
points_rewards |
兑换奖励表(name/cost/type/isActive) | §7.3 |
| # | 变更 | 说明 |
|---|---|---|
| 1 | PointsPoints / PointsRecord / PointsReward 实体 |
对应 3 张表 |
| 2 | PointsRepository / PointsRecordRepository / PointsRewardRepository |
JPA CRUD |
| 3 | PointsService |
checkin/balance/records/redeem/expire |
| 4 | PointsController |
6 个 REST 端点 |
| 5 | sys_config 种子数据 | 签到/邀请/兑换参数 |
| 6 | 年度清零定时任务 | @Scheduled 11月1日提醒/12月31日清零 |
| 7 | CommissionService 间接积分调用 | 分销v2间接邀请时调用 pointsService |
| # | 页面/组件 | 说明 |
|---|---|---|
| 1 | 个人中心积分卡片 | 余额+连续天数+签到按钮 |
| 2 | 签到日历 UI | 连续天数展示+奖励预览 |
| 3 | 积分商城页面 | 奖励列表+兑换按钮 |
| 4 | 积分流水页面 | 进账/消耗记录 |
| 5 | 年底清零横幅 | 11月起展示 |
涉及文件: client/pages/points/*.vue (新建 3-4 页), client/pages/profile/index.vue (新增积分卡片)
说明: 新模块 6 个方法,0 测试覆盖。
可测试方法:
startAnalysis() — 创建会话+首条消息sendChatMessage() — 发送消息+调用DifygetChatHistory() — 获取历史listRecords() / getRecordDetail() — 查询deleteRecord() — 删除涉及文件: num-server/src/test/java/com/etotem/num/service/RelationAnalysisServiceTest.java(新建)
| 测试类 | 跳过数 | 原因 |
|---|---|---|
| CalculatorServiceTest | 2 | 外部位置公式/命名验证需领域知识确认 |
| CommissionServiceTest | 3 | 状态流转测试需修复数据准备(等分销v2重构后一并处理更合理) |
| # | 任务 | 说明 |
|---|---|---|
| 1 | 学业方向 AI 前端入口 | "我的服务→学业方向"激活 |
| 2 | 人工方案工作台完整流程 | proposal/counter/accept 协商UI |
| 3 | 方案付费与交付展示 | 已实现后端,前端未完整串联 |
Sprint 1 (P0-P1)
├── 2.1 Push to remote (无依赖)
├── 2.2 WxPayService tests (无依赖)
└── 2.3 Quota integration (依赖 QuotaService 已完成)
Sprint 2 (P1)
├── 3.1 CommissionService 重写 (无依赖)
├── 3.2 OrderService 改造 (依赖 3.1)
├── 3.3 UserService 扩展 (无依赖)
├── 3.4 前端适配 (依赖 3.1-3.3)
└── 3.4 间接积分调用 (依赖 Sprint 3 积分系统基础 → 可延迟)
Sprint 3 (P1)
├── 4.1 数据库表 (无依赖)
├── 4.2 后端Service+Controller (依赖 4.1)
└── 4.3 前端页面 (依赖 4.2)
Sprint 4 (P2-P3)
├── 5.1 RelationAnalysisService tests (无依赖)
├── 5.2 @Disabled tests (无依赖)
├── 5.3 EPIC 9 前端 (依赖已有后端代码)
└── 5.4 ExportService tests (无依赖)
| 项目 | 说明 | 触发条件 |
|---|---|---|
| 超级会员完整上线 | US-10.1~US-10.6 前端的超级会员引导付费流程 | 产品确认 |
| 八星号码分析前端优化 | number-analysis.vue 现有功能增强 |
产品确认 |
| 家庭套餐 | 全套 US-11 实现 | 产品决策 |
| 主题系统动态配置 | 管理员后台可切换主题色 | 待确认需求 |
| 微信开发者工具运行时错误 | __subPageFrameEndTime__/__global 错误 |
用户侧确认环境配置 |
TypeError: Cannot read property 'subPageFrameEndTime' of null 和 __global 的两个错误均来自微信 WAServiceMainContext.js / WASubContext.js 运行时。可能原因:
unpackage/ 构建缓存未清理client/unpackage/ 目录后重新构建;如仍出现,尝试切换 DevTools 稳定版git push origin master(防丢失)最后更新:2026-06-05 by Sisyphus