McTbEventImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package com.malk.tuosi.event;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.malk.delegate.TBEvent;
  4. import com.malk.server.common.McException;
  5. import com.malk.service.teambition.TBClient;
  6. import com.malk.utils.UtilMap;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.context.annotation.Primary;
  10. import org.springframework.scheduling.annotation.Async;
  11. import org.springframework.stereotype.Service;
  12. import java.util.*;
  13. @Primary
  14. @Service
  15. @Slf4j
  16. public class McTbEventImpl implements TBEvent {
  17. @Autowired
  18. private TBClient tbClient;
  19. @Async
  20. @Override
  21. public void callBackTask(JSONObject eventJson) {
  22. String event = eventJson.getString("event");
  23. if(event.equals("v3.task.node.status.update")){
  24. JSONObject data = eventJson.getJSONObject("data");
  25. String taskId = data.getString("taskId");
  26. String status = data.getString("status");
  27. String nodeId = data.getString("nodeId");
  28. // String creatorId = data.getString("creatorId");
  29. String creatorId = "61a8c27a143030d9110a66d4";
  30. // Map task = tbClient.queryTaskDetail(taskId,null,null).get(0);
  31. // if(!"6970a3ff4f887b90bfdbe7e3".equals(String.valueOf(task.get("projectId")))){
  32. // return;
  33. // }
  34. // if(!Arrays.asList("622ee3450cf3bb5e1a486f1f","61a9e8a36355609fb6383d40").contains(creatorId)){
  35. // return;
  36. // }
  37. log.info("XXXXXX 进入节点更新流程,节点ID:{},状态:{},任务ID:{}",nodeId,status,taskId);
  38. if(status.equals("finish")){
  39. try {
  40. Thread.sleep(3000);
  41. }catch (InterruptedException e){
  42. e.printStackTrace();
  43. }
  44. List<Map> list=tbClient.queryNodeList(taskId);
  45. Map node = _getNodeDetail(list,nodeId);
  46. if(String.valueOf(node.get("name")).contains("接单")){
  47. List<String> assigneeIds = UtilMap.getList(node,"assigneeIds");
  48. String startDate = UtilMap.getString(node,"startDate");
  49. String dueDate = UtilMap.getString(node,"dueDate");
  50. Map nextMap=_getNextNode(list,nodeId);
  51. log.info("XXXXXX 接单完成,更新下一节点数据:{},{}-{}",assigneeIds,startDate,dueDate);
  52. if(nextMap!=null){
  53. String nextId = UtilMap.getString(nextMap,"id");
  54. Map result=tbClient.updateNodeById(taskId,nextId,assigneeIds,startDate,dueDate,creatorId);
  55. log.info("XXXXXX 更新结果{}:{}",nextId,result);
  56. }
  57. }
  58. }else if(status.equals("begin")){
  59. if(!"finish".equals(data.getJSONObject("old").getString("status"))){
  60. return;
  61. }
  62. log.info("XXXXXX 接单开始,清空后续节点数据");
  63. try {
  64. Thread.sleep(3000);
  65. }catch (InterruptedException e){
  66. e.printStackTrace();
  67. }
  68. List<Map> list=tbClient.queryNodeList(taskId);
  69. // Map node = _getNodeDetail(list,nodeId);
  70. // if(String.valueOf(node.get("name")).contains("接单")){
  71. nextNode(taskId,list,nodeId,creatorId);
  72. // }
  73. }
  74. }
  75. }
  76. private void nextNode(String taskId,List<Map> list,String nodeId,String creatorId){
  77. Map nextMap=_getNextNode(list,nodeId);
  78. if(nextMap!=null){
  79. String nextId = UtilMap.getString(nextMap,"id");
  80. Map result=tbClient.updateNodeById(taskId,nextId,new ArrayList<>(),null,null,creatorId);
  81. log.info("XXXXXX 清空结果{}:{}",nextId,result);
  82. nextNode(taskId,list,nextId,creatorId);
  83. }
  84. }
  85. @Override
  86. public void callBackProject(JSONObject eventJson) {
  87. }
  88. @Async
  89. @Override
  90. public void callBackWorktime(JSONObject eventJson) {
  91. }
  92. private Map _getNodeDetail(List<Map> list, String nodeId) {
  93. Optional optional = list.stream().filter(item -> nodeId.equals(item.get("id"))).findAny();
  94. McException.assertAccessException(!optional.isPresent(), nodeId + ": 节点不存在");
  95. return (Map) optional.get();
  96. }
  97. private Map _getNextNode(List<Map> list, String nodeId) {
  98. for(Map map : list) {
  99. List<String> prevIds = UtilMap.getList(map,"prevIds");
  100. if(prevIds.contains(nodeId)){
  101. return map;
  102. }
  103. }
  104. return null;
  105. }
  106. }