|
@@ -0,0 +1,311 @@
|
|
|
|
+package com.galaxis.manatee.service.impl;
|
|
|
|
+
|
|
|
|
+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.ChuanyunCostCollectionDao;
|
|
|
|
+import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
|
|
|
|
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
|
|
|
|
+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 lombok.Data;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @author chongjiezhong
|
|
|
|
+ */
|
|
|
|
+@Slf4j
|
|
|
|
+@Service
|
|
|
|
+public class ChuanyunServiceImpl implements ChuanyunService {
|
|
|
|
+
|
|
|
|
+ private final Integer pageSize=20;
|
|
|
|
+ private final ChuanYunManager chuanYunManager;
|
|
|
|
+ private final ChuanyunCostCollectionDao chuanyunCostCollectionDao;
|
|
|
|
+ private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
|
|
|
|
+ private String[] leader = {"e1feb431-91fd-4a01-8d81-a2e618b571ff","1c8c4dfa-7e22-4f4e-a672-3e080e01a283","18bf4c09-f7d7-4c01-8509-ec554c6592f0","9df86c86-87f4-4d91-ba1e-29657c6cdb65","3fcbf0e0-bf06-411b-9ce4-b77dc897ee93","0fb67380-3408-4786-bac4-44dfef738110"};
|
|
|
|
+
|
|
|
|
+ public ChuanyunServiceImpl(ChuanYunManager chuanYunManager, ChuanyunCostCollectionDao chuanyunCostCollectionDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao) {
|
|
|
|
+ this.chuanYunManager = chuanYunManager;
|
|
|
|
+ this.chuanyunCostCollectionDao = chuanyunCostCollectionDao;
|
|
|
|
+ this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void updateProjectMember() {
|
|
|
|
+ var objectMapper=new ObjectMapper();
|
|
|
|
+ var start=0;
|
|
|
|
+ var flag=true;
|
|
|
|
+ while (flag){
|
|
|
|
+ try {
|
|
|
|
+ //从氚云查询数据
|
|
|
|
+ var filter= Filter.instance(start,start+pageSize,true);
|
|
|
|
+ var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,filter);
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData()==null){
|
|
|
|
+ flag=false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
|
|
|
|
+ start+=pageSize;
|
|
|
|
+ }else{
|
|
|
|
+ flag=false;
|
|
|
|
+ }
|
|
|
|
+ //转化为POJO
|
|
|
|
+ List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
|
|
+ //保存
|
|
|
|
+ result.forEach(chuanyunGroupProjectDO -> {
|
|
|
|
+
|
|
|
|
+ //处理项目对象中的项目成员数据(改为手动调用处理)
|
|
|
|
+ projectMemberCheck(chuanyunGroupProjectDO);
|
|
|
|
+ //只处理项目成员为空的情况
|
|
|
|
+ boolean emptyFlag= chuanyunGroupProjectDO.getProjectMemberList()==null||chuanyunGroupProjectDO.getProjectMemberList().length==0;
|
|
|
|
+ if(emptyFlag){
|
|
|
|
+ //增加项目成员
|
|
|
|
+ addMemberList(chuanyunGroupProjectDO);
|
|
|
|
+ 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+"");
|
|
|
|
+ }
|
|
|
|
+ } catch (BigSizeException | JsonProcessingException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<ChuanyunCostCollectionDO> getAllCostCollection() {
|
|
|
|
+ return chuanyunCostCollectionDao.findAll();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void updateChuanyunDept(String code) {
|
|
|
|
+ var objectMapper=new ObjectMapper();
|
|
|
|
+ var start=0;
|
|
|
|
+ var flag=true;
|
|
|
|
+ List<String> matchersString=new ArrayList<>();
|
|
|
|
+ matchersString.add("Status_2,1");
|
|
|
|
+ while (flag){
|
|
|
|
+ try {
|
|
|
|
+ //从氚云查询数据
|
|
|
|
+ var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
|
|
|
|
+ var chuanyunFindAllResponse=chuanYunManager.findAll(code,filter);
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData()==null){
|
|
|
|
+ flag=false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
|
|
|
|
+ start+=pageSize;
|
|
|
|
+ }else{
|
|
|
|
+ flag=false;
|
|
|
|
+ }
|
|
|
|
+ //转化为POJO
|
|
|
|
+ List<ChuanyunUpdateDeptDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
|
|
+ result.forEach(chuanyunUpdateDeptDO -> {
|
|
|
|
+ //更新拥有者id,更新所属部门
|
|
|
|
+ chuanyunUpdateDeptDO.setOwnerId(chuanyunUpdateDeptDO.getOwnerIdObject().getObjectId());
|
|
|
|
+ ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunUpdateDeptDO.getOwnerIdObject().getObjectId());
|
|
|
|
+ chuanyunUpdateDeptDO.setOwnerDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
|
|
|
|
+ ProjectUpdateDTO projectUpdateDTO = new ProjectUpdateDTO(chuanyunUpdateDeptDO);
|
|
|
|
+ try {
|
|
|
|
+ var groupProjectUpdateString=objectMapper.writeValueAsString(projectUpdateDTO);
|
|
|
|
+ ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(code,chuanyunUpdateDeptDO.getObjectId(),groupProjectUpdateString);
|
|
|
|
+ if(chuanyunSaveDTO.getSuccessful()){
|
|
|
|
+ log.info(chuanyunUpdateDeptDO.getObjectId()+"更新项目拥有者成功");
|
|
|
|
+ }else{
|
|
|
|
+ log.warn(chuanyunUpdateDeptDO.getObjectId()+"更新项目拥有者失败");
|
|
|
|
+ log.warn(chuanyunUpdateDeptDO+"");
|
|
|
|
+ }
|
|
|
|
+ } catch (JsonProcessingException | BigSizeException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void deleteProjectMember() {
|
|
|
|
+ var objectMapper=new ObjectMapper();
|
|
|
|
+ var start=0;
|
|
|
|
+ var flag=true;
|
|
|
|
+ while (flag){
|
|
|
|
+ try {
|
|
|
|
+ //从氚云查询数据
|
|
|
|
+ var filter= Filter.instance(start,start+pageSize,true);
|
|
|
|
+ var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,filter);
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData()==null){
|
|
|
|
+ flag=false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
|
|
|
|
+ start+=pageSize;
|
|
|
|
+ }else{
|
|
|
|
+ flag=false;
|
|
|
|
+ }
|
|
|
|
+ //转化为POJO
|
|
|
|
+ List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
|
|
+ //保存
|
|
|
|
+ result.forEach(chuanyunGroupProjectDO -> {
|
|
|
|
+ if (chuanyunGroupProjectDO.getProjectMemberObject()!=null&&chuanyunGroupProjectDO.getProjectMemberObject().size()>0){
|
|
|
|
+ //判断是否是实施、研发二开、售后维保项目
|
|
|
|
+ var specifiedProjectTypeFlag=("实施".equals(chuanyunGroupProjectDO.getProjectType())||
|
|
|
|
+ "维保".equals(chuanyunGroupProjectDO.getProjectType())||
|
|
|
|
+ "研发二开".equals(chuanyunGroupProjectDO.getProjectType())||
|
|
|
|
+ "售后".equals(chuanyunGroupProjectDO.getProjectType()));
|
|
|
|
+ var specifiedBusinessGroupFlag=ChuanyunGroupProjectDO.EBG.equals(chuanyunGroupProjectDO.getBusinessGroup());
|
|
|
|
+ //项目组成员去除领导
|
|
|
|
+ List<String> projectMember = new ArrayList<String>();
|
|
|
|
+ if (specifiedBusinessGroupFlag&&specifiedProjectTypeFlag){
|
|
|
|
+ List<ChuanyunObject> list = chuanyunGroupProjectDO.getProjectMemberObject();
|
|
|
|
+ for (ChuanyunObject chuanyunObject:list){
|
|
|
|
+ if (!Arrays.asList(leader).contains(chuanyunObject.getObjectId())){
|
|
|
|
+ projectMember.add(chuanyunObject.getObjectId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ chuanyunGroupProjectDO.setProjectMemberList(projectMember.toArray(new String[0]));
|
|
|
|
+ GroupProjectUpdateDTO groupProjectUpdateDTO = new GroupProjectUpdateDTO(chuanyunGroupProjectDO);
|
|
|
|
+ try {
|
|
|
|
+ var groupProjectUpdateString=objectMapper.writeValueAsString(groupProjectUpdateDTO);
|
|
|
|
+ ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectUpdateString);
|
|
|
|
+ if(chuanyunSaveDTO.getSuccessful()){
|
|
|
|
+ log.info("删除项目组成员成功");
|
|
|
|
+ }else{
|
|
|
|
+ log.warn("删除项目组成员失败");
|
|
|
|
+ }
|
|
|
|
+ } catch (JsonProcessingException | BigSizeException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 如果没有项目组成员,判断是否是EBG的实施、研发二开、售后维保项目,如果是,则添加EBG全体成员
|
|
|
|
+ * @param chuanyunGroupProjectDO 项目对象
|
|
|
|
+ */
|
|
|
|
+ private void addMemberList(ChuanyunGroupProjectDO chuanyunGroupProjectDO){
|
|
|
|
+ //项目成员为空的情况判断
|
|
|
|
+ //判断项目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());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 如果有项目组成员,将项目组成员projectMember替换为主键
|
|
|
|
+ * @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]));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 用于刷新项目经理权限的对象
|
|
|
|
+ */
|
|
|
|
+ @Data
|
|
|
|
+ static class GroupProjectUpdateDTO{
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 项目组成员(前端传数据用)
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000034")
|
|
|
|
+ private String[] projectMemberList;
|
|
|
|
+
|
|
|
|
+ public GroupProjectUpdateDTO(ChuanyunGroupProjectDO chuanyunGroupProjectDO) {
|
|
|
|
+ if(null!=chuanyunGroupProjectDO){
|
|
|
|
+ if(null!=chuanyunGroupProjectDO.getProjectMemberList()){
|
|
|
|
+ this.projectMemberList =chuanyunGroupProjectDO.getProjectMemberList();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Data
|
|
|
|
+ static class ProjectUpdateDTO{
|
|
|
|
+
|
|
|
|
+ @JsonProperty("OwnerId")
|
|
|
|
+ private String ownerId;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 拥有者所在部门Id
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("OwnerDeptId")
|
|
|
|
+ private String ownerDepartmentId;
|
|
|
|
+
|
|
|
|
+ public ProjectUpdateDTO(ChuanyunUpdateDeptDO chuanyunUpdateDeptDO) {
|
|
|
|
+ if(null!=chuanyunUpdateDeptDO) {
|
|
|
|
+ if(null!=chuanyunUpdateDeptDO.getOwnerDepartmentId()) {
|
|
|
|
+ this.ownerDepartmentId = chuanyunUpdateDeptDO.getOwnerDepartmentId();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|