lfx 1 рік тому
батько
коміт
81e65daf46

+ 102 - 0
src/main/java/com/muzhi/tianhe/entity/Tianhe.java

@@ -2,6 +2,7 @@ package com.muzhi.tianhe.entity;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +10,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.util.Map;
+
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
@@ -100,4 +103,103 @@ public class Tianhe {
     @ExcelIgnore
     @ApiModelProperty(value = "是否归档(0未归档;1已归档)")
     private int shifouguidang;
+
+    @ExcelProperty("项目编号")
+    @ApiModelProperty(value = "项目编号")
+    private String glxiangmubianhao;
+
+    @ExcelProperty("所属BU/MU/平台")
+    @ApiModelProperty(value = "所属BU/MU/平台")
+    private String glshuoshupingtai;
+
+    @ExcelProperty("项目归属")
+    @ApiModelProperty(value = "项目归属")
+    private String glxiangmuguishu;
+
+    @ExcelProperty("项目级别")
+    @ApiModelProperty(value = "项目级别")
+    private String glxiangmujibie;
+
+    @ExcelProperty("涉及流程域")
+    @ApiModelProperty(value = "涉及流程域")
+    private String glsjlcy;
+
+    @ExcelProperty("成本中心")
+    @ApiModelProperty(value = "成本中心")
+    private String glchengbenzhongxin;
+
+    @ExcelProperty("项目预算(万元)")
+    @ApiModelProperty(value = "项目预算(万元)")
+    private String glxiangmuyusuan;
+
+    @ExcelProperty("预算执行情况")
+    @ApiModelProperty(value = "预算执行情况")
+    private String glyusuanzhixingqingkuang;
+
+    @ExcelProperty("是否属于关键任务分解")
+    @ApiModelProperty(value = "是否属于关键任务分解")
+    private String glsfsygjrwfj;
+
+    @ExcelProperty("关键任务名称")
+    @ApiModelProperty(value = "关键任务名称")
+    private String glguanjianrenwumingcheng;
+
+    @ExcelProperty("项目工期(天)")
+    @ApiModelProperty(value = "项目工期(天)")
+    private String glxiangmugongqi;
+
+    @ExcelProperty("项目目标")
+    @ApiModelProperty(value = "项目目标")
+    private String glxiangmumubiao;
+
+    @ExcelProperty("项目价值")
+    @ApiModelProperty(value = "项目价值")
+    private String glxiangmujiazhi;
+
+    @ExcelProperty("项目范围")
+    @ApiModelProperty(value = "项目范围")
+    private String glxiangmufanwei;
+
+    @ExcelProperty("项目实施策略")
+    @ApiModelProperty(value = "项目实施策略")
+    private String glxiangmushishicelue;
+
+    @ExcelProperty("项目激励方案")
+    @ApiModelProperty(value = "项目激励方案")
+    private String glxiangmujili;
+
+    @ExcelProperty("项目主要风险")
+    @ApiModelProperty(value = "项目主要风险")
+    private String glxiangmuzhuyaofengxian;
+
+    public void setGl(Map<String,JSONArray> map){
+        this.xiangmuleibie=getValue(map,"65bb984c7bbdd92f48e7264a");
+        this.glxiangmubianhao=getValue(map,"65bb954d4d4dc9286d428a1e");
+        this.glshuoshupingtai=getValue(map,"65d585a87bbdd92f48e9c83a");// 65bb97650bb530c9d7d02ada
+        this.glxiangmuguishu=getValue(map,"65bb95dab6adf46ff2b468b7");
+        this.glxiangmujibie=getValue(map,"65bb97d98f6d35714b539b26");
+        this.glsjlcy=getValue(map,"65ed7ae2475c2137f57fcf25");
+        this.glchengbenzhongxin=getValue(map,"65bb98935b255d16573fb64e");
+        this.glxiangmuyusuan=getValue(map,"65bb98a2475c2137f56dd247");
+        this.glyusuanzhixingqingkuang=getValue(map,"65bb98b34d4dc9286d428a75");
+        this.glsfsygjrwfj=getValue(map,"65bb98d5b6adf46ff2b4692a");
+        this.glguanjianrenwumingcheng=getValue(map,"65bb98e55b255d16573fb66f");
+        this.glxiangmugongqi=getValue(map,"65bb992b2b8c25516cf7c033");
+        this.glxiangmumubiao=getValue(map,"65bb993cb6adf46ff2b46952");
+        this.glxiangmujiazhi=getValue(map,"65bb9946782229420a563452");
+        this.glxiangmufanwei=getValue(map,"65bb99512b8c25516cf7c048");
+        this.glxiangmushishicelue=getValue(map,"65bb9966b6adf46ff2b4696d");
+        this.glxiangmujili=getValue(map,"65bb9974782229420a563469");
+        this.glxiangmuzhuyaofengxian=getValue(map,"65bb998b2b8c25516cf7c05e");
+    }
+
+    private static String getValue(Map<String,JSONArray> map,String cfId){
+        if(map.containsKey(cfId)){
+            JSONArray array=map.get(cfId);
+            if(array!=null&&array.size()>0){
+                return array.getJSONObject(0).getString("title");
+            }
+        }
+        return "";
+    }
 }

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

