lfx пре 8 месеци
родитељ
комит
36aa93cd70

+ 100 - 15
src/main/java/com/muzhi/tianhe/service/impl/ThTbServiceImpl.java

@@ -133,6 +133,7 @@ public class ThTbServiceImpl implements ThTbService {
             // 红绿灯
             // 循环获取其他同级任务状态,判断是否有更高级别的任务状态
             // 同级红灯状态ID
+            taskStatusChange(task);// 同步到宜搭
             JSONObject redTfs=tbApiService.getProjectStateId(projectId,"红灯",tfid,"").getJSONObject(0);
             String redId=redTfs.getString("id");
             // 同级黄状态ID
@@ -461,35 +462,70 @@ public class ThTbServiceImpl implements ThTbService {
         return formUuid.get(code);
     }
 
+    private static String NULLDATA = "NULL";
     @Override
     public void syncStateProject(String projectId) {
+        // 有责任人的任务编号
+        List<Map> taskDatas = new ArrayList<>();
         // 同步项目下自定义字段
         Map<String,String> projectCusts=new HashMap<>();
         List<JSONObject> projectCoutList=tbApiService.getProjectCustomfield(projectId).toJavaList(JSONObject.class);
         projectCoutList.forEach(item -> {
             projectCusts.put(item.getString("name"),item.getString("id"));
-            ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("CUSTFIELD"))
-                    .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_m0vvz8ni, textField_m0vvz8nj, textField_m0vvz8nk, textField_m0vvz8nl"
-                            ,projectId,"",item.getString("name"),item.getString("id"))))
-                    .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m0vvz8nl",item.getString("id"),"自定义字段编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))))
-                    .build(), YDConf.FORM_OPERATION.upsert);
         });
         // 同步项目下任务状态
         JSONObject project = tbApiService.getProjectInfo(projectId).getJSONObject(0);
         Map<String,String> map=getProjectStateVule(projectId);
         JSONArray array = getXiangmuRenwuLeixing(projectId);
         for (int j = 0; j < array.size(); j++) {
-            if(array.getJSONObject(j).getString("name").contains("变更")){
+            String cTname=array.getJSONObject(j).getString("name");
+            String cTid=array.getJSONObject(j).getString("id");
+            if(cTname.contains("变更")){
                 continue;
             }
-            JSONArray tasks=tbApiService.getTasksByType(projectId,array.getJSONObject(j).getString("id"));
+            List<String> custNames;
+            List<String> ydKyes;
+            if(cTname.contains("一级")){
+                custNames=Arrays.asList("责任人","联席责任人");
+                ydKyes=Arrays.asList(NULLDATA,NULLDATA);
+            }else if(cTname.contains("二级")){
+                custNames=Arrays.asList("责任人","联席责任人","责任部门","上级任务责任人");
+                ydKyes=Arrays.asList(NULLDATA,NULLDATA,"textField_m102rax6",NULLDATA);
+            }else if(cTname.contains("三级")){
+                custNames=Arrays.asList("责任人","联席责任人","责任部门","权重","上级任务责任人","问题与风险","解决方案思路");
+                ydKyes=Arrays.asList(NULLDATA,NULLDATA,"textField_m102rax6","textField_m0xldyf7",NULLDATA,"textField_m21hlie0","textField_m21hlie1");
+            }else if(cTname.contains("指标")){
+                custNames=Arrays.asList("权重","统计口径","验收依据","Q1目标","Q1实际达成","Q1偏差原因说明","Q1改进举措","Q2目标","Q2实际达成","Q2偏差原因说明","Q2改进举措"
+                        ,"Q3目标","Q3实际达成","Q3偏差原因说明","Q3改进举措","Q4目标","Q4实际达成","Q4偏差原因说明","Q4改进举措","年度指标完成情况","自评分","证明材料");
+                ydKyes=Arrays.asList("textField_m0xldyf7","textField_m21hliea","textField_m102rax9",
+                        "textField_m102raxm","textField_m21hlief","textField_m21hlieg","textField_m21hlieh", // q1
+                        "textField_m10at4ej","textField_m21hliei","textField_m21hliel","textField_m21hlieo", // q2
+                        "textField_m10at4ek","textField_m21hliej","textField_m21hliem","textField_m21hliep", // q3
+                        "textField_m10at4el","textField_m21hliek","textField_m21hlien","textField_m21hlieq", // q4
+                        "textField_m21hlieb","textField_m21hliec","textField_m21hlied");
+            }else{
+                custNames=new ArrayList<>();
+                ydKyes=new ArrayList<>();
+            }
+            projectCoutList.forEach(item -> {
+                if(custNames.contains(item.getString("name"))){
+                    ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("CUSTFIELD"))
+                            .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_m0vvz8ni, textField_m0vvz8nj, textField_m0vvz8nk, textField_m0vvz8nl"
+                                    ,projectId,cTid,item.getString("name"),item.getString("id"))))
+                            .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m0vvz8nl",item.getString("id"),"自定义字段编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ)
+                                ,new YDSearch("textField_m0vvz8nj",cTid,"任务类型编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))))
+                            .build(), YDConf.FORM_OPERATION.upsert);
+                }
+            });
+
+            JSONArray tasks=tbApiService.getTasksByType(projectId,cTid);
             for (int i = 0; i < tasks.size(); i++) {
                 JSONObject task = tasks.getJSONObject(i);
                 log.info("同步任务,任务编号:[{}]进度:[{}/{}]",task.getString("id"),i+1,tasks.size());
                 Map saveMap=UtilMap.map("textField_m0rkuewb, textField_m0rkuewd, textField_m0rkuewc, textField_m0rkuewe, selectField_m0rkuewk, textField_m0vtq84z, textField_m0vtq850"
                         ,task.getString("id"),task.getString("content")
                         ,projectId,project.getString("name"),map.get(task.getString("tfsId"))
-                        ,array.getJSONObject(j).getString("id"),array.getJSONObject(j).getString("name"));
+                        ,cTid,cTname);
                 saveMap.put("textField_m0xldyf3",task.getString("parentTaskId"));
                 JSONArray ancestorIds=task.getJSONArray("ancestorIds");
                 int size=ancestorIds.size();
