You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.6 KiB
5.6 KiB
实施任务
交付与证明映射
| 需求域 | 规划来源 | 实现任务 | 主要证明 |
|---|---|---|---|
| 词库来源与覆盖 | proposal、design | T1、T2、T3 | 来源清单、中文名检查、Flyway 执行成功 |
| 词云筛选与排序 | skill-cloud spec | T4、T5 | Repository/Service 单测、MockMvc 场景 |
| TOP10 派生与一致性 | skill-cloud、skill-match spec | T5、T7、T8 | 集成测试断言同一排序结果 |
| 个人技能匹配 | skill-match spec | T6、T8 | 别名、分母、空数据和部分命中单测 |
| 学习路径与建议 | learning-path spec | T7、T8 | 优先级连续、模板建议和空列表测试 |
| 权限与隐私 | 三份 spec、design | T8、T10 | 401/403、响应脱敏和日志检查 |
| 文档与契约 | proposal、design | T1、T10 | docs/verify_openapi.py、接口文档审查 |
任务
- 1. 固化 ESCO + O*NET 代表性数据清单:在
changes/n03-skill-cloud/data/source-manifest.md和docs/skill-taxonomy-sources.md记录行业、职位、技能范围、源版本、许可、归属 URL、中文映射负责人和导入规则。产出:互联网、金融、教育及代表性职位的可审查数据边界。依赖:无。证据:人工审查清单,所有入选技能均有稳定来源 ID 和中文标准名。 - 2. 新增 Flyway 词库结构迁移:创建
mydreamjob-server/src/main/resources/db/migration/V35__skill_cloud_taxonomy.sql,实现七张词库表、外键、唯一约束、查询索引,以及occupation_skills.importance_source_code、importance_element_id、importance_is_proxy来源追溯字段,不修改 V1–V34。产出:H2/MySQL 均可创建词库结构。依赖:T1。证据:mvn -Dtest=SkillTaxonomyMigrationTest test。 - 3. 导入代表性种子数据:创建
mydreamjob-server/src/main/resources/db/migration/V36__skill_cloud_seed.sql,导入三类行业、代表性职位、全部已声明技能分类、ESCO 主来源技能、ONETsoftware_skills补充技术、别名和 ONET Importance;每条非空热度必须保存真实 SOC、Element ID 和代理标记,无映射时importance留空。产出:种子数据可重复执行迁移并满足中文名约束。依赖:T2。证据:迁移测试断言数量、中文名、分类覆盖、ESCO 职位来源、47 条 O*NET 技术来源和全部非空 Importance 与版本化证据快照一致。 - 4. 建立词库领域与查询仓储:在
mydreamjob-server/src/main/java/com/mydreamjob/skill/新增实体、Repository 和查询投影,覆盖行业—职位—分类校验及技能关系查询。产出:能按industryId、occupationId、可选categoryId读取技能。依赖:T2、T3。证据:mvn -Dtest=SkillTaxonomyRepositoryTest test。 - 5. 实现共享词云排名服务与 DTO:在
mydreamjob-server/src/main/java/com/mydreamjob/skill/实现统一筛选、heat DESC, nameZh ASC, skillId ASC排序和完整列表输出;返回rank、技能身份、分类、heat、来源字段。产出:词云和 TOP10 使用同一个事实来源。依赖:T4。证据:mvn -Dtest=SkillCloudQueryServiceTest test,覆盖空热度、同热度、空范围和分类缺省。 - 6. 实现个人技能匹配服务:新增
SkillMatchService、别名归一化器和匹配 DTO,只从 JWT 对应学生的skills_json读取技能;按min(10, actualSize)截取并计算整数匹配度。产出:命中、缺失、分母和异常 JSON 行为符合规范。依赖:T5。证据:mvn -Dtest=SkillMatchServiceTest test,覆盖 0、1/3=33、全命中、少技能和重复别名。 - 7. 实现学习路径生成服务:新增
SkillLearningPathService和分类模板,按缺失技能顺序生成连续优先级与通用建议;不接 AI 或外部资源。产出:无缺口返回空列表,有缺口返回最小学路径。依赖:T6。证据:mvn -Dtest=SkillLearningPathServiceTest test。 - 8. 暴露三个 STUDENT 接口并登记权限:新增
SkillCloudController,实现GET /skills/word-cloud、GET /skills/match、GET /skills/learning-path,在SecurityConfig中加入/skills/**的登录与 STUDENT 校验,并补充 OpenAPI 注解。产出:三个 API 只接受 STUDENT,响应统一为ApiResponse。依赖:T5、T6、T7。证据:mvn -Dtest=SkillCloudControllerTest test,覆盖匿名 401、COMPANY/ADMIN 403、参数非法 400 和学生成功 200。 - 9. 补齐持久化与端到端回归测试:在
mydreamjob-server/src/test/java/com/mydreamjob/skill/增加 H2 持久化、排序一致性、匹配与学习路径复用同一 TOP10 的集成测试,并验证响应不含原始skills_json。产出:三个接口的边界与一致性有自动化证明。依赖:T3、T8。证据:mvn test。 - 10. 更新接口与来源文档并执行发布级验证:新增
docs/skill-cloud-api.md,更新docs/frontend-integration.md、docs/openapi-rc.json和词库来源说明,明确 TOP10 由前端截取、参数规则、响应字段、无 AI 和许可归属。依赖:T8、T9。产出:静态契约、运行时行为和文档一致。证据:python docs\verify_openapi.py、mvn clean verify。
实施顺序
T1 → T2 → T3 → T4 → T5 → T6 → T7 → T8 → T9 → T10。
退出条件
- 所有任务完成且证据命令通过。
- 三份 spec 的场景全部有对应自动化或明确人工契约验证。
- 词库来源版本和许可可追溯,未修改历史迁移。
- 未实现非目标范围;没有课程、AI、后台维护或个人进度持久化。
- OpenAPI 静态契约与运行时接口一致,且 STUDENT 权限边界可验证。