McTbEventImpl.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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.Arrays;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.Optional;
  16. @Primary
  17. @Service
  18. @Slf4j
  19. public class McTbEventImpl implements TBEvent {
  20. @Autowired
  21. private TBClient tbClient;
  22. // @Async
  23. @Override
  24. public void callBackTask(JSONObject eventJson) {
  25. String event = eventJson.getString("event");
  26. if(event.equals("v3.task.node.status.update")){
  27. JSONObject data = eventJson.getJSONObject("data");
  28. String taskId = data.getString("taskId");
  29. String status = data.getString("status");
  30. String nodeId = data.getString("nodeId");
  31. String creatorId = data.getString("creatorId");
  32. Map task = tbClient.queryTaskDetail(taskId,null,null).get(0);
  33. if(!"6970a3ff4f887b90bfdbe7e3".equals(String.valueOf(task.get("projectId")))){
  34. return;
  35. }
  36. // if(!Arrays.asList("622ee3450cf3bb5e1a486f1f","61a9e8a36355609fb6383d40").contains(creatorId)){
  37. // return;
  38. // }
  39. if(status.equals("finish")){
  40. List<Map> list=tbClient.queryNodeList(taskId);
  41. Map node = _getNodeDetail(list,nodeId);
  42. if(String.valueOf(node.get("name")).contains("接单")){
  43. List<String> assigneeIds = UtilMap.getList(node,"assigneeIds");
  44. String startDate = UtilMap.getString(node,"startDate");
  45. String dueDate = UtilMap.getString(node,"dueDate");
  46. Map nextMap=_getNextNode(list,nodeId);
  47. if(nextMap!=null){
  48. String nextId = UtilMap.getString(nextMap,"id");
  49. tbClient.updateNodeById(taskId,nextId,assigneeIds,startDate,dueDate,creatorId);
  50. }
  51. }
  52. }
  53. }
  54. }
  55. @Override
  56. public void callBackProject(JSONObject eventJson) {
  57. }
  58. @Async
  59. @Override
  60. public void callBackWorktime(JSONObject eventJson) {
  61. }
  62. private Map _getNodeDetail(List<Map> list, String nodeId) {
  63. Optional optional = list.stream().filter(item -> nodeId.equals(item.get("id"))).findAny();
  64. McException.assertAccessException(!optional.isPresent(), nodeId + ": 节点不存在");
  65. return (Map) optional.get();
  66. }
  67. private Map _getNextNode(List<Map> list, String nodeId) {
  68. for(Map map : list) {
  69. List<String> prevIds = UtilMap.getList(map,"prevIds");
  70. if(prevIds.contains(nodeId)){
  71. return map;
  72. }
  73. }
  74. return null;
  75. }
  76. }