package com.persagy.account.manage; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import com.persagy.account.mq.CommonTopicProducer; import com.persagy.account.pojo.dto.SaasAccount; import com.persagy.account.pojo.dto.SaasAccountProject; import com.persagy.account.pojo.dto.SaasGroup; import com.persagy.account.pojo.dto.SaasProject; import com.persagy.account.pojo.vo.group.SaasGroupQueryVO; import com.persagy.account.service.ISaasAccountProjectService; import com.persagy.account.service.ISaasAccountService; import com.persagy.account.service.ISaasAreaService; import com.persagy.account.service.ISaasGroupService; import com.persagy.account.service.ISaasProjectService; import com.persagy.account.service.ISaasRoleService; import com.persagy.common.constant.SaasCommonConstant; import com.persagy.common.enums.ResponseCode; import com.persagy.common.exception.BusinessException; import com.persagy.common.utils.ResponseResult; import com.persagy.common.utils.ResponseResultUtil; import com.persagy.common.utils.StringUtil; import com.persagy.security.constant.CipherConstants; import cn.hutool.core.collection.CollectionUtil; /** * @version * @description * @company persagy * @author zhangqiankun * @since 2021年3月18日: 上午10:20:22 */ @Component public class SaasGroupProjectHandler { @Autowired private SaasAuthHandler saasAuthHandler; @Autowired private ISaasAreaService saasAreaService; @Autowired private ISaasRoleService saasRoleService; @Autowired private ISaasGroupService saasGroupService; @Autowired private ISaasProjectService saasProjectService; @Autowired private ISaasAccountService saasAccountService; @Autowired private CommonTopicProducer commonTopicProducer; @Autowired private ISaasAccountProjectService saasAccountProjectService; /** * 查询集团信息 * * @param queryVO */ public List querySaasGroupList(SaasGroupQueryVO queryVO) { LambdaQueryWrapper queryWrapper = new SaasGroup.Builder().createQueryWrapper() .groupCodeEq(queryVO.getGroupCode()).groupNameLike(queryVO.getGroupName()) .deployModelEq(queryVO.getDeployModel()).syncStateEq(queryVO.getSyncState()) .updateUserEq(queryVO.getUpdateUser()).validEq(queryVO.getValid()).builderQueryWrapper(); return this.saasGroupService.list(queryWrapper); } /** * 查询集团项目树,默认集团名称、项目名称正序排序 * * @param groupCode * @param isDirect 是否直接查询,true-是,false-走权限表关联查询 * @return */ public List queryGroupProjectTree(String accountId, String groupCode, boolean isDirect) { LambdaQueryWrapper groupWrapper = new SaasGroup.Builder().createQueryWrapper().groupCodeEq(groupCode).validEq(SaasCommonConstant.STATUS_1).builderQueryWrapper(); groupWrapper.orderByAsc(SaasGroup::getGroupName); //集团名称正序排序 List groups = this.saasGroupService.list(groupWrapper); if (CollectionUtil.isEmpty(groups)) { return Lists.newArrayList(); } // 设置每个集团下的项目集合信息 LambdaQueryWrapper queryWrapper = null; for (SaasGroup saasGroup : groups) { List list = null; if (isDirect) { queryWrapper = new SaasProject.Builder().createQueryWrapper().groupCodeEq(saasGroup.getGroupCode()).validEq(SaasCommonConstant.STATUS_1).builderQueryWrapper(); queryWrapper.orderByAsc(SaasProject::getProjectName); //项目名称正序排序 list = this.saasProjectService.list(queryWrapper); } else { // 表关联查询 list = this.saasProjectService.queryAllowGroupProjectList(groupCode, accountId); } if (CollectionUtil.isEmpty(list)) { list = Lists.newArrayList(); } saasGroup.setProjects(list); } return groups; } /** * 创建集团的同时,添加ACCOUNT_PROJECT表中一条对应的权限信息 * @param saasGroup * @return */ @Transactional public ResponseResult createSaasGroup(SaasGroup saasGroup, String accountId) { // 获取账号信息 SaasAccount account = this.saasAccountService.getOne(accountId, null, null); if (account == null) { return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "账号信息不存在"); } if (SaasCommonConstant.STR_STATUS_1.equals(account.getAccountType())) { return ResponseResultUtil.errorResult(ResponseCode.A0301.getCode(), "单集团管理员,不允许添加集团"); } boolean result = this.saasGroupService.save(saasGroup); String areaId = null; if (result) { // 生成一条未分区的区域信息 areaId = this.saasAreaService.createEmptyAreaInfo(saasGroup.getGroupCode(), saasGroup.getUpdateUser()); if (areaId == null) { throw new BusinessException("集团默认分区添加失败"); } // 生成一条默认的角色信息及角色,默认菜单的关联关系,这里的菜单先写死 this.saasRoleService.createDefaultRole(saasGroup.getGroupCode(), saasGroup.getUpdateUser()); } // 账号类型为其他类型的账号添加集团信息时,需要在ACCOUNT_PROJECT插入一条权限信息 if (result && SaasCommonConstant.STR_STATUS_2.equals(account.getAccountType())) { // 插入权限信息 SaasAccountProject saasAccountProject = new SaasAccountProject(); saasAccountProject.setAccountId(accountId); saasAccountProject.setAreaId(areaId); saasAccountProject.setGroupCode(saasGroup.getGroupCode()); result = this.saasAccountProjectService.save(saasAccountProject); if (!result) { throw new BusinessException("集团权限信息添加失败"); } } if (result) { this.commonTopicProducer.sendGroupInfo(saasGroup, SaasCommonConstant.CREATE_TYPE); return ResponseResultUtil.successResult("保存成功"); } return ResponseResultUtil.errorResult("保存失败"); } /** * 查询项目信息 * * @param queryVO * @param startRow * @param size * @return */ public Page querySaasProjectList(SaasProject saasProject, Integer page, Integer size) { // 账号数据可见性的权限鉴定 Map authMap = this.saasAuthHandler.validAccountAuth(saasProject.getAccountId(), saasProject.getGroupCode()); if (StringUtil.isNotBlank(authMap.get(CipherConstants.GROUP_CODE))) { saasProject.setGroupCode(authMap.get(CipherConstants.GROUP_CODE)); } String accountType = authMap.get(SaasCommonConstant.ACCOUNT_TYPE); Page projectList = null; if (SaasCommonConstant.STR_STATUS_2.equals(accountType)) { projectList = this.saasProjectService.queryMoreProjectInfo(saasProject, page, size); } else { projectList = this.saasProjectService.querySaasProjectList(saasProject, page, size); } return projectList; } /** * 创建项目信息的同时,判断是否需要添加一条权限信息 * * @param saasProject * @param accountId */ @Transactional public ResponseResult createSaasProject(SaasProject saasProject, String accountId) { // 获取账号信息 SaasAccount account = this.saasAccountService.getOne(accountId, null, null); if (account == null) { return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "账号信息不存在"); } boolean result = this.saasProjectService.save(saasProject); // 账号类型为其他的账号添加集团信息时,需要在ACCOUNT_PROJECT插入一条权限信息 if (result && SaasCommonConstant.STR_STATUS_2.equals(account.getAccountType())) { // 插入权限信息 SaasAccountProject saasAccountProject = new SaasAccountProject(); saasAccountProject.setAccountId(accountId); saasAccountProject.setGroupCode(saasProject.getGroupCode()); saasAccountProject.setProjectId(saasProject.getProjectId()); result = this.saasAccountProjectService.save(saasAccountProject); if (!result) { throw new BusinessException("项目权限信息添加失败"); } } return result ? ResponseResultUtil.successResult("保存成功", saasProject.getId()) : ResponseResultUtil.errorResult("保存失败"); } }