浏览代码

Merge branch '1.0' of codeup.aliyun.com:5ec7ea24405cdab50f3fd8f0/galaxis/manatee into 1.0

 Conflicts:
	src/main/java/com/galaxis/manatee/task/ChuanyunBasicDataScheduledTask.java
WoNiu 5 年之前
父节点
当前提交
07046c17ad

+ 7 - 9
src/main/java/com/galaxis/manatee/controller/GetController.java

@@ -2,6 +2,7 @@ package com.galaxis.manatee.controller;
 
 import com.galaxis.manatee.service.ChuanyunService;
 import com.galaxis.manatee.task.ChuanyunHumanResourceScheduledTask;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -24,31 +25,28 @@ public class GetController {
 
     /**
      * 手动更新chuanyunPayRoll
-     * @return  提示信息
      */
+    @Async
     @GetMapping("/test/getChuanyunPayroll")
-    public String getChuanyunPayroll(){
+    public void getChuanyunPayroll(){
         chuanyunHumanResourceScheduledTask.getPayrollManually();
-        return "开始更新薪资数据";
     }
 
     /**
      * 手动更新日志
-     * @return
      */
+    @Async
     @GetMapping("/test/getUpdateLog")
-    public String getUpdateLog() {
+    public void getUpdateLog() {
         chuanyunHumanResourceScheduledTask.getUpdateLog();
-        return "开始更新日志";
     }
 
     /**
      * 手动更新项目组成员
-     * @return
      */
+    @Async
     @GetMapping("/test/getProjectMember")
-    public String getProjectMember() {
+    public void getProjectMember() {
         chuanyunService.updateProjectMember();
-        return "开始更新项目组成员";
     }
 }

+ 2 - 0
src/main/java/com/galaxis/manatee/service/ChuanyunService.java

@@ -1,5 +1,7 @@
 package com.galaxis.manatee.service;
 
+import org.springframework.scheduling.annotation.Async;
+
 /**
  * 氚云服务调用
  */

+ 71 - 60
src/main/java/com/galaxis/manatee/service/impl/ChuanyunServiceImpl.java

@@ -4,43 +4,40 @@ 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.manatee.dao.ChuanyunGroupProjectDao;
+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 com.galaxis.manatee.task.ChuanyunHumanResourceScheduledTask;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * @author chongjiezhong
+ */
 @Slf4j
 @Service
 public class ChuanyunServiceImpl implements ChuanyunService {
 
     private final Integer pageSize=20;
-    private final ChuanyunHumanResourceScheduledTask chuanyunHumanResourceScheduledTask;
-    private final ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask;
     private final ChuanYunManager chuanYunManager;
-    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
 
-    public ChuanyunServiceImpl(ChuanyunHumanResourceScheduledTask chuanyunHumanResourceScheduledTask, ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask, ChuanYunManager chuanYunManager, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
-        this.chuanyunHumanResourceScheduledTask = chuanyunHumanResourceScheduledTask;
-        this.chuanyunBasicDataScheduledTask = chuanyunBasicDataScheduledTask;
+    public ChuanyunServiceImpl(ChuanYunManager chuanYunManager) {
         this.chuanYunManager = chuanYunManager;
-        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
     }
 
     @Override
     public void updateProjectMember() {
         var objectMapper=new ObjectMapper();
         var start=0;
-        var totalCount=0L;
         var flag=true;
         while (flag){
             try {
@@ -58,29 +55,31 @@ public class ChuanyunServiceImpl implements ChuanyunService {
                 }
                 //转化为POJO
                 List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                //获取项目总数
-                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
                 //保存
                 result.forEach(chuanyunGroupProjectDO ->  {
 
                     //处理项目对象中的项目成员数据(改为手动调用处理)
-                    GroupProjectUpdateDTO groupProjectUpdateDTO= new GroupProjectUpdateDTO();
-                    chuanyunBasicDataScheduledTask.projectMemberCheck(chuanyunGroupProjectDO);
-                    try {
-                        groupProjectUpdateDTO=new GroupProjectUpdateDTO(chuanyunGroupProjectDO);
-                        var groupProjectUpdateString=objectMapper.writeValueAsString(groupProjectUpdateDTO);
-                        ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectUpdateString);
-                        if(chuanyunSaveDTO.getSuccessful()){
-                            log.info(chuanyunGroupProjectDO.getObjectId()+"更新项目组成员成功");
+                    projectMemberCheck(chuanyunGroupProjectDO);
+                    //只处理项目成员为空的情况
+                    boolean emptyFlag= chuanyunGroupProjectDO.getProjectMemberList()==null||chuanyunGroupProjectDO.getProjectMemberList().length==0;
+                    if(emptyFlag){
+                        GroupProjectUpdateDTO groupProjectUpdateDTO= new GroupProjectUpdateDTO(chuanyunGroupProjectDO);
+                        //生成更新数据后校验数据是否增加成功
+                        if(groupProjectUpdateDTO.getProjectMemberList()!=null&&groupProjectUpdateDTO.getProjectMemberList().length!=0){
+                            try {
+                                var groupProjectUpdateString=objectMapper.writeValueAsString(groupProjectUpdateDTO);
+                                ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectUpdateString);
+                                if(chuanyunSaveDTO.getSuccessful()){
+                                    log.info(chuanyunGroupProjectDO.getObjectId()+"更新项目组成员成功");
 
-                        }else{
-                            log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目组成员失败");
-                            log.warn(chuanyunGroupProjectDO+"");
+                                }else{
+                                    log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目组成员失败");
+                                    log.warn(chuanyunGroupProjectDO+"");
+                                }
+                            } catch (BigSizeException | JsonProcessingException e) {
+                                e.printStackTrace();
+                            }
                         }
-                    } catch (BigSizeException e) {
-                        e.printStackTrace();
-                    } catch (JsonProcessingException e) {
-                        e.printStackTrace();
                     }
                 });
             }catch (Exception e){
@@ -91,28 +90,53 @@ 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
-    class GroupProjectUpdateDTO{
-//        /**
-//         * 项目总监
-//         * U9项目责任人
-//         */
-//        @JsonProperty(value = "F0000006")
-//        private String projectOwner;
-//
-//        /**
-//         * IBG项目经理
-//         */
-//        @JsonProperty("F0000012")
-//        private String ibgProjectManager;
-//
-//        /**
-//         * EBG项目经理
-//         */
-//        @JsonProperty("F0000011")
-//        private String ebgProjectManager;
+    static class GroupProjectUpdateDTO{
 
         /**
          * 项目组成员(前端传数据用)
@@ -120,21 +144,8 @@ public class ChuanyunServiceImpl implements ChuanyunService {
         @JsonProperty("F0000034")
         private String[] projectMemberList;
 
-
-        public GroupProjectUpdateDTO() {
-        }
-
         public GroupProjectUpdateDTO(ChuanyunGroupProjectDO chuanyunGroupProjectDO) {
             if(null!=chuanyunGroupProjectDO){
-//                if(null!=chuanyunGroupProjectDO.getProjectOwnerObject()){
-//                    this.projectOwner=chuanyunGroupProjectDO.getProjectOwnerObject().getObjectId();
-//                }
-//                if(null!=chuanyunGroupProjectDO.getIbgProjectManagerObject()){
-//                    this.ibgProjectManager=chuanyunGroupProjectDO.getIbgProjectManagerObject().getObjectId();
-//                }
-//                if(null!=chuanyunGroupProjectDO.getEbgProjectManagerObject()){
-//                    this.ebgProjectManager=chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId();
-//                }
                 if(null!=chuanyunGroupProjectDO.getProjectMemberList()){
                     this.projectMemberList =chuanyunGroupProjectDO.getProjectMemberList();
                 }

+ 70 - 48
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;
@@ -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(){
@@ -566,10 +560,38 @@ public class ChuanyunBasicDataScheduledTask {
                 if(null!=chuanyunGroupProjectDO.getEbgProjectManagerObject()){
                     this.ebgProjectManager=chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId();
                 }
-                if(null!=chuanyunGroupProjectDO.getOutProjectName()){
-                    this.outProjectName=chuanyunGroupProjectDO.getOutProjectName();
-                }
+            }
+        }
+    }
 
+    @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]);
+                }
             }
         }
     }

+ 1 - 1
src/main/java/com/galaxis/manatee/task/ChuanyunFinancialScheduledTask.java

@@ -51,7 +51,7 @@ public class ChuanyunFinancialScheduledTask {
     /**
      * 将报销信息从氚云中同步
      */
-    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
+    @Scheduled(cron = "0 0 2 * * *")
     private void reimbursementInformationSync(){
         getReimbursementFromChuanyun();
     }

+ 0 - 2
src/main/java/com/galaxis/manatee/task/ChuanyunHumanResourceScheduledTask.java

@@ -49,12 +49,10 @@ public class ChuanyunHumanResourceScheduledTask {
     /**
      * 提供一个外部调用接口
      */
-    @Async
     public void getPayrollManually(){
         this.getPayroll();
     }
 
-    @Async
     public void getUpdateLog() {
         this.updateLog();
     }