-
Notifications
You must be signed in to change notification settings - Fork 9
TaskCenterAPI
marstone edited this page Jul 16, 2019
·
32 revisions
- 任务中心API,用于任务源头系统和任务中心系统进行集成
- 任务源头系统通过推或者拉的方式,将任务同步到任务中心系统中
- 推送接口需使用 Client Credential方式授权,参考 OAuth2 协议 RFC6749 4.4节
- 查询接口可使用所有OAuth授权方式
- 协议参考:https://graphql.org/
- App、Process、Task三级类型定义,具体定义参考后面附录。
type Mutation {
# Mutation【1】:全量同步一个流程实例,待办中心会最终与传入Process及其Tasks信息保持一致
syncProcess(process:Process!, timestamp:Long):Process
# Mutation【2】:增量同步一个流程实例及其的Tasks列表,Tasks列表内容按Id视为新增或更新
pushProcess(process:Process!, timestamp:Long):Process
# Mutation【3】:增量删除一个流程实例的Tasks列表,Tasks列表仅需给出Id即可
deleteTasks(process:Process!, timestamp:Long):Process
# Mutation【4】:删除一个流程实例,仅需给出Id(或entry+system)即可
deleteProcess(process:Process!, timestamp:Long):Process
}- timestamp给出该Process变更的毫秒级Unix时间戳。待办中心按照此时间戳保障任务级的时间箭头的一致性
type Query {
# Query【1】:根据流程Id或“流水号+系统”查询给定流程实例及其任务详情
process(id:Long, entry:Long, system:String):Process
# Query【2】:查询用户的任务列表,cate可选范围:[todo],含义:[待办]
tasks(cate:String!, userId:String):[Tasks]
# Query【3】:查询用户的流程实例列表,cate可选范围:[doing|done|completed],含义:[进行中]已完成|doing+done]
processes(cate:String!, userId:String):[Process]
}- 当不使用 OAuth2 的用户授权方式时,userId必传
- Query【2】和【3】的其他参数参考: https://github.com/infoplus/docs/wiki/InfoPlusAPI#2x-task-api
- 用于实现 Web 页面的实时刷新。尚待完善
- 每个应用(任务源)可根据自身的特性,选择推、拉等方式或者其组合。
| 方案 | 实现难度 | 实时性 | 页面性能 | 压力 | 统计分析 | 待办通知 |
|:--------- -|:--------|:--------|:---------|:------|:--------|:-------|
| 拉模式 | 简单 | 实时 | 低 | 低 | 不支持 | 不支持 |
| 按实例全量推 | 中等 | 较差 | 高 | 高 | 支持 | 可支持 |
| 按实例增量推 | 复杂 | 中等 | 高 | 中 | 支持 | 可支持 |
- 任务源需实现“任务集成API”,技术规范参考:TaskIntegrationAPI
- 任务源通过调用 Mutation【1】【4】实现
- 任务源通过调用 Mutation【2】【3】【4】实现,为保障数据一致性,需辅助使用Query【1】对比。
- 本节定义本组API的 GraphQL Schema
- 指代一类可办事项
// TYPE {app}
{
"id":{guid}, // 无意义的唯一id
"name":{string}, // 可办事项名称
"uri":{string}, // 启动uri
"code":{string}, // 应用代码,可用于部分api调用,表示该app的发布版
"abbreviation":{string}, // 缩略名
"description":{string}, // 服务摘要
"tags":{string}, // 应用标签,可以有多个,以逗号分隔,第一个作为主分类
"icon":{uri}, // 图标uri
"palette":{string}, // 调色板颜色,形如:#ff0000
"department":{string}, // 负责院系
"contact":{string}, // 联系人及其方式描述
"recommend":{integer}, // 推荐度,整数
"rating":{integer}, // 评价汇总,0到100分
"rated":{integer}, // 评价次数
"system":{string}, // 所属系统
}- 工作流应用的实例。一个App可以被发起多个Process
// TYPE {process}
{
"id":{guid}, // 无意义的唯一id
"name":{string}, // 流程实例名称
"uri":{string}, // 查看流程实例用到的uri
"tags":{string}, // 该流程实例的标签,可以有多个,以逗号分隔
"entry":{string}, // 流程实例流水号
"create":{long}, // 流程实例创建时间
"update":{long}, // 流程实例最后操作时间
"sort":{long}, // 排序值,会根据排序方式而不同,可参考order参数,目前均为时间戳。
"app":{app}, // 所属应用
"owner":{profile}, // 流程实例所有者,用于区分是我的事宜还是别人的事宜
"actualUser":{profile}, // 委托发起的流程的实际发起人
"status":{string}, // 流程状态:doing、suspended、done、killed
"stateEx":{string}, // 流程终止节点状态
"version":{long}, // 所属App版本的创建时间戳
"rating":{int}, // 评价星级,1-5
"review":{string}, // 评价内容
"pendingTasks":{string}, // 当前的待办任务名称列表,逗号分割
"priority":{string}, // 优先级:normal、important,可为空默认normal
"tasks":[{task}] // 任务列表
}- 需要用户办理的任务,每个Process由1或多个Task组成。
// Type: {task}
{
"id":{guid},
"name":{string}, // 当前任务名,如:"待审核"、"申请单填写"
"uri":{string}, // 展示本任务表单所需的url
"description":{string}, // 摘要
"process":{process}, // 所属流程实例
"subProcess":{process}, // 对应的子流程,仅对子流程任务有效
"assignUser":{profile}, // 指派给的用户,可能为空,表示未指定具体用户
"actionUser":{profile}, // 办理用户,仅对doing|done有效
"actualUser":{profile}, // 实际操作的用户,"被委托人"
"assignTime":{long}, // 指派时间
"actionTime":{long}, // 办理时间
"actionName":{string}, // 办理时选择的动作名称
"expireTime":{long}, // 承诺办理时间
"renderTime":{long}, // 此任务表单第一次渲染的时间,用于标记该任务“已读”
"remark":{string}, // 办理用户填写的备注信息
"status":{string}, // 状态:[todo|done|sub]
"actioners": [{profile}], // 可办理人列表
"reviewers": [{profile}], // 被抄送人列表
}- 表示一个用户
// TYPE {profile}
{
"id":{guid}, // 无意义的唯一id
"name":{string}, // 实名
"account":{string}, // 租户内的用户id,租户唯一
}