package com.cloudroam.service.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.cloudroam.bo.ProjectInfoBO;
|
import com.cloudroam.bo.projectModule.ProjectModuleBO;
|
import com.cloudroam.bo.projectModule.ProjectModuleTreeBO;
|
import com.cloudroam.common.LocalUser;
|
import com.cloudroam.common.enumeration.DeletedEnum;
|
import com.cloudroam.common.mybatis.LinPage;
|
import com.cloudroam.dto.projectInfo.QueryProjectInfoDTO;
|
import com.cloudroam.dto.projectModule.CreateProjectModuleDTO;
|
import com.cloudroam.dto.projectModule.ProjectModulePageDTO;
|
import com.cloudroam.mapper.ProjectModuleMapperCustom;
|
import com.cloudroam.model.*;
|
import com.cloudroam.mapper.ProjectModuleMapper;
|
import com.cloudroam.service.ProjectInfoService;
|
import com.cloudroam.service.ProjectModuleService;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 服务实现类
|
* </p>
|
*
|
* @author generator@TaoJie
|
* @since 2024-08-16
|
*/
|
@Service
|
public class ProjectModuleServiceImpl extends ServiceImpl<ProjectModuleMapper, ProjectModuleDO> implements ProjectModuleService {
|
|
@Autowired
|
private ProjectInfoService projectInfoService;
|
|
@Autowired
|
private ProjectModuleMapperCustom projectModuleMapperCustom;
|
|
@Override
|
public ProjectModuleDO createProjectModule(CreateProjectModuleDTO validator) {
|
|
UserDO user = LocalUser.getLocalUser();
|
ProjectModuleDO projectModuleDO=new ProjectModuleDO();
|
BeanUtils.copyProperties(validator,projectModuleDO);
|
|
// 根据parentId来查找是否有当前模块,如果有则设置,没有则查询项目表
|
if(StringUtils.isNotBlank(validator.getParentId())){
|
final ProjectModuleDO existsModuleDO = this.getById(validator.getParentId());
|
if(null!=existsModuleDO){
|
projectModuleDO.setParentId(existsModuleDO.getId());
|
projectModuleDO.setProjectId(existsModuleDO.getProjectId());
|
}else{
|
ProjectInfoDO projectInfoDO=projectInfoService.getById(validator.getParentId());
|
|
if(null!=projectInfoDO){
|
projectModuleDO.setParentId(projectInfoDO.getId());
|
projectModuleDO.setProjectId(projectInfoDO.getId());
|
}
|
|
}
|
}
|
|
|
projectModuleDO.setId(IdUtil.simpleUUID());
|
projectModuleDO.setCreateTime(new Date());
|
projectModuleDO.setCreateUserId(String.valueOf(user.getId()));
|
projectModuleDO.setCreateUserName(user.getNickname());
|
|
projectModuleDO.setUpdateTime(new Date());
|
projectModuleDO.setUpdateUserId(String.valueOf(user.getId()));
|
projectModuleDO.setUpdateUserName(user.getNickname());
|
|
projectModuleDO.setIsDeleted(DeletedEnum.DELETED_NO.getCode());
|
projectModuleDO.setDeleteUserId(String.valueOf(user.getId()));
|
projectModuleDO.setDeleteUserName(user.getNickname());
|
|
|
this.baseMapper.insert(projectModuleDO);
|
|
|
return this.baseMapper.selectById(projectModuleDO.getId());
|
}
|
|
@Override
|
public boolean updateProjectModule(CreateProjectModuleDTO validator) {
|
|
UserDO user = LocalUser.getLocalUser();
|
ProjectModuleDO projectModuleDO=new ProjectModuleDO();
|
BeanUtils.copyProperties(validator,projectModuleDO);
|
|
final ProjectModuleDO existProjectModuleDO = baseMapper.selectById(validator.getId());
|
|
String prevProjectId= existProjectModuleDO.getProjectId();
|
|
|
if(StringUtils.isNotBlank(validator.getParentId())){
|
final ProjectModuleDO existsModuleDO = this.getById(validator.getParentId());
|
if(null!=existsModuleDO){
|
projectModuleDO.setParentId(existsModuleDO.getId());
|
projectModuleDO.setProjectId(existsModuleDO.getProjectId());
|
}else{
|
ProjectInfoDO projectInfoDO=projectInfoService.getById(validator.getParentId());
|
|
if(null!=projectInfoDO){
|
projectModuleDO.setParentId(projectInfoDO.getId());
|
projectModuleDO.setProjectId(projectInfoDO.getId());
|
}
|
}
|
}
|
|
projectModuleDO.setUpdateTime(new Date());
|
projectModuleDO.setUpdateUserId(String.valueOf(user.getId()));
|
projectModuleDO.setUpdateUserName(user.getNickname());
|
|
// 获取当前所有节点下的子节点,更行项目id和parentId
|
|
// 获取所有projectId的模块
|
final List<ProjectModuleDO> projectModuleDOSByProjectId = getProjectModuleDOSByProjectId(prevProjectId);
|
// 获取当前moduleId下的所有子节点
|
final List<ProjectModuleDO> allSubModules = getAllSubModules(existProjectModuleDO.getId(), projectModuleDOSByProjectId);
|
final List<ProjectModuleDO> needUpdateSubList = allSubModules.stream().map(module -> {
|
ProjectModuleDO subProjectModuleDO = new ProjectModuleBO();
|
subProjectModuleDO.setId(module.getId());
|
subProjectModuleDO.setProjectId(projectModuleDO.getProjectId());
|
return subProjectModuleDO;
|
}).collect(Collectors.toList());
|
|
updateBatchById(needUpdateSubList);
|
|
|
|
return baseMapper.updateById(projectModuleDO)>0;
|
|
|
|
}
|
|
public List<ProjectModuleDO> getAllSubModules(String moduleId, List<ProjectModuleDO> projectModules) {
|
List<ProjectModuleDO> subModules = new ArrayList<>();
|
findSubModules(moduleId, projectModules, subModules);
|
return subModules;
|
}
|
|
private void findSubModules(String parentId, List<ProjectModuleDO> projectModules, List<ProjectModuleDO> subModules) {
|
for (ProjectModuleDO module : projectModules) {
|
if (StringUtils.isNotBlank(module.getParentId())
|
&&module.getParentId().equals(parentId)) {
|
subModules.add(module);
|
// 递归查找子节点
|
findSubModules(module.getId(), projectModules, subModules);
|
}
|
}
|
}
|
|
|
@Override
|
public void deleteProjectModuleById(String id) {
|
UserDO user = LocalUser.getLocalUser();
|
|
ProjectModuleDO projectModuleDO=new ProjectModuleDO();
|
projectModuleDO.setId(id);
|
projectModuleDO.setIsDeleted(DeletedEnum.DELETED_YES.getCode());
|
projectModuleDO.setDeleteTime(new Date());
|
projectModuleDO.setDeleteUserId(String.valueOf(user.getId()));
|
projectModuleDO.setDeleteUserName(user.getNickname());
|
baseMapper.updateById(projectModuleDO);
|
|
}
|
|
|
@Override
|
public List<ProjectModuleTreeBO> listTree(ProjectModulePageDTO dto) {
|
|
QueryProjectInfoDTO queryProjectInfoDTO=new QueryProjectInfoDTO();
|
if(StringUtils.isNotBlank(dto.getProjectId())) queryProjectInfoDTO.setProjectId(dto.getProjectId());
|
// 查询所有的项目
|
final List<ProjectInfoDO> projectInfoList = projectInfoService.getProjectInfoList(queryProjectInfoDTO);
|
|
|
final List<ProjectModuleTreeBO> projectModuleTreeBOS = getProjectProjectModuleTreeBOS(projectInfoList);
|
|
return projectModuleTreeBOS;
|
}
|
|
private List<ProjectModuleTreeBO> getProjectProjectModuleTreeBOS(List<ProjectInfoDO> projectInfoList) {
|
final List<ProjectModuleTreeBO> projectModuleTreeBOS = projectInfoList.stream().map(projectInfoDO -> {
|
|
ProjectModuleTreeBO projectModuleTreeBO = new ProjectModuleTreeBO();
|
projectModuleTreeBO.setProjectFlag(1);
|
projectModuleTreeBO.setName(projectInfoDO.getProjectName());
|
projectModuleTreeBO.setId(projectInfoDO.getId());
|
|
|
final List<ProjectModuleDO> projectModuleDOList = getProjectModuleDOSByProjectId(projectInfoDO.getId());
|
|
|
projectModuleTreeBO.setChildren(buildModuleTree(projectModuleDOList));
|
|
return projectModuleTreeBO;
|
}).collect(Collectors.toList());
|
return projectModuleTreeBOS;
|
}
|
|
private List<ProjectModuleDO> getProjectModuleDOSByProjectId(String projectId) {
|
// 获取该项目下的所有模块树
|
QueryWrapper<ProjectModuleDO> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(ProjectModuleDO::getIsDeleted, DeletedEnum.DELETED_NO.getCode())
|
.eq(ProjectModuleDO::getProjectId, projectId);
|
List<ProjectModuleDO> projectModuleDOList = this.list(queryWrapper);
|
return projectModuleDOList;
|
}
|
|
@Override
|
public IPage<ProjectModuleTreeBO> getProjectModulePage(QueryProjectInfoDTO dto) {
|
final IPage<ProjectInfoBO> projectInfoPage = projectInfoService.getProjectInfoPage(dto);
|
final List<ProjectInfoBO> records = projectInfoPage.getRecords();
|
final List<ProjectInfoDO> projectList = records.stream().map(ProjectInfoBO -> {
|
ProjectInfoDO projectInfoDO = new ProjectInfoDO();
|
BeanUtils.copyProperties(ProjectInfoBO, projectInfoDO);
|
return projectInfoDO;
|
}).collect(Collectors.toList());
|
final List<ProjectModuleTreeBO> projectProjectModuleTreeBOS = getProjectProjectModuleTreeBOS(projectList);
|
|
IPage<ProjectModuleTreeBO> iPage=new LinPage<>(dto.getPage(),dto.getCount());
|
iPage.setTotal(projectInfoPage.getTotal());
|
iPage.setCurrent(projectInfoPage.getCurrent());
|
|
return iPage.setRecords(projectProjectModuleTreeBOS);
|
}
|
|
@Override
|
public ProjectModuleTreeBO getProjectModuleTreeBOById(String id) {
|
final ProjectModuleDO projectModuleDO = this.getById(id);
|
return convertToTreeBO(projectModuleDO);
|
}
|
|
@Override
|
public List<ProjectModuleDO> list(ProjectModulePageDTO dto) {
|
LambdaQueryWrapper<ProjectModuleDO> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(ProjectModuleDO::getIsDeleted, DeletedEnum.DELETED_NO.getCode())
|
.eq(StringUtils.isNotBlank(dto.getProjectId()), ProjectModuleDO::getProjectId, dto.getProjectId())
|
.like(StringUtils.isNotBlank(dto.getModuleName()), ProjectModuleDO::getModuleName, dto.getModuleName());
|
return list(queryWrapper);
|
}
|
|
@Override
|
public List<ProjectModuleDO> getChildrenModuleIds(String moduleId) {
|
|
// 根据模块id查找当前项目下的所有子模块
|
List<ProjectModuleDO> list=projectModuleMapperCustom.selectProjectModuleListByModuleId(moduleId);
|
|
// 获取当前模块的子模块
|
if(CollectionUtils.isNotEmpty(list)){
|
// 查找当前父节点是moduleId下的所有子模块
|
List<ProjectModuleDO> subModules = getAllSubModules(moduleId, list);
|
|
return subModules;
|
}
|
|
return null;
|
}
|
|
public List<ProjectModuleTreeBO> buildModuleTree(List<ProjectModuleDO> moduleList) {
|
// 将所有模块数据转换为 Map 以便于快速查找
|
Map<String, ProjectModuleTreeBO> moduleMap = moduleList.stream()
|
.collect(Collectors.toMap(ProjectModuleDO::getId, this::convertToTreeBO));
|
|
// 构建树形结构
|
List<ProjectModuleTreeBO> rootModules = new ArrayList<>();
|
for (ProjectModuleDO module : moduleList) {
|
ProjectModuleTreeBO treeBO = moduleMap.get(module.getId());
|
if (module.getParentId().equals(module.getProjectId())) {
|
rootModules.add(treeBO);
|
} else {
|
ProjectModuleTreeBO parentBO = moduleMap.get(module.getParentId());
|
if (parentBO != null) {
|
parentBO.getChildren().add(treeBO);
|
}
|
}
|
}
|
return rootModules;
|
}
|
|
private ProjectModuleTreeBO convertToTreeBO(ProjectModuleDO module) {
|
ProjectModuleTreeBO treeBO = new ProjectModuleTreeBO();
|
treeBO.setId(module.getId());
|
treeBO.setName(module.getModuleName());
|
treeBO.setParentId(module.getParentId());
|
treeBO.setChildren(new ArrayList<>());
|
treeBO.setProjectFlag(0); // 你可以根据实际需求设置 projectFlag 的值
|
return treeBO;
|
}
|
|
}
|