Skip to content

数字化闭环(二期)接口文档——迭代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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
projectPlanobject培训项目信息
ownerobject培训项目负责人信息
permissionsobject权限信息

projectPlan(培训项目信息):

字段名类型描述
idinteger培训项目ID
namestring培训项目名称
statusstring培训项目状态(unpublished/published/closed/archived)
coverstring培训项目封面URL
typestring培训项目类型(general/training_camp/normal等)
timeModestring时间模式(date/deadline)
startTimestring培训项目开始时间(YYYY-MM-DD)
endTimestring培训项目结束时间(YYYY-MM-DD)
deadlineinteger培训项目截止天数
showableboolean培训项目是否对学员可见

owner(培训项目负责人信息):

字段名类型描述
idinteger负责人ID
nicknamestring负责人用户名
truenamestring负责人真实姓名

permissions(权限信息):

字段名类型描述
canDeleteboolean是否可以删除培训项目
canCloseboolean是否可以关闭培训项目
canArchiveboolean是否可以归档培训项目
canCancelArchiveboolean是否可以撤销归档培训项目
canPublishboolean是否可以发布培训项目

  • 🔁 返回示例
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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

注意:只能删除未发布的培训项目(status 不为 published)。


  • ✅ 返回参数
字段名类型描述
successboolean是否成功

  • 🔁 返回示例
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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
projectPlanobject培训项目信息

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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
projectPlanobject培训项目信息

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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

注意

  • 只能撤销已归档的培训项目(status 必须为 archived)
  • 撤销归档后项目状态将恢复为 published
  • 需要满足发布条件:必须设置 startTime,如果 showable 为 true,则必须设置 enrollmentStartDateisPermanentEnrollment 为 true

  • ✅ 返回参数
字段名类型描述
projectPlanobject培训项目信息

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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
projectPlanobject培训项目信息
ownerobject培训项目负责人信息
sectionsarray报告各模块数据列表
basicInfoobject报告基本信息
isShowOldVersionReportboolean是否显示旧版报告

sections(报告各模块数据):

字段名类型描述
codestring模块标识(如task_status、assessment等)
字段名类型描述
projectPlanobject培训项目信息
ownerobject培训项目负责人信息

projectPlan(培训项目信息):

字段名类型描述
idinteger培训项目ID
namestring培训项目名称
statusstring培训项目状态(unpublished/published/closed/archived)
coverstring培训项目封面URL
typestring培训项目类型(general/training_camp/normal等)
timeModestring时间模式(date/deadline)
startTimestring培训项目开始时间(YYYY-MM-DD)
endTimestring培训项目结束时间(YYYY-MM-DD)
deadlineinteger培训项目截止天数
showableboolean培训项目是否对学员可见

owner(培训项目负责人信息):

字段名类型描述
idinteger负责人ID
nicknamestring负责人用户名
truenamestring负责人真实姓名

basicInfo(报告基本信息):

