|
@@ -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:
|