lfx 1 年之前
父节点
当前提交
520e587bf7

+ 2 - 7
src/main/java/com/muzhi/tianhe/controller/TBCallBackController.java

@@ -42,14 +42,9 @@ public class TBCallBackController {
 
         if (eventName.contains("task")) {
             log.info("[TB]任务回调, {}, {}", eventName, eventJson);
-            if(eventName.equals("v3.task.taskflowstatus.update")){
+            if(eventName.equals("v3.task.taskflowstatus.update")||eventName.equals("v3.task.archive")){
                 String taskId=eventJson.getJSONObject("data").getString("taskId");
-                String projectId=eventJson.getJSONObject("data").getString("projectId");
-                if(projectId.equals("664c52c05a93ac02400705fd")||projectId.equals("65b9e2525a93ac024005cf10")){
-                    thTbService.syncTaskState(taskId);
-                }
-            }else if(eventName.equals("v3.task.archive")){
-                // 归档
+                thTbService.task(taskId);
             }
             return success;
         }

+ 1 - 1
src/main/java/com/muzhi/tianhe/service/ThTbService.java

@@ -2,6 +2,6 @@ package com.muzhi.tianhe.service;
 
 public interface ThTbService {
 
-    void syncTaskState(String taskId);
+    void task(String taskId);
 
 }

+ 55 - 3
src/main/java/com/muzhi/tianhe/service/impl/TbApiService.java

@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -42,8 +43,8 @@ public class TbApiService {
         return result.getJSONArray("result");
     }
 
-    public JSONArray getTasksType(String xmid){
-        JSONObject result=header(HttpRequest.get(PRIVATE_API_URL + "/v3/project/" + xmid + "/scenariofieldconfig/search"));
+    public JSONArray getTasksType(String projectId){
+        JSONObject result=header(HttpRequest.get(PRIVATE_API_URL + "/v3/project/" + projectId + "/scenariofieldconfig/search"));
         return result.getJSONArray("result");
     }
 
@@ -86,6 +87,11 @@ public class TbApiService {
         return result.getJSONArray("result");
     }
 
+    public JSONArray getProjectCustomfield(String projectId){
+        JSONObject result=header(HttpRequest.get(PRIVATE_API_URL + "/v3/project/"+ projectId +"/customfield/search?pageSize=1000"));
+        return result.getJSONArray("result");
+    }
+
     public JSONArray getProjectRoleMember(String projectId,String id){
         JSONObject result=header(HttpUtil.createGet(PRIVATE_API_URL + "/v3/project/"+ projectId +"/member").form("projectRoleId",id));
         return result.getJSONArray("result");
@@ -101,11 +107,16 @@ public class TbApiService {
         return result.getJSONArray("result");
     }
 
-    public JSONArray getProjectState(String projectId){
+    public JSONArray getProjectTaskflowsState(String projectId){
         JSONObject result=header(HttpUtil.createGet(PRIVATE_API_URL + "v3/project/{projectId}/taskflowstatus/search".replace("{projectId}",projectId)));
         return result.getJSONArray("result");
     }
 
+    public JSONArray getProjectState(String projectId){
+        JSONObject result=header(HttpUtil.createGet(PRIVATE_API_URL + "v3/project/{projectId}/status/list".replace("{projectId}",projectId)));
+        return result.getJSONArray("result");
+    }
+
     public JSONArray getProjecTagUser(String projectTagId){
         JSONObject result=header(HttpUtil.createGet(PRIVATE_API_URL + "/v3/project-tag/{projectTagId}/project/query".replace("{projectTagId}",projectTagId)));
         return result.getJSONArray("result");
@@ -155,6 +166,47 @@ public class TbApiService {
         return result.getJSONArray("result");
     }
 
+    public JSONArray getTaskLinks(String taskId){
+        JSONObject result=header(HttpUtil.createGet(PRIVATE_API_URL + "/v3/task/"+ taskId +"/objectlinks")
+                .header("x-operator-id",tbOperatorId));
+        return result.getJSONArray("result");
+    }
+
+    public Object updateTaskContent(String taskId,String content){
+        Map map=new HashMap();
+        map.put("content",content);
+        JSONObject result=header(HttpRequest.put(PRIVATE_API_URL + "/v3/task/{taskId}/content".replace("{taskId}",taskId))
+                .header("x-operator-id",tbOperatorId)
+                .body(JSONObject.toJSONString(map)));
+        return result;
+    }
+
+    public Object updateTaskExecutor(String taskId,String executor){
+        Map map=new HashMap();
+        map.put("executorId",executor);
+        JSONObject result=header(HttpRequest.put(PRIVATE_API_URL + "/v3/task/{taskId}/executor".replace("{taskId}",taskId))
+                .header("x-operator-id",tbOperatorId)
+                .body(JSONObject.toJSONString(map)));
+        return result;
+    }
+
+    public Object updateTaskCustomfield(String taskId,String customfieldId,String value){
+        Map map=new HashMap();
+        map.put("customfieldId",customfieldId);
+        map.put("value", Arrays.asList(new JSONObject().fluentPut("title",value)));
+        JSONObject result=header(HttpRequest.post(PRIVATE_API_URL + "/v3/task/{taskId}/customfield/update".replace("{taskId}",taskId))
+                .header("x-operator-id",tbOperatorId)
+                .body(JSONObject.toJSONString(map)));
+        return result;
+    }
+
+    public Object addTask(JSONObject param){
+        JSONObject result=header(HttpRequest.post(PRIVATE_API_URL + "/v3/task/create")
+                .header("x-operator-id",tbOperatorId)
+                .body(JSONObject.toJSONString(param)));
+        return result;
+    }
+
 
 
     private JSONObject header(HttpRequest request){

+ 2 - 2
src/main/java/com/muzhi/tianhe/service/impl/TbServiceImpl.java

@@ -550,9 +550,9 @@ public class TbServiceImpl extends ServiceImpl<TianheMapper, Tianhe> implements
      */
     public String getProjectState(String projectId) {
         try {
-            JSONArray array=tbApiService.getProjectCust(projectId);
+            JSONArray array=tbApiService.getProjectState(projectId);
             if(array!=null&&array.size()>0){
-                return array.getJSONObject(0).getString("name");
+                return array.getJSONObject(0).getString("content");
             }
         }catch (Exception e){
             e.printStackTrace();

+ 101 - 6
src/main/java/com/muzhi/tianhe/service/impl/ThTbServiceImpl.java

@@ -8,6 +8,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+
 @Slf4j
 @Service
 public class ThTbServiceImpl implements ThTbService {
@@ -17,16 +22,42 @@ public class ThTbServiceImpl implements ThTbService {
 
 
     @Override
-    public void syncTaskState(String taskId) {
+    public void task(String taskId) {
         JSONObject task=tbApiService.getTasksInfo(taskId).getJSONObject(0);
-        String tfsId=task.getString("tfsId");// 状态ID
         String projectId=task.getString("projectId");
-        JSONObject tfs=tbApiService.getProjectStateId(projectId,"","",tfsId).getJSONObject(0);
-        if(task.getJSONArray("ancestorIds").size()<3){
-            log.info("非指标任务 不处理");
+        // 先判断项目分组
+        JSONArray array=tbApiService.getProjectTag(projectId);
+        if(array==null||array.size()<1){
+            log.info("不属于战略部分组的项目,不处理");
+            return;
+        }
+        if(!Arrays.asList("65b77b8f7bbdd92f48e6920d","664d5b10e6451d2386a49b8b","664d5b15a1a96d9b5815d6fd").contains(array.getString(0))){
+            log.info("不属于战略部分组的项目,不处理");
             return;
         }
-        updateTaskState(task);
+//        String tfsId=task.getString("tfsId");// 状态ID
+//        JSONObject tfs=tbApiService.getProjectStateId(projectId,"","",tfsId).getJSONObject(0);
+        // 任务类型判断
+        String sfcId=task.getString("sfcId");
+        List<JSONObject> list=tbApiService.getTasksType(projectId).toJavaList(JSONObject.class);
+        Optional optional = list.stream().filter(item -> sfcId.equals(item.get("id"))).findAny();
+        String name=((JSONObject) optional.get()).getString("name");
+        if(name.contains("变更流程")){
+            log.info("变更流程");
+            taskChange(task,taskId);
+        }else if(name.contains("任务取消")){
+            log.info("任务取消");
+            taskCancel(task,taskId);
+        }else if(name.contains("新增流程")){
+            log.info("新增流程");
+            taskAdd(task,taskId);
+        }else if(name.equals("年度指标")){
+            log.info("年度指标");
+            updateTaskState(task);
+        }else{
+            log.info("任务 {} 任务类型:{} 非期望类型任务 不处理",task.getString("content"),name);
+        }
+
     }
 
     public void updateTaskState(JSONObject task){
@@ -74,6 +105,70 @@ public class ThTbServiceImpl implements ThTbService {
         }
     }
 
+    public void taskChange(JSONObject task,String taskId){
+        // 查询任务详情
+        String projectId=task.getString("projectId");// 项目ID
+        // 查询项目自定义字段
+        List<JSONObject> list=tbApiService.getProjectCustomfield(projectId).toJavaList(JSONObject.class);
+        Optional optional = list.stream().filter(item -> "变更内容".equals(item.get("name"))&&item.containsKey("originalId")).findAny();
+        String keyId=((JSONObject) optional.get()).getString("id");
+        Optional optional2 = list.stream().filter(item -> "变更后内容".equals(item.get("name"))).findAny();
+        String valueId=((JSONObject) optional2.get()).getString("id");
+        // 查询任务中的自定义字段值
+        List<JSONObject> custs=task.getJSONArray("customfields").toJavaList(JSONObject.class);
+        Optional optional3 = custs.stream().filter(item -> valueId.equals(item.get("cfId"))).findAny();
+        String value=((JSONObject) optional3.get()).getJSONArray("value").getJSONObject(0).getString("title");
+        Optional optional4 = custs.stream().filter(item -> keyId.equals(item.get("cfId"))).findAny();
+        JSONObject idObj=((JSONObject) optional4.get()).getJSONArray("value").getJSONObject(0);
+        // 查询关联任务
+        JSONArray linkArray=tbApiService.getTaskLinks(taskId);
+        if(linkArray==null||linkArray.size()<1){
+            log.info("任务{}没有关联任务",taskId);
+            return;
+        }
+        String linkedId=linkArray.getJSONObject(0).getString("linkedId");
+        log.info("任务[{}]字段:{}[{}]数据修改为:{}",linkedId,idObj.getString("title"),idObj.getString("id"),value);
+        if("664e9d5ae6451d2386a6d1bc".equals(idObj.getString("id"))){
+            tbApiService.updateTaskContent(linkedId,value);
+        }else if("664e9d5ae6451d2386a6d1bd".equals(idObj.getString("id"))){
+            Optional optional5 = list.stream().filter(item -> "权重".equals(item.get("name"))).findAny();
+            String qzId=((JSONObject) optional5.get()).getString("id");
+            tbApiService.updateTaskCustomfield(linkedId,qzId,value);
+        }else if("664e9d5ae6451d2386a6d1be".equals(idObj.getString("id"))){
+            JSONArray array=tbApiService.userSearch(value);
+            if(array==null||array.size()<1){
+                log.error("未查到该人员 查询条件:{},返回结果:{}",value,array);
+                return;
+            }
+            tbApiService.updateTaskExecutor(linkedId,array.getJSONObject(0).getString("userId"));
+        }
+    }
+
+
+    public void taskCancel(JSONObject task,String taskId){
+        // 查询关联任务
+        JSONArray linkArray=tbApiService.getTaskLinks(taskId);
+        if(linkArray==null||linkArray.size()<1){
+            log.info("任务{}没有关联任务",taskId);
+            return;
+        }
+        String linkedId=linkArray.getJSONObject(0).getString("linkedId");
+        log.info("任务[{}]状态修改为[取消]",linkedId);
+        JSONObject linkedTask=tbApiService.getTasksInfo(linkedId).getJSONObject(0);
+        String projectId=linkedTask.getString("projectId");
+        JSONObject tf=tbApiService.getProjectTfid(projectId,getType(linkedTask.getJSONArray("ancestorIds").size()+1)).getJSONObject(0);
+        JSONObject tfsnext=tbApiService.getProjectStateId(projectId,"取消",tf.getString("id"),"").getJSONObject(0);
+        tbApiService.updateTaskStatus(linkedId,tfsnext.getString("id"));
+    }
+
+    public void taskAdd(JSONObject task,String taskId){
+        String projectId=task.getString("projectId");
+        JSONObject addTask=new JSONObject();
+        addTask.put("projectId",projectId);// 必填
+        addTask.put("content","content");// 标题必填
+        tbApiService.addTask(addTask);
+    }
+
     public String getType(int size){
         switch (size){
             case 1:

+ 5 - 7
src/test/java/com/muzhi/tianhe/TbTest.java

@@ -44,7 +44,9 @@ public class TbTest {
 //            log.info("u:{}",users);
 //            tbService.test();
 //            tbService.getDingUserId("");
-            tbApiService.getProjectList();
+            tbService.asyncXm("664455d95a93ac024006fa6b");
+//            JSONArray array=tbApiService.getProjectState("65efed344f2eb1fe4e88c81f");
+//            System.out.println(array);
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -54,17 +56,13 @@ public class TbTest {
     public void tbTest(){
         String projectId="664c52c05a93ac02400705fd";// 三级任务测试项目
         String taskType="664c52c158a65f33469b6749";// 三级任务
-        String taskId="664c588a58a65f33469ba2dc";// 测试三级任务-010202
+        String taskId="664ef69106ffe44d7cb1c597";// 测试三级任务-010202
         String parentTaskId="664c5537351868a429dfd9da"; // 测试二级任务
 //        JSONArray array=tbApiService.getTasksType(projectId);
 //        JSONArray array=tbApiService.getProjectState(projectId);
 
 //        System.out.println(array);
-        thTbService.syncTaskState(taskId);
+        thTbService.task(taskId);
     }
 
-
-
-
-
 }