【项目快捷创建组织接口】

This commit is contained in:
weizhihong 2022-10-12 15:49:26 +08:00
parent 1973bf3f24
commit 8c9c9eb0c0
4 changed files with 96 additions and 42 deletions

View File

@ -1,8 +1,10 @@
package club.joylink.rtss.controller.project;
import club.joylink.rtss.controller.advice.AuthenticateInterceptor;
import club.joylink.rtss.entity.project.Project;
import club.joylink.rtss.entity.project.ProjectView;
import club.joylink.rtss.services.project.ProjectService;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.org.CompanyVO;
import club.joylink.rtss.vo.project.*;
@ -66,8 +68,13 @@ public class ProjectInfoController {
return projectService.projectOrgList(id);
}
@GetMapping("/viewSetting/page")
@PostMapping("/{id}/createDefaultOrg")
public ProjectInfoVO quickCreateDefaultOrg(@PathVariable Long id, String name
, @RequestAttribute(AuthenticateInterceptor.LOGIN_USER_KEY) AccountVO user) {
return projectService.quickCreateDefaultOrg(id, name, user);
}
@GetMapping("/viewSetting/page")
public PageVO<ProjectView> projectViewPagingQuery(ProjectViewQueryVO queryVO) {
return projectService.projectViewPagingQuery(queryVO);
}

View File

