TBxYDController.java 13 KB

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