123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- package com.persagy.account.controller;
- import cn.hutool.core.collection.CollectionUtil;
- import com.alibaba.druid.util.StringUtils;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.google.common.collect.Lists;
- import com.persagy.account.config.ApplicationProperties;
- import com.persagy.account.manage.SaasAuthHandler;
- import com.persagy.account.manage.SaasProductHandler;
- import com.persagy.account.manage.SaasRoleMenuHandler;
- import com.persagy.account.pojo.dto.SaasFunction;
- import com.persagy.account.pojo.dto.SaasMenu;
- import com.persagy.account.pojo.dto.SaasProductPage;
- import com.persagy.account.pojo.dto.SaasRole;
- import com.persagy.account.pojo.vo.function.SaasFunctionCreateVO;
- import com.persagy.account.pojo.vo.function.SaasFunctionDeleteVO;
- import com.persagy.account.pojo.vo.function.SaasFunctionQueryVO;
- import com.persagy.account.pojo.vo.function.SaasMenuFunctionVO;
- import com.persagy.account.service.ISaasFunctionService;
- import com.persagy.account.service.ISaasMenuService;
- import com.persagy.account.service.ISaasProductPageService;
- import com.persagy.account.service.ISaasRoleService;
- import com.persagy.common.constant.SaasCommonConstant;
- import com.persagy.common.enums.ResponseCode;
- 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 io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.List;
- import java.util.Map;
- /**
- * 功能信息
- *
- * @version 1.0.0
- * @company persagy
- * @author zhangqiankun
- * @date 2021-03-13 15:29:50
- */
- @Api(tags = "功能信息")
- @RestController
- @RequestMapping(value = "/function", method = RequestMethod.POST)
- public class SaasFunctionController {
-
- @Autowired
- private SaasAuthHandler saasAuthHandler;
-
- @Autowired
- private ISaasMenuService saasMenuService;
-
- @Autowired
- private ISaasRoleService saasRoleService;
-
- @Autowired
- private SaasProductHandler saasProductHandler;
- @Autowired
- private ISaasFunctionService saasFunctionService;
-
- @Autowired
- private SaasRoleMenuHandler saasRoleMenuHandler;
-
- @Autowired
- private ISaasProductPageService saasProductPageService;
- @Autowired
- private ApplicationProperties applicationProperties;
-
- /**
- * 账号、菜单所拥有的功能点查询,权限过滤
- * 此方法不考虑菜单与产品同时存在的情况,后续所有的权限都由产品控制
- */
- @ApiOperation(value = "菜单下功能点查询")
- @RequestMapping(value = "queryMenuFunctionList")
- public ResponseResult queryMenuFunctionList(@RequestBody @Validated SaasMenuFunctionVO model) {
- // 判断此账号的权限范围
- boolean isAdmin = false;
- Map<String, String> authMap = this.saasAuthHandler.validAccountAuth(model.getAccountId(), model.getGroupCode());
- String groupCode = authMap.get(CipherConstants.GROUP_CODE);
- String accountType = authMap.get(SaasCommonConstant.ACCOUNT_TYPE);
- String accountBelong = authMap.get(SaasCommonConstant.ACCOUNT_BELONG);
- if (SaasCommonConstant.STR_STATUS_0.equals(accountType)) {
- isAdmin = true; // 超管
- }
- // 再判断此账号是否拥有此菜单的权限
- SaasMenu saasMenu = null;
- if (isAdmin) {
- saasMenu = this.saasMenuService.getById(model.getMenuId());
- saasMenu.setMenuId(model.getMenuId());
- } else {
- // 关联查询出此账号的菜单信息,防止中途权限被修改
- List<SaasMenu> saasMenus = this.saasMenuService.querySaasMenuTree(model.getAccountId(), groupCode, model.getAppId(), model.getMenuId(), SaasCommonConstant.STATUS_1);
- saasMenu = CollectionUtil.isEmpty(saasMenus) ? null : saasMenus.get(0);
- }
- if (saasMenu == null) {
- return ResponseResultUtil.successResult(Lists.newArrayList());
- }
- //默认菜单直接返回默认菜单下的功能点
- if (StringUtils.equals(applicationProperties.getDefaultMenuId(),model.getMenuId())){
- LambdaQueryWrapper<SaasFunction> queryWrapper = new SaasFunction.Builder().createQueryWrapper()
- .menuIdEq(saasMenu.getMenuId()).builderQueryWrapper();
- List<SaasFunction> defaultFunctions = this.saasFunctionService.list(queryWrapper.orderByAsc(SaasFunction::getCreateTime));
- saasMenu.setFunctions(defaultFunctions);
- }
- // 获取此账号、此菜单下所对应的功能点信息集合 或者 产品页面树集合
- this.saasProductHandler.queryMenuProductAuths(saasMenu, model.getAccountId(), accountBelong, model.getProjectId(), groupCode, isAdmin, true, model.isShowPageAuth());
- if (StringUtil.isBlank(saasMenu.getProductId())) {
- return ResponseResultUtil.successResult(saasMenu.getFunctions());
- }
- return ResponseResultUtil.successResult(saasMenu.getProductPages());
- }
-
- /**
- * 功能点列表查询
- */
- @ApiOperation(value = "功能点列表查询")
- @RequestMapping(value = "querySaasFunctionList")
- public ResponseResult querySaasFunctionList(@RequestBody @Validated SaasFunctionQueryVO queryVO) {
- LambdaQueryWrapper<SaasFunction> queryWrapper = new SaasFunction.Builder().createQueryWrapper()
- .menuIdEq(queryVO.getMenuId()).funCodeEq(queryVO.getFunCode()).updateUserEq(queryVO.getUpdateUser())
- .pageIdEq(queryVO.getPageId()).funNameLike(queryVO.getFunName()).builderQueryWrapper();
- queryWrapper.orderByAsc(SaasFunction::getCreateTime);
- List<SaasFunction> list = this.saasFunctionService.list(queryWrapper);
- if (CollectionUtil.isEmpty(list)) {
- return ResponseResultUtil.successResult(Lists.newArrayList(), 0L);
- }
- return ResponseResultUtil.successResult(list, (long)list.size());
- }
-
- /**
- * 角色功能点列表查询,根据角色做权限过滤
- */
- @ApiOperation(value = "角色菜单功能点列表查询")
- @RequestMapping(value = "querySaasRoleFunctions")
- public ResponseResult querySaasRoleFunctions(@RequestBody @Validated SaasFunctionQueryVO queryVO) {
- if (StringUtil.isBlank(queryVO.getRoleId())) {
- return ResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), "ID不可为空");
- }
- // 验证角色是否存在
- SaasRole saasRole = this.saasRoleService.getOne(queryVO.getRoleId());
- if (saasRole == null) {
- return ResponseResultUtil.errorResult(ResponseCode.C0320.getCode(), "数据不存在");
- }
- // 优先查询出存在功能点的信息集合
- List<SaasFunction> functions = this.saasFunctionService.queryRoleFunctionList(queryVO.getGroupCode(), queryVO.getRoleId(), null, null);
- // 再查询出此角色下,所有不存在功能点的菜单集合
- List<SaasMenu> menus = this.saasMenuService.queryMenuAndEmptyFunction(queryVO.getGroupCode(), queryVO.getRoleId());
-
- JSONObject result = new JSONObject();
- result.put("menus", menus == null ? Lists.newArrayList() : menus);
- result.put("functions", functions == null ? Lists.newArrayList() : functions);
- return ResponseResultUtil.successResult(result);
- }
- /**
- * 新增
- */
- @ApiOperation(value = "保存")
- @RequestMapping(value = "createSaasFunction")
- public ResponseResult createSaasFunction(@RequestBody @Validated SaasFunctionCreateVO createVO) {
- ResponseResult validRequestParam = this.validRequestParam(createVO.getMenuId(), createVO.getPageId(), createVO.getFunCode(), createVO.getFunName(), null);
- if (validRequestParam != null) {
- return validRequestParam;
- }
- SaasFunction saasFunction = new SaasFunction();
- BeanUtils.copyProperties(createVO, saasFunction);
- saasFunction.setId(null);
- saasFunction.setUpdateUser(createVO.getAccountId());
- boolean result = this.saasFunctionService.save(saasFunction);
- return result ? ResponseResultUtil.successResult("保存成功", saasFunction.getId()) : ResponseResultUtil.errorResult("保存失败");
- }
-
- /**
- * 更新
- */
- @ApiOperation(value = "更新")
- @RequestMapping(value = "updateSaasFunction")
- public ResponseResult updateSaasFunction(@RequestBody @Validated SaasFunctionCreateVO createVO) {
- if (StringUtil.isBlank(createVO.getId())) {
- return ResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), "功能ID不可为空");
- }
- ResponseResult validRequestParam = this.validRequestParam(createVO.getMenuId(), createVO.getPageId(), createVO.getFunCode(), createVO.getFunName(), createVO.getId());
- if (validRequestParam != null) {
- return validRequestParam;
- }
- SaasFunction saasFunction = new SaasFunction();
- BeanUtils.copyProperties(createVO, saasFunction);
- saasFunction.setUpdateUser(createVO.getAccountId());
- boolean result = this.saasFunctionService.updateById(saasFunction);
- return result ? ResponseResultUtil.successResult("更新成功") : ResponseResultUtil.errorResult("更新失败");
- }
- /**
- * 物理删除
- */
- @ApiOperation(value = "删除")
- @RequestMapping(value = "deleteSaasFunction")
- public ResponseResult deleteSaasFunction(@RequestBody @Validated SaasFunctionDeleteVO deleteVO) {
- if (StringUtil.isBlank(deleteVO.getId())) {
- return ResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), "功能ID,不可为空");
- }
- boolean result = this.saasRoleMenuHandler.deleteSaasFunction(deleteVO.getId());
- return result ? ResponseResultUtil.successResult("删除成功") : ResponseResultUtil.errorResult("删除失败");
- }
-
- /**
- *
- * @return
- */
- private ResponseResult validRequestParam(String menuId, String pageId, String funCode, String funName, String funId) {
- if (StringUtil.isAllBlank(menuId, pageId)) {
- return ResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), "菜单ID与页面ID必填其一");
- }
- if (StringUtil.isNotBlank(menuId)) {
- SaasMenu menu = this.saasMenuService.getById(menuId);
- if (menu == null) {
- return ResponseResultUtil.errorResult(ResponseCode.C0320.getCode(), "不存在此菜单");
- }
- // 验证功能编码的唯一性
- if (StringUtil.isNotBlank(funCode)) {
- boolean validFunCode = this.saasFunctionService.validFunCode(menuId, null, funCode, funId);
- if (!validFunCode) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "此编码已存在");
- }
- }
- // 验证功能名称的唯一性
- if (StringUtil.isNotBlank(funName)) {
- boolean validFunName = this.saasFunctionService.validFunName(menuId, null, funName, funId);
- if (!validFunName) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "此名称已存在");
- }
- }
- }
- if (StringUtil.isNotBlank(pageId)) {
- SaasProductPage page = this.saasProductPageService.getById(pageId);
- if (page == null) {
- return ResponseResultUtil.errorResult(ResponseCode.C0320.getCode(), "不存在此页面");
- }
- // 验证功能编码的唯一性
- if (StringUtil.isNotBlank(funCode)) {
- boolean validFunCode = this.saasFunctionService.validFunCode(null, pageId, funCode, funId);
- if (!validFunCode) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "此编码已存在");
- }
- }
- // 验证功能名称的唯一性
- if (StringUtil.isNotBlank(funName)) {
- boolean validFunName = this.saasFunctionService.validFunName(null, pageId, funName, funId);
- if (!validFunName) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "此名称已存在");
- }
- }
- }
- return null;
- }
-
- }
|