@@ -506,15 +542,21 @@ public class ThTbServiceImpl implements ThTbService {
                 Map<String,JSONArray> taskCustValues=new HashMap<>();
                 List<JSONObject> custs=task.getJSONArray("customfields").toJavaList(JSONObject.class);
                 custs.forEach(item -> taskCustValues.put(item.getString("cfId"),item.getJSONArray("value")));
-                saveMap.put("textField_m0xldyf7",getCustOne(taskCustValues.get(projectCusts.get("权重")),"title"));
+                saveMap.put("textField_m21p4jl8",String.join(",",ancestorIds.toJavaList(String.class)));
                 saveMap.put("employeeField_m0xldyf4",Arrays.asList(tbApiService.getUserId(task.getString("executorId"),true)));
                 saveMap.put("employeeField_m0xldyf5",tbApiService.getUserIds(getCust(taskCustValues.get(projectCusts.get("联席责任人")),"id"),true));
-                saveMap.put("textField_m102rax6",getCustOne(taskCustValues.get(projectCusts.get("责任部门")),"title"));
-                saveMap.put("textField_m102rax9",getCustOne(taskCustValues.get(projectCusts.get("验收依据")),"title"));
-                saveMap.put("textField_m102raxm",getCustOne(taskCustValues.get(projectCusts.get("Q1目标")),"title"));
-                saveMap.put("textField_m10at4ej",getCustOne(taskCustValues.get(projectCusts.get("Q2目标")),"title"));
-                saveMap.put("textField_m10at4ek",getCustOne(taskCustValues.get(projectCusts.get("Q3目标")),"title"));
-                saveMap.put("textField_m10at4el",getCustOne(taskCustValues.get(projectCusts.get("Q4目标")),"title"));
+                // 责任人
+                List<String> zrrList=tbApiService.getUserIds(getCust(taskCustValues.get(projectCusts.get("责任人")),"id"),true);
+                if(zrrList!=null&&zrrList.size()>0){
+                    taskDatas.add(UtilMap.map("taskId, parentTaskId, zrr",task.getString("id"),task.getString("parentTaskId"),zrrList));
+                }
+                saveMap.put("employeeField_m201jmmi",zrrList);
+                saveMap.put("employeeField_m21hlidz",tbApiService.getUserIds(getCust(taskCustValues.get(projectCusts.get("上级任务责任人")),"id"),true));
+                for (int k = 0; k < ydKyes.size(); k++) {
+                    if(!ydKyes.get(k).equals(NULLDATA)){
+                        saveMap.put(ydKyes.get(k),getCustOne(taskCustValues.get(projectCusts.get(custNames.get(k))),"title"));
+                    }
+                }
 
                 ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASK"))
                         .formDataJson(JSONObject.toJSONString(saveMap))
@@ -522,6 +564,49 @@ public class ThTbServiceImpl implements ThTbService {
                         .build(), YDConf.FORM_OPERATION.upsert);
             }
         }
