|
@@ -1,11 +1,11 @@
|
|
|
package com.galaxis.manatee.task;
|
|
|
|
|
|
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.dao.*;
|
|
|
import com.galaxis.manatee.entity.chuanyun.data.object.*;
|
|
|
import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
|
|
@@ -17,12 +17,7 @@ import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
-import javax.persistence.CascadeType;
|
|
|
-import javax.persistence.FetchType;
|
|
|
-import javax.persistence.OneToMany;
|
|
|
-import javax.persistence.Transient;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@@ -60,9 +55,8 @@ public class ChuanyunBasicDataScheduledTask {
|
|
|
/**
|
|
|
* 定时将氚云中的数据保存到manatee
|
|
|
*/
|
|
|
- @Scheduled(fixedDelay = 360000L)
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
private void getDataFromChuanyun() {
|
|
|
-
|
|
|
//获取人员-归属公司信息
|
|
|
getUserCompany();
|
|
|
//支出档案类型
|
|
@@ -140,85 +134,26 @@ public class ChuanyunBasicDataScheduledTask {
|
|
|
chuanyunGroupProjectDao.delete(tmpGroupProjectDO.get());
|
|
|
});
|
|
|
//新增项目组织信息
|
|
|
- if (chuanyunGroupProjectDO.getDetailList() == null || chuanyunGroupProjectDO.getDetailList().size() == 1) {
|
|
|
- List<ChuanyunGroupProjectDetailDO> detaillist = new ArrayList<>();
|
|
|
- for (ChuanyunCompanyDO chuanyunCompanyDO : chuanyunCompanyDao.findAll()) {
|
|
|
- if (!chuanyunCompanyDO.getCompanyName().equals("浙江凯乐士无锡分公司")&&!chuanyunCompanyDO.getCompanyName().equals("GALAXIS Automation management GmbH")) {
|
|
|
- ChuanyunGroupProjectDetailDO chuanyunGroupProjectDetailDO = new ChuanyunGroupProjectDetailDO();
|
|
|
- chuanyunGroupProjectDetailDO.setCompanyName(chuanyunCompanyDO.getCompanyName());
|
|
|
- chuanyunGroupProjectDetailDO.setType(chuanyunGroupProjectDO.getProjectType());
|
|
|
- chuanyunGroupProjectDetailDO.setParentObjectId(chuanyunGroupProjectDO.getObjectId());
|
|
|
- detaillist.add(chuanyunGroupProjectDetailDO);
|
|
|
- }
|
|
|
- }
|
|
|
- chuanyunGroupProjectDO.setDetailList(detaillist);
|
|
|
- }
|
|
|
- //将projectManger和projectOwner替换为主键
|
|
|
- if(!StringUtils.isEmpty(chuanyunGroupProjectDO.getProjectOwner())){
|
|
|
- chuanyunGroupProjectDO.setProjectOwner(chuanyunGroupProjectDO.getProjectOwnerObject().getObjectId());
|
|
|
- }
|
|
|
- //将项目组成员projectMember替换为主键
|
|
|
- if (chuanyunGroupProjectDO.getProjectMemberlist() != null) {
|
|
|
- var memberlist = new ArrayList<>();
|
|
|
- var builder = new StringBuilder();
|
|
|
- for (ChuanyunObject chuanyunObject: chuanyunGroupProjectDO.getProjectMemberObject()) {
|
|
|
- builder.append(chuanyunObject.getObjectId()).append(";");
|
|
|
- memberlist.add(chuanyunObject.getObjectId());
|
|
|
- }
|
|
|
- chuanyunGroupProjectDO.setProjectMember(builder.toString());
|
|
|
- //替换为主键后更新氚云数据表来增加权限
|
|
|
- chuanyunGroupProjectDO.setProjectMemberlist(memberlist.toArray(new String[0]));
|
|
|
- }
|
|
|
- //如果项目组成员为空,则自动为项目添加所有EBG成员作为项目组成员
|
|
|
- if ("EBG".equals(chuanyunGroupProjectDO.getBusinessGroup())&&chuanyunGroupProjectDO.getProjectMemberlist()==null&&
|
|
|
- ("实施".equals(chuanyunGroupProjectDO.getProjectType())||"维保".equals(chuanyunGroupProjectDO.getProjectType())||
|
|
|
- "研发二开".equals(chuanyunGroupProjectDO.getProjectType())||"售后".equals(chuanyunGroupProjectDO.getProjectType()))) {
|
|
|
- var projectmember = new ArrayList<>();
|
|
|
- var builder = new StringBuilder();
|
|
|
- for (ChuanyunUserCompanyDO chuanyunUserCompanyDO : chuanyunUserCompanyDao.findAll()) {
|
|
|
- if (chuanyunCompanyDao.findByObjectId(chuanyunUserCompanyDO.getCompanyId()).getBusinessGroup().equals("EBG")) {
|
|
|
- builder.append(chuanyunUserCompanyDO.getUserId()+";");
|
|
|
- projectmember.add(chuanyunUserCompanyDO.getUserId());
|
|
|
- }
|
|
|
- }
|
|
|
- chuanyunGroupProjectDO.setProjectMember(builder.toString());
|
|
|
- chuanyunGroupProjectDO.setProjectMemberlist(projectmember.toArray(new String[projectmember.size()]));
|
|
|
- log.info("成员已更新");
|
|
|
- }
|
|
|
-
|
|
|
- //通过更新集团项目中的EBG项目经理、IBG项目经理
|
|
|
- //TODO 测试结束后需要扩大范围到所有项目
|
|
|
- GroupProjectUpdateDTO groupProjectUpdateDTO=new GroupProjectUpdateDTO();
|
|
|
- try {
|
|
|
- chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),objectMapper.writeValueAsString(groupProjectUpdateDTO));
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- groupProjectUpdateDTO=new GroupProjectUpdateDTO(chuanyunGroupProjectDO);
|
|
|
- //保证项目经理信息更新成功
|
|
|
- boolean updateFlag=false;
|
|
|
- while (!updateFlag){
|
|
|
- try {
|
|
|
- var groupProjectUpdateString=objectMapper.writeValueAsString(groupProjectUpdateDTO);
|
|
|
- ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectUpdateString);
|
|
|
- if(chuanyunSaveDTO.getSuccessful()){
|
|
|
- log.info(chuanyunGroupProjectDO.getObjectId()+"更新项目经理成功"+groupProjectUpdateString);
|
|
|
- updateFlag=true;
|
|
|
- //更新成功之后重新获取集团项目组信息,防止id为空
|
|
|
- var chuanyunFindResponse = chuanYunManager.find(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId());
|
|
|
- ChuanyunGroupProjectDO chuanyunGroupProjectDO1 = objectMapper.convertValue(chuanyunFindResponse.getReturnData().getBizObject(), new TypeReference<>(){});
|
|
|
- chuanyunGroupProjectDO.setDetailList(chuanyunGroupProjectDO1.getDetailList());
|
|
|
- }else{
|
|
|
- log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目经理失败"+groupProjectUpdateString);
|
|
|
- log.warn(chuanyunGroupProjectDO+"");
|
|
|
- Thread.sleep(5000L);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
+ //TODO 这个地方不要做到定时更新的功能里,初始化组织信息只是独立一次的操作,初始化之后的数据维护会交给对应的项目经理。这个方法单独做一个controller来提供调用
|
|
|
+// if (chuanyunGroupProjectDO.getDetailList() == null || chuanyunGroupProjectDO.getDetailList().size() == 1) {
|
|
|
+// List<ChuanyunGroupProjectDetailDO> detailList = new ArrayList<>();
|
|
|
+// for (ChuanyunCompanyDO chuanyunCompanyDO : chuanyunCompanyDao.findAll()) {
|
|
|
+// if (!"浙江凯乐士无锡分公司".equals(chuanyunCompanyDO.getCompanyName())&&!"GALAXIS Automation management GmbH".equals(chuanyunCompanyDO.getCompanyName())) {
|
|
|
+// ChuanyunGroupProjectDetailDO chuanyunGroupProjectDetailDO = new ChuanyunGroupProjectDetailDO();
|
|
|
+// chuanyunGroupProjectDetailDO.setCompanyName(chuanyunCompanyDO.getCompanyName());
|
|
|
+// chuanyunGroupProjectDetailDO.setType(chuanyunGroupProjectDO.getProjectType());
|
|
|
+// chuanyunGroupProjectDetailDO.setParentObjectId(chuanyunGroupProjectDO.getObjectId());
|
|
|
+// detailList.add(chuanyunGroupProjectDetailDO);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// chuanyunGroupProjectDO.setDetailList(detailList);
|
|
|
+// }
|
|
|
|
|
|
|
|
|
+ //处理项目对象中的项目成员数据
|
|
|
+ projectMemberCheck(chuanyunGroupProjectDO);
|
|
|
+ //处理项目对象中的项目经理、项目负责人数据
|
|
|
+ projectManagerCheck(chuanyunGroupProjectDO);
|
|
|
});
|
|
|
chuanyunGroupProjectDao.saveAll(result);
|
|
|
}catch (Exception e){
|
|
@@ -230,6 +165,105 @@ public class ChuanyunBasicDataScheduledTask {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 通过更新集团项目中的项目负责人、EBG项目经理、IBG项目经理
|
|
|
+ * @param chuanyunGroupProjectDO 项目对象
|
|
|
+ */
|
|
|
+ private void projectManagerCheck(ChuanyunGroupProjectDO chuanyunGroupProjectDO){
|
|
|
+ //将projectManger和projectOwner替换为主键
|
|
|
+ if(!StringUtils.isEmpty(chuanyunGroupProjectDO.getProjectOwner())){
|
|
|
+ chuanyunGroupProjectDO.setProjectOwner(chuanyunGroupProjectDO.getProjectOwnerObject().getObjectId());
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(chuanyunGroupProjectDO.getEbgProjectManager())){
|
|
|
+ chuanyunGroupProjectDO.setEbgProjectManager(chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId());
|
|
|
+ }
|
|
|
+ if(!StringUtils.isEmpty(chuanyunGroupProjectDO.getIbgProjectManager())){
|
|
|
+ chuanyunGroupProjectDO.setIbgProjectManager(chuanyunGroupProjectDO.getIbgProjectManagerObject().getObjectId());
|
|
|
+ }
|
|
|
+ var objectMapper=new ObjectMapper();
|
|
|
+ //第一步,清除项目负责人、项目经理数据。保证能够触发权限修改流程
|
|
|
+ GroupProjectUpdateDTO groupProjectUpdateDTO=new GroupProjectUpdateDTO();
|
|
|
+ try {
|
|
|
+ chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),objectMapper.writeValueAsString(groupProjectUpdateDTO));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目经理失败"+e.getMessage());
|
|
|
+ }
|
|
|
+ groupProjectUpdateDTO=new GroupProjectUpdateDTO(chuanyunGroupProjectDO);
|
|
|
+ //保证项目经理信息更新成功
|
|
|
+ boolean updateFlag=false;
|
|
|
+ while (!updateFlag){
|
|
|
+ try {
|
|
|
+ var groupProjectUpdateString=objectMapper.writeValueAsString(groupProjectUpdateDTO);
|
|
|
+ ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectUpdateString);
|
|
|
+ if(chuanyunSaveDTO.getSuccessful()){
|
|
|
+ log.info(chuanyunGroupProjectDO.getObjectId()+"更新项目经理成功"+groupProjectUpdateString);
|
|
|
+ updateFlag=true;
|
|
|
+ //更新成功之后重新获取集团项目组信息,防止id为空
|
|
|
+ var chuanyunFindResponse = chuanYunManager.find(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId());
|
|
|
+ ChuanyunGroupProjectDO tmpChuanyunGroupProjectDO = objectMapper.convertValue(chuanyunFindResponse.getReturnData().getBizObject(), new TypeReference<>(){});
|
|
|
+ chuanyunGroupProjectDO.setDetailList(tmpChuanyunGroupProjectDO.getDetailList());
|
|
|
+ }else{
|
|
|
+ log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目经理失败"+groupProjectUpdateString);
|
|
|
+ log.warn(chuanyunGroupProjectDO+"");
|
|
|
+ Thread.sleep(5000L);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目经理失败"+e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 如果有项目组成员,将项目组成员projectMember替换为主键
|
|
|
+ * 如果没有项目组成员,判断是否是EBG的实施、研发二开、售后维保项目,如果是,则添加EBG全体成员
|
|
|
+ * @param chuanyunGroupProjectDO 项目对象
|
|
|
+ */
|
|
|
+ private void projectMemberCheck(ChuanyunGroupProjectDO chuanyunGroupProjectDO){
|
|
|
+ if (chuanyunGroupProjectDO.getProjectMemberList() != null) {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ //TODO 这里可能存在chuanyunCompanyDO找不到的情况,防止NPE,我把下面的代码换成了上面的形式--钟崇杰
|
|
|
+// for (ChuanyunUserCompanyDO chuanyunUserCompanyDO : chuanyunUserCompanyDao.findAll()) {
|
|
|
+// if ("EBG".equals(chuanyunCompanyDao.findByObjectId(chuanyunUserCompanyDO.getCompanyId()).getBusinessGroup())) {
|
|
|
+// builder.append(chuanyunUserCompanyDO.getUserId()).append(StringConstant.SEMICOLON);
|
|
|
+// projectMember.add(chuanyunUserCompanyDO.getUserId());
|
|
|
+// }
|
|
|
+// }
|
|
|
+ chuanyunGroupProjectDO.setProjectMember(builder.toString());
|
|
|
+ chuanyunGroupProjectDO.setProjectMemberList(projectMember.toArray(new String[0]));
|
|
|
+ log.info("成员已更新"+chuanyunGroupProjectDO.getProjectCode()+chuanyunGroupProjectDO.getProjectType());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取供应商信息
|
|
|
*/
|
|
|
private void getSupplier(){
|
|
@@ -409,6 +443,11 @@ public class ChuanyunBasicDataScheduledTask {
|
|
|
log.warn(chuanyunUserCompanyDO+"");
|
|
|
log.warn(exception.getMessage());
|
|
|
}
|
|
|
+ try{
|
|
|
+ ChuanYunConstant.USER_BUSINESS_GROUP.put(chuanyunUserCompanyDO.getUserId(),chuanyunCompanyDao.findByObjectId(chuanyunUserCompanyDO.getCompanyId()).getBusinessGroup());
|
|
|
+ }catch (Exception e){
|
|
|
+ log.warn("更新用户BG信息时发生异常"+e.getMessage());
|
|
|
+ }
|
|
|
ChuanYunConstant.USER_DEPARTMENT.put(chuanyunUserCompanyDO.getUserId(),chuanyunUserCompanyDO.getDepartmentObject().getObjectId());
|
|
|
});
|
|
|
chuanyunUserCompanyDao.saveAll(result);
|
|
@@ -480,21 +519,20 @@ public class ChuanyunBasicDataScheduledTask {
|
|
|
@JsonProperty("F0000011")
|
|
|
private String ebgProjectManager;
|
|
|
|
|
|
- /**
|
|
|
- * 项目组成员(前端传数据用)
|
|
|
- */
|
|
|
- @JsonProperty("F0000034")
|
|
|
- private String[] projectMemberlist;
|
|
|
-
|
|
|
- /**
|
|
|
- * 项目组织信息
|
|
|
- */
|
|
|
- @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.EAGER)
|
|
|
- @JsonProperty("D001789Fd992bf8fbe114c9babe0f98cf676f8a2")
|
|
|
-// @JsonProperty("D001789Fvspc68z01idftf5nqt66pkuc0")
|
|
|
- private List<ChuanyunGroupProjectDetailDO> detailList;
|
|
|
-
|
|
|
+// /**
|
|
|
+// * 项目组成员(前端传数据用)
|
|
|
+// */
|
|
|
+// @JsonProperty("F0000034")
|
|
|
+// private String[] projectMemberList;
|
|
|
|
|
|
+// /**
|
|
|
+// * 项目组织信息
|
|
|
+// * TODO 这个DTO是用于更新氚云数据的,不需要使用@OneToMany注解吧?使用目的是啥
|
|
|
+// */
|
|
|
+// @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.EAGER)
|
|
|
+// @JsonProperty("D001789Fd992bf8fbe114c9babe0f98cf676f8a2")
|
|
|
+//// @JsonProperty("D001789Fvspc68z01idftf5nqt66pkuc0")
|
|
|
+// private List<ChuanyunGroupProjectDetailDO> detailList;
|
|
|
|
|
|
public GroupProjectUpdateDTO() {
|
|
|
}
|
|
@@ -510,12 +548,13 @@ public class ChuanyunBasicDataScheduledTask {
|
|
|
if(null!=chuanyunGroupProjectDO.getEbgProjectManagerObject()){
|
|
|
this.ebgProjectManager=chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId();
|
|
|
}
|
|
|
- if(null!=chuanyunGroupProjectDO.getProjectMemberlist()){
|
|
|
- this.projectMemberlist=chuanyunGroupProjectDO.getProjectMemberlist();
|
|
|
- }
|
|
|
- if(null!=chuanyunGroupProjectDO.getDetailList()){
|
|
|
- this.detailList=chuanyunGroupProjectDO.getDetailList();
|
|
|
- }
|
|
|
+ //TODO 更新项目经理时更新项目组织信息会是这两个业务流程耦合,不方便后续维护需要考虑单独一个DTO作为更新项目组织信息的对象
|
|
|
+// if(null!=chuanyunGroupProjectDO.getProjectMemberList()){
|
|
|
+// this.projectMemberList =chuanyunGroupProjectDO.getProjectMemberList();
|
|
|
+// }
|
|
|
+// if(null!=chuanyunGroupProjectDO.getDetailList()){
|
|
|
+// this.detailList=chuanyunGroupProjectDO.getDetailList();
|
|
|
+// }
|
|
|
}
|
|
|
}
|
|
|
}
|