Appearance
数字化闭环(二期)接口文档——迭代3
接口概览
| 模块 | 接口名称 | 方法 | 路径 | 说明 |
|---|---|---|---|---|
| 培训项目 | 获取培训项目信息 | GET | /api/manage/project_plan/:projectPlanId | 获取培训项目信息 |
| 培训项目 | 删除培训项目 | DELETE | /api_v3/manage/project_plans/:projectPlanId | 删除培训项目 |
| 培训项目 | 关闭培训项目 | PUT | /api_v3/manage/project_plans/:projectPlanId/close | 关闭培训项目 |
| 培训项目 | 归档培训项目 | PUT | /api_v3/manage/project_plans/:projectPlanId/archive | 归档培训项目 |
| 培训项目 | 撤销归档培训项目 | PUT | /api_v3/manage/project_plans/:projectPlanId/cancel_archive | 撤销归档培训项目 |
| 培训项目 | 获取培训项目报告 | GET | /api/manage/project_plan/:projectPlanId/report | 获取培训项目报告 |
| 培训项目 | 获取培训项目报告配置 | GET | /api/manage/project_plan/:projectPlanId/report_config | 获取培训项目报告配置 |
| 培训项目 | 保存培训项目报告配置 | POST | /api/manage/project_plan/:projectPlanId/report_config | 保存培训项目报告配置 |
| 培训项目 | 获取培训项目报告任务完成情况 | GET | /api/manage/project_plan/:projectPlanId/report_task_status | 获取培训项目报告任务完成情况 |
| 培训项目 | 获取培训项目报告考核情况 | GET | /api/manage/project_plan/:projectPlanId/report_assessment | 获取培训项目报告考核情况 |
| 培训项目 | 获取培训项目报告学员学习数据 | GET | /api/manage/project_plan/:projectPlanId/report_learning_data | 获取培训项目报告学员学习数据 |
| 培训项目 | 获取培训项目报告学员优秀作业 | GET | /api/manage/project_plan/:projectPlanId/report_excellent_assignment | 获取培训项目报告学员优秀作业 |
| 培训项目 | 获取培训项目报告精彩瞬间 | GET | /api/manage/project_plan/:projectPlanId/report_highlight | 获取培训项目报告精彩瞬间 |
| 培训项目 | 培训项目报告精彩瞬间保存 | POST | /api/manage/project_plan/:projectPlanId/report_highlight | 培训项目报告精彩瞬间保存 |
| 培训项目 | 获取培训项目报告项目总结 | GET | /api/manage/project_plan/:projectPlanId/report_summary | 获取培训项目报告项目总结 |
| 培训项目 | 培训项目报告项目总结保存 | POST | /api/manage/project_plan/:projectPlanId/report_summary | 培训项目报告项目总结保存 |
获取培训项目信息
GET /api/manage/project_plan/:projectPlanId
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| projectPlan | object | 培训项目信息 |
| owner | object | 培训项目负责人信息 |
| permissions | object | 权限信息 |
projectPlan(培训项目信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | integer | 培训项目ID |
| name | string | 培训项目名称 |
| status | string | 培训项目状态(unpublished/published/closed/archived) |
| cover | string | 培训项目封面URL |
| type | string | 培训项目类型(general/training_camp/normal等) |
| timeMode | string | 时间模式(date/deadline) |
| startTime | string | 培训项目开始时间(YYYY-MM-DD) |
| endTime | string | 培训项目结束时间(YYYY-MM-DD) |
| deadline | integer | 培训项目截止天数 |
| showable | boolean | 培训项目是否对学员可见 |
owner(培训项目负责人信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | integer | 负责人ID |
| nickname | string | 负责人用户名 |
| truename | string | 负责人真实姓名 |
permissions(权限信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
| canDelete | boolean | 是否可以删除培训项目 |
| canClose | boolean | 是否可以关闭培训项目 |
| canArchive | boolean | 是否可以归档培训项目 |
| canCancelArchive | boolean | 是否可以撤销归档培训项目 |
| canPublish | boolean | 是否可以发布培训项目 |
- 🔁 返回示例
json
{
"projectPlan": {
"id": 1,
"name": "项目名称",
"status": "published",
"cover": "https://example.com/cover.jpg",
"type": "training_camp",
"timeMode": "date",
"startTime": "2024-06-01",
"endTime": "2024-06-30",
"deadline": 30,
"showable": true,
"ownerId": 2
},
"owner": {
"id": 2,
"nickname": "张三",
"truename": "张三"
},
"permissions": {
"canDelete": false,
"canClose": true,
"canArchive": true,
"canCancelArchive": false,
"canPublish": false
}
}删除培训项目
DELETE /api/manage/project_plans/:projectPlanId
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
注意:只能删除未发布的培训项目(status 不为 published)。
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| success | boolean | 是否成功 |
- 🔁 返回示例
json
{
"success": true
}- ⚠️ 错误响应
json
{
"error": {
"code": "project_plan.message.can_not_manage_message",
"message": "无法管理该培训项目"
}
}或
json
{
"error": {
"code": "Delete Published Training ProjectPlan Is Not Allowed",
"message": "不能删除已发布的培训项目"
}
}关闭培训项目
PUT /api/manage/project_plans/:projectPlanId/close
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| projectPlan | object | 培训项目信息 |
projectPlan(培训项目信息)字段说明请参考"获取培训项目信息"接口。
- 🔁 返回示例
json
{
"projectPlan": {
"id": 1,
"name": "项目名称",
"status": "closed",
"cover": "https://example.com/cover.jpg",
"type": "training_camp",
"timeMode": "date",
"startTime": "2024-06-01",
"endTime": "2024-06-30",
"deadline": 30,
"showable": true
}
}- ⚠️ 错误响应
json
{
"error": {
"code": "project_plan.message.can_not_manage_message",
"message": "无法管理该培训项目"
}
}归档培训项目
PUT /api/manage/project_plans/:projectPlanId/archive
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| projectPlan | object | 培训项目信息 |
projectPlan(培训项目信息)字段说明请参考"获取培训项目信息"接口。归档后项目状态将变为 archived。
- 🔁 返回示例
json
{
"projectPlan": {
"id": 1,
"name": "项目名称",
"status": "archived",
"cover": "https://example.com/cover.jpg",
"type": "training_camp",
"timeMode": "date",
"startTime": "2024-06-01",
"endTime": "2024-06-30",
"deadline": 30,
"showable": true
}
}- ⚠️ 错误响应
json
{
"error": {
"code": "project_plan.message.can_not_manage_message",
"message": "无法管理该培训项目"
}
}撤销归档培训项目
PUT /api/manage/project_plans/:projectPlanId/cancel_archive
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
注意:
- 只能撤销已归档的培训项目(status 必须为 archived)
- 撤销归档后项目状态将恢复为
published - 需要满足发布条件:必须设置
startTime,如果showable为 true,则必须设置enrollmentStartDate或isPermanentEnrollment为 true
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| projectPlan | object | 培训项目信息 |
projectPlan(培训项目信息)字段说明请参考"获取培训项目信息"接口。撤销归档后项目状态将变为 published。
- 🔁 返回示例
json
{
"projectPlan": {
"id": 1,
"name": "项目名称",
"status": "published",
"cover": "https://example.com/cover.jpg",
"type": "training_camp",
"timeMode": "date",
"startTime": "2024-06-01",
"endTime": "2024-06-30",
"deadline": 30,
"showable": true
}
}- ⚠️ 错误响应
json
{
"error": {
"code": "project_plan.message.can_not_manage_message",
"message": "无法管理该培训项目"
}
}或
json
{
"error": {
"code": "Only archived project plan can be cancelled archive",
"message": "只能撤销已归档的培训项目"
}
}或
json
{
"error": {
"code": "project_plan.publish.message.data_empty",
"message": "发布所需数据不完整"
}
}获取培训项目报告
GET /api/manage/project_plan/:projectPlanId/report
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| projectPlan | object | 培训项目信息 |
| owner | object | 培训项目负责人信息 |
| sections | array | 报告各模块数据列表 |
| basicInfo | object | 报告基本信息 |
| isShowOldVersionReport | boolean | 是否显示旧版报告 |
sections(报告各模块数据):
| 字段名 | 类型 | 描述 |
|---|---|---|
| code | string | 模块标识(如task_status、assessment等) |
| 字段名 | 类型 | 描述 |
|---|---|---|
| projectPlan | object | 培训项目信息 |
| owner | object | 培训项目负责人信息 |
projectPlan(培训项目信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | integer | 培训项目ID |
| name | string | 培训项目名称 |
| status | string | 培训项目状态(unpublished/published/closed/archived) |
| cover | string | 培训项目封面URL |
| type | string | 培训项目类型(general/training_camp/normal等) |
| timeMode | string | 时间模式(date/deadline) |
| startTime | string | 培训项目开始时间(YYYY-MM-DD) |
| endTime | string | 培训项目结束时间(YYYY-MM-DD) |
| deadline | integer | 培训项目截止天数 |
| showable | boolean | 培训项目是否对学员可见 |
owner(培训项目负责人信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | integer | 负责人ID |
| nickname | string | 负责人用户名 |
| truename | string | 负责人真实姓名 |
basicInfo(报告基本信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
| memberNum | integer | 项目学员总数 |
| archivedMemberNum | integer | 归档学员数 |
| memberPassedRate | number | 学员通过率(0-100) |
| taskNum | integer | 任务总数 |
| compulsoryTaskNum | integer | 必修任务数 |
| compulsoryTaskFinishedRate | number | 必修任务完成率(0-100) |
- 🔁 返回示例
json
{
"projectPlan": {
"id": 1,
"name": "项目名称",
"status": "published",
"cover": "https://example.com/cover.jpg",
"type": "training_camp",
"timeMode": "date",
"startTime": "2024-06-01",
"endTime": "2024-06-30",
"deadline": 30,
"showable": true,
"ownerId": 2
},
"owner": {
"id": 2,
"nickname": "张三",
"truename": "张三"
},
"sections": [
{
"code": "task_status"
},
{
"code": "assessment"
}
],
"basicInfo": {
"memberNum": 50,
"archivedMemberNum": 10,
"memberPassedRate": 80,
"taskNum": 20,
"compulsoryTaskNum": 15,
"compulsoryTaskFinishedRate": 75
},
"isShowOldVersionReport": false
}获取培训项目报告配置
GET /api/manage/project_plan/:projectPlanId/report_config
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| sections | array | 报告各模块配置列表 |
sections(报告各模块配置):
| 字段名 | 类型 | 描述 |
|---|---|---|
| code | string | 模块标识(task_status、assessment、learning_data、excellent_assignment、highlight、summary) |
| enabled | boolean | 模块是否启用 |
| seq | integer | 模块排序序号 |
- 🔁 返回示例
json
{
"sections": [
{
"code": "task_status",
"enabled": true,
"seq": 1
},
{
"code": "assessment",
"enabled": true,
"seq": 2
}
]
}保存培训项目报告配置
POST /api/manage/project_plan/:projectPlanId/report_config
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
| sections | body | array | 是 | 报告各模块配置列表 |
- 🔁 请求示例
json
{
"sections": [
{
"code": "task_status",
"enabled": true,
"seq": 1
},
{
"code": "assessment",
"enabled": true,
"seq": 2
}
]
}- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| success | boolean | 是否成功 |
- 🔁 返回示例
json
{
"success": true
}获取培训项目报告任务完成情况
GET /api/manage/project_plan/:projectPlanId/report_task_status
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| type | string | 内容类型(item/stage) |
item(任务):
| 字段名 | 类型 | 描述 |
|---|---|---|
| type | string | 排序类型(item) |
| targetType | string | 任务类型(course、offline_course、exam、offline_exam、practical_assignment、mentor_guided、target_plan_531等) |
| title | string | 任务标题 |
| isOptional | boolean | 是否选修(true-选修,false-必修) |
| stats | object | 任务完成情况统计数据 |
stats(任务完成情况统计数据):
| 字段名 | 类型 | 描述 |
|---|---|---|
| finishedNum | integer | 完成学员数 |
| totalNum | integer | 任务总学员数 |
stage(阶段):
| 字段名 | 类型 | 描述 |
|---|---|---|
| type | string | 排序类型(stage) |
| stageSeq | integer | 阶段序号 |
| title | string | 阶段标题 |
| tasks | array | 阶段下任务列表 |
- 🔁 返回示例
json
[
{
"type": "stage",
"title": "阶段1",
"stageSeq": 1,
"tasks": [
{
"type": "item",
"targetType": "course",
"title": "任务1",
"isOptional": false,
"stats": {
"finishedNum": 40,
"totalNum": 50
}
}
]
}
]获取培训项目报告考核情况
GET /api/manage/project_plan/:projectPlanId/report_assessment
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| itemId | integer | 任务ID |
| assessmentId | integer | 考核ID(course_task_testpaper等是 taskId,其他是itemId) |
| subSeq | integer | 考核子序号 |
| title | string | 考核标题 |
| type | string | 考核类型(assignment、exam、offline_exam、course_task_testpaper等) |
| isOptional | boolean | 是否选修(true-选修,false-必修) |
| total | integer | 考核总人数 |
| submitted | integer | 提交人数 |
| submitRate | number | 提交率(0-100) |
| totalScore | number | 考核总分 |
| firstPassRate | number | 首次通过率(0-100) |
| firstAvgScore | number | 首次平均分 |
| finalPassRate | number | 最终通过率(0-100) |
| finalAvgScore | number | 最终平均分 |
- 🔁 返回示例
json
[
{
"itemId": 1,
"assessmentId": 1,
"subSeq": 1,
"title": "考核1",
"type": "assignment",
"isOptional": false,
"total": 50,
"submitted": 45,
"submitRate": 90,
"totalScore": 100,
"firstPassRate": 80,
"firstAvgScore": 75.5,
"finalPassRate": 85,
"finalAvgScore": 78.0
}
]获取培训项目报告学员学习数据
GET /api/manage/project_plan/:projectPlanId/report_learning_data
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| finishedRank | array | 已完成排名列表(最多10个) |
finishedRank(已完成排名):
| 字段名 | 类型 | 描述 |
|---|---|---|
| userId | integer | 学员ID |
| truename | string | 学员姓名 |
| orgName | string | 学员所属组织名称 |
| avatarUrl | string | 学员头像URL |
| finishedNum | integer | 已完成任务数 |
| totalNum | integer | 任务总数 |
- 🔁 返回示例
json
{
"finishedRank": [
{
"userId": 1,
"truename": "张三",
"orgName": "组织A",
"avatarUrl": "https://example.com/avatar.jpg",
"finishedNum": 10,
"totalNum": 10
},
{
"userId": 2,
"truename": "李四",
"orgName": "组织B",
"avatarUrl": "https://example.com/avatar.jpg",
"finishedNum": 8,
"totalNum": 10
}
]
}获取培训项目报告学员优秀作业
GET /api/manage/project_plan/:projectPlanId/report_excellent_assignment
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| truename | string | 学员姓名 |
| orgName | string | 学员所属组织名称 |
| avatarUrl | string | 学员头像URL |
| comment | string | 讲师评语 |
| title | string | 作业标题 |
| score | number | 作业得分 |
- 🔁 返回示例
json
[
{
"truename": "张三",
"orgName": "组织A",
"avatarUrl": "https://example.com/avatar.jpg",
"comment": "讲师评语",
"title": "作业标题",
"score": 95.5
}
]获取培训项目报告精彩瞬间
GET /api/manage/project_plan/:projectPlanId/report_highlight
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| content | string | 精彩瞬间内容 |
| token | string | 上传token(用于前端上传图片) |
- 🔁 返回示例
json
{
"content": "精彩瞬间内容",
"token": "upload_token_string"
}培训项目报告精彩瞬间保存
POST /api/manage/project_plan/:projectPlanId/report_highlight
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
| content | body | string | 是 | 精彩瞬间内容(最多20万字符) |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| success | boolean | 是否成功 |
- 🔁 返回示例
json
{
"success": true
}获取培训项目报告项目总结
GET /api/manage/project_plan/:projectPlanId/report_summary
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| content | string | 总结内容 |
| token | string | 上传token(用于前端上传图片) |
- 🔁 返回示例
json
{
"content": "总结内容",
"token": "upload_token_string"
}培训项目报告项目总结保存
POST /api/manage/project_plan/:projectPlanId/report_summary
- 📝 请求参数
| 参数名 | 位置 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
| projectPlanId | path | integer | 是 | 培训项目ID |
| content | body | string | 是 | 总结内容(最多20万字符) |
- ✅ 返回参数
| 字段名 | 类型 | 描述 |
|---|---|---|
| success | boolean | 是否成功 |
- 🔁 返回示例
json
{
"success": true
}