@@ -200,7 +200,7 @@ public class TbApiService {
         return result;
     }
 
-    public Object addTask(JSONObject param){
+    public JSONObject addTask(JSONObject param){
         JSONObject result=header(HttpRequest.post(PRIVATE_API_URL + "/v3/task/create")
                 .header("x-operator-id",tbOperatorId)
                 .body(JSONObject.toJSONString(param)));

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

@@ -145,8 +145,10 @@ public class TbServiceImpl extends ServiceImpl<TianheMapper, Tianhe> implements
         if (tasks != null){
             //里程碑
             tianhe.setLichengbei(TB_LICHENGBEI_MAP.get(projectId));
-            //项目类别
-            tianhe.setXiangmuleibie(getProjectCustVule(projectId,"65bb984c7bbdd92f48e7264a"));
+            Map<String,JSONArray> projectCustValueMap=getProjectCustVule(projectId);
+            // 项目概览自定义字段
+            tianhe.setGl(projectCustValueMap);
+
             tianhe.setXiangmubianhao(projectId);
             tianhe.setXiangmuzhuangtai(getProjectState(projectId));
             JSONArray projects=tbApiService.getProjectInfo(projectId);
@@ -552,7 +554,7 @@ public class TbServiceImpl extends ServiceImpl<TianheMapper, Tianhe> implements
         try {
             JSONArray array=tbApiService.getProjectState(projectId);
             if(array!=null&&array.size()>0){
-                return array.getJSONObject(0).getString("content");
+                return array.getJSONObject(0).getString("name");
             }
         }catch (Exception e){
             e.printStackTrace();
@@ -660,19 +662,16 @@ public class TbServiceImpl extends ServiceImpl<TianheMapper, Tianhe> implements
     /***
      * 查询项目概览自定义字段数据
      */
-    private String getProjectCustVule(String projectId,String cfId){
+    private Map<String,JSONArray> getProjectCustVule(String projectId){
+        Map<String,JSONArray> result=new HashMap<>();
         try {
             JSONArray array = tbApiService.getProjectCust(projectId);
             List<JSONObject> list=array.toJavaList(JSONObject.class);
-            Optional optional = list.stream().filter(item -> cfId.equals(item.get("cfId"))).findAny();
-            JSONArray valueArray=((JSONObject) optional.get()).getJSONArray("value");
-            if(valueArray!=null&&valueArray.size()>0){
-                String value=valueArray.getJSONObject(0).getString("title");
-                return value;
-            }
+            list.forEach(item -> result.put(item.getString("cfId"),item.getJSONArray("value")));
+            return result;
         }catch (Exception e){
             e.printStackTrace();
         }
-        return "";
+        return result;
     }
 }

+ 60 - 8
src/main/java/com/muzhi/tianhe/service/impl/ThTbServiceImpl.java

@@ -9,9 +9,7 @@ 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;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -50,7 +48,20 @@ public class ThTbServiceImpl implements ThTbService {
             taskCancel(task,taskId);
         }else if(name.contains("新增流程")){
             log.info("新增流程");
-            taskAdd(task,taskId);
+            String newName;
+            if(name.contains("一级")){
+                newName="一级任务";
+            }else if(name.contains("二级")){
+                newName="二级任务";
+            }else if(name.contains("三级")){
+                newName="三级任务";
+            }else{
+                log.error("任务类型名称判断异常:{}",name);
+                return;
+            }
+            Optional optional2 = list.stream().filter(item -> newName.equals(item.get("name"))).findAny();
+            JSONObject newTaskType=((JSONObject) optional2.get());
+            taskAdd(task,taskId,newTaskType);
         }else if(name.equals("年度指标")){
             log.info("年度指标");
             updateTaskState(task);
@@ -106,7 +117,6 @@ 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);
@@ -161,14 +171,56 @@ public class ThTbServiceImpl implements ThTbService {
         tbApiService.updateTaskStatus(linkedId,tfsnext.getString("id"));
     }
 
-    public void taskAdd(JSONObject task,String taskId){
+    public void taskAdd(JSONObject task,String taskId,JSONObject newTaskType){
         String projectId=task.getString("projectId");
+        // 查询项目自定义字段
+        List<JSONObject> projectCoutList=tbApiService.getProjectCustomfield(projectId).toJavaList(JSONObject.class);
+        Map<String,String> custIdMap=new HashMap();
+        projectCoutList.forEach(item -> custIdMap.put(item.getString("name"),item.getString("id")));
+        List<JSONObject> taskCoutlist=task.getJSONArray("customfields").toJavaList(JSONObject.class);
+        Map<String,JSONArray> taskCustValueMap=new HashMap();
+        taskCoutlist.forEach(item -> taskCustValueMap.put(item.getString("cfId"),item.getJSONArray("value")));
+
         JSONObject addTask=new JSONObject();
         addTask.put("projectId",projectId);// 必填
-        addTask.put("content","content");// 标题必填
-        tbApiService.addTask(addTask);
+        addTask.put("content",taskCustValueMap.get(custIdMap.get("新任务目标")).getJSONObject(0).getString("title"));// 标题必填
+        addTask.put("scenariofieldconfigId",newTaskType.getString("id"));// 任务类型id 业务必填
+        if(!newTaskType.getString("name").contains("一级")){
+            // 查询关联任务 用于确认父级任务
+            JSONArray linkArray=tbApiService.getTaskLinks(taskId);
+            if(linkArray==null||linkArray.size()<1){
+                log.info("任务{}没有关联任务",taskId);
+                return;
+            }
+            String linkedId=linkArray.getJSONObject(0).getString("linkedId");
+            addTask.put("parentTaskId",linkedId);// 父任务ID
+        }
+        JSONArray array=new JSONArray();
+        array.add(custField(custIdMap.get("权重"),taskCustValueMap.get(custIdMap.get("新任务权重")).getJSONObject(0).getString("title"),""));
+        array.add(custField(custIdMap.get("联席责任人"),taskCustValueMap.get(custIdMap.get("联席责任人"))));
+        array.add(custField(custIdMap.get("行政上级领导"),taskCustValueMap.get(custIdMap.get("行政上级领导"))));
+        array.add(custField(custIdMap.get("责任人"),taskCustValueMap.get(custIdMap.get("新任务责任人"))));
+        array.add(custField(custIdMap.get("上级任务责任人"),taskCustValueMap.get(custIdMap.get("上级任务责任人"))));
+        addTask.put("customfields",array);
+        JSONObject result=tbApiService.addTask(addTask);
+        log.info("新增完成 result:{}",result);
+    }
+
+    private JSONObject custField(String cfId,String title,String id){
+        JSONObject result=new JSONObject();
+        result.put("cfId",cfId);
+        result.put("value",Arrays.asList(new JSONObject().fluentPut("title",title).fluentPut("id",id)));
+        return result;
     }
 
+    private JSONObject custField(String cfId,JSONArray value){
+        JSONObject result=new JSONObject();
+        result.put("cfId",cfId);
+        result.put("value",value);
+        return result;
+    }
+
+
     public String getType(int size){
         switch (size){
             case 1:

+ 2 - 2
src/main/resources/application.properties

@@ -16,8 +16,8 @@ server.tomcat.uri-encoding=UTF-8
 #spring.datasource.password=123456
 
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://47.97.181.40:3306/dingtalk?serverTimezone=GMT%2B8
-#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dingtalk?serverTimezone=GMT%2B8
+#spring.datasource.url=jdbc:mysql://47.97.181.40:3306/dingtalk?serverTimezone=GMT%2B8
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dingtalk?serverTimezone=GMT%2B8
 spring.datasource.username=root
 spring.datasource.password=cp-root@2022++
 

+ 20 - 2
src/test/java/com/muzhi/tianhe/TbTest.java

@@ -44,7 +44,7 @@ public class TbTest {
 //            log.info("u:{}",users);
 //            tbService.test();
 //            tbService.getDingUserId("");
-            tbService.asyncXm("664455d95a93ac024006fa6b");
+            tbService.asyncXm();
 //            JSONArray array=tbApiService.getProjectState("65efed344f2eb1fe4e88c81f");
 //            System.out.println(array);
         } catch (Exception e) {
@@ -56,7 +56,7 @@ public class TbTest {
     public void tbTest(){
         String projectId="664c52c05a93ac02400705fd";// 三级任务测试项目
         String taskType="664c52c158a65f33469b6749";// 三级任务
-        String taskId="664ef69106ffe44d7cb1c597";// 测试三级任务-010202
+        String taskId="6653ee22e30d72623e37cd28";// 测试三级任务-010202
         String parentTaskId="664c5537351868a429dfd9da"; // 测试二级任务
 //        JSONArray array=tbApiService.getTasksType(projectId);
 //        JSONArray array=tbApiService.getProjectState(projectId);
@@ -65,4 +65,22 @@ public class TbTest {
         thTbService.task(taskId);
     }
 
+    //ALTER TABLE `tianhe`
+    //ADD COLUMN `glxiangmubianhao`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glshuoshupingtai`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmuguishu`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmujibie`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glsjlcy`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glchengbenzhongxin`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmuyusuan`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glyusuanzhixingqingkuang`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glsfsygjrwfj`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glguanjianrenwumingcheng`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmugongqi`  varchar(255) NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmumubiao`  text NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmujiazhi`  text NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmufanwei`  text NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmushishicelue`  text NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmujili`  text NULL AFTER `taskid`,
+    //ADD COLUMN `glxiangmuzhuyaofengxian`  text NULL AFTER `taskid`;
 }