TBxYDController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  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.List;
  27. import java.util.Map;
  28. @Slf4j
  29. @RestController
  30. @RequestMapping
  31. public class TBxYDController {
  32. @Autowired
  33. private AWClint awClint;
  34. /**
  35. * 交付物审批回调
  36. */
  37. @PostMapping("approved")
  38. McR approve(HttpServletRequest request) {
  39. Map<String, ?> data = UtilServlet.getParamMap(request);
  40. log.info("交付物审批回调, {}", data);
  41. McException.assertParamException_Null(data, "projectId, taskId, creatorId, approve");
  42. awClint.approved(data);
  43. return McR.success();
  44. }
  45. /**
  46. * 检查项check回调
  47. */
  48. @PostMapping("checked")
  49. McR check(HttpServletRequest request) {
  50. Map<String, ?> data = UtilServlet.getParamMap(request);
  51. log.info("检查项check回调, {}", data);
  52. McException.assertParamException_Null(data, "taskId, formInstId");
  53. awClint.checked(data);
  54. return McR.success();
  55. }
  56. /**
  57. * 选项卡渲染获取详情
  58. */
  59. @PostMapping("load-check")
  60. public Map details(String taskId) {
  61. log.info("选项卡渲染, {}", taskId);
  62. String result = UtilMap.getString(awClint.doCheck(taskId, true), "result");
  63. 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}}";
  64. strJson = strJson.replace("xxxxx", result);
  65. return (Map) JSON.parse(strJson);
  66. }
  67. /**
  68. * 检查项发起
  69. */
  70. @PostMapping("do-check")
  71. McR doCheck(String taskId) {
  72. log.info("检查项发起, {}", taskId);
  73. return McR.success(awClint.doCheck(taskId, false));
  74. }
  75. /**
  76. * 交付物审批
  77. */
  78. @PostMapping("do-approve")
  79. McR doApprove(HttpServletRequest request) {
  80. Map<String, ?> data = UtilServlet.getParamMap(request);
  81. log.info("交付物审批, {}", data);
  82. Map formData = awClint.doApprove(data, UtilMap.getBoolean(data, "isChange"));
  83. return McR.success(formData);
  84. }
  85. /**
  86. * 交付物变更发起
  87. */
  88. @PostMapping("change-approve")
  89. McR changeApprove(HttpServletRequest request) {
  90. Map<String, ?> data = UtilServlet.getParamMap(request);
  91. log.info("交付物变更发起, {}", data);
  92. // prd 618 通过任务扩展按钮变更情况, 提交后再触发审批回写
  93. if (UtilMap.getBoolean(data, "isChange")) {
  94. awClint.changeApprove(UtilMap.getString(data, "taskId"), UtilMap.getString(data, "formInstId"));
  95. }
  96. return McR.success();
  97. }
  98. /**
  99. * 通过模板创建项目
  100. */
  101. @PostMapping("project/create")
  102. McR createProject(HttpServletRequest request) {
  103. Map<String, ?> data = UtilServlet.getParamMap(request);
  104. log.info("通过模板创建项目, {}", data);
  105. McException.assertParamException_Null(data, "projectCode");
  106. String templateId = UtilMap.getString(data, "templateId");
  107. if (data.containsKey("manual")) {
  108. awClint.createProject(UtilMap.getString(data, "projectCode"), templateId);
  109. } else {
  110. // ppExt: 宜搭数据创建后, 以及客户系统同步到主数据有时间差, 做延迟代理 10s
  111. mcDelegate.setTimeout(() -> {
  112. awClint.createProject(UtilMap.getString(data, "projectCode"), templateId);
  113. }, 10000);
  114. }
  115. return McR.success();
  116. }
  117. /**
  118. * 分配项目角色
  119. */
  120. @PostMapping("project/role")
  121. McR updateRoleProject(HttpServletRequest request) {
  122. Map<String, ?> data = UtilServlet.getParamMap(request);
  123. log.info("分配项目角色, {}", data);
  124. McException.assertParamException_Null(data, "projectId", "trNode");
  125. awClint.updateProjectRole(UtilMap.getString(data, "projectId"), (List<String>) JSON.parse(UtilMap.getString(data, "trNode")));
  126. return McR.success();
  127. }
  128. /**
  129. * 删除前后置依赖
  130. */
  131. @PostMapping("project/remove/dependencies")
  132. McR removeDependencies(HttpServletRequest request) {
  133. Map<String, ?> data = UtilServlet.getParamMap(request);
  134. log.info("删除前后置依赖, {}", data);
  135. McException.assertParamException_Null(data, "projectId", "trNode");
  136. awClint.removeDependencies(UtilMap.getString(data, "projectId"), (List<String>) JSON.parse(UtilMap.getString(data, "trNode")));
  137. return McR.success();
  138. }
  139. /**
  140. * 手动触发, 同步项目主数据
  141. */
  142. @PostMapping("project/sync")
  143. McR syncProject() {
  144. awClint.syncProject(null);
  145. return McR.success();
  146. }
  147. /**
  148. * 手动触发, 同步预检项
  149. */
  150. @PostMapping("check/sync")
  151. McR syncCheck(int type) {
  152. awClint.syncCheckList(type);
  153. return McR.success();
  154. }
  155. /**
  156. * 项目主数据增量更新
  157. */
  158. @PostMapping("project/update")
  159. McR updateProject(HttpServletRequest request) {
  160. Map<String, ?> data = UtilServlet.getParamMap(request);
  161. log.info("项目主数据增量更新, {}", data);
  162. // ppExt: 宜搭数据创建后, 以及客户系统同步到主数据有时间差, 做延迟代理 10s
  163. mcDelegate.setTimeout(() -> {
  164. // 多项目变更(项目成员变更) ppExt: 自动化通过公式获取子表字段,接口取不到。目前先通过传递实例ID,进行查询
  165. if (data.containsKey("formInstId")) {
  166. Map formData = ydClient.queryData(YDParam.builder()
  167. .formInstanceId(UtilMap.getString(data, "formInstId"))
  168. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  169. for (Map row : (List<Map>) UtilMap.getList(formData, "tableField_lqovv8at")) {
  170. awClint.updateProject(UtilMap.getString(row, "textField_lqovv8ax"));
  171. }
  172. }
  173. // 单项目变更(项目号变更)
  174. if (data.containsKey("projectCode")) {
  175. awClint.updateProject(UtilMap.getString(data, "projectCode"));
  176. }
  177. }, 10000);
  178. return McR.success();
  179. }
  180. /**
  181. * 手动触发, 同步CRM基线数据
  182. */
  183. @PostMapping("crm/sync")
  184. McR syncCRM(HttpServletRequest request) {
  185. Map<String, ?> data = UtilServlet.getParamMap(request);
  186. log.info("同步CRM基线数据, {}", data);
  187. if (data.containsKey("projectId")) {
  188. awClint.syncBaseLineForCRM(UtilMap.getString(data, "projectId"));
  189. } else {
  190. awClint.syncBaseLineForCRM();
  191. }
  192. return McR.success();
  193. }
  194. /**
  195. * 手动触发, 批量修改项目角色
  196. */
  197. @PostMapping("batch/update")
  198. McR batchUpdate(HttpServletRequest request) {
  199. Map<String, ?> data = UtilServlet.getParamMap(request);
  200. log.info("批量修改项目角色, {}", data);
  201. McException.assertParamException_Null(data, "fieldName, preName, modifyName");
  202. String fieldName = UtilMap.getString(data, "fieldName");
  203. String preName = UtilMap.getString(data, "preName");
  204. String modifyName = UtilMap.getString(data, "modifyName");
  205. awClint.batchUpdate(fieldName, preName, modifyName, UtilMap.getString(data, "projectId"));
  206. return McR.success();
  207. }
  208. /**
  209. * 提供verifier数据读取服务
  210. */
  211. @GetMapping("verifier/sync")
  212. McR syncVerifier(String projectCode) {
  213. List<Map> dataList = awClint.syncVerifier(projectCode);
  214. log.info("syncVerifier, {}, {}", projectCode, dataList.size());
  215. return McR.success(dataList);
  216. }
  217. /**
  218. * 知识库版本管理
  219. */
  220. @PostMapping("approve/version")
  221. McR approveVersion(HttpServletRequest request) {
  222. Map<String, ?> data = UtilServlet.getParamMap(request);
  223. log.info("知识库版本管理, {}", data);
  224. McException.assertParamException_Null(data, "taskId", "pCode");
  225. awClint.approveVersion(UtilMap.getString(data, "taskId"), UtilMap.getString(data, "pCode"));
  226. return McR.success();
  227. }
  228. //////// test ////////
  229. @Autowired
  230. private TBClient tbClient;
  231. @Autowired
  232. private TBConf tbConf;
  233. @Autowired
  234. private DDConf ddConf;
  235. @GetMapping("t/task")
  236. McR task(String taskId) {
  237. log.info("taskId, {}", taskId);
  238. List<Map> tList = tbClient.queryTaskDetail(taskId, "", "");
  239. return McR.success(tList);
  240. }
  241. @GetMapping("t/template")
  242. McR template(String name) {
  243. List<Map> tList = tbClient.templateSearch(null, name);
  244. return McR.success(tList);
  245. }
  246. @Autowired
  247. private YDClient ydClient;
  248. @Autowired
  249. private YDService ydService;
  250. @Autowired
  251. private McDelegate mcDelegate;
  252. @PostMapping("test")
  253. McR test(HttpServletRequest request) {
  254. Map<String, ?> data = UtilServlet.getParamMap(request);
  255. log.info("test, {}", data);
  256. awClint.test();
  257. // ydClient.operateData(YDParam.builder()
  258. // .formInstanceId("9d204da7-b01e-4bd9-a673-acb9b64b0e61")
  259. // .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_lu9yf7vg", "否")))
  260. // .useLatestVersion(true)
  261. // .build(), YDConf.FORM_OPERATION.update);
  262. return McR.success();
  263. }
  264. @GetMapping("tmp")
  265. McR tmp(String programIds) {
  266. // awClint.tmp();
  267. return McR.success();
  268. }
  269. }