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; /** *

* 服务实现类 *

* * @author generator@TaoJie * @since 2024-08-16 */ @Service public class ProjectModuleServiceImpl extends ServiceImpl 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 projectModuleDOSByProjectId = getProjectModuleDOSByProjectId(prevProjectId); // 获取当前moduleId下的所有子节点 final List allSubModules = getAllSubModules(existProjectModuleDO.getId(), projectModuleDOSByProjectId); final List 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 getAllSubModules(String moduleId, List projectModules) { List subModules = new ArrayList<>(); findSubModules(moduleId, projectModules, subModules); return subModules; } private void findSubModules(String parentId, List projectModules, List 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 listTree(ProjectModulePageDTO dto) { QueryProjectInfoDTO queryProjectInfoDTO=new QueryProjectInfoDTO(); if(StringUtils.isNotBlank(dto.getProjectId())) queryProjectInfoDTO.setProjectId(dto.getProjectId()); // 查询所有的项目 final List projectInfoList = projectInfoService.getProjectInfoList(queryProjectInfoDTO); final List projectModuleTreeBOS = getProjectProjectModuleTreeBOS(projectInfoList); return projectModuleTreeBOS; } private List getProjectProjectModuleTreeBOS(List projectInfoList) { final List projectModuleTreeBOS = projectInfoList.stream().map(projectInfoDO -> { ProjectModuleTreeBO projectModuleTreeBO = new ProjectModuleTreeBO(); projectModuleTreeBO.setProjectFlag(1); projectModuleTreeBO.setName(projectInfoDO.getProjectName()); projectModuleTreeBO.setId(projectInfoDO.getId()); final List projectModuleDOList = getProjectModuleDOSByProjectId(projectInfoDO.getId()); projectModuleTreeBO.setChildren(buildModuleTree(projectModuleDOList)); return projectModuleTreeBO; }).collect(Collectors.toList()); return projectModuleTreeBOS; } private List getProjectModuleDOSByProjectId(String projectId) { // 获取该项目下的所有模块树 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(ProjectModuleDO::getIsDeleted, DeletedEnum.DELETED_NO.getCode()) .eq(ProjectModuleDO::getProjectId, projectId); List projectModuleDOList = this.list(queryWrapper); return projectModuleDOList; } @Override public IPage getProjectModulePage(QueryProjectInfoDTO dto) { final IPage projectInfoPage = projectInfoService.getProjectInfoPage(dto); final List records = projectInfoPage.getRecords(); final List projectList = records.stream().map(ProjectInfoBO -> { ProjectInfoDO projectInfoDO = new ProjectInfoDO(); BeanUtils.copyProperties(ProjectInfoBO, projectInfoDO); return projectInfoDO; }).collect(Collectors.toList()); final List projectProjectModuleTreeBOS = getProjectProjectModuleTreeBOS(projectList); IPage 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 list(ProjectModulePageDTO dto) { LambdaQueryWrapper 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 getChildrenModuleIds(String moduleId) { // 根据模块id查找当前项目下的所有子模块 List list=projectModuleMapperCustom.selectProjectModuleListByModuleId(moduleId); // 获取当前模块的子模块 if(CollectionUtils.isNotEmpty(list)){ // 查找当前父节点是moduleId下的所有子模块 List subModules = getAllSubModules(moduleId, list); return subModules; } return null; } public List buildModuleTree(List moduleList) { // 将所有模块数据转换为 Map 以便于快速查找 Map moduleMap = moduleList.stream() .collect(Collectors.toMap(ProjectModuleDO::getId, this::convertToTreeBO)); // 构建树形结构 List 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; } }