lfx 5 months ago
parent
commit
9ac2182835

+ 1 - 1
pom.xml

@@ -273,7 +273,7 @@
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
-            <version>4.6.8</version>
+            <version>5.8.18</version>
         </dependency>
 
         <!--log4j-->

+ 6 - 0
src/main/java/com/muzhi/tianhe/controller/TbController.java

@@ -134,6 +134,12 @@ public class TbController {
         return thTbService.taskUpdate(param);
     }
 
+    @PostMapping("saveTask")
+    public McR saveTask(@RequestBody JSONObject param){
+        thTbService.saveTask(param.getString("procInsId"));
+        return McR.success();
+    }
+
     @PostMapping("taskCancel")
     public McR taskCancel(@RequestBody JSONObject param){
         return thTbService.taskCancel(param);

+ 92 - 0
src/main/java/com/muzhi/tianhe/controller/ThTaskController.java

@@ -0,0 +1,92 @@
+package com.muzhi.tianhe.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.common.McR;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Contacts;
+import com.malk.utils.PublicUtil;
+import com.malk.utils.UtilMap;
+import com.muzhi.tianhe.mapper.TaskMapper;
+import com.muzhi.tianhe.service.impl.TbApiService;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/task")
+public class ThTaskController {
+
+    @Autowired
+    private TaskMapper taskMapper;
+    @Autowired
+    private DDClient_Contacts ddClient_contacts;
+    @Autowired
+    private DDClient ddClient;
+    @Autowired
+    private TbApiService tbApiService;
+
+    @GetMapping("getUsers")
+    public McR getUsers(String projectId){
+        try {
+            List<String> list=taskMapper.getUsers(projectId);
+            List<Map> result=new ArrayList<>();
+            for(String id:list){
+                if(PublicUtil.isNull(id)){
+                    continue;
+                }
+
+                result.add(UtilMap.map("id, name",id,getName(id)));
+            }
+            return McR.success(result);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return McR.error("201",e.getMessage());
+        }
+    }
+
+    private String getName(String id){
+//        return String.valueOf(ddClient_contacts.getUserInfoById(ddClient.getAccessToken(),id).get("name"));
+        return tbApiService.getUsersInfo(Arrays.asList(tbApiService.getUserId(id,false))).getJSONObject(0).getString("name");
+//        return id;
+    }
+
+    @GetMapping("selectColor")
+    public McR selectColor(String projectId,String taskTypeId,String responsiblePerson){
+        JSONObject param=new JSONObject();
+        try {
+            param.put("projectId",projectId);
+            param.put("taskTypeId",taskTypeId);
+            param.put("responsiblePerson",responsiblePerson);
+            List<Map> list=taskMapper.selectColor(param);
+            return McR.success(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return McR.error("201",e.getMessage());
+        }
+    }
+
+    @GetMapping("selectColorByPerson")
+    public McR selectColorByPerson(String projectId,String taskTypeId,String responsiblePerson){
+        JSONObject param=new JSONObject();
+        try {
+            param.put("projectId",projectId);
+            param.put("taskTypeId",taskTypeId);
+            param.put("responsiblePerson",responsiblePerson);
+            List<Map> list=taskMapper.selectColorByPerson(param);
+            return McR.success(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return McR.error("201",e.getMessage());
+        }
+    }
+
+}

+ 218 - 0
src/main/java/com/muzhi/tianhe/entity/Task.java

@@ -0,0 +1,218 @@
+package com.muzhi.tianhe.entity;
+
+import cn.hutool.core.annotation.Alias;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+
+@Data
+@TableName("th_task_info") // 替换为实际的表名
+public class Task {
+
+    @TableId(value = "task_id",type = IdType.INPUT)
+    @Alias("textField_m0rkuewb")
+    private String taskId; // 任务ID
+
+    @Alias("textField_m0vtq84z")
+    private String taskTypeId; // 任务类型ID
+
+    @Alias("textField_m0rkuewc")
+    private String projectId; // 项目ID
+
+    @Alias("textField_m0rkuewd")
+    private String taskName; // 任务名称
+
+    @Alias("textField_m0vtq850")
+    private String taskTypeName; // 任务类型名称
+
+    @Alias("textField_m0rkuewe")
+    private String projectName; // 项目名称
+
+    @Alias("selectField_m0rkuewk")
+    private String taskStatus; // 任务状态
+
+    @Alias("employeeField_m0xldyf4")
+    private String executor; // 执行人
+
+    @Alias("textField_m102rax6")
+    private String responsibleDept; // 责任部门
+
+    @Alias("employeeField_m217qmy5")
+    private String viewPermission; // 查看权限
+
+    @Alias("employeeField_m201jmmi")
+    private String responsiblePerson; // 责任人
+
+    @Alias("textField_m0xldyf3")
+    private String parentTaskNumber; // 上级任务编号
+
+    @Alias("textField_m4s27u11")
+    private String annualTarget; // 年度目标/年度战略意图澄清
+
+    @Alias("employeeField_m0xldyf5")
+    private String coResponsiblePerson; // 联席责任人
+
+    @Alias("employeeField_m21hlidz")
+    private String parentTaskResponsiblePerson; // 上级任务责任人
+
+    @Alias("textField_m4w6u6t4")
+    private String taskWeight; // 任务权重
+
+    @Alias("textField_m0xldyf8")
+    private String firstLevelTaskNumber; // 一级任务编号
+
+    @Alias("textField_m0xldyf7")
+    private String weight; // 权重
+
+    @Alias("textField_m0xldyf9")
+    private String secondLevelTaskNumber; // 二级任务编号
+
+    @Alias("textField_m21hlie0")
+    private String issuesAndRisks; // 问题与风险
+
+    @Alias("textField_m0xldyfa")
+    private String thirdLevelTaskNumber; // 三级任务编号
+
+    @Alias("textField_m21hlie1")
+    private String solutionIdea; // 解决方案思路
+
+    @Alias("textField_m21hliea")
+    private String statisticalCaliber; // 统计口径
+
+    @Alias("textField_m21hliec")
+    private String selfScore; // 自评分
+
+    @Alias("textField_m102rax9")
+    private String acceptanceCriteria; // 验收依据
+
+    @Alias("textField_m21hlied")
+    private String proofMaterials; // 证明材料
+
+    @Alias("textField_m21hlieb")
+    private String annualIndicatorCompletion; // 年度指标完成情况
+
+    @Alias("textField_m21p4jl8")
+    private String parentTaskId; // 父级任务编号
+
+    @Alias("textField_m102raxm")
+    private String q1Target; // Q1目标
+
+    @Alias("textField_m10at4ej")
+    private String q2Target; // Q2目标
+
+    @Alias("textField_m10at4ek")
+    private String q3Target; // Q3目标
+
+    @Alias("textField_m10at4el")
+    private String q4Target; // Q4目标
+
+    @Alias("textField_m4s27u1s")
+    private String janActualCompletion; // 1月实际达成
+
+    @Alias("textField_m4s27u1u")
+    private String janDeviationReason; // 1月偏差原因说明
+
+    @Alias("textField_m4s27u1w")
+    private String janImprovementMeasures; // 1月改进举措
+
+    @Alias("textField_m4s27u1t")
+    private String febActualCompletion; // 2月实际达成
+
+    @Alias("textField_m4s27u1v")
+    private String febDeviationReason; // 2月偏差原因说明
+
+    @Alias("textField_m4s27u1x")
+    private String febImprovementMeasures; // 2月改进举措
+
+    @Alias("textField_m21hlief")
+    private String marActualCompletion; // 3月实际达成
+
+    @Alias("textField_m21hlieg")
+    private String marDeviationReason; // 3月偏差原因说明
+
+    @Alias("textField_m21hlieh")
+    private String marImprovementMeasures; // 3月改进举措
+
+    @Alias("textField_m4s27u1y")
+    private String aprActualCompletion; // 4月实际达成
+
+    @Alias("textField_m4s27u20")
+    private String aprDeviationReason; // 4月偏差原因说明
+
+    @Alias("textField_m4s27u22")
+    private String aprImprovementMeasures; // 4月改进举措
+
+    @Alias("textField_m4s27u1z")
+    private String mayActualCompletion; // 5月实际达成
+
+    @Alias("textField_m4s27u21")
+    private String mayDeviationReason; // 5月偏差原因说明
+
+    @Alias("textField_m4s27u23")
+    private String mayImprovementMeasures; // 5月改进举措
+
+    @Alias("textField_m21hliei")
+    private String junActualCompletion; // 6月实际达成
+
+    @Alias("textField_m21hliel")
+    private String junDeviationReason; // 6月偏差原因说明
+
+    @Alias("textField_m21hlieo")
+    private String junImprovementMeasures; // 6月改进举措
+
+    @Alias("textField_m4s27u35")
+    private String julActualCompletion; // 7月实际达成
+
+    @Alias("textField_m4s27u37")
+    private String julDeviationReason; // 7月偏差原因说明
+
+    @Alias("textField_m4s27u39")
+    private String julImprovementMeasures; // 7月改进举措
+
+    @Alias("textField_m4s27u36")
+    private String augActualCompletion; // 8月实际达成
+
+    @Alias("textField_m4s27u38")
+    private String augDeviationReason; // 8月偏差原因说明
+
+    @Alias("textField_m4s27u3a")
+    private String augImprovementMeasures; // 8月改进举措
+
+    @Alias("textField_m21hliej")
+    private String sepActualCompletion; // 9月实际达成
+
+    @Alias("textField_m21hliem")
+    private String sepDeviationReason; // 9月偏差原因说明
+
+    @Alias("textField_m21hliep")
+    private String sepImprovementMeasures; // 9月改进举措
+
+    @Alias("textField_m4s27u3b")
+    private String octActualCompletion; // 10月实际达成
+
+    @Alias("textField_m4s27u3d")
+    private String octDeviationReason; // 10月偏差原因说明
+
+    @Alias("textField_m4s27u3f")
+    private String octImprovementMeasures; // 10月改进举措
+
+    @Alias("textField_m4s27u3c")
+    private String novActualCompletion; // 11月实际达成
+
+    @Alias("textField_m4s27u3e")
+    private String novDeviationReason; // 11月偏差原因说明
+
+    @Alias("textField_m4s27u3g")
+    private String novImprovementMeasures; // 11月改进举措
+
+    @Alias("textField_m21hliek")
+    private String decActualCompletion; // 12月实际达成
+
+    @Alias("textField_m21hlien")
+    private String decDeviationReason; // 12月偏差原因说明
+
+    @Alias("textField_m21hlieq")
+    private String decImprovementMeasures; // 12月改进举措
+}

+ 22 - 0
src/main/java/com/muzhi/tianhe/mapper/TaskMapper.java

@@ -0,0 +1,22 @@
+package com.muzhi.tianhe.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muzhi.tianhe.entity.Task;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+//在对应的Mapper上面继承基本的类BaseMapper
+@Repository
+public interface TaskMapper extends BaseMapper<Task> {
+    // 如果有自定义查询方法,可以在这里定义
+
+    List<Map> selectColor(Map param);
+
+    List<Map> selectColorByPerson(Map param);
+
+    List<String> getUsers(@Param("projectId")String projectId);
+}

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

@@ -20,6 +20,8 @@ public interface ThTbService {
 
     McR taskUpdate(JSONObject param);
 
+    void saveTask(String procInsId);
+
     McR taskCancel(JSONObject param);
 
 }

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

@@ -290,6 +290,20 @@ public class TbApiService {
         }).collect(Collectors.toList());
     }
 
+    public JSONArray getUsersInfo(List<String> ids){// userIds
+        JSONObject result=header(HttpUtil.createPost(PRIVATE_API_URL + "/org/member/batchGet").body(JSONObject.toJSONString(UtilMap.map("userIds",ids))));
+        return result.getJSONArray("result");
+    }
+
+    public Map getUsersMapList(List<String> ids,Boolean isTB){
+        JSONArray array=getUsersInfo(isTB?ids:getUserIds(String.join(",",ids),false));
+        Map map=new HashMap();
+        for (int i = 0; i < array.size(); i++) {
+            map.put(ids.get(i),array.getJSONObject(i));
+        }
+        return map;
+    }
+
     public JSONArray getStageId(String projectId,String q){
         JSONObject result=header(HttpUtil.createGet(PRIVATE_API_URL + "/v3/project/{projectId}/stage/search?q=".replace("{projectId}",projectId)+q));
         return result.getJSONArray("result");

+ 221 - 22
src/main/java/com/muzhi/tianhe/service/impl/ThTbServiceImpl.java

@@ -1,5 +1,6 @@
 package com.muzhi.tianhe.service.impl;
 
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.server.aliwork.YDConf;
@@ -9,6 +10,8 @@ import com.malk.server.common.McR;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilEnv;
 import com.malk.utils.UtilMap;
+import com.muzhi.tianhe.entity.Task;
+import com.muzhi.tianhe.mapper.TaskMapper;
 import com.muzhi.tianhe.service.ThTbService;
 import com.muzhi.tianhe.util.PublicUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -27,6 +30,8 @@ public class ThTbServiceImpl implements ThTbService {
     private TbApiService tbApiService;
     @Autowired
     private YDClient ydClient;
+    @Autowired
+    private TaskMapper taskMapper;
 
     private static String PROJECT_TAG_ID = "65b77b8f7bbdd92f48e6920d"; // 战略部分组
 
@@ -456,6 +461,7 @@ public class ThTbServiceImpl implements ThTbService {
 
     @Override
     public void syncState() {
+        taskMapper.delete(null);
         syncStateByTag(PROJECT_TAG_ID);
     }
 
@@ -475,6 +481,7 @@ public class ThTbServiceImpl implements ThTbService {
         if (UtilEnv.getActiveProfile().equals(UtilEnv.ENV_PROD)) {
             formUuid.put("TASK", "FORM-B8C09F8900BD43EC8025068B3CB4C4F8SLAD");
             formUuid.put("CUSTFIELD", "FORM-031FC90C7D3C49A394600D4EE6C037915QSI");
+            formUuid.put("TASKTYPE", "FORM-69A0C9C57CCA4793B5E5F5E118824548S6T7");
         } else {
             formUuid.put("TASK", "FORM-59A439BCB8194F10B8C862C579F285F5KWG6");                // 文件夹/文件版本记录
             formUuid.put("CUSTFIELD", "FORM-C5B14D2EE4464AED835BA259388E829D9937");            // 文件夹权限
@@ -500,29 +507,54 @@ public class ThTbServiceImpl implements ThTbService {
         for (int j = 0; j < array.size(); j++) {
             String cTname=array.getJSONObject(j).getString("name");
             String cTid=array.getJSONObject(j).getString("id");
-            if(cTname.contains("变更")){
-                continue;
-            }
+            ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASKTYPE"))
+                    .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_m0rkuewc, textField_m0rkuewe, textField_m0vtq84z, textField_m0vtq850",projectId,project.getString("name"),cTid,cTname)))
+                    .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m0rkuewc",projectId,"projectId", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ),
+                            new YDSearch("textField_m0vtq84z",cTid,"cTid", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))))
+                    .build(), YDConf.FORM_OPERATION.upsert);
             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");
+            if(cTname.contains("一级任务")){
+                custNames=Arrays.asList("责任人","联席责任人","责任部门","年度目标/年度战略意图澄清");
+                ydKyes=Arrays.asList(NULLDATA,NULLDATA,"textField_m102rax6","textField_m4s27u11");
+            }else if(cTname.contains("二级任务")){
+                custNames=Arrays.asList("责任人","联席责任人","责任部门","上级任务责任人","验收依据","统计口径","风险与问题","解决方案思路","任务权重");
+                ydKyes=Arrays.asList(NULLDATA,NULLDATA,"textField_m102rax6",NULLDATA,"textField_m102rax9","textField_m21hliea","textField_m21hlie0","textField_m21hlie1","textField_m4w6u6t4");
+//            }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");
+                custNames=Arrays.asList("指标权重","统计口径","验收依据","年度指标完成情况","自评分","证明材料",
+                        "Q1目标","1月实际达成","1月偏差原因说明","1月改进举措","2月实际达成","2月偏差原因说明","2月改进举措","3月实际达成","3月偏差原因说明","3月改进举措",
+                        "Q2目标","4月实际达成","4月偏差原因说明","4月改进举措","5月实际达成","5月偏差原因说明","5月改进举措","6月实际达成","6月偏差原因说明","6月改进举措",
+                        "Q3目标","7月实际达成","7月偏差原因说明","7月改进举措","8月实际达成","8月偏差原因说明","8月改进举措","9月实际达成","9月偏差原因说明","9月改进举措",
+                        "Q4目标","10月实际达成","10月偏差原因说明","10月改进举措","11月实际达成","11月偏差原因说明","11月改进举措","12月实际达成","12月偏差原因说明","12月改进举措");
+                ydKyes=Arrays.asList("textField_m0xldyf7","textField_m21hliea","textField_m102rax9","textField_m21hlieb","textField_m21hliec","textField_m21hlied",
+                        "textField_m102raxm",
+                            "textField_m4s27u1s","textField_m4s27u1u","textField_m4s27u1w", // 1月
+                            "textField_m4s27u1t","textField_m4s27u1v","textField_m4s27u1x", // 2月
+                            "textField_m21hlief","textField_m21hlieg","textField_m21hlieh", // q1
+                        "textField_m10at4ej",
+                            "textField_m4s27u1y","textField_m4s27u20","textField_m4s27u22", // 4月
+                            "textField_m4s27u1z","textField_m4s27u21","textField_m4s27u23", // 5月
+                            "textField_m21hliei","textField_m21hliel","textField_m21hlieo", // q2
+                        "textField_m10at4ek",
+                            "textField_m4s27u35","textField_m4s27u37","textField_m4s27u39", // 7月
+                            "textField_m4s27u36","textField_m4s27u38","textField_m4s27u3a", // 8月
+                            "textField_m21hliej","textField_m21hliem","textField_m21hliep", // q3
+                        "textField_m10at4el",
+                            "textField_m4s27u3b","textField_m4s27u3d","textField_m4s27u3f", // 10月
+                            "textField_m4s27u3c","textField_m4s27u3e","textField_m4s27u3g", // 11月
+                            "textField_m21hliek","textField_m21hlien","textField_m21hlieq" // q4
+                        );
+//                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<>();
@@ -580,7 +612,9 @@ public class ThTbServiceImpl implements ThTbService {
                         saveMap.put(ydKyes.get(k),getCustOne(taskCustValues.get(projectCusts.get(custNames.get(k))),"title"));
                     }
                 }
-
+                Task taskDto=JSONUtil.toBean(JSONObject.toJSONString(saveMap), Task.class);
+                taskDto.setResponsiblePerson(zrrList!=null&&zrrList.size()>0?zrrList.get(0):"");
+                taskMapper.insert(taskDto);
                 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))))
