123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- 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<SaasGroup> querySaasGroupList(SaasGroupQueryVO queryVO) {
- LambdaQueryWrapper<SaasGroup> 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<SaasGroup> queryGroupProjectTree(String accountId, String groupCode, boolean isDirect) {
- LambdaQueryWrapper<SaasGroup> groupWrapper = new SaasGroup.Builder().createQueryWrapper().groupCodeEq(groupCode).validEq(SaasCommonConstant.STATUS_1).builderQueryWrapper();
- groupWrapper.orderByAsc(SaasGroup::getGroupName); //集团名称正序排序
- List<SaasGroup> groups = this.saasGroupService.list(groupWrapper);
- if (CollectionUtil.isEmpty(groups)) {
- return Lists.newArrayList();
- }
- // 设置每个集团下的项目集合信息
- LambdaQueryWrapper<SaasProject> queryWrapper = null;
- for (SaasGroup saasGroup : groups) {
- List<SaasProject> 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<SaasProject> querySaasProjectList(SaasProject saasProject, Integer page, Integer size) {
- // 账号数据可见性的权限鉴定
- Map<String, String> 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<SaasProject> 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("保存失败");
- }
- }
|