TBxYDController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. package com.malk.aiwei.controller;
  2. /**
  3. * 错误抛出与拦截详见 CatchException
  4. */
  5. import com.alibaba.fastjson.JSON;
  6. import com.malk.aiwei.service.AWClint;
  7. import com.malk.delegate.McDelegate;
  8. import com.malk.server.aliwork.YDConf;
  9. import com.malk.server.aliwork.YDParam;
  10. import com.malk.server.common.McException;
  11. import com.malk.server.common.McR;
  12. import com.malk.server.dingtalk.DDConf;
  13. import com.malk.server.teambition.TBConf;
  14. import com.malk.service.aliwork.YDClient;
  15. import com.malk.service.aliwork.YDService;
  16. import com.malk.service.teambition.TBClient;
  17. import com.malk.utils.UtilMap;
  18. import com.malk.utils.UtilServlet;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.web.bind.annotation.GetMapping;
  22. import org.springframework.web.bind.annotation.PostMapping;
  23. import org.springframework.web.bind.annotation.RequestMapping;
  24. import org.springframework.web.bind.annotation.RestController;
  25. import javax.servlet.http.HttpServletRequest;
  26. import java.util.ArrayList;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.Map;
  30. @Slf4j
  31. @RestController
  32. @RequestMapping
  33. public class TBxYDController {
  34. @Autowired
  35. private AWClint awClint;
  36. /**
  37. * 交付物审批回调
  38. */
  39. @PostMapping("approved")
  40. McR approve(HttpServletRequest request) {
  41. Map<String, ?> data = UtilServlet.getParamMap(request);
  42. log.info("交付物审批回调, {}", data);
  43. McException.assertParamException_Null(data, "projectId, taskId, creatorId, approve");
  44. awClint.approved(data);
  45. return McR.success();
  46. }
  47. /**
  48. * 检查项check回调
  49. */
  50. @PostMapping("checked")
  51. McR check(HttpServletRequest request) {
  52. Map<String, ?> data = UtilServlet.getParamMap(request);
  53. log.info("检查项check回调, {}", data);
  54. McException.assertParamException_Null(data, "taskId, formInstId");
  55. awClint.checked(data);
  56. return McR.success();
  57. }
  58. /**
  59. * 选项卡渲染获取详情
  60. */
  61. @PostMapping("load-check")
  62. public Map details(String taskId) {
  63. log.info("选项卡渲染, {}", taskId);
  64. String result = UtilMap.getString(awClint.doCheck(taskId, true), "result");
  65. String strJson = "{\"version\":\"1.0.0\",\"template\":{\"status\":\"#variables.status#\",\"toolbar\":[{\"label\":\"成功\",\"type\":\"text\",\"visible\":\"#variables.isDetailVisible#\",\"payload\":\"#variables.detailURL#\"}]},\"data\":[{\"itemId\":\"61b80257e1fe2200410c8ecd\",\"avatarUrl\":\"\",\"title\":\"xxxxx\",\"description\":\"\"}],\"variables\":{\"userId\":\"5bdc085d60bcef000146634f\",\"taskId\":\"\",\"status\":\"\",\"primaryLabel\":\"详情\",\"itemURL\":\"\",\"detailURL\":\"\",\"createURL\":\"\",\"createPlanTimeLabel\":\"\",\"createPlanTimeURL\":\"\",\"editURL\":\"\",\"removeURL\":\"\",\"isItemVisible\":true,\"isDetailVisible\":true,\"isCreatePlanTimeVisible\":true,\"isPrimaryVisible\":true,\"isEditVisible\":true,\"isRemoveVisible\":true}}";
  66. strJson = strJson.replace("xxxxx", result);
  67. return (Map) JSON.parse(strJson);
  68. }
  69. /**
  70. * 自定义审批字段模板渲染
  71. */
  72. @GetMapping("field-template")
  73. public List<Map> template(String nonce, long timestamp, String appId, String sign, String organizationId, String projectId) {
  74. log.info("自定义审批字段模板渲染, {}, {}, {}, {}, {}, {}", nonce, new Date(timestamp), appId, sign, organizationId, projectId);
  75. List<Map> templateIds = new ArrayList<>();
  76. templateIds.add(UtilMap.map("id, title, payload", "FORM-FBC1A390B4C348089020C763938A6F54RUNY", "交付物审批", UtilMap.map("templateId", "FORM-FBC1A390B4C348089020C763938A6F54RUNY")));
  77. templateIds.add(UtilMap.map("id, title, payload", "FORM-F6B54810EBA84F7AA9AC82EE1D8AE4D3GPKR", "预检项确认", UtilMap.map("templateId", "FORM-F6B54810EBA84F7AA9AC82EE1D8AE4D3GPKR")));
  78. return templateIds;
  79. }
  80. /**
  81. * 检查项发起
  82. */
  83. @PostMapping("do-check")
  84. McR doCheck(String taskId) {
  85. log.info("检查项发起, {}", taskId);
  86. return McR.success(awClint.doCheck(taskId, false));
  87. }
  88. /**
  89. * 交付物审批
  90. */
  91. @PostMapping("do-approve")
  92. McR doApprove(HttpServletRequest request) {
  93. Map<String, ?> data = UtilServlet.getParamMap(request);
  94. log.info("交付物审批, {}", data);
  95. Map formData = awClint.doApprove(data, UtilMap.getBoolean(data, "isChange"));
  96. return McR.success(formData);
  97. }
  98. /**
  99. * 交付物变更发起
  100. */
  101. @PostMapping("change-approve")
  102. McR changeApprove(HttpServletRequest request) {
  103. Map<String, ?> data = UtilServlet.getParamMap(request);
  104. log.info("交付物变更发起, {}", data);
  105. // prd 618 通过任务扩展按钮变更情况, 提交后再触发审批回写
  106. if (UtilMap.getBoolean(data, "isChange")) {
  107. awClint.changeApprove(UtilMap.getString(data, "taskId"), UtilMap.getString(data, "formInstId"), UtilMap.getString(data, "title"));
  108. }
  109. return McR.success();
  110. }
  111. /**
  112. * 通过模板创建项目
  113. */
  114. @PostMapping("project/create")
  115. McR createProject(HttpServletRequest request) {
  116. Map<String, ?> data = UtilServlet.getParamMap(request);
  117. log.info("通过模板创建项目, {}", data);
  118. McException.assertParamException_Null(data, "projectCode");
  119. String templateId = UtilMap.getString(data, "templateId");
  120. if (data.containsKey("manual")) {
  121. awClint.createProject(UtilMap.getString(data, "projectCode"), templateId);
  122. } else {
  123. // ppExt: 宜搭数据创建后, 以及客户系统同步到主数据有时间差, 做延迟代理 10s
  124. mcDelegate.setTimeout(() -> {
  125. awClint.createProject(UtilMap.getString(data, "projectCode"), templateId);
  126. }, 10000);
  127. }
  128. return McR.success();
  129. }
  130. /**
  131. * 分配项目角色
  132. */
  133. @PostMapping("project/role")
  134. McR updateRoleProject(HttpServletRequest request) {
  135. Map<String, ?> data = UtilServlet.getParamMap(request);
  136. log.info("分配项目角色, {}", data);
  137. McException.assertParamException_Null(data, "projectId", "trNode");
  138. List<String> trNodes = (List<String>) JSON.parse(UtilMap.getString(data, "trNode"));
  139. awClint.updateProjectRole(UtilMap.getString(data, "projectId"), trNodes, UtilMap.getString(data, "production"), UtilMap.getString(data, "version"));
  140. return McR.success();
  141. }
  142. /**
  143. * 删除前后置依赖
  144. */
  145. @PostMapping("project/remove/dependencies")
  146. McR removeDependencies(HttpServletRequest request) {
  147. Map<String, ?> data = UtilServlet.getParamMap(request);
  148. log.info("删除前后置依赖, {}", data);
  149. McException.assertParamException_Null(data, "projectId", "trNode");
  150. awClint.removeDependencies(UtilMap.getString(data, "projectId"), (List<String>) JSON.parse(UtilMap.getString(data, "trNode")));
  151. return McR.success();
  152. }
  153. /**
  154. * 手动触发, 同步项目主数据
  155. */
  156. @PostMapping("project/sync")
  157. McR syncProject() {
  158. awClint.syncProject(null);
  159. return McR.success();
  160. }
  161. /**
  162. * 手动触发, 同步预检项
  163. */
  164. @PostMapping("check/sync")
  165. McR syncCheck(int type) {
  166. awClint.syncCheckList(type);
  167. return McR.success();
  168. }
  169. /**
  170. * 项目主数据增量更新
  171. */
  172. @PostMapping("project/update")
  173. McR updateProject(HttpServletRequest request) {
  174. Map<String, ?> data = UtilServlet.getParamMap(request);
  175. log.info("项目主数据增量更新, {}", data);
  176. // ppExt: 宜搭数据创建后, 以及客户系统同步到主数据有时间差, 做延迟代理 10s
  177. mcDelegate.setTimeout(() -> {
  178. // 多项目变更(项目成员变更) ppExt: 自动化通过公式获取子表字段,接口取不到。目前先通过传递实例ID,进行查询
  179. if (data.containsKey("formInstId")) {
  180. Map formData = ydClient.queryData(YDParam.builder()
  181. .formInstanceId(UtilMap.getString(data, "formInstId"))
  182. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  183. for (Map row : (List<Map>) UtilMap.getList(formData, "tableField_lqovv8at")) {
  184. awClint.updateProject(UtilMap.getString(row, "textField_lqovv8ax"));
  185. }
  186. }
  187. // 单项目变更(项目号变更)
  188. if (data.containsKey("projectCode")) {
  189. awClint.updateProject(UtilMap.getString(data, "projectCode"));
  190. }
  191. }, 10000);
  192. return McR.success();
  193. }
  194. /**
  195. * 手动触发, 同步CRM基线数据
  196. */
  197. @PostMapping("crm/sync")
  198. McR syncCRM(HttpServletRequest request) {
  199. Map<String, ?> data = UtilServlet.getParamMap(request);
  200. log.info("同步CRM基线数据, {}", data);
  201. if (data.containsKey("projectId")) {
  202. awClint.syncBaseLineForCRM(UtilMap.getString(data, "projectId"));
  203. } else {
  204. awClint.syncBaseLineForCRM();
  205. }
  206. return McR.success();
  207. }
  208. /**
  209. * 手动触发, 批量修改项目角色
  210. */
  211. @PostMapping("batch/update")
  212. McR batchUpdate(HttpServletRequest request) {
  213. Map<String, ?> data = UtilServlet.getParamMap(request);
  214. log.info("批量修改项目角色, {}", data);
  215. McException.assertParamException_Null(data, "fieldName, preName, modifyName");
  216. String fieldName = UtilMap.getString(data, "fieldName");
  217. String preName = UtilMap.getString(data, "preName");
  218. String modifyName = UtilMap.getString(data, "modifyName");
  219. awClint.batchUpdate(fieldName, preName, modifyName, UtilMap.getString(data, "projectId"));
  220. return McR.success();
  221. }
  222. /// todo workspace/sync //手动触发, 知识库权限矩阵同步
  223. /**
  224. * 提供verifier数据读取服务
  225. */
  226. @GetMapping("verifier/sync")
  227. McR syncVerifier(String projectCode) {
  228. List<Map> dataList = awClint.syncVerifier(projectCode);
  229. log.info("syncVerifier, {}, {}", projectCode, dataList.size());
  230. return McR.success(dataList);
  231. }
  232. /**
  233. * 知识库版本管理
  234. */
  235. @PostMapping("approve/version")
  236. McR approveVersion(HttpServletRequest request) {
  237. Map<String, ?> data = UtilServlet.getParamMap(request);
  238. log.info("知识库版本管理, {}", data);
  239. McException.assertParamException_Null(data, "taskId", "pCode");
  240. awClint.approveVersion(UtilMap.getString(data, "taskId"), UtilMap.getString(data, "pCode"));
  241. return McR.success();
  242. }
  243. //////// test ////////
  244. @Autowired
  245. private TBClient tbClient;
  246. @Autowired
  247. private TBConf tbConf;
  248. @Autowired
  249. private DDConf ddConf;
  250. @GetMapping("t/task")
  251. McR task(String taskId) {
  252. log.info("taskId, {}", taskId);
  253. List<Map> tList = tbClient.queryTaskDetail(taskId, "", "");
  254. return McR.success(tList);
  255. }
  256. @GetMapping("t/template")
  257. McR template(String name) {
  258. List<Map> tList = tbClient.templateSearch(null, name);
  259. return McR.success(tList);
  260. }
  261. @Autowired
  262. private YDClient ydClient;
  263. @Autowired
  264. private YDService ydService;
  265. @Autowired
  266. private McDelegate mcDelegate;
  267. @PostMapping("test")
  268. McR test(HttpServletRequest request) {
  269. Map<String, ?> data = UtilServlet.getParamMap(request);
  270. log.info("test, {}", data);
  271. awClint.test();
  272. // ydClient.operateData(YDParam.builder()
  273. // .formInstanceId("9d204da7-b01e-4bd9-a673-acb9b64b0e61")
  274. // .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_lu9yf7vg", "否")))
  275. // .useLatestVersion(true)
  276. // .build(), YDConf.FORM_OPERATION.update);
  277. return McR.success();
  278. }
  279. @GetMapping("tmp")
  280. McR tmp(String programIds) {
  281. // awClint.tmp();
  282. return McR.success();
  283. }
  284. }