@ -2,6 +2,7 @@ package club.joylink.rtss.services.project;
import club.joylink.rtss.entity.project.Project;
import club.joylink.rtss.entity.project.ProjectView;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.org.CompanyVO;
import club.joylink.rtss.vo.project.*;
@ -58,6 +59,11 @@ public interface ProjectService {
*/
List<CompanyVO> projectOrgList(Long id);
/**
* 快速创建默认组织
*/
ProjectInfoVO quickCreateDefaultOrg(Long id, String name, AccountVO user);
/**
* 前端设置信息分页
*/

View File

@ -12,8 +12,10 @@ import club.joylink.rtss.entity.project.Project;
import club.joylink.rtss.entity.project.ProjectExample;
import club.joylink.rtss.entity.project.ProjectView;
import club.joylink.rtss.entity.project.ProjectViewExample;
import club.joylink.rtss.services.org.OrgService;
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.org.CompanyVO;
import club.joylink.rtss.vo.project.*;
@ -52,6 +54,9 @@ public class ProjectServiceImpl implements ProjectService {
@Autowired
private OrgDAO orgDAO;
@Autowired
private OrgService orgService;
@Override
public PageVO<ProjectInfoVO> pagingQuery(ProjectQueryVO queryVO) {
PageHelper.startPage(queryVO.getPageNum(), queryVO.getPageSize());
@ -157,49 +162,29 @@ public class ProjectServiceImpl implements ProjectService {
return List.of();
}
private List<OrgProject> getOrgProjectList(List<String> projectCodeList) {
OrgProjectExample orgProjectExample = new OrgProjectExample();
orgProjectExample.createCriteria().andProjectCodeIn(projectCodeList);
return orgProjectDao.selectByExample(orgProjectExample);
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(cacheNames = "project", allEntries = true)
public ProjectInfoVO quickCreateDefaultOrg(Long id, String name, AccountVO user) {
Project project = projectDAO.selectByPrimaryKey(id);
if (project == null) {
throw new SimulationException(SimulationExceptionType.Illegal_Argument, "项目不存在");
}
private List<Org> getOrgList(List<Long> orgIdList) {
OrgExample orgExample = new OrgExample();
orgExample.createCriteria().andIdIn(orgIdList);
return orgDAO.selectByExample(orgExample);
}
/**
* 查询项目列表时关联组织信息
*/
private List<ProjectInfoVO> handleProjectOrgInfo(List<Project> projectList) {
List<String> projectCodeList = projectList.stream().map(Project::getCode).collect(Collectors.toList());
if (CollectionUtils.isEmpty(projectCodeList)) {
return List.of();
}
List<OrgProject> orgProjectList = getOrgProjectList(projectCodeList);
Map<Long, Org> orgMap = new HashMap<>();
Map<String, List<Long>> orgProjectMap = new HashMap<>(orgProjectList.size());
List<OrgProject> orgProjectList = getOrgProjectList(List.of(project.getCode()));
if (!CollectionUtils.isEmpty(orgProjectList)) {
List<Long> orgIdList = orgProjectList.stream().map(OrgProject::getOrgId).distinct().collect(Collectors.toList());
List<Org> orgList = getOrgList(orgIdList);
orgMap.putAll(orgList.stream().collect(Collectors.toMap(Org::getId, o -> o)));
orgProjectMap.putAll(orgProjectList.stream().collect(Collectors.groupingBy(OrgProject::getProjectCode, Collectors.mapping(OrgProject::getOrgId, Collectors.toList()))));
}
// 包装projectVO
List<ProjectInfoVO> projectVOList = projectList.stream().map(p -> {
ProjectInfoVO projectVO = new ProjectInfoVO(p);
if (orgProjectMap.containsKey(p.getCode())) {
List<String> orgNameList = orgProjectMap.get(p.getCode()).stream().filter(id -> orgMap.containsKey(id))
.map(id -> orgMap.get(id).getName()).sorted().collect(Collectors.toList());
projectVO.setOrgName(orgNameList);
}
if (p.getDefaultOrg() != null && orgMap.containsKey(p.getDefaultOrg())) {
projectVO.setDefaultOrgName(orgMap.get(p.getDefaultOrg()).getName());
throw new SimulationException(SimulationExceptionType.Illegal_Argument, "存在关联组织,请设置");
}
// 保存默认组织
CompanyVO companyVO = new CompanyVO();
companyVO.setName(name);
companyVO.setProjectCodes(List.of(project.getCode()));
CompanyVO resultCompany = orgService.createTopOrg(companyVO, user);
// 修改项目信息
setProjectDefaultOrg(id, resultCompany.getId());
ProjectInfoVO projectVO = new ProjectInfoVO(project);
projectVO.setOrgList(List.of(name));
projectVO.setDefaultOrgName(name);
return projectVO;
}).collect(Collectors.toList());
return projectVOList;
}
@Override
@ -325,4 +310,49 @@ public class ProjectServiceImpl implements ProjectService {
List<ProjectView> projectList = projectViewDAO.selectWithBLOBsByExample(new ProjectViewExample());
return projectList.stream().map(projectView -> new ProjectViewVO(projectView)).collect(Collectors.toList());
}
private List<OrgProject> getOrgProjectList(List<String> projectCodeList) {
OrgProjectExample orgProjectExample = new OrgProjectExample();
orgProjectExample.createCriteria().andProjectCodeIn(projectCodeList);
return orgProjectDao.selectByExample(orgProjectExample);
}
private List<Org> getOrgList(List<Long> orgIdList) {
OrgExample orgExample = new OrgExample();
orgExample.createCriteria().andIdIn(orgIdList);
return orgDAO.selectByExample(orgExample);
}
/**
* 查询项目列表时关联组织信息
*/
private List<ProjectInfoVO> handleProjectOrgInfo(List<Project> projectList) {
List<String> projectCodeList = projectList.stream().map(Project::getCode).collect(Collectors.toList());
if (CollectionUtils.isEmpty(projectCodeList)) {
return List.of();
}
List<OrgProject> orgProjectList = getOrgProjectList(projectCodeList);
Map<Long, Org> orgMap = new HashMap<>();
Map<String, List<Long>> orgProjectMap = new HashMap<>(orgProjectList.size());
if (!CollectionUtils.isEmpty(orgProjectList)) {
List<Long> orgIdList = orgProjectList.stream().map(OrgProject::getOrgId).distinct().collect(Collectors.toList());
List<Org> orgList = getOrgList(orgIdList);
orgMap.putAll(orgList.stream().collect(Collectors.toMap(Org::getId, o -> o)));
orgProjectMap.putAll(orgProjectList.stream().collect(Collectors.groupingBy(OrgProject::getProjectCode, Collectors.mapping(OrgProject::getOrgId, Collectors.toList()))));
}
// 包装projectVO
List<ProjectInfoVO> projectVOList = projectList.stream().map(p -> {
ProjectInfoVO projectVO = new ProjectInfoVO(p);
if (orgProjectMap.containsKey(p.getCode())) {
List<String> orgNameList = orgProjectMap.get(p.getCode()).stream().filter(id -> orgMap.containsKey(id))
.map(id -> orgMap.get(id).getName()).sorted().collect(Collectors.toList());
projectVO.setOrgList(orgNameList);
}
if (p.getDefaultOrg() != null && orgMap.containsKey(p.getDefaultOrg())) {
projectVO.setDefaultOrgName(orgMap.get(p.getDefaultOrg()).getName());
}
return projectVO;
}).collect(Collectors.toList());
return projectVOList;
}
}

View File

@ -3,6 +3,7 @@ package club.joylink.rtss.vo.project;
import club.joylink.rtss.entity.project.Project;
import lombok.Getter;
import lombok.Setter;
import org.springframework.util.CollectionUtils;
import java.util.List;
@ -40,7 +41,7 @@ public class ProjectInfoVO {
/**
* 关联组织名称
*/
private List<String> orgName;
private List<String> orgList;
/**
* 默认组织ID
@ -52,6 +53,11 @@ public class ProjectInfoVO {
*/
private String defaultOrgName;
/**
* 是否可以创建默认组织
*/
private boolean createDefaultOrg;
public ProjectInfoVO(Project project) {
this.id = project.getId();
this.code = project.getCode();
@ -60,4 +66,9 @@ public class ProjectInfoVO {
this.serverSetting = project.getServerSetting();
this.defaultOrg = project.getDefaultOrg();
}
public void setOrgList(List<String> orgList) {
this.orgList = orgList;
this.createDefaultOrg = CollectionUtils.isEmpty(orgList);
}
}