TBClient.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package com.malk.service.teambition;
  2. import java.util.List;
  3. import java.util.Map;
  4. public interface TBClient {
  5. /**
  6. * 查询企业项目模板
  7. * - ppExt:
  8. * 1. 编辑模板时, 点击左下角"模板信息", 可在请求内看到其ID. 若是需要绑定固定模板ID, 无需通过后端接口获取
  9. * 2. 另外若是扩展了任务详情加载回调, 通过任务查询 taskId 查询到 project 实际为 editStateProjectId [该字段接口文档有但未返回]
  10. *
  11. * @param ptIds 项目模版ID集合,逗号组合
  12. * @param q 模糊查询名字
  13. * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a4a30f
  14. */
  15. List<Map> templateSearch(String ptIds, String q);
  16. /**
  17. * 搜索企业成员: 条件为空返回也为空
  18. *
  19. * @param query 用户名、用户拼音、用户名简拼、邮箱、手机号码 [实测 name, email, phone 有效; pinyin, py 无效, 且这两个字段在个人信息页面不透出]
  20. * @apiNote https://open.teambition.com/help/docs/5eb5431141b191001bcda95c
  21. */
  22. @Deprecated
  23. List<Map> userSearch(String query);
  24. /**
  25. * 通过 Teambition 用户 ID 查询钉钉信息
  26. *
  27. * @param refer 常见的 refer 类型: dingTalk-corp 钉钉企业 dingTalk-team 钉钉部门 dingTalk-user 钉钉用户
  28. * @apiNote https://open.teambition.com/docs/apis/6321c6ce912d20d3b5a48e5f
  29. */
  30. @Deprecated
  31. List<Map> idMapQuery(String tbId, String refer, String refId);
  32. List<Map> idMapQuery(String userId, boolean isTbID);
  33. /**
  34. * 更新企业成员
  35. *
  36. * @param operatorId 操作人 ID
  37. * @param members 格式: { userId, role, profile: { name, phone, email, ...} }, 成员角色,-1-外部成员 0-成员 1-管理员 2-拥有者
  38. * @apiNote https://open.teambition.com/docs/apis/6321c6ce912d20d3b5a48a5b
  39. */
  40. Map updateUser(String operatorId, List<Map> members);
  41. /**
  42. * 创建空白项目
  43. */
  44. Map projectCreate(String name, String operatorId);
  45. /**
  46. * 通过模板创建项目
  47. *
  48. * @apiNote https://open.teambition.com/docs/apis/6321c6d0912d20d3b5a49753
  49. */
  50. Map projectCreateWithTemplate(String name, String templateId, String operatorId);
  51. /**
  52. * 查询项目
  53. *
  54. * @param projectIds 项目ID集合,逗号分隔
  55. * @param name 项目名字(模糊匹配)
  56. * @param sourceId 原始项目ID
  57. */
  58. List<Map> projectDetail(String projectIds, String name, String sourceId);
  59. /**
  60. * 更新项目 [增量]
  61. *
  62. * @param data String name, description, logo, visibility, startDate, endDate [visibility 项目可见性,project | organization]
  63. */
  64. Map projectUpdate(String projectId, Map<String, String> data, String operatorId);
  65. /**
  66. * 更新项目的项目分组 [ ppExt: 若修改分组相同, 不返回204, 会报错400, 已兼容 ]
  67. *
  68. * @apiNote https://open.teambition.com/docs/apis/6321c6d0912d20d3b5a49a5c
  69. */
  70. Map updateProjectTag(String projectId, List<String> projectTagIds, String operatorId);
  71. /**
  72. * 创建项目成员 [新版本] ppExt: 成员ID不能为空\不能重复, 重复创建会增量更新但不会删除成员
  73. *
  74. * @apiNote https://open.teambition.com/docs/apis/6363bcfa912d20d3b56faf07
  75. */
  76. List<Map> createProjectMember(String projectId, List<String> userIds, String operatorId);
  77. /**
  78. * 获取项目角色列表
  79. *
  80. * @return { result: { level } } 项目角色等级: 0=项目成员, 1=项目管理员, 2=项目拥有者, -3:任务访客
  81. * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a49b8f
  82. */
  83. List<Map> queryProjectRoles(String projectId);
  84. /**
  85. * 修改项目成员的角色 ppExt: 新增场景下 userId 可以为钉钉用户ID, 但修改场景下, 需要传递TB用户ID
  86. *
  87. * @param roleIds 角色ID列表 [通过 获取项目角色列表 获取]
  88. * @return { result: { role } } 项目角色等级: 0=项目成员, 1=项目管理员, 2=项目拥有者, -3:任务访客
  89. * @apiNote https://open.teambition.com/docs/apis/6321c6d0912d20d3b5a49942
  90. */
  91. List<Map> updateProjectMember(List<String> userIds, List<String> roleIds, String projectId);
  92. /**
  93. * 获取项目成员列表
  94. *
  95. * @apiNote https://open.teambition.com/docs/apis/6321c6d0912d20d3b5a49906
  96. */
  97. List<Map> queryProjectMember(String projectId, Map body);
  98. /**
  99. * 查询任务详情
  100. *
  101. * @param taskId 任务ID集合,使用逗号分隔,和parentTaskId冲突(选其一)
  102. * @param shortIds 任务短ID集合,使用逗号分隔
  103. * @param parentTaskId 父任务ID,和taskIds冲突(选其一)
  104. * @return { priority } 默认排序:“较低”:-10,“普通”:0,“紧急”:1,“非常紧急”:2; 后台调整:调整后按照显示顺序排序,若是新增就会3,4往下。按照 -10,0,1,2,3,4
  105. * @apiNote https://open.teambition.com/docs/apis/6321c6d2912d20d3b5a4a7b8
  106. */
  107. List<Map> queryTaskDetail(String taskId, String shortIds, String parentTaskId);
  108. /**
  109. * 搜索任务列表
  110. *
  111. * @apiNote https://open.teambition.com/docs/apis/6363bcfb912d20d3b56fb13f
  112. */
  113. List<Map> queryTaskGroupList(String projectId, Map param);
  114. /**
  115. * 查询项目任务
  116. *
  117. * @param param:q ppExt TQL 格式 "cf:项目字段ID" + ORDER BY + AND + OR [不支持小写]
  118. * @apiNote API: https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a49ec1
  119. * @apiNote TQL: https://open.teambition.com/docs/documents/639982966b99d5002b510f0b
  120. */
  121. List<Map> queryProjectTaskList(String projectId, Map param, QueryAll lambda);
  122. /**
  123. * 更新任务截止时间
  124. *
  125. * @implNote 204 若是传入dueDate与相同, 则会直接返回204报错, 若原来是年月日, 修改为同一天添加时分秒, 也属于不同时间
  126. */
  127. Map updateTaskDueDate(String taskId, String dueDate, String operatorId);
  128. /**
  129. * 更新任务执行者 [ppExt: 1. 人员未匹配, 不执行修改; 2. 非项目成员页面上不能添加, 但接口可写入]
  130. *
  131. * @apiNote https://open.teambition.com/docs/apis/6321c6d2912d20d3b5a4a63d
  132. */
  133. Map updateTaskExecutor(String taskId, String operatorId, String executorId, boolean disableActivity, boolean disableNotification);
  134. /**
  135. * 更新任务参与者 [ppExt: addInvolvers 参数忽略, involveMembers 已兼容新增与更新, 同时传递会有异常]
  136. *
  137. * @apiNote https://open.teambition.com/docs/apis/6321c6d2912d20d3b5a4a66a
  138. */
  139. Map updateTaskInvolveMembers(String taskId, String operatorId, List<String> involveMembers, List<String> delInvolvers, boolean disableActivity, boolean disableNotification);
  140. /**
  141. * 更新任务自定义字段值
  142. * - ppExt:
  143. * 1. 自定义字段传入name会自动匹配, 且通过接口更新单行文本也可放入链接
  144. * 2. 未匹配到返回400; 若是下拉框不在下拉选项也可赋值, 修改后选项消失. 注意name是必填
  145. *
  146. * @apiNote https://open.teambition.com/docs/apis/6321c6d2912d20d3b5a4a579
  147. */
  148. Map updateTaskCustomField(String taskId, String operatorId, Map body);
  149. /**
  150. * 更新任务自定义字段值
  151. * - ppExt:
  152. * 1. 自定义字段传入name会自动匹配, 且通过接口更新单行文本也可放入链接
  153. * 2. 未匹配到返回400; 若是下拉框不在下拉选项也可赋值, 修改后选项消失. 注意name是必填
  154. *
  155. * @apiNote https://open.teambition.com/docs/apis/6321c6d2912d20d3b5a4a579
  156. */
  157. Map updateTaskFlowStatus(String taskId, String operatorId, String taskflowstatusId, String tfsUpdateNote);
  158. /**
  159. * 获取自定义字段 ppExt: 目前原厂还未开放企业级字段, 若同一个项目存在不同项目类型, 建议使用企业字段, 保证ID的唯一性
  160. *
  161. * @apiNote https://open.teambition.com/docs/apis/6321c6d0912d20d3b5a497f6
  162. */
  163. List<Map> queryProjectCustomField(String projectId, Map body);
  164. /**
  165. * 搜索项目工作流状态 [ppExt: 注意不同任务类型名称唯一性, 如通用已完成不要使用]
  166. *
  167. * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a4a142
  168. */
  169. List<Map> queryProjectCustomFlowStatus(String projectId, Map body);
  170. /**
  171. * 搜索项目工作流 [ppExt: 即任务类型]
  172. *
  173. * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a49fc3
  174. */
  175. List<Map> queryProjectCustomFlow(String projectId, Map body);
  176. /**
  177. * 获取依赖项
  178. *
  179. * @apiNote https://open.teambition.com/docs/apis/63613a18912d20d3b5296e6d
  180. */
  181. List<Map> queryTaskDependency(String taskId, Map body);
  182. /**
  183. * 删除任务依赖
  184. *
  185. * @apiNote https://open.teambition.com/docs/apis/65e5c202912d20d3b50a63ad
  186. */
  187. Map removeTaskDependency(String dependencyId, String operatorId);
  188. /**
  189. * 获取项目下甘特图基线
  190. *
  191. * @apiNote https://open.teambition.com/docs/apis/6424f885912d20d3b50b759b
  192. */
  193. List<Map> queryGanttBaselineList(String projectId, Map body);
  194. /**
  195. * 获取甘特图基线下的任务 ppExt: 创建基线时候会记录当时「项目下有开始时间或截止时间的任务」,若没有这样的任务,基线内不会保存 [基线下任务Id, 是相同的, 仅保留了任务标题和时间]
  196. *
  197. * @apiNote https://open.teambition.com/docs/apis/6424f857912d20d3b50b048a
  198. */
  199. List<Map> queryGanttBaselineTask(String baselineId, Map param, QueryAll lambda);
  200. /**
  201. * 查询项目分组 [ppExt: TB分组有继承关系,传递当前最后一层即可]
  202. *
  203. * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a4a2c7
  204. */
  205. List<Map> queryTagList(Map param);
  206. /**
  207. * 修改项目分组
  208. *
  209. * @apiNote https://open.teambition.com/docs/apis/6363bcfb912d20d3b56fb36f
  210. */
  211. Map updateTag(String projectTagId, Map param);
  212. /**
  213. * 查询项目集
  214. *
  215. * @apiNote https://open.teambition.com/docs/apis/6501ad17912d20d3b5086630
  216. */
  217. List<Map> queryProgramList(String programIds);
  218. /**
  219. * 查询项目集 [ppExt: post请求, 获取全量项目集后, 通过name匹配. get请求内id必填, 名称查询无实际用途] - 分页返回上限数量为50
  220. *
  221. * @apiNote https://open.teambition.com/docs/apis/64e810fe912d20d3b58f9ff9
  222. */
  223. List<Map> queryProgramList_all();
  224. /**
  225. * 批量添加项目到项目集 [ppExt: 添加项目集 operatorId 需要有项目集合管理权限, 可使用项目集合返回创建人更新 ]
  226. *
  227. * @apiNote https://open.teambition.com/docs/apis/64e810fe912d20d3b58f9ff9
  228. */
  229. List<Map> upsertProgramProject(String programId, List<String> projectIds, String operatorId);
  230. /**
  231. * 查询项目概览自定义字段列表
  232. *
  233. * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a49d9d
  234. */
  235. List<Map> queryProjectStatusField(String projectId);
  236. /**
  237. * 更新项目概览自定义字段值 [参考任务自定义字段更新]
  238. *
  239. * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a49d9d
  240. */
  241. Map updateProjectStatusField(String projectId, String operatorId, Map body);
  242. /**
  243. * 查询全部数据 [函数回调]
  244. * - ppExt
  245. * 1. 若只需查询单页数据, lambda 传入 null 即可
  246. * 2. 在回调内独立处理每批数据场景, 若是需要等待全部数据查询完再处理场景, 可以定义集合接收
  247. * 2. 若是在回调内已拿到了符合预期的数据, 可返回 null, 触发递归出口 [布尔值 isAll 状态]
  248. */
  249. @FunctionalInterface
  250. interface QueryAll {
  251. boolean dataList(List<Map> list);
  252. }
  253. }