Просмотр исходного кода

创建了自动更新项目成员的方法,刷新权限

verguenza 5 лет назад
Родитель
Сommit
d581793b54

+ 49 - 6
src/main/java/com/galaxis/manatee/service/impl/ChuanyunServiceImpl.java

@@ -4,18 +4,20 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.capsule.bo.ChuanyunObject;
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.constant.StringConstant;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
 import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import com.galaxis.manatee.service.ChuanyunService;
-import com.galaxis.manatee.task.ChuanyunBasicDataScheduledTask;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -26,11 +28,9 @@ import java.util.List;
 public class ChuanyunServiceImpl implements ChuanyunService {
 
     private final Integer pageSize=20;
-    private final ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask;
     private final ChuanYunManager chuanYunManager;
 
-    public ChuanyunServiceImpl(ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask, ChuanYunManager chuanYunManager) {
-        this.chuanyunBasicDataScheduledTask = chuanyunBasicDataScheduledTask;
+    public ChuanyunServiceImpl(ChuanYunManager chuanYunManager) {
         this.chuanYunManager = chuanYunManager;
     }
 
@@ -59,7 +59,7 @@ public class ChuanyunServiceImpl implements ChuanyunService {
                 result.forEach(chuanyunGroupProjectDO ->  {
 
                     //处理项目对象中的项目成员数据(改为手动调用处理)
-                    chuanyunBasicDataScheduledTask.projectMemberCheck(chuanyunGroupProjectDO);
+                    projectMemberCheck(chuanyunGroupProjectDO);
                     //只处理项目成员为空的情况
                     boolean emptyFlag= chuanyunGroupProjectDO.getProjectMemberList()==null||chuanyunGroupProjectDO.getProjectMemberList().length==0;
                     if(emptyFlag){
@@ -90,6 +90,49 @@ public class ChuanyunServiceImpl implements ChuanyunService {
     }
 
     /**
+     * 如果有项目组成员,将项目组成员projectMember替换为主键
+     * 如果没有项目组成员,判断是否是EBG的实施、研发二开、售后维保项目,如果是,则添加EBG全体成员
+     * @param chuanyunGroupProjectDO    项目对象
+     */
+    private void projectMemberCheck(ChuanyunGroupProjectDO chuanyunGroupProjectDO){
+        if (chuanyunGroupProjectDO.getProjectMemberList() != null && chuanyunGroupProjectDO.getProjectMemberList().length>0) {
+            List<String> memberList = new ArrayList<>();
+            var builder = new StringBuilder();
+            for (ChuanyunObject chuanyunObject: chuanyunGroupProjectDO.getProjectMemberObject()) {
+                builder.append(chuanyunObject.getObjectId()).append(StringConstant.SEMICOLON);
+                memberList.add(chuanyunObject.getObjectId());
+            }
+            chuanyunGroupProjectDO.setProjectMember(builder.toString());
+            //替换为主键后更新氚云数据表来增加权限
+            chuanyunGroupProjectDO.setProjectMemberList(memberList.toArray(new String[0]));
+        }else {
+            //项目成员为空的情况判断
+            //判断项目BG是否为EBG
+            var specifiedBusinessGroupFlag=ChuanyunGroupProjectDO.EBG.equals(chuanyunGroupProjectDO.getBusinessGroup());
+            //判断项目类型是否为 下列项目类型中的一种
+            var specifiedProjectTypeFlag=("实施".equals(chuanyunGroupProjectDO.getProjectType())||
+                    "维保".equals(chuanyunGroupProjectDO.getProjectType())||
+                    "研发二开".equals(chuanyunGroupProjectDO.getProjectType())||
+                    "售后".equals(chuanyunGroupProjectDO.getProjectType()));
+            //如果项目组成员为空,则自动为项目添加所有EBG成员作为项目组成员
+            if (specifiedBusinessGroupFlag&&specifiedProjectTypeFlag) {
+                var projectMember = new ArrayList<String>();
+                var builder = new StringBuilder();
+                ChuanYunConstant.USER_BUSINESS_GROUP.forEach((k, v)->{
+                    if (ChuanyunGroupProjectDO.EBG.equals(v)&&null!=k){
+                        builder.append(k).append(StringConstant.SEMICOLON);
+                        projectMember.add(k);
+                    }
+                });
+
+                chuanyunGroupProjectDO.setProjectMember(builder.toString());
+                chuanyunGroupProjectDO.setProjectMemberList(projectMember.toArray(new String[0]));
+                log.info("成员已更新"+chuanyunGroupProjectDO.getProjectCode()+chuanyunGroupProjectDO.getProjectType());
+            }
+        }
+    }
+
+    /**
      * 用于刷新项目经理权限的对象
      */
     @Data

+ 73 - 47
src/main/java/com/galaxis/manatee/task/ChuanyunBasicDataScheduledTask.java

@@ -3,9 +3,7 @@ package com.galaxis.manatee.task;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.galaxis.capsule.bo.ChuanyunObject;
 import com.galaxis.manatee.constant.ChuanYunConstant;
-import com.galaxis.manatee.constant.StringConstant;
 import com.galaxis.manatee.dao.*;
 import com.galaxis.manatee.entity.chuanyun.data.object.*;
 import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
@@ -147,7 +145,7 @@ public class ChuanyunBasicDataScheduledTask {
                     });
 
                     //处理项目对象中的项目成员数据(改为手动调用处理)
-//                    projectMemberCheck(chuanyunGroupProjectDO);
+                    projectMemberListCheck(chuanyunGroupProjectDO);
                     //处理项目对象中的项目经理、项目负责人数据
                     projectManagerCheck(chuanyunGroupProjectDO);
                 });
@@ -161,6 +159,45 @@ public class ChuanyunBasicDataScheduledTask {
     }
 
     /**
+     * 更新项目成员方法
+     * @param chuanyunGroupProjectDO    项目对象
+     */
+    private void projectMemberListCheck(ChuanyunGroupProjectDO chuanyunGroupProjectDO){
+        var objectMapper=new ObjectMapper();
+        //第一步,清除项目负责人、项目经理数据。保证能够触发权限修改流程
+        GroupProjectMemberListUpdateDTO groupProjectMemberListUpdateDTO=new GroupProjectMemberListUpdateDTO(chuanyunGroupProjectDO);
+        if(groupProjectMemberListUpdateDTO.getProjectMemberList()!=null&&groupProjectMemberListUpdateDTO.getProjectMemberList().length>0){
+            groupProjectMemberListUpdateDTO.add();
+            try {
+                chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),objectMapper.writeValueAsString(groupProjectMemberListUpdateDTO));
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目成员失败"+e.getMessage());
+            }
+            groupProjectMemberListUpdateDTO.delete();
+            //保证项目经理信息更新成功
+            boolean updateFlag=false;
+            while (!updateFlag){
+                try {
+                    var groupProjectMemberListUpdateString=objectMapper.writeValueAsString(groupProjectMemberListUpdateDTO);
+                    ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectMemberListUpdateString);
+                    if(chuanyunSaveDTO.getSuccessful()){
+                        log.info(chuanyunGroupProjectDO.getObjectId()+"更新项目成员成功"+groupProjectMemberListUpdateString);
+                        updateFlag=true;
+                    }else{
+                        log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目成员失败"+groupProjectMemberListUpdateString);
+                        log.warn(chuanyunGroupProjectDO+"");
+                        Thread.sleep(5000L);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目成员失败"+e.getMessage());
+                }
+            }
+        }
+    }
+
+    /**
      * 通过更新集团项目中的项目负责人、EBG项目经理、IBG项目经理
      * @param chuanyunGroupProjectDO    项目对象
      */
@@ -211,49 +248,6 @@ public class ChuanyunBasicDataScheduledTask {
     }
 
     /**
-     * 如果有项目组成员,将项目组成员projectMember替换为主键
-     * 如果没有项目组成员,判断是否是EBG的实施、研发二开、售后维保项目,如果是,则添加EBG全体成员
-     * @param chuanyunGroupProjectDO    项目对象
-     */
-    public void projectMemberCheck(ChuanyunGroupProjectDO chuanyunGroupProjectDO){
-        if (chuanyunGroupProjectDO.getProjectMemberList() != null && chuanyunGroupProjectDO.getProjectMemberList().length>0) {
-            List<String> memberList = new ArrayList<>();
-            var builder = new StringBuilder();
-            for (ChuanyunObject chuanyunObject: chuanyunGroupProjectDO.getProjectMemberObject()) {
-                builder.append(chuanyunObject.getObjectId()).append(StringConstant.SEMICOLON);
-                memberList.add(chuanyunObject.getObjectId());
-            }
-            chuanyunGroupProjectDO.setProjectMember(builder.toString());
-            //替换为主键后更新氚云数据表来增加权限
-            chuanyunGroupProjectDO.setProjectMemberList(memberList.toArray(new String[0]));
-        }else {
-            //项目成员为空的情况判断
-            //判断项目BG是否为EBG
-            var specifiedBusinessGroupFlag=ChuanyunGroupProjectDO.EBG.equals(chuanyunGroupProjectDO.getBusinessGroup());
-            //判断项目类型是否为 下列项目类型中的一种
-            var specifiedProjectTypeFlag=("实施".equals(chuanyunGroupProjectDO.getProjectType())||
-                    "维保".equals(chuanyunGroupProjectDO.getProjectType())||
-                    "研发二开".equals(chuanyunGroupProjectDO.getProjectType())||
-                    "售后".equals(chuanyunGroupProjectDO.getProjectType()));
-            //如果项目组成员为空,则自动为项目添加所有EBG成员作为项目组成员
-            if (specifiedBusinessGroupFlag&&specifiedProjectTypeFlag) {
-                var projectMember = new ArrayList<String>();
-                var builder = new StringBuilder();
-                ChuanYunConstant.USER_BUSINESS_GROUP.forEach((k,v)->{
-                    if (ChuanyunGroupProjectDO.EBG.equals(v)&&null!=k){
-                        builder.append(k).append(StringConstant.SEMICOLON);
-                        projectMember.add(k);
-                    }
-                });
-
-                chuanyunGroupProjectDO.setProjectMember(builder.toString());
-                chuanyunGroupProjectDO.setProjectMemberList(projectMember.toArray(new String[0]));
-                log.info("成员已更新"+chuanyunGroupProjectDO.getProjectCode()+chuanyunGroupProjectDO.getProjectType());
-            }
-        }
-    }
-
-    /**
      * 获取供应商信息
      */
     private void getSupplier(){
@@ -525,7 +519,7 @@ public class ChuanyunBasicDataScheduledTask {
      * 用于刷新项目经理权限的对象
      */
     @Data
-    class GroupProjectUpdateDTO{
+    static class GroupProjectUpdateDTO{
         /**
          * 项目总监
          * U9项目责任人
@@ -562,4 +556,36 @@ public class ChuanyunBasicDataScheduledTask {
             }
         }
     }
+
+    @Data
+    static class GroupProjectMemberListUpdateDTO{
+        /**
+         * 项目组成员(前端传数据用)
+         */
+        @JsonProperty("F0000034")
+        private String[] projectMemberList;
+
+        public void add(){
+            String[] newProjectMemberList=new String[projectMemberList.length+1];
+            System.arraycopy(projectMemberList,0,newProjectMemberList,0,projectMemberList.length);
+            newProjectMemberList[projectMemberList.length]="8bbb21c4-1140-4bfa-8713-6ee50ea34df0";
+            projectMemberList=newProjectMemberList;
+        }
+
+        public void delete(){
+            String[] newProjectMemberList=new String[projectMemberList.length-1];
+            System.arraycopy(projectMemberList,0,newProjectMemberList,0,projectMemberList.length-1);
+            projectMemberList=newProjectMemberList;
+        }
+
+        public GroupProjectMemberListUpdateDTO(ChuanyunGroupProjectDO chuanyunGroupProjectDO) {
+            if(null!=chuanyunGroupProjectDO){
+                if(null!=chuanyunGroupProjectDO.getProjectMemberList()){
+                    List<String> memberList = new ArrayList<>();
+                    chuanyunGroupProjectDO.getProjectMemberObject().forEach(chuanyunObject -> memberList.add(chuanyunObject.getObjectId()));
+                    this.projectMemberList = memberList.toArray(new String[0]);
+                }
+            }
+        }
+    }
 }