@@ -692,7 +726,7 @@ public class ThTbServiceImpl implements ThTbService {
             for (int i = 0; i < taskIds.length; i++) {
                 tbApiService.updateTaskLock(taskIds[i],false,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
                 tbApiService.updateTaskCustomfield(taskIds[i],param.getString("cId"),qzValues[i]);
-                tbApiService.updateTaskLock(taskIds[i],false,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
+                tbApiService.updateTaskLock(taskIds[i],true,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
                 updateYdData(UtilMap.map(ydKey,qzValues[i]),taskIds[i]);
             }
         }else if(type.equals("lxzrr")){
@@ -719,6 +753,171 @@ public class ThTbServiceImpl implements ThTbService {
         return McR.success();
     }
 
+    @Override
+    public void saveTask(String procInsId){
+        Map data=ydClient.queryData(YDParam.builder().formInstanceId(procInsId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+        log.info("data:{}",JSONObject.toJSONString(data));
+        String typeDetail= UtilMap.getString(data,"selectField_m4uzcu6a");// 新增类型
+        String typeId= UtilMap.getString(data,"textField_m0xh64cx");// 新增的任务类型编号
+        String fTaskId = UtilMap.getString(data,"textField_m0yxa9yx");// 父任务编号
+        String projectId = UtilMap.getString(data,"textField_m0vva0s7");// 项目编号
+        Map<String,String> projectCusts=new HashMap<>(); // 项目自定义字段 Map<name,id>
+        List<JSONObject> projectCoutList=tbApiService.getProjectCustomfield(projectId).toJavaList(JSONObject.class); // 查询项目自定义字段
+        projectCoutList.forEach(item -> {
+            projectCusts.put(item.getString("name"),item.getString("id"));
+        });
+        if(typeDetail.equals("指标新增")){
+            String cId=projectCusts.get("指标权重");
+            List<Map> list=UtilMap.getList(data,"tableField_m4s6oeqc"); // 指标任务
+            for (Map task:list){
+                String qzValue=UtilMap.getString(task,"numberField_m4s6oeqa");// 新权重
+                if(!com.malk.utils.PublicUtil.isNull(task.get("textField_m4s6oeqj"))){
+                    // 修改同级任务权重
+                    String taskId=UtilMap.getString(task,"textField_m4s6oeqj"); // 任务编号
+                    tbApiService.updateTaskLock(taskId,false, Arrays.asList(UtilMap.map("action","cf:"+cId+"$update")));
+                    tbApiService.updateTaskCustomfield(taskId,cId,qzValue);
+                    tbApiService.updateTaskLock(taskId,true,Arrays.asList(UtilMap.map("action","cf:"+cId+"$update")));
+                    updateYdData(UtilMap.map("textField_m0xldyf7",qzValue),taskId);
+                }else{
+                    // 新增任务
+                    JSONObject newTask=new JSONObject();
+                    newTask.put("projectId",projectId); // 项目id
+                    newTask.put("content",task.get("textField_m4s6oeq7")); // 任务标题
+                    newTask.put("parentTaskId",fTaskId); // 父任务id
+                    newTask.put("scenariofieldconfigId",typeId); // 任务类型id
+                    List<Map> customfields=new ArrayList<>();
+                    customfields.add(getCustomfield(cId,qzValue));// 权重
+                    customfields.add(getCustomfield(projectCusts.get("统计口径"),UtilMap.getString(task,"textField_m4uzcu70")));
+                    customfields.add(getCustomfield(projectCusts.get("验收依据"),UtilMap.getString(task,"textField_m4uzcu71")));
+                    customfields.add(getCustomfield(projectCusts.get("Q2目标"),UtilMap.getString(task,"textField_m4uzcu72")));
+                    customfields.add(getCustomfield(projectCusts.get("Q3目标"),UtilMap.getString(task,"textField_m4uzcu73")));
+                    customfields.add(getCustomfield(projectCusts.get("Q4目标"),UtilMap.getString(task,"textField_m4uzcu74")));
+                    customfields.add(getCustomfield(projectCusts.get("Q5目标"),UtilMap.getString(task,"textField_m4uzcu75")));
+                    newTask.put("customfields",customfields); // 自定义字段值列表
+                    log.info("newTask:{}",JSONObject.toJSONString(newTask));
+                    JSONObject resultObj=tbApiService.addTask(newTask);
+                    log.info("newTaskResult:{}",JSONObject.toJSONString(resultObj));
+                    String newTaskId=resultObj.getJSONObject("result").getString("taskId");
+                    Map ydTaskMap=UtilMap.map("textField_m0xldyf7, textField_m0rkuewb, textField_m0rkuewd",qzValue,newTaskId,task.get("textField_m4s6oeq7"));// 权重 ,任务编号, 任务标题
+                    ydTaskMap.put("textField_m21hliea",UtilMap.getString(task,"textField_m4uzcu70"));// 统计口径
+                    ydTaskMap.put("textField_m102rax9",UtilMap.getString(task,"textField_m4uzcu71"));// 验收依据
+                    ydTaskMap.put("textField_m102raxm",UtilMap.getString(task,"textField_m4uzcu72"));// Q1目标
+                    ydTaskMap.put("textField_m10at4ej",UtilMap.getString(task,"textField_m4uzcu73"));// Q2目标
+                    ydTaskMap.put("textField_m10at4ek",UtilMap.getString(task,"textField_m4uzcu74"));// Q3目标
+                    ydTaskMap.put("textField_m10at4el",UtilMap.getString(task,"textField_m4uzcu75"));// Q4目标
+                    ydTaskMap.put("textField_m0vtq84z",typeId);// 任务类型ID
+                    ydTaskMap.put("textField_m0vtq850",data.get("selectField_m0vva0s5"));// 任务类型名称
+                    ydTaskMap.put("textField_m0rkuewc",procInsId); // 项目ID
+//                    ydTaskMap.put("textField_m0rkuewe",data.get("selectField_m0vva0s5"));// 项目名称
+                    ydTaskMap.put("textField_m0xldyf3",fTaskId); // 上级任务编号
+                    ydTaskMap.put("employeeField_m21hlidz",UtilMap.getList(data,"employeeField_m1iqq5z3_id"));// 上级任务责任人
+                    updateYdData(ydTaskMap,newTaskId);
+                }
+            }
+        }else if(typeDetail.equals("二级任务新增")){
+            String cId=projectCusts.get("任务权重");
+            List<Map> list=UtilMap.getList(data,"tableField_m4uzcu6q"); // 指标任务
+            for (Map task:list){
+                String qzValue=UtilMap.getString(task,"numberField_m4uzcu6z");// 新权重
+                if(!com.malk.utils.PublicUtil.isNull(task.get("textField_m4uzcu6p"))){
+                    // 修改同级任务权重
+                    String taskId=UtilMap.getString(task,"textField_m4uzcu6p"); // 任务编号
+                    tbApiService.updateTaskLock(taskId,false, Arrays.asList(UtilMap.map("action","cf:"+cId+"$update")));
+                    tbApiService.updateTaskCustomfield(taskId,cId,qzValue);
+                    tbApiService.updateTaskLock(taskId,true,Arrays.asList(UtilMap.map("action","cf:"+cId+"$update")));
+                    updateYdData(UtilMap.map("textField_m0xldyf7",qzValue),taskId);
+                }else{
+                    // 新增任务
+                    JSONObject newTask=new JSONObject();
+                    newTask.put("projectId",projectId); // 项目id
+                    newTask.put("content",task.get("textField_m4uzcu6k")); // 任务标题
+                    newTask.put("parentTaskId",fTaskId); // 父任务id
+                    newTask.put("scenariofieldconfigId",typeId); // 任务类型id
+                    List<Map> customfields=new ArrayList<>();
+                    customfields.add(getCustomfield(cId,qzValue));// 权重
+                    customfields.add(getCustomfield(projectCusts.get("责任部门"),UtilMap.getString(task,"textField_m4uzcu6n")));
+                    List<String> ids=UtilMap.getList(task,"employeeField_m4uzcu6l_id");
+                    List<String> tbIds=tbApiService.getUserIds(String.join(",",ids),false);
+                    customfields.add(getCustomfield(projectCusts.get("责任人"),tbIds,UtilMap.getList(task,"employeeField_m4uzcu6l")));
+                    List<String> ids2=UtilMap.getList(task,"employeeField_m4uzcu6m_id");
+                    List<String> tbIds2=tbApiService.getUserIds(String.join(",",ids2),false);
+                    customfields.add(getCustomfield(projectCusts.get("联席责任人"),tbIds2,UtilMap.getList(task,"employeeField_m4uzcu6m")));
+                    List<String> ids3=UtilMap.getList(data,"employeeField_m1iqq5z3_id");
+                    List<String> tbIds3=tbApiService.getUserIds(String.join(",",ids3),false);
+                    customfields.add(getCustomfield(projectCusts.get("上级任务责任人"),tbIds3,UtilMap.getList(data,"employeeField_m1iqq5z3")));
+                    newTask.put("customfields",customfields); // 自定义字段值列表
+                    log.info("newTask:{}",JSONObject.toJSONString(newTask));
+                    JSONObject resultObj=tbApiService.addTask(newTask);
+                    log.info("newTaskResult:{}",JSONObject.toJSONString(resultObj));
+                    String newTaskId=resultObj.getJSONObject("result").getString("taskId");
+                    Map ydTaskMap=UtilMap.map("textField_m4w6u6t4, textField_m0rkuewb, textField_m0rkuewd",qzValue,newTaskId,task.get("textField_m4uzcu6k"));// 权重 ,任务编号, 任务标题
+                    ydTaskMap.put("textField_m102rax6",UtilMap.getString(task,"textField_m4uzcu6n"));//
+                    ydTaskMap.put("employeeField_m201jmmi",UtilMap.getString(task,"employeeField_m4uzcu6l_id"));//
+                    ydTaskMap.put("employeeField_m0xldyf5",UtilMap.getString(task,"employeeField_m4uzcu6m_id"));//
+                    ydTaskMap.put("textField_m0vtq84z",typeId);// 任务类型ID
+                    ydTaskMap.put("textField_m0vtq850",data.get("selectField_m0vva0s5"));// 任务类型名称
+                    ydTaskMap.put("textField_m0rkuewc",procInsId); // 项目ID
+//                    ydTaskMap.put("textField_m0rkuewe",data.get("selectField_m0vva0s5"));// 项目名称
+                    ydTaskMap.put("textField_m0xldyf3",fTaskId); // 上级任务编号
+                    ydTaskMap.put("employeeField_m21hlidz",UtilMap.getList(data,"employeeField_m1iqq5z3_id"));// 上级任务责任人
+//                    updateYdData(ydTaskMap,newTaskId);
+                }
+            }
+        }else if(typeDetail.equals("一级任务新增")){
+            // 新增任务
+            List<Map> list=UtilMap.getList(data,"tableField_m4uzcu6f"); // 指标任务
+            for (Map task:list){
+                // 新增任务
+                JSONObject newTask=new JSONObject();
+                newTask.put("projectId",projectId); // 项目id
+                newTask.put("content",task.get("textField_m4uzcu6b")); // 任务标题
+                newTask.put("scenariofieldconfigId",typeId); // 任务类型id
+                List<Map> customfields=new ArrayList<>();
+                customfields.add(getCustomfield(projectCusts.get("责任部门"),UtilMap.getString(task,"textField_m4uzcu6i")));
+                customfields.add(getCustomfield(projectCusts.get("年度目标/年度战略意图澄清"),UtilMap.getString(task,"textField_m4uzcu6j")));
+                List<String> ids=UtilMap.getList(task,"employeeField_m4uzcu6g_id");
+                List<String> tbIds=tbApiService.getUserIds(String.join(",",ids),false);
+                customfields.add(getCustomfield(projectCusts.get("责任人"),tbIds,UtilMap.getList(task,"employeeField_m4uzcu6g")));
+                List<String> ids2=UtilMap.getList(task,"employeeField_m4uzcu6h_id");
+                List<String> tbIds2=tbApiService.getUserIds(String.join(",",ids2),false);
+                customfields.add(getCustomfield(projectCusts.get("联席责任人"),tbIds2,UtilMap.getList(task,"employeeField_m4uzcu6h")));
+                newTask.put("customfields",customfields); // 自定义字段值列表
+                log.info("newTask:{}",JSONObject.toJSONString(newTask));
+                JSONObject resultObj=tbApiService.addTask(newTask);
+                log.info("newTaskResult:{}",JSONObject.toJSONString(resultObj));
+                String newTaskId=resultObj.getJSONObject("result").getString("taskId");
+                Map ydTaskMap=UtilMap.map("textField_m0rkuewb, textField_m0rkuewd",newTaskId,task.get("textField_m4uzcu6b"));// 任务编号, 任务标题
+                ydTaskMap.put("textField_m102rax6",UtilMap.getString(task,"textField_m4uzcu6i"));//
+                ydTaskMap.put("textField_m4s27u11",UtilMap.getString(task,"textField_m4uzcu6j"));//
+                ydTaskMap.put("employeeField_m201jmmi",UtilMap.getString(task,"employeeField_m4uzcu6g_id"));//
+                ydTaskMap.put("employeeField_m0xldyf5",UtilMap.getString(task,"employeeField_m4uzcu6h_id"));//
+                ydTaskMap.put("textField_m0vtq84z",typeId);// 任务类型ID
+                ydTaskMap.put("textField_m0vtq850",data.get("selectField_m0vva0s5"));// 任务类型名称
+                ydTaskMap.put("textField_m0rkuewc",procInsId); // 项目ID
+//                    ydTaskMap.put("textField_m0rkuewe",data.get("selectField_m0vva0s5"));// 项目名称
+                updateYdData(ydTaskMap,newTaskId);
+            }
+        }
+    }
+
+    private Map getCustomfield(String cfId,String value){
+        Map map=new HashMap();
+        map.put("cfId",cfId);
+        map.put("value", Arrays.asList(new JSONObject().fluentPut("title",value)));
+        return map;
+    }
+
+    private Map getCustomfield(String cfId,List<String> ids,List<String> names){
+        JSONArray array=new JSONArray();
+        for (int i = 0; i < ids.size(); i++) {
+            array.add(UtilMap.map("id, title",ids.get(i),names.get(i)));
+        }
+        Map map=new HashMap();
+        map.put("cfId",cfId);
+        map.put("value", array);
+        return map;
+    }
+
     private void updateYdData(Map saveMap,String taskid){
         ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASK"))
                 .formDataJson(JSONObject.toJSONString(saveMap))

+ 59 - 0
src/main/resources/mapper/TaskMapper.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.muzhi.tianhe.mapper.TaskMapper">
+
+        <select id="getUsers" parameterType="java.lang.String" resultType="java.lang.String">
+                SELECT
+                    responsible_person
+                FROM
+                    `th_task_info`
+                WHERE
+                    1=1
+                <if test="projectId != null and projectId != ''">
+                        AND project_id = #{projectId}
+                </if>
+                GROUP BY
+                    responsible_person
+        </select>
+
+        <select id="selectColor" parameterType="java.util.Map" resultType="java.util.Map">
+                SELECT
+                    SUM(1) total,
+                    task_status
+                FROM
+                    `th_task_info`
+                WHERE
+                1=1
+                <if test="projectId != null and projectId != ''">
+                        AND project_id = #{projectId}
+                </if>
+                <if test="taskTypeId != null and taskTypeId != ''">
+                        AND task_type_id = #{taskTypeId}
+                </if>
+                <if test="responsiblePerson != null and responsiblePerson != ''">
+                        AND responsible_person LIKE CONCAT('%', #{responsiblePerson}, '%')
+                </if>
+                GROUP BY task_status
+        </select>
+
+        <select id="selectColorByPerson" parameterType="java.util.Map" resultType="java.util.Map">
+                SELECT
+                SUM(1) total,
+                task_status,
+                responsible_person
+                FROM
+                `th_task_info`
+                WHERE
+                1=1
+                <if test="projectId != null and projectId != ''">
+                        AND project_id = #{projectId}
+                </if>
+                <if test="taskTypeId != null and taskTypeId != ''">
+                        AND task_type_id = #{taskTypeId}
+                </if>
+                <if test="responsiblePerson != null and responsiblePerson != ''">
+                        AND responsible_person LIKE CONCAT('%', #{responsiblePerson}, '%')
+                </if>
+                GROUP BY task_status,responsible_person
+        </select>
+</mapper>

src/main/java/com/muzhi/tianhe/mapper/xml/TianheMapper.xml → src/main/resources/mapper/TianheMapper.xml


+ 11 - 3
src/test/java/com/muzhi/tianhe/TbTest.java

@@ -2,7 +2,13 @@ package com.muzhi.tianhe;
 
 import com.alibaba.fastjson.JSONArray;
 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.utils.PublicUtil;
+import com.malk.utils.UtilEnv;
+import com.malk.utils.UtilMap;
 import com.muzhi.tianhe.service.TbService;
 import com.muzhi.tianhe.service.ThTbService;
 import com.muzhi.tianhe.service.impl.TbApiService;
@@ -11,6 +17,8 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.util.*;
+
 @Slf4j
 @SpringBootTest(classes = TianHeApplication.class)
 public class TbTest {
@@ -46,9 +54,9 @@ public class TbTest {
 
     @Test
     public void syncStatus(){
-//        thTbService.syncState();
-//        thTbService.syncStateProject("66651dd9abba8250461819d6");
+        thTbService.syncState();
+//        thTbService.syncStatePronvject("66651dd9abba8250461819d6");
 //        thTbService.taskCancel(new JSONObject().fluentPut("taskId","66f66b7f790cb0ceca932b2d"));
+//        saveTask("a641df31-bc6d-41c9-9781-6f73300c3ce2");
     }
-
 }