lfx 6 days ago
parent
commit
886c5f188d

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

@@ -65,7 +65,7 @@ public class TbController {
     //获取项目状态
     //获取项目状态
     @Scheduled(cron = "0 0 1 * * ? ")
     @Scheduled(cron = "0 0 1 * * ? ")
     @ApiOperation(value = "获取项目状态")
     @ApiOperation(value = "获取项目状态")
-    @PostMapping("syncState")
+    @GetMapping("syncState")
     public McR syncState(){
     public McR syncState(){
         thTbService.syncState();
         thTbService.syncState();
         return McR.success();
         return McR.success();

+ 22 - 5
src/main/java/com/muzhi/tianhe/controller/ThTaskController.java

@@ -34,10 +34,18 @@ public class ThTaskController {
     @Autowired
     @Autowired
     private TbApiService tbApiService;
     private TbApiService tbApiService;
 
 
+    List<String> adminIds=Arrays.asList("65c09881acdc78fac189e64b","66be45065248e0992ba2429c","65c09a7cd282db9e95fd57fc","65c0a2a3acdc78fac18a1652","65c09880d282db9e95fd51a9","65e9562555d0f38026a30338");
+
     @GetMapping("getUsers")
     @GetMapping("getUsers")
-    public McR getUsers(String projectId){
+    public McR getUsers(String projectId,String uid){
         try {
         try {
-            List<String> list=taskMapper.getUsers(projectId);
+            String duId;
+            if(adminIds.contains(uid)){
+                duId="";
+            }else{
+                duId=tbApiService.getUserId(uid,true);
+            }
+            List<String> list=taskMapper.getUsers(projectId,duId);
             List<Map> result=new ArrayList<>();
             List<Map> result=new ArrayList<>();
             for(String id:list){
             for(String id:list){
                 if(PublicUtil.isNull(id)){
                 if(PublicUtil.isNull(id)){
@@ -46,6 +54,7 @@ public class ThTaskController {
 
 
                 result.add(UtilMap.map("id, name",id,getName(id)));
                 result.add(UtilMap.map("id, name",id,getName(id)));
             }
             }
+            result.add(UtilMap.map("id, name","-100","未设置负责人"));
             return McR.success(result);
             return McR.success(result);
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
@@ -60,14 +69,22 @@ public class ThTaskController {
     }
     }
 
 
     @GetMapping("selectColor")
     @GetMapping("selectColor")
-    public McR selectColor(String projectId,String taskTypeId,String responsiblePerson){
+    public McR selectColor(String projectId,String taskTypeId,String responsiblePerson,String uid,Boolean needAll){
         JSONObject param=new JSONObject();
         JSONObject param=new JSONObject();
         try {
         try {
             param.put("projectId",projectId);
             param.put("projectId",projectId);
             param.put("taskTypeId",taskTypeId);
             param.put("taskTypeId",taskTypeId);
-            param.put("responsiblePerson",responsiblePerson);
+            String duId;
+            if(adminIds.contains(uid)){
+                duId="";
+            }else{
+                duId=tbApiService.getUserId(uid,true);
+            }
+            param.put("responsiblePerson",responsiblePerson.equals(duId)&&needAll?"":responsiblePerson);
+            param.put("uid",duId);
             List<Map> list=taskMapper.selectColor(param);
             List<Map> list=taskMapper.selectColor(param);
-            return McR.success(list);
+//            Integer total=taskMapper.selectColorTotal(param);
+            return McR.success(UtilMap.map("list, total",list,0));
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
             return McR.error("201",e.getMessage());
             return McR.error("201",e.getMessage());

+ 5 - 1
src/main/java/com/muzhi/tianhe/mapper/TaskMapper.java

@@ -16,7 +16,11 @@ public interface TaskMapper extends BaseMapper<Task> {
 
 
     List<Map> selectColor(Map param);
     List<Map> selectColor(Map param);
 
 
+    int updateTaskQx(@Param("taskId") String taskId,@Param("viewPermission") String viewPermission);
+
+    Integer selectColorTotal(Map param);
+
     List<Map> selectColorByPerson(Map param);
     List<Map> selectColorByPerson(Map param);
 
 
-    List<String> getUsers(@Param("projectId")String projectId);
+    List<String> getUsers(@Param("projectId")String projectId,@Param("uid")String uid);
 }
 }

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

@@ -110,6 +110,19 @@ public class TbApiService {
         return result;
         return result;
     }
     }
 
 
+    public Object updateTaskInvolveMembers(String taskId,List<String> involveMembers,List<String> addInvolvers,List<String> delInvolvers){
+        Map map=new HashMap();
+        map.put("disableNotification",true);
+        map.put("disableActivity",false);
+        if (involveMembers!=null&&involveMembers.size()>0){map.put("involveMembers",involveMembers);}
+        if (addInvolvers!=null&&addInvolvers.size()>0){map.put("addInvolvers",addInvolvers);}
+        if (delInvolvers!=null&&delInvolvers.size()>0){map.put("delInvolvers",delInvolvers);}
+        JSONObject result=header(HttpRequest.put(PRIVATE_API_URL + "/v3/task/{taskId}/involveMembers".replace("{taskId}",taskId))
+                .header("x-operator-id",tbOperatorId)
+                .body(JSONObject.toJSONString(map)));
+        return result;
+    }
+
     public JSONArray getProjectCust(String projectId){
     public JSONArray getProjectCust(String projectId){
         JSONObject result=header(HttpRequest.get(PRIVATE_API_URL + "/v3/project/"+ projectId +"/status/customfield/list"));
         JSONObject result=header(HttpRequest.get(PRIVATE_API_URL + "/v3/project/"+ projectId +"/status/customfield/list"));
         return result.getJSONArray("result");
         return result.getJSONArray("result");

+ 48 - 7
src/main/java/com/muzhi/tianhe/service/impl/ThTbServiceImpl.java

@@ -3,11 +3,15 @@ package com.muzhi.tianhe.service.impl;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.aliwork.YDSearch;
 import com.malk.server.aliwork.YDSearch;
 import com.malk.server.common.McR;
 import com.malk.server.common.McR;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilDateTime;
 import com.malk.utils.UtilEnv;
 import com.malk.utils.UtilEnv;
 import com.malk.utils.UtilMap;
 import com.malk.utils.UtilMap;
 import com.muzhi.tianhe.entity.Task;
 import com.muzhi.tianhe.entity.Task;
@@ -62,7 +66,7 @@ public class ThTbServiceImpl implements ThTbService {
             if(name.contains("变更")){
             if(name.contains("变更")){
                 log.info("变更流程");
                 log.info("变更流程");
                 taskChange(task,taskId);
                 taskChange(task,taskId);
-            }else if(name.contains("年度指标")){
+            }else if(name.contains("年度指标")||name.contains("二级任务")){
                 log.info("年度指标");
                 log.info("年度指标");
                 updateTaskState(task,tfid);
                 updateTaskState(task,tfid);
             }else{
             }else{
@@ -397,6 +401,24 @@ public class ThTbServiceImpl implements ThTbService {
         list2.forEach(item -> projectSfc.put(item.getString("id"),item.getString("name")));
         list2.forEach(item -> projectSfc.put(item.getString("id"),item.getString("name")));
         String cid=projectCusts.get("上级任务责任人");
         String cid=projectCusts.get("上级任务责任人");
         JSONArray tasks=tbApiService.getTasksByParent(task.getString("id"));
         JSONArray tasks=tbApiService.getTasksByParent(task.getString("id"));
+
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode root = null;
+        try {
+            root = mapper.readTree(data.toJSONString());
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+        List<String> oldIds = extractIds(root.path("customfieldOldValue"));
+        List<String> newIds = extractIds(root.path("customfieldValue"));
+        // 计算差异
+        Set<String> oldSet = new HashSet<>(oldIds);
+        Set<String> newSet = new HashSet<>(newIds);
+        Set<String> added = new HashSet<>(newSet);
+        added.removeAll(oldSet);
+        Set<String> removed = new HashSet<>(oldSet);
+        removed.removeAll(newSet);
+
         for (int i = 0; i < tasks.size(); i++) {
         for (int i = 0; i < tasks.size(); i++) {
             JSONObject taskDetail=tasks.getJSONObject(i);
             JSONObject taskDetail=tasks.getJSONObject(i);
             String id=taskDetail.getString("id");
             String id=taskDetail.getString("id");
@@ -406,20 +428,36 @@ public class ThTbServiceImpl implements ThTbService {
                 for (int j = 0; j < tasks2.size(); j++) {
                 for (int j = 0; j < tasks2.size(); j++) {
                     JSONObject taskDetail2=tasks2.getJSONObject(j);
                     JSONObject taskDetail2=tasks2.getJSONObject(j);
                     String id2=taskDetail2.getString("id");
                     String id2=taskDetail2.getString("id");
+                    tbApiService.updateTaskInvolveMembers(id2,null,new ArrayList<>(added),new ArrayList<>(removed));
                     if(projectSfc.get(taskDetail2.getString("sfcId")).contains("指标")){
                     if(projectSfc.get(taskDetail2.getString("sfcId")).contains("指标")){
                         // 还是指标不处理
                         // 还是指标不处理
                     }else{
                     }else{
                         // 任务  更新 上级任务责任人
                         // 任务  更新 上级任务责任人
+                        tbApiService.updateTaskLock(id2,false,Arrays.asList(UtilMap.map("action","cf:"+cid+"$update")));
                         tbApiService.updateTaskCustomfield(id2,cid,array);
                         tbApiService.updateTaskCustomfield(id2,cid,array);
+                        tbApiService.updateTaskLock(id2,true,Arrays.asList(UtilMap.map("action","cf:"+cid+"$update")));
                     }
                     }
                 }
                 }
             }else{
             }else{
+                tbApiService.updateTaskInvolveMembers(id,null,new ArrayList<>(added),new ArrayList<>(removed));
                 // 任务  更新 上级任务责任人
                 // 任务  更新 上级任务责任人
+                tbApiService.updateTaskLock(id,false,Arrays.asList(UtilMap.map("action","cf:"+cid+"$update")));
                 tbApiService.updateTaskCustomfield(id,cid,array);
                 tbApiService.updateTaskCustomfield(id,cid,array);
+                tbApiService.updateTaskLock(id,true,Arrays.asList(UtilMap.map("action","cf:"+cid+"$update")));
             }
             }
         }
         }
     }
     }
 
 
+    private static List<String> extractIds(JsonNode arrayNode) {
+        List<String> ids = new ArrayList<>();
+        if (arrayNode.isArray()) {
+            for (JsonNode item : arrayNode) {
+                ids.add(item.path("id").asText());
+            }
+        }
+        return ids;
+    }
+
     // 变更任务创建
     // 变更任务创建
     public void creatChangeTask(JSONObject task,String name){
     public void creatChangeTask(JSONObject task,String name){
         String projectId=task.getString("projectId");// 项目ID
         String projectId=task.getString("projectId");// 项目ID
@@ -556,8 +594,9 @@ public class ThTbServiceImpl implements ThTbService {
 //                        "textField_m10at4el","textField_m21hliek","textField_m21hlien","textField_m21hlieq", // q4
 //                        "textField_m10at4el","textField_m21hliek","textField_m21hlien","textField_m21hlieq", // q4
 //                        "textField_m21hlieb","textField_m21hliec","textField_m21hlied");
 //                        "textField_m21hlieb","textField_m21hliec","textField_m21hlied");
             }else{
             }else{
-                custNames=new ArrayList<>();
-                ydKyes=new ArrayList<>();
+                continue;
+//                custNames=new ArrayList<>();
+//                ydKyes=new ArrayList<>();
             }
             }
             projectCoutList.forEach(item -> {
             projectCoutList.forEach(item -> {
                 if(custNames.contains(item.getString("name"))){
                 if(custNames.contains(item.getString("name"))){
@@ -581,6 +620,7 @@ public class ThTbServiceImpl implements ThTbService {
                         ,task.getString("id"),task.getString("content")
                         ,task.getString("id"),task.getString("content")
                         ,projectId,project.getString("name"),map.get(task.getString("tfsId"))
                         ,projectId,project.getString("name"),map.get(task.getString("tfsId"))
                         ,cTid,cTname);
                         ,cTid,cTname);
+                saveMap.put("dateField_m7jvykvt", UtilDateTime.getLocalDateTimeTimeStamp()); // 最近同步时间
                 saveMap.put("textField_m0xldyf3",task.getString("parentTaskId"));
                 saveMap.put("textField_m0xldyf3",task.getString("parentTaskId"));
                 JSONArray ancestorIds=task.getJSONArray("ancestorIds");
                 JSONArray ancestorIds=task.getJSONArray("ancestorIds");
                 int size=ancestorIds.size();
                 int size=ancestorIds.size();
@@ -613,7 +653,7 @@ public class ThTbServiceImpl implements ThTbService {
                     }
                     }
                 }
                 }
                 Task taskDto=JSONUtil.toBean(JSONObject.toJSONString(saveMap), Task.class);
                 Task taskDto=JSONUtil.toBean(JSONObject.toJSONString(saveMap), Task.class);
-                taskDto.setResponsiblePerson(zrrList!=null&&zrrList.size()>0?zrrList.get(0):"");
+                taskDto.setResponsiblePerson(zrrList!=null&&zrrList.size()>0?zrrList.get(0):"-100");
                 taskMapper.insert(taskDto);
                 taskMapper.insert(taskDto);
                 ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASK"))
                 ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASK"))
                         .formDataJson(JSONObject.toJSONString(saveMap))
                         .formDataJson(JSONObject.toJSONString(saveMap))
@@ -627,9 +667,9 @@ public class ThTbServiceImpl implements ThTbService {
             String parentTaskId=UtilMap.getString(taskData,"parentTaskId");
             String parentTaskId=UtilMap.getString(taskData,"parentTaskId");
             List<String> zrr=UtilMap.getList(taskData,"zrr");
             List<String> zrr=UtilMap.getList(taskData,"zrr");
             // 父项目添加当前项目负责人权限
             // 父项目添加当前项目负责人权限
-            if(!PublicUtil.isNull(parentTaskId)){
-                addTaskAuthUser("textField_m0rkuewb",parentTaskId,zrr); // 更新父级
-            }
+//            if(!PublicUtil.isNull(parentTaskId)){
+//                addTaskAuthUser("textField_m0rkuewb",parentTaskId,zrr); // 更新父级
+//            }
             // 查询父级任务并修改权限数据
             // 查询父级任务并修改权限数据
             addTaskAuthUser("textField_m21p4jl8",taskId,zrr); // 更新子级
             addTaskAuthUser("textField_m21p4jl8",taskId,zrr); // 更新子级
         }
         }
@@ -648,6 +688,7 @@ public class ThTbServiceImpl implements ThTbService {
                 ydClient.operateData(YDParam.builder().formInstId(formInstanceId).updateFormDataJson(
                 ydClient.operateData(YDParam.builder().formInstId(formInstanceId).updateFormDataJson(
                         JSONObject.toJSONString(UtilMap.map("employeeField_m217qmy5",newUsers))
                         JSONObject.toJSONString(UtilMap.map("employeeField_m217qmy5",newUsers))
                 ).build(), YDConf.FORM_OPERATION.update);
                 ).build(), YDConf.FORM_OPERATION.update);
+                taskMapper.updateTaskQx(UtilMap.getString(formData,"textField_m0rkuewb"),JSONObject.toJSONString(newUsers));
             }
             }
         }
         }
     }
     }

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

@@ -35,7 +35,7 @@ teambition:
   AppID: 65f92ac8046a09f810107919
   AppID: 65f92ac8046a09f810107919
   AppSecret: fy9OcKys3ZMdPnj0jvATrni5LvEn8ksk
   AppSecret: fy9OcKys3ZMdPnj0jvATrni5LvEn8ksk
   TenantId: 65b1dca21ab0fa13be993595
   TenantId: 65b1dca21ab0fa13be993595
-  OperatorId: 65b1dc8355d0f38026a1c3db    # 公共账号, 需要有操作权限 [牧语]
+  OperatorId: 65c09af5d282db9e95fd590d    # 公共账号, 需要有操作权限 [牧语]
   domain: https://tb.trinasolar.com:443/gateway
   domain: https://tb.trinasolar.com:443/gateway
 # aliwork
 # aliwork
 aliwork:
 aliwork:

+ 36 - 2
src/main/resources/mapper/TaskMapper.xml

@@ -9,15 +9,46 @@
                     `th_task_info`
                     `th_task_info`
                 WHERE
                 WHERE
                     1=1
                     1=1
+                  and responsible_person != '-100'
                 <if test="projectId != null and projectId != ''">
                 <if test="projectId != null and projectId != ''">
                         AND project_id = #{projectId}
                         AND project_id = #{projectId}
                 </if>
                 </if>
+                <if test="uid != null and uid != ''">
+                        AND (responsible_person = #{uid} or view_permission LIKE CONCAT('%', #{uid}, '%'))
+                </if>
                 GROUP BY
                 GROUP BY
                     responsible_person
                     responsible_person
         </select>
         </select>
 
 
+        <select id="selectColorTotal" parameterType="java.util.Map" resultType="java.lang.Integer">
+                SELECT
+                  SUM(1) total
+                FROM
+                `th_task_info`
+                WHERE
+                1=1
+                AND task_status IN ('季度红灯','季度黄灯','季度绿灯','待处理')
+                <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>
+        </select>
+
+        <update id="updateTaskQx" parameterType="java.lang.String">
+                update th_task_info set view_permission = #{viewPermission} where task_id = #{taskId}
+        </update>
+
         <select id="selectColor" parameterType="java.util.Map" resultType="java.util.Map">
         <select id="selectColor" parameterType="java.util.Map" resultType="java.util.Map">
                 SELECT
                 SELECT
+                SUM(CASE WHEN task_type_name="一级任务" THEN 1 ELSE 0 END )  level1,
+                SUM(CASE WHEN task_type_name="二级任务" || task_type_name="二级年度指标" THEN 1 ELSE 0 END )  level2,
+                SUM( CASE WHEN task_type_name = "二级任务" THEN 1 ELSE 0 END ) level2t,
+                SUM( CASE WHEN task_type_name = "二级年度指标" THEN 1 ELSE 0 END ) level2z,
                     SUM(1) total,
                     SUM(1) total,
                     task_status
                     task_status
                 FROM
                 FROM
@@ -27,12 +58,15 @@
                 <if test="projectId != null and projectId != ''">
                 <if test="projectId != null and projectId != ''">
                         AND project_id = #{projectId}
                         AND project_id = #{projectId}
                 </if>
                 </if>
-                <if test="taskTypeId != null and taskTypeId != ''">
-                        AND task_type_id = #{taskTypeId}
+                <if test="taskTypeName != null and taskTypeName != ''">
+                        AND task_type_name LIKE CONCAT('%', #{taskTypeName}, '%')
                 </if>
                 </if>
                 <if test="responsiblePerson != null and responsiblePerson != ''">
                 <if test="responsiblePerson != null and responsiblePerson != ''">
                         AND responsible_person LIKE CONCAT('%', #{responsiblePerson}, '%')
                         AND responsible_person LIKE CONCAT('%', #{responsiblePerson}, '%')
                 </if>
                 </if>
+                <if test="uid != null and uid != ''">
+                        AND (responsible_person = #{uid} or view_permission LIKE CONCAT('%', #{uid}, '%'))
+                </if>
                 GROUP BY task_status
                 GROUP BY task_status
         </select>
         </select>
 
 

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

@@ -54,7 +54,8 @@ public class TbTest {
 
 
     @Test
     @Test
     public void syncStatus(){
     public void syncStatus(){
-        thTbService.syncState();
+//        thTbService.syncState();
+        System.out.println(tbApiService.getUserId("229579",false));;
 //        thTbService.syncStatePronvject("66651dd9abba8250461819d6");
 //        thTbService.syncStatePronvject("66651dd9abba8250461819d6");
 //        thTbService.taskCancel(new JSONObject().fluentPut("taskId","66f66b7f790cb0ceca932b2d"));
 //        thTbService.taskCancel(new JSONObject().fluentPut("taskId","66f66b7f790cb0ceca932b2d"));
 //        saveTask("a641df31-bc6d-41c9-9781-6f73300c3ce2");
 //        saveTask("a641df31-bc6d-41c9-9781-6f73300c3ce2");