字段名类型描述
memberNuminteger项目学员总数
archivedMemberNuminteger归档学员数
memberPassedRatenumber学员通过率(0-100)
taskNuminteger任务总数
compulsoryTaskNuminteger必修任务数
compulsoryTaskFinishedRatenumber必修任务完成率(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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
sectionsarray报告各模块配置列表

sections(报告各模块配置):

字段名类型描述
codestring模块标识(task_status、assessment、learning_data、excellent_assignment、highlight、summary)
enabledboolean模块是否启用
seqinteger模块排序序号

  • 🔁 返回示例
json
{
  "sections": [
    {
      "code": "task_status",
      "enabled": true,
      "seq": 1
    },
    {
      "code": "assessment",
      "enabled": true,
      "seq": 2
    }
  ]
}

保存培训项目报告配置

POST /api/manage/project_plan/:projectPlanId/report_config


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID
sectionsbodyarray报告各模块配置列表

  • 🔁 请求示例
json
{
  "sections": [
    {
      "code": "task_status",
      "enabled": true,
      "seq": 1
    },
    {
      "code": "assessment",
      "enabled": true,
      "seq": 2
    }
  ]
}

  • ✅ 返回参数
字段名类型描述
successboolean是否成功

  • 🔁 返回示例
json
{
  "success": true
}

获取培训项目报告任务完成情况

GET /api/manage/project_plan/:projectPlanId/report_task_status


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
typestring内容类型(item/stage)

item(任务):

字段名类型描述
typestring排序类型(item)
targetTypestring任务类型(course、offline_course、exam、offline_exam、practical_assignment、mentor_guided、target_plan_531等)
titlestring任务标题
isOptionalboolean是否选修(true-选修,false-必修)
statsobject任务完成情况统计数据

stats(任务完成情况统计数据):

字段名类型描述
finishedNuminteger完成学员数
totalNuminteger任务总学员数

stage(阶段):

字段名类型描述
typestring排序类型(stage)
stageSeqinteger阶段序号
titlestring阶段标题
tasksarray阶段下任务列表

  • 🔁 返回示例
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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
itemIdinteger任务ID
assessmentIdinteger考核ID(course_task_testpaper等是 taskId,其他是itemId)
subSeqinteger考核子序号
titlestring考核标题
typestring考核类型(assignment、exam、offline_exam、course_task_testpaper等)
isOptionalboolean是否选修(true-选修,false-必修)
totalinteger考核总人数
submittedinteger提交人数
submitRatenumber提交率(0-100)
totalScorenumber考核总分
firstPassRatenumber首次通过率(0-100)
firstAvgScorenumber首次平均分
finalPassRatenumber最终通过率(0-100)
finalAvgScorenumber最终平均分

  • 🔁 返回示例
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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
finishedRankarray已完成排名列表(最多10个)

finishedRank(已完成排名):

字段名类型描述
userIdinteger学员ID
truenamestring学员姓名
orgNamestring学员所属组织名称
avatarUrlstring学员头像URL
finishedNuminteger已完成任务数
totalNuminteger任务总数

  • 🔁 返回示例
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


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
truenamestring学员姓名
orgNamestring学员所属组织名称
avatarUrlstring学员头像URL
commentstring讲师评语
titlestring作业标题
scorenumber作业得分

  • 🔁 返回示例
json
[
  {
    "truename": "张三",
    "orgName": "组织A",
    "avatarUrl": "https://example.com/avatar.jpg",
    "comment": "讲师评语",
    "title": "作业标题",
    "score": 95.5
  }
]

获取培训项目报告精彩瞬间

GET /api/manage/project_plan/:projectPlanId/report_highlight


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
contentstring精彩瞬间内容
tokenstring上传token(用于前端上传图片)

  • 🔁 返回示例
json
{
  "content": "精彩瞬间内容",
  "token": "upload_token_string"
}

培训项目报告精彩瞬间保存

POST /api/manage/project_plan/:projectPlanId/report_highlight


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID
contentbodystring精彩瞬间内容(最多20万字符)

  • ✅ 返回参数
字段名类型描述
successboolean是否成功

  • 🔁 返回示例
json
{
  "success": true
}

获取培训项目报告项目总结

GET /api/manage/project_plan/:projectPlanId/report_summary


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID

  • ✅ 返回参数
字段名类型描述
contentstring总结内容
tokenstring上传token(用于前端上传图片)

  • 🔁 返回示例
json
{
  "content": "总结内容",
  "token": "upload_token_string"
}

培训项目报告项目总结保存

POST /api/manage/project_plan/:projectPlanId/report_summary


  • 📝 请求参数
参数名位置类型必填描述
projectPlanIdpathinteger培训项目ID
contentbodystring总结内容(最多20万字符)

  • ✅ 返回参数
字段名类型描述
successboolean是否成功

  • 🔁 返回示例
json
{
  "success": true
}