SaasGroupProjectHandler.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package com.persagy.account.manage;
  2. import java.util.List;
  3. import java.util.Map;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Component;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.google.common.collect.Lists;
  10. import com.persagy.account.mq.CommonTopicProducer;
  11. import com.persagy.account.pojo.dto.SaasAccount;
  12. import com.persagy.account.pojo.dto.SaasAccountProject;
  13. import com.persagy.account.pojo.dto.SaasGroup;
  14. import com.persagy.account.pojo.dto.SaasProject;
  15. import com.persagy.account.pojo.vo.group.SaasGroupQueryVO;
  16. import com.persagy.account.service.ISaasAccountProjectService;
  17. import com.persagy.account.service.ISaasAccountService;
  18. import com.persagy.account.service.ISaasAreaService;
  19. import com.persagy.account.service.ISaasGroupService;
  20. import com.persagy.account.service.ISaasProjectService;
  21. import com.persagy.account.service.ISaasRoleService;
  22. import com.persagy.common.constant.SaasCommonConstant;
  23. import com.persagy.common.enums.ResponseCode;
  24. import com.persagy.common.exception.BusinessException;
  25. import com.persagy.common.utils.ResponseResult;
  26. import com.persagy.common.utils.ResponseResultUtil;
  27. import com.persagy.common.utils.StringUtil;
  28. import com.persagy.security.constant.CipherConstants;
  29. import cn.hutool.core.collection.CollectionUtil;
  30. /**
  31. * @version
  32. * @description
  33. * @company persagy
  34. * @author zhangqiankun
  35. * @since 2021年3月18日: 上午10:20:22
  36. */
  37. @Component
  38. public class SaasGroupProjectHandler {
  39. @Autowired
  40. private SaasAuthHandler saasAuthHandler;
  41. @Autowired
  42. private ISaasAreaService saasAreaService;
  43. @Autowired
  44. private ISaasRoleService saasRoleService;
  45. @Autowired
  46. private ISaasGroupService saasGroupService;
  47. @Autowired
  48. private ISaasProjectService saasProjectService;
  49. @Autowired
  50. private ISaasAccountService saasAccountService;
  51. @Autowired
  52. private CommonTopicProducer commonTopicProducer;
  53. @Autowired
  54. private ISaasAccountProjectService saasAccountProjectService;
  55. /**
  56. * 查询集团信息
  57. *
  58. * @param queryVO
  59. */
  60. public List<SaasGroup> querySaasGroupList(SaasGroupQueryVO queryVO) {
  61. LambdaQueryWrapper<SaasGroup> queryWrapper = new SaasGroup.Builder().createQueryWrapper()
  62. .groupCodeEq(queryVO.getGroupCode()).groupNameLike(queryVO.getGroupName())
  63. .deployModelEq(queryVO.getDeployModel()).syncStateEq(queryVO.getSyncState())
  64. .updateUserEq(queryVO.getUpdateUser()).validEq(queryVO.getValid()).builderQueryWrapper();
  65. return this.saasGroupService.list(queryWrapper);
  66. }
  67. /**
  68. * 查询集团项目树,默认集团名称、项目名称正序排序
  69. *
  70. * @param groupCode
  71. * @param isDirect 是否直接查询,true-是,false-走权限表关联查询
  72. * @return
  73. */
  74. public List<SaasGroup> queryGroupProjectTree(String accountId, String groupCode, boolean isDirect) {
  75. LambdaQueryWrapper<SaasGroup> groupWrapper = new SaasGroup.Builder().createQueryWrapper().groupCodeEq(groupCode).validEq(SaasCommonConstant.STATUS_1).builderQueryWrapper();
  76. groupWrapper.orderByAsc(SaasGroup::getGroupName); //集团名称正序排序
  77. List<SaasGroup> groups = this.saasGroupService.list(groupWrapper);
  78. if (CollectionUtil.isEmpty(groups)) {
  79. return Lists.newArrayList();
  80. }
  81. // 设置每个集团下的项目集合信息
  82. LambdaQueryWrapper<SaasProject> queryWrapper = null;
  83. for (SaasGroup saasGroup : groups) {
  84. List<SaasProject> list = null;
  85. if (isDirect) {
  86. queryWrapper = new SaasProject.Builder().createQueryWrapper().groupCodeEq(saasGroup.getGroupCode()).validEq(SaasCommonConstant.STATUS_1).builderQueryWrapper();
  87. queryWrapper.orderByAsc(SaasProject::getProjectName); //项目名称正序排序
  88. list = this.saasProjectService.list(queryWrapper);
  89. } else {
  90. // 表关联查询
  91. list = this.saasProjectService.queryAllowGroupProjectList(groupCode, accountId);
  92. }
  93. if (CollectionUtil.isEmpty(list)) {
  94. list = Lists.newArrayList();
  95. }
  96. saasGroup.setProjects(list);
  97. }
  98. return groups;
  99. }
  100. /**
  101. * 创建集团的同时,添加ACCOUNT_PROJECT表中一条对应的权限信息
  102. * @param saasGroup
  103. * @return
  104. */
  105. @Transactional
  106. public ResponseResult createSaasGroup(SaasGroup saasGroup, String accountId) {
  107. // 获取账号信息
  108. SaasAccount account = this.saasAccountService.getOne(accountId, null, null);
  109. if (account == null) {
  110. return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "账号信息不存在");
  111. }
  112. if (SaasCommonConstant.STR_STATUS_1.equals(account.getAccountType())) {
  113. return ResponseResultUtil.errorResult(ResponseCode.A0301.getCode(), "单集团管理员,不允许添加集团");
  114. }
  115. boolean result = this.saasGroupService.save(saasGroup);
  116. String areaId = null;
  117. if (result) {
  118. // 生成一条未分区的区域信息
  119. areaId = this.saasAreaService.createEmptyAreaInfo(saasGroup.getGroupCode(), saasGroup.getUpdateUser());
  120. if (areaId == null) {
  121. throw new BusinessException("集团默认分区添加失败");
  122. }
  123. // 生成一条默认的角色信息及角色,默认菜单的关联关系,这里的菜单先写死
  124. this.saasRoleService.createDefaultRole(saasGroup.getGroupCode(), saasGroup.getUpdateUser());
  125. }
  126. // 账号类型为其他类型的账号添加集团信息时,需要在ACCOUNT_PROJECT插入一条权限信息
  127. if (result && SaasCommonConstant.STR_STATUS_2.equals(account.getAccountType())) {
  128. // 插入权限信息
  129. SaasAccountProject saasAccountProject = new SaasAccountProject();
  130. saasAccountProject.setAccountId(accountId);
  131. saasAccountProject.setAreaId(areaId);
  132. saasAccountProject.setGroupCode(saasGroup.getGroupCode());
  133. result = this.saasAccountProjectService.save(saasAccountProject);
  134. if (!result) {
  135. throw new BusinessException("集团权限信息添加失败");
  136. }
  137. }
  138. if (result) {
  139. this.commonTopicProducer.sendGroupInfo(saasGroup, SaasCommonConstant.CREATE_TYPE);
  140. return ResponseResultUtil.successResult("保存成功");
  141. }
  142. return ResponseResultUtil.errorResult("保存失败");
  143. }
  144. /**
  145. * 查询项目信息
  146. *
  147. * @param queryVO
  148. * @param startRow
  149. * @param size
  150. * @return
  151. */
  152. public Page<SaasProject> querySaasProjectList(SaasProject saasProject, Integer page, Integer size) {
  153. // 账号数据可见性的权限鉴定
  154. Map<String, String> authMap = this.saasAuthHandler.validAccountAuth(saasProject.getAccountId(), saasProject.getGroupCode());
  155. if (StringUtil.isNotBlank(authMap.get(CipherConstants.GROUP_CODE))) {
  156. saasProject.setGroupCode(authMap.get(CipherConstants.GROUP_CODE));
  157. }
  158. String accountType = authMap.get(SaasCommonConstant.ACCOUNT_TYPE);
  159. Page<SaasProject> projectList = null;
  160. if (SaasCommonConstant.STR_STATUS_2.equals(accountType)) {
  161. projectList = this.saasProjectService.queryMoreProjectInfo(saasProject, page, size);
  162. } else {
  163. projectList = this.saasProjectService.querySaasProjectList(saasProject, page, size);
  164. }
  165. return projectList;
  166. }
  167. /**
  168. * 创建项目信息的同时,判断是否需要添加一条权限信息
  169. *
  170. * @param saasProject
  171. * @param accountId
  172. */
  173. @Transactional
  174. public ResponseResult createSaasProject(SaasProject saasProject, String accountId) {
  175. // 获取账号信息
  176. SaasAccount account = this.saasAccountService.getOne(accountId, null, null);
  177. if (account == null) {
  178. return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "账号信息不存在");
  179. }
  180. boolean result = this.saasProjectService.save(saasProject);
  181. // 账号类型为其他的账号添加集团信息时,需要在ACCOUNT_PROJECT插入一条权限信息
  182. if (result && SaasCommonConstant.STR_STATUS_2.equals(account.getAccountType())) {
  183. // 插入权限信息
  184. SaasAccountProject saasAccountProject = new SaasAccountProject();
  185. saasAccountProject.setAccountId(accountId);
  186. saasAccountProject.setGroupCode(saasProject.getGroupCode());
  187. saasAccountProject.setProjectId(saasProject.getProjectId());
  188. result = this.saasAccountProjectService.save(saasAccountProject);
  189. if (!result) {
  190. throw new BusinessException("项目权限信息添加失败");
  191. }
  192. }
  193. return result ? ResponseResultUtil.successResult("保存成功", saasProject.getId()) : ResponseResultUtil.errorResult("保存失败");
  194. }
  195. }