+        log.info("TB任务同步完成,开始处理权限成员");
+        for (Map taskData:taskDatas){
+            String taskId=UtilMap.getString(taskData,"taskId");
+            String parentTaskId=UtilMap.getString(taskData,"parentTaskId");
+            List<String> zrr=UtilMap.getList(taskData,"zrr");
+            // 父项目添加当前项目负责人权限
+            if(!PublicUtil.isNull(parentTaskId)){
+                addTaskAuthUser("textField_m0rkuewb",parentTaskId,zrr); // 更新父级
+            }
+            // 查询父级任务并修改权限数据
+            addTaskAuthUser("textField_m21p4jl8",taskId,zrr); // 更新子级
+        }
+    }
+
+    private void addTaskAuthUser(String key,String taskId,List<String> users){
+        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid(_matchFormUuid("TASK")).searchCondition(
+                JSONObject.toJSONString(Arrays.asList(new YDSearch(key,taskId,"taskid", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.LIKE)))
+        ).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        if(list!=null&&list.size()>0){
+            for (int i = 0; i < list.size(); i++) {
+                Map formData=UtilMap.getMap(list.get(i),"formData");
+                String formInstanceId=UtilMap.getString(list.get(i),"formInstanceId");
+                List<String> newUsers = UtilMap.getList(formData,"employeeField_m217qmy5_id");
+                newUsers.addAll(users);
+                ydClient.operateData(YDParam.builder().formInstId(formInstanceId).updateFormDataJson(
+                        JSONObject.toJSONString(UtilMap.map("employeeField_m217qmy5",newUsers))
+                ).build(), YDConf.FORM_OPERATION.update);
+            }
+        }
+    }
+
+    private void taskStatusChange(JSONObject task){
+        try {
+            Map<String,String> map=getProjectStateVule(task.getString("projectId"));
+            Map saveMap=UtilMap.map("selectField_m0rkuewk",map.get(task.getString("tfsId")));
+            ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASK"))
+                    .formDataJson(JSONObject.toJSONString(saveMap))
+                    .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m0rkuewb",task.getString("id"),"taskid", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        }catch (Exception e){
+            log.error("同步到宜搭出错,不影响TB");
+            e.printStackTrace();
+        }
     }
 
     private String getCustOne(JSONArray array,String key){

+ 1 - 1
src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+    active: prod
   servlet:
     multipart:
       max-file-size: 100MB

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

@@ -71,8 +71,8 @@ public class TbTest {
 
     @Test
     public void tbTest(){
-        String taskId="667a346caf606ea5af0a4ea4";
-        thTbService.task(taskId,"2",JSONObject.parseObject(data));
+        String taskId="66712bd9257b3dca3cf99296";
+        thTbService.task(taskId,"0",JSONObject.parseObject(data));
     }
 
     //ALTER TABLE `tianhe`

+ 56 - 0
src/test/java/com/muzhi/tianhe/YdTest.java

@@ -0,0 +1,56 @@
+package com.muzhi.tianhe;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.aliwork.YDSearch;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.utils.UtilEnv;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@SpringBootTest(classes = TianHeApplication.class)
+public class YdTest {
+
+
+    @Autowired
+    private YDClient ydClient;
+    private String _matchFormUuid(String code) {
+        Map<String, String> formUuid = UtilMap.empty();
+        if (UtilEnv.getActiveProfile().equals(UtilEnv.ENV_PROD)) {
+            formUuid.put("TASK", "FORM-B8C09F8900BD43EC8025068B3CB4C4F8SLAD");
+            formUuid.put("CUSTFIELD", "FORM-031FC90C7D3C49A394600D4EE6C037915QSI");
+        } else {
+            formUuid.put("TASK", "FORM-59A439BCB8194F10B8C862C579F285F5KWG6");                // 文件夹/文件版本记录
+            formUuid.put("CUSTFIELD", "FORM-C5B14D2EE4464AED835BA259388E829D9937");            // 文件夹权限
+        }
+        return formUuid.get(code);
+    }
+
+
+
+    private void addTaskAuthUserByTaskId(String taskId,List<String> users){
+        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid(_matchFormUuid("TASK")).searchCondition(
+                JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m21p4jl8",taskId,"taskid", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.LIKE)))
+        ).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        if(list!=null&&list.size()>0){
+
+        }
+    }
+
+    @Test
+    public void test(){
+        addTaskAuthUserByTaskId("66f67c592b7746cb5e82bc6e",Arrays.asList("itoutsource.cz630"));
+    }
+
+}