For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 优先完成 SFMS 历史数据迁移,再完善家长端任务管理功能
Architecture:
Tech Stack: Spring Boot 2.7.18 + MyBatis-Plus + uni-app Vue 2 + MySQL 8.0
| 文件 | 角色 | 状态 |
|---|---|---|
SfmsDataSourceConfig.java |
多数据源配置 | 需修复:sfms.datasource.hikari.* 前缀与实际 yml 配置不匹配 |
application.yml |
sfms 连接配置 | ✅ 已有 sfms.datasource.* 配置(阿里云RDS) |
DataMigrationService.java |
9步迁移引擎 | ✅ 已实现,需端到端验证 |
DataMigrationController.java |
POST /api/migration/run |
✅ 已实现 |
MigrationController.java |
结构迁移端点 | ✅ 已实现 |
| 文件 | 角色 | 状态 |
|---|---|---|
TaskController.java |
任务 CRUD API | ✅ 基本功能就绪 |
TaskService.java |
任务业务逻辑 | ⚠️ 部分功能待完善 |
api.js |
前端 API 封装 | ✅ 基本功能就绪 |
create-task.vue |
创建任务页 | ⚠️ 基本功能就绪 |
review.vue |
审核任务页 | ⚠️ 基本功能就绪 |
tasks.vue |
任务列表页 | ⚠️ 基本功能就绪 |
parent-index.vue |
家长首页(含任务入口) | ✅ 已完善 |
问题: SfmsDataSourceConfig.java 使用 sfms.datasource.hikari.* 配置前缀,但 application.yml 中 sfms 配置没有 hikari 层级。
SfmsDataSourceConfig.java:25 当前:
@ConfigurationProperties(prefix = "sfms.datasource.hikari")
public DataSource sfmsDataSource() { ... }
application.yml 中实际配置:
sfms:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://bianwoyou.mysql.rds.aliyuncs.com:3305/sfms?...
username: sfms
password: sfms@123
修复: 去掉 .hikari 前缀,或添加 hikari 层级。推荐改成不带 HikariConfig 的简易配置,因为 sfms 不需要连接池调优。
修改 SfmsDataSourceConfig.java:
@ConfigurationProperties(prefix = "sfms.datasource.hikari") 改为 @ConfigurationProperties(prefix = "sfms.datasource")HikariConfig 导入,改用 DataSourceBuilder.create().build() 即可
修改后代码:
@Bean(name = "sfmsDataSource")
@ConfigurationProperties(prefix = "sfms.datasource")
public DataSource sfmsDataSource() {
return DataSourceBuilder.create().build();
}
同时需要添加 import org.springframework.boot.jdbc.DataSourceBuilder;(已有)。
[ ] Step 2: 编译验证
cd cfc-backend && mvn clean compile
预期: BUILD SUCCESS
[ ] Step 3: 启动后端验证 sfms 数据源初始化成功
mvn spring-boot:run
预期: 控制台无 DataSource 相关报错,Spring 启动成功。
注意:sfms 的阿里云RDS地址 bianwoyou.mysql.rds.aliyuncs.com:3305 可能需要网络可达。如无法连接,迁移端点会返回错误但不应影响主应用启动。
[ ] Step 4: 提交
git add cfc-backend/src/main/java/com/etotem/cfc/config/SfmsDataSourceConfig.java
git commit -m "fix: 修复SfmsDataSourceConfig配置前缀不匹配,去掉hikari层级"
阅读 DataMigrationService.java 的9步迁移流程,确认:
sfmsPhoneToFamilyId, sfmsClientIdToChildUserId 等)错误处理不会中断全流程
[ ] Step 2: 启动后端后调用迁移端点
curl -X POST http://localhost:8080/api/migration/run
预期返回:
{
"code": 200,
"data": {
"success": true/false,
"migratedFamilies": N,
"migratedParents": N,
"migratedChildren": N,
"migratedTeachers": N,
"migratedOrders": N,
"migratedResults": N,
"migratedRecords": N,
"migratedPlans": N,
"errors": []
}
}
[ ] Step 3: 检查迁移结果
families 表是否有新数据users 表是否有角色为 parent/child/teacher 的新记录children 表是否有对应记录package_orders 表是否有订单记录dan_assessment_results 表是否有测评结果[ ] Step 4: 提交
git add -A && git commit -m "feat: 完成SFMS数据迁移端到端验证"
确认多次调用 /api/migration/run 不会产生重复数据:
migrateFamilies(): 用 sfmsPhoneToFamilyId 缓存去重migrateParentUsers(): 用 phone|openid 的 Set 去重migrateChildUsersAndChildren(): 用 sfmsClientIdToChildUserId 缓存去重
如果幂等性不足(例如二次迁移会重复创建家庭),添加基于手机号的查重:
// 在 migrateFamilies 方法开头添加
if (familyMapper.selectCount(new LambdaQueryWrapper<Family>()
.eq(Family::getName, familyName)) > 0) continue;
在每个迁移步骤的关键节点添加日志输出,便于排查问题。
[ ] Step 3: 提交
git add -A && git commit -m "feat: 增强SFMS迁移幂等性和日志"
从 docs/task-requirements.md 的需求清单逐一检查:
| ID | 功能 | 检查点 | |----|------|--------| | TASK-001~005 | 基础创建 | create-task.vue + TaskController 确认 | | TASK-006 | 任务模板 | TaskTemplateController / task-templates 页面 | | TASK-007 | 审核方式 | TaskService.reviewTask / review.vue | | TASK-008~009 | 孩子任务 | child-index / TaskController | | TASK-010 | 完成方式 | TaskController.completeTask 参数检查 | | TASK-011 | 任务时长 | Task entity duration 字段检查 | | TASK-012A~F | 打卡方式 | api.js 媒体上传端点检查 | | TASK-013 | 通知 | TaskReminderController 检查 | | TASK-014 | 历史记录 | TaskController 查询参数检查 | | TASK-015 | 统计报表 | TaskController stats 端点检查 | | TASK-016 | 批量操作 | ❌ 待实现 |
列出每个缺失项的具体工作量和前后端依赖。
[ ] Step 3: 提交评估报告
git add docs/task-requirements.md && git commit -m "docs: 更新任务模块功能评估"
涉及文件:
TaskTemplateController.java, TaskTemplateService.java, TaskTemplateMapper.javapages/tasks/task-templates.vue(新增)背景: task-requirements.md 中 TASK-006 标注为"部分实现"。后端已有 TaskTemplate 实体和 AdminController 中的模板管理 API,但前端缺少家长创建和使用模板的页面。
确认 TaskTemplate 实体包含字段:id, title, description, category, points, difficulty, isActive, teacherId, createdAt, updatedAt
确认 API 端点的可用性:
POST /api/admin/task-templates — 列表查询POST /api/admin/task-templates/create — 创建PUT /api/admin/task-templates/{id} — 更新DELETE /api/admin/task-templates/{id} — 删除
[ ] Step 2: 创建家长端任务模板选择器
在 create-task.vue 中添加"从模板创建"功能:
选择模板后自动填充表单字段(title, category, points 等)
[ ] Step 3: 在 pages.json 注册模板管理页面
添加路由 /pages/tasks/task-templates,家长可从首页快捷操作进入。
[ ] Step 4: 提交
git add -A && git commit -m "feat: 实现家长端任务模板选择功能"
确认 Task 实体已有的审核字段:
reviewType: auto(自动通过)/ manual(家长审核)status: pending/completed/reviewed 等如果需要字段但不存在,在 Task.java 中添加:
/** 审核方式: auto/manual */
private String reviewType;
/** 完成方式: photo/video/text/auto */
private String completeType;
在创建任务表单中添加:
完成方式选择: 拍照 / 视频 / 文字描述 / 自动完成
[ ] Step 3: 更新 TaskService 审核逻辑
auto 模式: 提交后自动标记为已完成manual 模式: 提交后进入待审核列表[ ] Step 4: 提交
git add -A && git commit -m "feat: 添加任务审核方式和完成方式设置"
在 TaskController.java 中添加批量操作端点:
@PostMapping("/batch-complete")
public Result<Boolean> batchComplete(@RequestBody List<Long> taskIds) {
// 批量完成任务
}
@PostMapping("/batch-delete")
public Result<Boolean> batchDelete(@RequestBody List<Long> taskIds) {
// 批量删除任务
}
在 tasks.vue 的列表中添加复选框选择和批量操作按钮:
批量拒审
[ ] Step 3: 提交
git add -A && git commit -m "feat: 实现任务批量操作功能"
[ ] Step 1: 在 Task 实体中添加 duration 字段
/** 预计时长(分钟) */
private Integer duration;
[ ] Step 2: 更新 create-task.vue 添加时长输入
<view class="form-item">
<text class="label">预计时长(分钟)</text>
<input class="input" type="number" v-model="form.duration" placeholder="请输入预计完成时长" />
</view>
[ ] Step 3: 提交
git add -A && git commit -m "feat: 添加任务时长设置功能"