初始代码

This commit is contained in:
wangmingwei
2026-04-21 16:49:46 +08:00
parent aae9dc4036
commit f0453ff3a3
2396 changed files with 256575 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yunzhupaas-permission</artifactId>
<groupId>com.yunzhupaas</groupId>
<version>5.2.0-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yunzhupaas-permission-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-provider</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 第三方登录-->
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-common-connector</artifactId>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<exclusions>
<exclusion>
<artifactId>validation-api</artifactId>
<groupId>javax.validation</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-oauth-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-system-biz</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,66 @@
package com.yunzhupaas.permission.constant;
/**
* 类功能
*
* @author 云筑产品开发平台组
* @version V3.2.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/2/14
*/
public class AuthorizeConst {
public final static String USER = "User";
/**
* 岗位 权限标识
*/
public final static String POSITION = "Position";
/**
* 角色 权限标识
*/
public final static String ROLE = "Role";
/**
* 按钮 权限标识
*/
public final static String BUTTON = "button";
/**
* 菜单 权限标识
*/
public final static String MODULE = "module";
/**
* 列表 权限标识
*/
public final static String COLUMN = "column";
/**
* 数据 权限标识
*/
public final static String RESOURCE = "resource";
/**
* 表单 权限标识
*/
public final static String FROM = "form";
/**
* 系统、子系统
*/
public final static String SYSTEM = "system";
/**
* 数据 权限标识
*/
public final static String AUTHORIZE_PORTAL_MANAGE = "portalManage";
/**
* 流程 权限标识
*/
public final static String FLOW = "flow";
/**
* 打印 权限标识
*/
public final static String PRINT = "print";
/**
*
* 权限标识集合
*/
public final static String[] TYPES = {USER, POSITION, ROLE, BUTTON, MODULE, COLUMN, RESOURCE, FROM};
public final static String DATE_PICKER = "datePicker";
}

View File

@@ -0,0 +1,47 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.base.model.base.SystemBaeModel;
import com.yunzhupaas.base.model.form.ModuleFormModel;
import com.yunzhupaas.permission.entity.AuthorizeEntity;
import com.yunzhupaas.base.model.button.ButtonModel;
import com.yunzhupaas.base.model.column.ColumnModel;
import com.yunzhupaas.base.model.module.ModuleModel;
import com.yunzhupaas.base.model.resource.ResourceModel;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/3/12 15:27
*/
public interface AuthorizeMapper extends SuperMapper<AuthorizeEntity> {
List<ModuleModel> findModule(@Param("objectId") List<String> objectId, @Param("systemId") List<String> systemId, @Param("moduleAuthorize") List<String> moduleAuthorize, @Param("moduleUrlAddressAuthorize") List<String> moduleUrlAddressAuthorize, @Param("mark") Integer mark,@Param("moduleCode") List<String> moduleCode);
List<ButtonModel> findButton(@Param("objectId") List<String> objectId);
List<ColumnModel> findColumn(@Param("objectId") List<String> objectId);
List<ResourceModel> findResource(@Param("objectId") List<String> objectId);
List<ModuleFormModel> findForms(@Param("objectId") List<String> objectId);
List<SystemBaeModel> findSystem(@Param("objectId") List<String> objectId, @Param("enCode") String enCode, @Param("moduleAuthorize") List<String> moduleAuthorize, @Param("mark") Integer mark);
List<ButtonModel> findButtonAdmin(@Param("mark") Integer mark);
List<ColumnModel> findColumnAdmin(@Param("mark") Integer mark);
List<ResourceModel> findResourceAdmin(@Param("mark") Integer mark);
List<ModuleFormModel> findFormsAdmin(@Param("mark") Integer mark);
}

View File

@@ -0,0 +1,16 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yunzhupaas.permission.entity.ColumnsPurviewEntity;
/**
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2022/3/15 9:41
*/
public interface ColumnsPurviewMapper extends SuperMapper<ColumnsPurviewEntity> {
}

View File

@@ -0,0 +1,18 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yunzhupaas.permission.entity.GroupEntity;
/**
* 分组管理Mapper
*
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2022/3/10 17:56
*/
public interface GroupMapper extends SuperMapper<GroupEntity> {
}

View File

@@ -0,0 +1,18 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yunzhupaas.permission.entity.OrganizeAdministratorEntity;
/**
*
* 机构分级管理员
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
public interface OrganizeAdminIsTratorMapper extends SuperMapper<OrganizeAdministratorEntity> {
}

View File

@@ -0,0 +1,19 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yunzhupaas.permission.entity.OrganizeEntity;
/**
* 组织机构
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
public interface OrganizeMapper extends SuperMapper<OrganizeEntity> {
}

View File

@@ -0,0 +1,18 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.permission.entity.OrganizeRelationEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 组织关系 Mapper 接口
* </p>
*
* @author
* @since 2022-01-19
*/
public interface OrganizeRelationMapper extends SuperMapper<OrganizeRelationEntity> {
}

View File

@@ -0,0 +1,8 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.permission.entity.PermissionGroupEntity;
public interface PermissionGroupMapper extends SuperMapper<PermissionGroupEntity> {
}

View File

@@ -0,0 +1,16 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.permission.entity.PositionEntity;
/**
* 岗位信息
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
public interface PositionMapper extends SuperMapper<PositionEntity> {
}

View File

@@ -0,0 +1,37 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.permission.entity.RoleEntity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 系统角色
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
public interface RoleMapper extends SuperMapper<RoleEntity> {
/**
* 通过组织id获取用户信息
*
* @param orgIdList
* @return
*/
List<String> query(@Param("orgIdList") List<String> orgIdList, @Param("keyword") String keyword, @Param("globalMark") Integer globalMark, @Param("enabledMark") Integer enabledMark);
/**
* 通过组织id获取用户信息
*
* @param
* @param orgIdList
* @return
*/
Long count(@Param("orgIdList") List<String> orgIdList, @Param("keyword") String keyword, @Param("globalMark") Integer globalMark, @Param("enabledMark") Integer enabledMark);
}

View File

@@ -0,0 +1,17 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yunzhupaas.permission.entity.SocialsUserEntity;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/14 9:49:19
*/
public interface SocialsUserMapper extends SuperMapper<SocialsUserEntity> {
}

View File

@@ -0,0 +1,43 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.permission.entity.UserEntity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 用户信息
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
public interface UserMapper extends SuperMapper<UserEntity> {
/**
* 获取用户id
* @return
*/
List<String> getListId();
/**
* 通过组织id获取用户信息
*
* @param orgIdList
* @param gender
* @return
*/
List<String> query(@Param("orgIdList") List<String> orgIdList, @Param("account") String account, @Param("dbSchema") String dbSchema, @Param("enabledMark") Integer enabledMark, @Param("gender") String gender);
/**
* 通过组织id获取用户信息
*
* @param orgIdList
* @param gender
* @return
*/
Long count(@Param("orgIdList") List<String> orgIdList, @Param("account") String account, @Param("dbSchema") String dbSchema, @Param("enabledMark") Integer enabledMark, @Param("gender") String gender);
}

View File

@@ -0,0 +1,18 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.permission.entity.UserOldPasswordEntity;
/**
* 组织机构
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司http://www.szlecheng.cn
* @date 2024-09-26 上午9:18
*/
public interface UserOldPasswordMapper extends SuperMapper<UserOldPasswordEntity> {
}

View File

@@ -0,0 +1,19 @@
package com.yunzhupaas.permission.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yunzhupaas.permission.entity.UserRelationEntity;
/**
* 用户关系
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
public interface UserRelationMapper extends SuperMapper<UserRelationEntity> {
}

View File

@@ -0,0 +1,46 @@
package com.yunzhupaas.permission.rest;
import com.yunzhupaas.permission.connector.HttpRequestUserInfoService;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.util.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 推送工具类
*
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2022/7/28 20:56
*/
@Slf4j
@Component
public class PullUserUtil {
private static HttpRequestUserInfoService httpRequestUserInfoService;
public PullUserUtil(@Autowired(required = false) HttpRequestUserInfoService httpRequestUserInfoService){
PullUserUtil.httpRequestUserInfoService = httpRequestUserInfoService;
}
/**
* 推送到
*
* @param userEntity
* @param method
* @param tenantId
*/
public static void syncUser(UserEntity userEntity, String method, String tenantId) {
if (httpRequestUserInfoService != null) {
Map<String, Object> map = JsonUtil.entityToMap(userEntity);
httpRequestUserInfoService.syncUserInfo(map, method, tenantId);
}
}
}

View File

@@ -0,0 +1,34 @@
package com.yunzhupaas.permission.service;
import com.yunzhupaas.base.service.SuperService;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunzhupaas.permission.entity.ColumnsPurviewEntity;
/**
* 模块列表权限业务类
*
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2022/3/15 9:39
*/
public interface ColumnsPurviewService extends SuperService<ColumnsPurviewEntity> {
/**
* 通过moduleId获取列表权限
*
* @param moduleId
* @return
*/
ColumnsPurviewEntity getInfo(String moduleId);
/**
* 判断是保存还是编辑
*
* @param moduleId
* @param entity
* @return
*/
boolean update(String moduleId, ColumnsPurviewEntity entity);
}

View File

@@ -0,0 +1,52 @@
package com.yunzhupaas.permission.service;
import com.yunzhupaas.base.service.SuperService;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunzhupaas.permission.entity.SocialsUserEntity;
import java.util.List;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/14 9:33:16
*/
public interface SocialsUserService extends SuperService<SocialsUserEntity> {
/**
* 查询用户授权列表
* @param
* @return
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/14
*/
List<SocialsUserEntity> getListByUserId(String userId);
/**
* 查询用户授权列表
* @param
* @return
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/14
*/
List<SocialsUserEntity> getUserIfnoBySocialIdAndType(String socialId,String socialType);
/**
* 查询用户授权列表
* @param
* @return
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/14
*/
List<SocialsUserEntity> getListByUserIdAndSource(String userId,String socialType);
/**
* 根据第三方账号账号类型和id获取用户第三方绑定信息
* @param socialId 第三方账号id
* @return
*/
SocialsUserEntity getInfoBySocialId(String socialId,String socialType);
}

View File

@@ -0,0 +1,33 @@
package com.yunzhupaas.permission.service;
import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.permission.entity.UserOldPasswordEntity;
import java.util.List;
/**
* 用户信息
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
public interface UserOldPasswordService extends SuperService<UserOldPasswordEntity> {
/**
* 列表
*
* @return
*/
List<UserOldPasswordEntity> getList(String userId);
/**
* 创建
*
* @param entity 实体对象
*/
Boolean create(UserOldPasswordEntity entity);
}

View File

@@ -0,0 +1,840 @@
package com.yunzhupaas.permission.service.impl;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.base.entity.*;
import com.yunzhupaas.base.model.base.SystemBaeModel;
import com.yunzhupaas.base.model.button.ButtonModel;
import com.yunzhupaas.base.model.column.ColumnModel;
import com.yunzhupaas.base.model.form.ModuleFormModel;
import com.yunzhupaas.base.model.module.ModuleModel;
import com.yunzhupaas.base.model.portalManage.PortalManagePageDO;
import com.yunzhupaas.base.model.portalManage.PortalModel;
import com.yunzhupaas.base.model.portalManage.SavePortalAuthModel;
import com.yunzhupaas.base.model.resource.ResourceModel;
import com.yunzhupaas.base.service.*;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.constant.YunzhupaasConst;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.constant.PermissionConst;
import com.yunzhupaas.consts.DeviceType;
import com.yunzhupaas.database.model.dto.PrepSqlDTO;
import com.yunzhupaas.database.model.superQuery.SuperJsonModel;
import com.yunzhupaas.database.model.superQuery.SuperQueryJsonModel;
import com.yunzhupaas.database.sql.util.SqlFrameFastUtil;
import com.yunzhupaas.database.util.DataSourceUtil;
import com.yunzhupaas.database.util.DbTypeUtil;
import com.yunzhupaas.database.util.JdbcUtil;
import com.yunzhupaas.database.util.TenantDataSourceUtil;
import com.yunzhupaas.emnus.SearchMethodEnum;
import com.yunzhupaas.model.login.UserSystemVO;
import com.yunzhupaas.model.tenant.TenantAuthorizeModel;
import com.yunzhupaas.model.visualJson.FieLdsModel;
import com.yunzhupaas.model.visualJson.config.ConfigModel;
import com.yunzhupaas.permission.constant.AuthorizeConst;
import com.yunzhupaas.permission.entity.AuthorizeEntity;
import com.yunzhupaas.permission.entity.OrganizeAdministratorEntity;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.permission.entity.UserRelationEntity;
import com.yunzhupaas.permission.mapper.AuthorizeMapper;
import com.yunzhupaas.permission.model.authorize.*;
import com.yunzhupaas.permission.service.*;
import com.yunzhupaas.util.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 操作权限
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
@Slf4j
@Service
public class AuthorizeServiceImpl extends SuperServiceImpl<AuthorizeMapper, AuthorizeEntity>
implements AuthorizeService {
@Autowired
private UserRelationService userRelationService;
@Autowired
private DataSourceUtil dataSourceUtils;
@Autowired
private CacheKeyUtil cacheKeyUtil;
@Autowired
private RedisUtil redisUtil;
@Autowired
private UserService userService;
@Autowired
private OrganizeService organizeService;
@Autowired
private OrganizeAdministratorService organizeAdminIsTratorService;
@Autowired
private SystemService systemApi;
@Autowired
private ConfigValueUtil configValueUtil;
@Autowired
private PermissionGroupService permissionGroupService;
@Autowired
private ModuleService moduleApi;
@Autowired
private ModuleButtonService buttonApi;
@Autowired
private ModuleColumnService columnApi;
@Autowired
private ModuleFormService formApi;
@Autowired
private ModuleDataAuthorizeSchemeService dataAuthorizeSchemeApi;
@Autowired
private PortalManageService portalManageApi;
@Override
public AuthorizeVO getAuthorize(boolean isCache, boolean singletonOrg) {
return getAuthorize(isCache, singletonOrg, false);
}
@Override
public AuthorizeVO getAuthorize(boolean isCache, boolean singletonOrg, boolean isMainSystem) {
UserInfo userInfo = UserProvider.getUser();
List<UserSystemVO> standingAll = getUserStanding(false, userInfo.getUserId());
boolean isAdmin = standingAll.stream().filter(t -> "1".equals(t.getId()) || "2".equals(t.getId())).count() > 0;
List<UserSystemVO> userStanding = standingAll.stream().filter(t -> "2".equals(t.getId()))
.collect(Collectors.toList());
int stand = isAdmin ? 1 : userStanding.size() > 0 ? 2 : 3;
return getAuthorize(userInfo, singletonOrg, stand, isMainSystem);
}
@Override
public void getPortal(List<SystemEntity> systemList, List<PortalModel> portalList, Long dateTime,
List<String> collect) {
Map<String, SystemEntity> systemBaeModelMap = systemList.stream()
.collect(Collectors.toMap(SystemEntity::getId, Function.identity()));
List<String> systemIds = systemList.stream().map(SystemEntity::getId).collect(Collectors.toList());
List<PortalManagePageDO> portalManagePageDOS = portalManageApi.selectPortalBySystemIds(systemIds, collect);
if (portalManagePageDOS.size() == 0) {
return;
}
Map<String, List<PortalManagePageDO>> systemIdAndPortalMap = portalManagePageDOS.stream()
.collect(Collectors.groupingBy(PortalManagePageDO::getSystemId));
if (systemIdAndPortalMap != null) {
systemIdAndPortalMap.keySet().forEach(t -> {
if (Optional.ofNullable(systemBaeModelMap.get(t)).isPresent()) {
PortalModel systemModel = JsonUtil.getJsonToBean(systemBaeModelMap.get(t), PortalModel.class);
systemModel.setParentId("-1");
portalList.add(systemModel);
Map<String, String> platFormId = new HashMap<>();
List<PortalManagePageDO> portalManagePageDOList = systemIdAndPortalMap.get(t);
Map<String, List<PortalManagePageDO>> platFormMap = portalManagePageDOList.stream()
.collect(Collectors.groupingBy(PortalManagePageDO::getPlatform));
List<PortalManagePageDO> web = platFormMap.get("Web");
List<PortalManagePageDO> app = platFormMap.get("App");
if (web != null && web.size() > 0) {
PortalModel platForm = new PortalModel();
platForm.setId(systemModel.getId() + "1");
platForm.setParentId(systemModel.getId());
platForm.setFullName("WEB门户");
platForm.setIcon("icon-ym icon-ym-pc");
platForm.setSortCode(0L);
platForm.setCreatorTime(dateTime);
platFormId.put("Web", platForm.getId());
portalList.add(platForm);
}
if (app != null && app.size() > 0) {
PortalModel platForm = new PortalModel();
platForm.setId(systemModel.getId() + "2");
platForm.setParentId(systemModel.getId());
platForm.setFullName("APP门户");
platForm.setIcon("icon-ym icon-ym-mobile");
platForm.setSortCode(0L);
platForm.setCreatorTime(dateTime);
platFormId.put("App", platForm.getId());
portalList.add(platForm);
}
portalManagePageDOList.forEach(pageDO -> {
// if (!categoryList.contains(pageDO.getCategoryId())) {
// categoryList.add(pageDO.getCategoryId());
// PortalModel categoryModel = new PortalModel();
// categoryModel.setId(pageDO.getCategoryId());
// categoryModel.setParentId(platFormId.get(pageDO.getPlatform()));
// categoryModel.setFullName(pageDO.getCategoryName());
// categoryModel.setOnlyId(RandomUtil.uuId());
// list.add(categoryModel);
// }
PortalModel model = JsonUtil.getJsonToBean(pageDO, PortalModel.class);
// model.setParentId(pageDO.getCategoryId());
model.setParentId(platFormId.get(pageDO.getPlatform()));
model.setFullName(pageDO.getPortalName());
portalList.add(model);
});
}
});
}
}
@Override
@DSTransactional
public void saveItemAuth(SavePortalAuthModel portalAuthModel) {
List<String> ids = portalAuthModel.getIds();
String id = portalAuthModel.getId();
String type = portalAuthModel.getType();
String userId = UserProvider.getLoginUserId();
// 原始授权角色
List<AuthorizeEntity> list = new ArrayList<>();
for (int i = 0; i < ids.size(); i++) {
AuthorizeEntity authorizeEntity = new AuthorizeEntity();
authorizeEntity.setId(RandomUtil.uuId());
authorizeEntity.setItemType(type);
authorizeEntity.setItemId(ids.get(i));
authorizeEntity.setObjectType(AuthorizeConst.ROLE);
authorizeEntity.setObjectId(id);
authorizeEntity.setSortCode((long) i);
authorizeEntity.setCreatorTime(new Date());
authorizeEntity.setCreatorUserId(userId);
list.add(authorizeEntity);
}
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getItemType, type);
queryWrapper.lambda().eq(AuthorizeEntity::getObjectId, id);
this.remove(queryWrapper);
list.forEach(this::save);
}
@Override
@DSTransactional
public void saveObjectAuth(SavePortalAuthModel portalAuthModel) {
List<String> ids = portalAuthModel.getIds();
String id = portalAuthModel.getId();
String type = portalAuthModel.getType();
String userId = UserProvider.getLoginUserId();
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getItemType, type);
queryWrapper.lambda().eq(AuthorizeEntity::getItemId, id);
this.remove(queryWrapper);
List<AuthorizeEntity> portalSystem = new ArrayList<>();
boolean isPortal = AuthorizeConst.AUTHORIZE_PORTAL_MANAGE.equals(type);
if (isPortal && !ids.isEmpty() && StringUtil.isNotEmpty(portalAuthModel.getSystemId())) {
QueryWrapper<AuthorizeEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(AuthorizeEntity::getItemType, AuthorizeConst.SYSTEM);
wrapper.lambda().eq(AuthorizeEntity::getItemId, portalAuthModel.getSystemId());
wrapper.lambda().in(AuthorizeEntity::getObjectId, ids);
portalSystem.addAll(this.list(wrapper));
}
// 原始授权角色
List<AuthorizeEntity> list = new ArrayList<>();
for (int i = 0; i < ids.size(); i++) {
String objectId = ids.get(i);
AuthorizeEntity authorizeEntity = new AuthorizeEntity();
authorizeEntity.setId(RandomUtil.uuId());
authorizeEntity.setItemType(type);
authorizeEntity.setObjectId(objectId);
authorizeEntity.setObjectType(AuthorizeConst.ROLE);
authorizeEntity.setItemId(id);
authorizeEntity.setSortCode((long) i);
authorizeEntity.setCreatorTime(new Date());
authorizeEntity.setCreatorUserId(userId);
list.add(authorizeEntity);
if (isPortal && StringUtil.isNotEmpty(portalAuthModel.getSystemId())) {
boolean portalCount = portalSystem.stream().filter(t -> Objects.equals(t.getObjectId(), objectId))
.count() == 0;
if (portalCount) {
AuthorizeEntity systemAuthorize = new AuthorizeEntity();
systemAuthorize.setId(RandomUtil.uuId());
systemAuthorize.setItemType(AuthorizeConst.SYSTEM);
systemAuthorize.setObjectId(ids.get(i));
systemAuthorize.setObjectType(AuthorizeConst.ROLE);
systemAuthorize.setItemId(portalAuthModel.getSystemId());
systemAuthorize.setSortCode(0l);
systemAuthorize.setCreatorTime(new Date());
systemAuthorize.setCreatorUserId(userId);
list.add(systemAuthorize);
}
}
}
list.forEach(this::save);
}
@Override
public List<AuthorizeEntity> getAuthorizeByItem(String itemType, String itemId) {
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getItemType, itemType);
queryWrapper.lambda().eq(AuthorizeEntity::getItemId, itemId);
return this.list(queryWrapper);
}
@Override
public AuthorizeVO getAuthorizeByUser(boolean singletonOrg) {
AuthorizeVO authorizeModel = this.getAuthorize(false, singletonOrg);
return authorizeModel;
}
@Override
public AuthorizeVO getMainSystemAuthorize(List<String> moduleIds, List<String> moduleAuthorize,
List<String> moduleUrlAddressAuthorize, boolean singletonOrg) {
SystemEntity systemEntity = systemApi.getInfoByEnCode(YunzhupaasConst.MAIN_SYSTEM_CODE);
if (systemEntity == null || moduleAuthorize.contains(systemEntity.getId())) {
return new AuthorizeVO();
}
SystemBaeModel systemBaeModel = JsonUtil.getJsonToBean(systemEntity, SystemBaeModel.class);
List<ModuleEntity> moduleList = new ArrayList<>();
if (moduleIds.size() > 0) {
moduleList = moduleApi.getModuleByIds(moduleIds, moduleAuthorize, moduleUrlAddressAuthorize, singletonOrg);
} else {
moduleList = moduleApi.getMainModule(moduleAuthorize, moduleUrlAddressAuthorize, singletonOrg);
}
List<ModuleModel> moduleModelList = JsonUtil.getJsonToList(moduleList, ModuleModel.class);
List<ModuleButtonEntity> buttonByModuleId = buttonApi
.getListByModuleIds(moduleModelList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ButtonModel> buttonJsonToList = JsonUtil.getJsonToList(buttonByModuleId, ButtonModel.class);
List<ModuleColumnEntity> columnByModuleId = columnApi
.getListByModuleId(moduleModelList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ColumnModel> columnJsonToList = JsonUtil.getJsonToList(columnByModuleId, ColumnModel.class);
List<ModuleDataAuthorizeSchemeEntity> resourceByModuleId = dataAuthorizeSchemeApi
.getListByModuleId(moduleModelList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ResourceModel> resourceJsonToList = JsonUtil.getJsonToList(resourceByModuleId, ResourceModel.class);
List<ModuleFormEntity> formByModuleId = formApi
.getListByModuleId(moduleModelList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ModuleFormModel> formJsonToList = JsonUtil.getJsonToList(formByModuleId, ModuleFormModel.class);
return new AuthorizeVO(moduleModelList, buttonJsonToList, columnJsonToList, resourceJsonToList, formJsonToList,
Collections.singletonList(systemBaeModel));
}
@Override
public List<AuthorizeEntity> getListByRoleIdsAndItemType(List<String> roleIds, String itemType) {
if (roleIds.size() == 0) {
return Collections.EMPTY_LIST;
}
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getItemType, itemType);
queryWrapper.lambda().in(AuthorizeEntity::getObjectId, roleIds);
return this.list(queryWrapper);
}
@Override
public void save(String objectId, AuthorizeDataUpForm authorizeList) {
SaveBatchForm form = JsonUtil.getJsonToBean(authorizeList, SaveBatchForm.class);
form.setRoleIds(new String[] { objectId });
this.saveBatch(form, false);
}
@Override
public void saveBatch(SaveBatchForm saveBatchForm, boolean isBatch) {
try {
UserInfo userInfo = UserProvider.getUser();
List<AuthorizeEntity> objectList = new ArrayList<>();
List<AuthorizeEntity> authorizeList = new ArrayList<>();
// 设置权限归属对象
setEntity(saveBatchForm.getUserIds(), AuthorizeConst.USER, objectList, true);
setEntity(saveBatchForm.getPositionIds(), AuthorizeConst.POSITION, objectList, true);
setEntity(saveBatchForm.getRoleIds(), AuthorizeConst.ROLE, objectList, true);
// setEntity(saveBatchForm.getSystemIds(), AuthorizeConst.SYSTEM, objectList,
// true);
// 设置权限模块
setEntity(saveBatchForm.getButton(), AuthorizeConst.BUTTON, authorizeList, false);
setEntity(saveBatchForm.getModule(), AuthorizeConst.MODULE, authorizeList, false);
setEntity(saveBatchForm.getColumn(), AuthorizeConst.COLUMN, authorizeList, false);
setEntity(saveBatchForm.getResource(), AuthorizeConst.RESOURCE, authorizeList, false);
setEntity(saveBatchForm.getForm(), AuthorizeConst.FROM, authorizeList, false);
setEntity(saveBatchForm.getSystemIds(), AuthorizeConst.SYSTEM, authorizeList, false);
// 移除权限缓存
this.removeAuthByUserOrMenu(null, Arrays.asList(saveBatchForm.getModule()));
// 删除角色相关信息
List<String> objectIdAll = objectList.stream().map(AuthorizeEntity::getObjectId)
.collect(Collectors.toList());
userService.delCurRoleUser(MsgCode.PS010.get(), objectIdAll);
if (!isBatch) {
String ids = String.join(",", objectIdAll);
JdbcUtil.creUpDe(new PrepSqlDTO(
XSSEscape.escapeEmpty(SqlFrameFastUtil.AUTHOR_DEL.replace("{authorizeIds}", ids)))
.withConn(dataSourceUtils, null));
}
// 插入数据
String sql = DbTypeUtil.checkOracle(dataSourceUtils) || DbTypeUtil.checkPostgre(dataSourceUtils)
? SqlFrameFastUtil.INSERT_AUTHORIZE2
: SqlFrameFastUtil.INSERT_AUTHORIZE;
String column_key = StringUtil.EMPTY, column_plceholder = StringUtil.EMPTY,
column_value = TenantDataSourceUtil.getTenantColumn();
if (StringUtil.isNotEmpty(column_value)) {
column_key = StrPool.COMMA + configValueUtil.getMultiTenantColumn();
column_plceholder = ",?";
}
sql = sql.replace("%COLUMN_KEY%", column_key).replace("%COLUMN_PLACEHOLDER%", column_plceholder);
PrepSqlDTO dto = new PrepSqlDTO(sql).withConn(dataSourceUtils, null);
for (int i = 0; i < objectList.size(); i++) {
for (AuthorizeEntity entityItem : authorizeList) {
List<Object> data = new LinkedList<>();
data.add(RandomUtil.uuId());
data.add(entityItem.getItemType());
data.add(entityItem.getItemId());
data.add(objectList.get(i).getObjectType());
data.add(objectList.get(i).getObjectId());
data.add(i);
data.add(DateUtil.getNow());
data.add(userInfo.getUserId());
if (StringUtil.isNotEmpty(column_value)) {
data.add(column_value);
}
dto.addMultiData(data);
}
}
JdbcUtil.creUpDeBatchOneSql(dto);
} catch (Exception e) {
e.printStackTrace();
log.error("权限报错:" + e.getMessage());
}
}
/**
* 权限
*/
private void setEntity(String[] ids, String type, List<AuthorizeEntity> entityList, Boolean objectFlag) {
if (ids != null) {
for (String id : ids) {
AuthorizeEntity entity = new AuthorizeEntity();
if (objectFlag) {
entity.setObjectType(type);
entity.setObjectId(id);
} else {
entity.setItemType(type);
entity.setItemId(id);
}
entityList.add(entity);
}
}
}
@Override
public List<AuthorizeEntity> getListByUserId(boolean isAdmin, String userId) {
if (!isAdmin) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(UserRelationEntity::getUserId, userId);
List<UserRelationEntity> list = userRelationService.list(queryWrapper);
List<String> userRelationList = list.stream().map(u -> u.getObjectId()).collect(Collectors.toList());
userRelationList.add(userId);
QueryWrapper<AuthorizeEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().in(AuthorizeEntity::getObjectId, userRelationList);
return this.list(wrapper);
} else {
return new ArrayList<>();
}
}
@Override
public List<AuthorizeEntity> getListByObjectId(List<String> objectId) {
if (objectId.size() == 0) {
return new ArrayList<>();
}
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(AuthorizeEntity::getObjectId, objectId);
return this.list(queryWrapper);
}
@Override
public Boolean existAuthorize(String roleId, String systemId) {
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getObjectId, roleId);
if (StringUtil.isNotEmpty(systemId)) {
queryWrapper.lambda().eq(AuthorizeEntity::getItemId, systemId);
queryWrapper.lambda().eq(AuthorizeEntity::getItemType, AuthorizeConst.SYSTEM);
}
return this.count(queryWrapper) > 0;
}
@Override
public List<AuthorizeEntity> getListByRoleId(String roleId) {
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getObjectId, roleId);
return this.list(queryWrapper);
}
@Override
public List<AuthorizeEntity> getListByObjectId(String objectId, String itemType) {
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getObjectId, objectId);
queryWrapper.lambda().eq(AuthorizeEntity::getItemType, itemType);
return this.list(queryWrapper);
}
@Override
public List<AuthorizeEntity> getListByObjectAndItem(String itemId, String objectType) {
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getObjectType, objectType).eq(AuthorizeEntity::getItemId, itemId);
return this.list(queryWrapper);
}
@Override
public List<AuthorizeEntity> getListByObjectAndItemIdAndType(String itemId, String itemType) {
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getItemType, itemType).eq(AuthorizeEntity::getItemId, itemId);
return this.list(queryWrapper);
}
@Override
public List<UserSystemVO> getUserStanding(boolean isLogin, String userId) {
return getUserStanding(isLogin, userId, null);
}
@Override
public List<UserSystemVO> getUserStanding(boolean isLogin, String userId, String loginDevice) {
UserInfo userInfo = UserProvider.getUser();
List<UserSystemVO> systemVOS = new ArrayList<>();
UserEntity info = userService.getInfo(userId);
String device = StringUtil.isNotEmpty(loginDevice) ? loginDevice : userInfo.getLoginDevice();
if (DeviceType.PC.getDevice().equals(device)) {
if (ObjectUtil.isNotEmpty(info.getStanding())) {
UserSystemVO vo = new UserSystemVO();
vo.setId(info.getStanding() + "");
vo.setCurrentStanding(true);
systemVOS.add(vo);
}
} else {
if (ObjectUtil.isNotEmpty(info.getAppStanding())) {
UserSystemVO vo = new UserSystemVO();
vo.setId(info.getAppStanding() + "");
vo.setCurrentStanding(true);
systemVOS.add(vo);
}
}
List<OrganizeAdministratorEntity> infoByUserId = organizeAdminIsTratorService.getInfoByUserId(userId);
if (isLogin) {
if (infoByUserId.size() > 0) {
UserSystemVO vo = new UserSystemVO();
vo.setId("2");
systemVOS.add(vo);
}
} else {
if (systemVOS.size() == 0) {
if (Objects.equals(info.getIsAdministrator(), 1)) {
UserSystemVO vo = new UserSystemVO();
vo.setId("1");
systemVOS.add(vo);
} else if (infoByUserId.size() > 0) {
UserSystemVO vo = new UserSystemVO();
vo.setId("2");
systemVOS.add(vo);
} else {
UserSystemVO vo = new UserSystemVO();
vo.setId("3");
systemVOS.add(vo);
}
}
}
return systemVOS;
}
@Override
public AuthorizeVO getAuthorize(UserInfo userInfo, boolean singletonOrg, Integer stand, boolean isMainSystem) {
List<ModuleModel> moduleList = new ArrayList<>();
List<ButtonModel> buttonList = new ArrayList<>();
List<ColumnModel> columnList = new ArrayList<>();
List<ResourceModel> resourceList = new ArrayList<>();
List<ModuleFormModel> formsList = new ArrayList<>();
List<SystemBaeModel> systemList = new ArrayList<>();
List<OrganizeAdministratorEntity> organizeAdministratorEntity = new ArrayList<>();
boolean isAdmin = userInfo.getIsAdministrator();
if (ObjectUtil.isNotEmpty(stand)) {
isAdmin = Objects.equals(stand, 1);
if (Objects.equals(stand, 2)) {
organizeAdministratorEntity.addAll(organizeAdminIsTratorService.getInfoByUserId(userInfo.getUserId()));
}
}
SystemEntity entity = systemApi.getInfoByEnCode(YunzhupaasConst.MAIN_SYSTEM_CODE);
List<String> moduleAuthorize = new ArrayList<>();
List<String> moduleUrlAddressAuthorize = new ArrayList<>();
if (configValueUtil.isMultiTenancy()) {
TenantAuthorizeModel tenantAuthorizeModel = TenantDataSourceUtil
.getCacheModuleAuthorize(userInfo.getTenantId());
moduleAuthorize = tenantAuthorizeModel.getModuleIdList();
moduleUrlAddressAuthorize = tenantAuthorizeModel.getUrlAddressList();
}
// 开发平台权限获取
AuthorizeVO mainSystemAuthorize = new AuthorizeVO();
if (isMainSystem) {
if (isAdmin || organizeAdministratorEntity.size() > 0) {
List<String> mainModuleId = new ArrayList<>();
List<String> moduleId = organizeAdministratorEntity.stream()
.filter(t -> PermissionConst.MODULE.equals(t.getOrganizeType()))
.map(OrganizeAdministratorEntity::getOrganizeId).collect(Collectors.toList());
mainModuleId.addAll(moduleId);
if (organizeAdministratorEntity.size() > 0) {
mainModuleId.add(YunzhupaasConst.MAIN_SYSTEM_CODE);
}
AuthorizeVO mainAuthorize = this.getMainSystemAuthorize(mainModuleId, moduleAuthorize,
moduleUrlAddressAuthorize, singletonOrg);
mainSystemAuthorize.setModuleList(mainAuthorize.getModuleList());
mainSystemAuthorize.setButtonList(mainAuthorize.getButtonList());
mainSystemAuthorize.setColumnList(mainAuthorize.getColumnList());
mainSystemAuthorize.setResourceList(mainAuthorize.getResourceList());
mainSystemAuthorize.setFormsList(mainAuthorize.getFormsList());
if ((organizeAdministratorEntity.size() > 0 && moduleId.size() > 0) || isAdmin) {
mainSystemAuthorize.setSystemList(mainAuthorize.getSystemList());
}
}
}
if (!isAdmin) {
if (organizeAdministratorEntity.size() > 0) {
List<String> systemId = organizeAdministratorEntity.stream()
.filter(t -> PermissionConst.SYSTEM.equals(t.getOrganizeType()))
.map(OrganizeAdministratorEntity::getOrganizeId).collect(Collectors.toList());
List<SystemEntity> systemEntities = systemApi.getListByIds(systemId, moduleAuthorize);
List<SystemBaeModel> systemJsonToList = JsonUtil.getJsonToList(systemEntities, SystemBaeModel.class);
systemList.addAll(systemJsonToList);
List<String> systemIds = systemJsonToList.stream().map(SystemBaeModel::getId)
.collect(Collectors.toList());
List<ModuleEntity> moduleBySystemIds = moduleApi.getModuleBySystemIds(systemIds, moduleAuthorize,
moduleUrlAddressAuthorize);
List<ModuleModel> moduleJsonToList = JsonUtil.getJsonToList(moduleBySystemIds, ModuleModel.class);
moduleList.addAll(moduleJsonToList);
List<ModuleButtonEntity> buttonByModuleId = buttonApi.getListByModuleIds(
moduleJsonToList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ButtonModel> buttonJsonToList = JsonUtil.getJsonToList(buttonByModuleId, ButtonModel.class);
buttonList.addAll(buttonJsonToList);
List<ModuleColumnEntity> columnByModuleId = columnApi.getListByModuleId(
moduleJsonToList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ColumnModel> columnJsonToList = JsonUtil.getJsonToList(columnByModuleId, ColumnModel.class);
columnList.addAll(columnJsonToList);
List<ModuleDataAuthorizeSchemeEntity> resourceByModuleId = dataAuthorizeSchemeApi.getListByModuleId(
moduleJsonToList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ResourceModel> resourceJsonToList = JsonUtil.getJsonToList(resourceByModuleId,
ResourceModel.class);
resourceList.addAll(resourceJsonToList);
List<ModuleFormEntity> formByModuleId = formApi.getListByModuleId(
moduleJsonToList.stream().map(ModuleModel::getId).collect(Collectors.toList()));
List<ModuleFormModel> formJsonToList = JsonUtil.getJsonToList(formByModuleId, ModuleFormModel.class);
formsList.addAll(formJsonToList);
} else {
List<String> roleIdList = new ArrayList<>();
permissionGroupService
.getPermissionGroupByUserId(userInfo.getUserId(), userInfo.getOrganizeId(), true, null)
.forEach(t -> {
roleIdList.add(t.getId());
});
List<AuthorizeEntity> authorizeList = new ArrayList<>();
if (roleIdList.size() > 0) {
QueryWrapper<AuthorizeEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().in(AuthorizeEntity::getObjectId, roleIdList);
authorizeList = this.list(wrapper);
}
// 应用
List<String> systemId = authorizeList.stream()
.filter(t -> AuthorizeConst.SYSTEM.equals(t.getItemType())).map(AuthorizeEntity::getItemId)
.collect(Collectors.toList());
systemId.remove(entity.getId());
if (systemId.size() > 0) {
List<SystemEntity> systemAdmin = systemApi.getListByIds(systemId, moduleAuthorize);
systemList = JsonUtil.getJsonToList(systemAdmin, SystemBaeModel.class);
systemId = systemAdmin.stream().map(SystemEntity::getId).collect(Collectors.toList());
}
// 菜单 无开发平台
List<String> moduleId = authorizeList.stream()
.filter(t -> AuthorizeConst.MODULE.equals(t.getItemType())).map(AuthorizeEntity::getItemId)
.collect(Collectors.toList());
if (moduleId.size() > 0 && systemId.size() > 0) {
moduleList = this.baseMapper.findModule(moduleId, systemId, moduleAuthorize,
moduleUrlAddressAuthorize, singletonOrg ? 0 : 1, YunzhupaasConst.MODULE_CODE);
}
// 按钮
List<String> buttonId = authorizeList.stream()
.filter(t -> AuthorizeConst.BUTTON.equals(t.getItemType())).map(AuthorizeEntity::getItemId)
.collect(Collectors.toList());
if (buttonId.size() > 0) {
buttonList = this.baseMapper.findButton(buttonId);
}
// 列表
List<String> columnId = authorizeList.stream()
.filter(t -> AuthorizeConst.COLUMN.equals(t.getItemType())).map(AuthorizeEntity::getItemId)
.collect(Collectors.toList());
if (columnId.size() > 0) {
columnList = this.baseMapper.findColumn(columnId);
}
// 数据
List<String> resourceId = authorizeList.stream()
.filter(t -> AuthorizeConst.RESOURCE.equals(t.getItemType())).map(AuthorizeEntity::getItemId)
.collect(Collectors.toList());
if (resourceId.size() > 0) {
resourceList = this.baseMapper.findResource(resourceId);
}
// 表单
List<String> formId = authorizeList.stream().filter(t -> AuthorizeConst.FROM.equals(t.getItemType()))
.map(AuthorizeEntity::getItemId).collect(Collectors.toList());
if (formId.size() > 0) {
formsList = this.baseMapper.findForms(formId);
}
}
} else {
buttonList = this.baseMapper.findButtonAdmin(1);
columnList = this.baseMapper.findColumnAdmin(1);
resourceList = this.baseMapper.findResourceAdmin(1);
formsList = this.baseMapper.findFormsAdmin(1);
List<SystemEntity> systemAdmin = systemApi.findSystemAdmin(singletonOrg ? 0 : 1,
YunzhupaasConst.MAIN_SYSTEM_CODE, moduleAuthorize);
systemList = JsonUtil.getJsonToList(systemAdmin, SystemBaeModel.class);
List<String> systemId = systemList.stream().map(SystemBaeModel::getId).collect(Collectors.toList());
List<ModuleEntity> moduleAdmin = moduleApi.findModuleAdmin(singletonOrg ? 0 : 1, entity.getId(),
moduleAuthorize, moduleUrlAddressAuthorize);
moduleList = JsonUtil.getJsonToList(moduleAdmin, ModuleModel.class).stream()
.filter(t -> systemId.contains(t.getSystemId())).collect(Collectors.toList());
}
systemList.addAll(mainSystemAuthorize.getSystemList());
moduleList.addAll(mainSystemAuthorize.getModuleList());
buttonList.addAll(mainSystemAuthorize.getButtonList());
columnList.addAll(mainSystemAuthorize.getColumnList());
resourceList.addAll(mainSystemAuthorize.getResourceList());
formsList.addAll(mainSystemAuthorize.getFormsList());
return new AuthorizeVO(moduleList, buttonList, columnList, resourceList, formsList, systemList);
}
@Override
@DS("")
public List<SuperJsonModel> getConditionSql(String moduleId) {
List<SuperJsonModel> list = new ArrayList<>();
UserInfo userInfo = UserProvider.getUser();
String reidsKey = cacheKeyUtil.getUserAuthorize() + moduleId + "_" + userInfo.getUserId();
long time = 60 * 5;
if (redisUtil.exists(reidsKey)) {
return JsonUtil.getJsonToList(redisUtil.getString(reidsKey).toString(), SuperJsonModel.class);
}
AuthorizeVO model = this.getAuthorizeByUser(false);
if (model == null) {
redisUtil.insert(reidsKey, JsonUtil.getObjectToString(new ArrayList<>()), time);
return new ArrayList<>();
}
List<ResourceModel> resourceListAll = model.getResourceList().stream()
.filter(m -> m.getModuleId().equals(moduleId)).collect(Collectors.toList());
// 先遍历一次 查找其中有没有全部方案
boolean isAll = resourceListAll.stream().filter(item -> "yunzhupaas_alldata".equals(item.getEnCode())
|| item.getEnCode().startsWith("yunzhupaas_alldata")).count() > 0;
// 未分配权限方案
if (isAll || userInfo.getIsAdministrator()) {
SuperJsonModel superJsonModel = new SuperJsonModel();
list.add(superJsonModel);
redisUtil.insert(reidsKey, JsonUtil.getObjectToString(list), time);
return list;
}
Map<String, List<ResourceModel>> authorizeMap = resourceListAll.stream()
.filter(t -> StringUtil.isNotEmpty(t.getObjectId()))
.collect(Collectors.groupingBy(ma -> ma.getObjectId()));
int num = 0;
// 方案
for (String key : authorizeMap.keySet()) {
List<ResourceModel> resourceList = authorizeMap.get(key);
boolean authorizeLogic = num == 0;
for (ResourceModel item : resourceList) {
String matchLogic = StringUtil.isNotEmpty(item.getMatchLogic()) ? item.getMatchLogic()
: SearchMethodEnum.And.getSymbol();
List<SuperQueryJsonModel> conditionList = new ArrayList<>();
List<ConditionModel> conditionModelList = JsonUtil.getJsonToList(item.getConditionJson(),
ConditionModel.class);
// 分组
for (ConditionModel conditionModel : conditionModelList) {
String logic = conditionModel.getLogic();
List<FieLdsModel> groupList = new ArrayList<>();
// 条件
for (ConditionModel.ConditionItemModel fieldItem : conditionModel.getGroups()) {
SearchMethodEnum itemMethod = SearchMethodEnum.getSearchMethod(fieldItem.getOp());
String itemField = fieldItem.getField();
String table = fieldItem.getBindTable();
if (itemField.contains(".") && itemField.split("\\.").length == 2) {
table = itemField.split("\\.")[0];
itemField = itemField.split("\\.")[1];
}
String bindTable = table;
String vModel = itemField;
String fileId = "";
FieLdsModel fieLdsModel = new FieLdsModel();
ConfigModel config = new ConfigModel();
String yunzhupaasKey = fieldItem.getConditionText();
if (AuthorizeConditionEnum.CURRENTTIME.getCondition().equals(yunzhupaasKey)) {
yunzhupaasKey = AuthorizeConst.DATE_PICKER;
}
switch (fieldItem.getFieldRule()) {
case "1":
fileId = "yunzhupaas_" + bindTable + "_yunzhupaas_" + vModel;
break;
case "2":
fileId = fieldItem.getChildTableKey() + "-" + vModel;
break;
default:
fileId = vModel;
break;
}
config.setYunzhupaasKey(yunzhupaasKey);
config.setTableName(bindTable);
fieLdsModel.setConfig(config);
fieLdsModel.setSymbol(itemMethod.getSymbol());
fieLdsModel.setVModel(vModel);
fieLdsModel.setId(fileId);
fieLdsModel.setFieldValue(fieldItem.getValue());
groupList.add(fieLdsModel);
}
// 搜索条件
SuperQueryJsonModel queryJsonModel = new SuperQueryJsonModel();
queryJsonModel.setGroups(groupList);
queryJsonModel.setLogic(logic);
conditionList.add(queryJsonModel);
}
if (conditionList.size() > 0) {
SuperJsonModel superJsonModel = new SuperJsonModel();
superJsonModel.setMatchLogic(matchLogic);
superJsonModel.setConditionList(conditionList);
superJsonModel.setAuthorizeLogic(authorizeLogic);
list.add(superJsonModel);
}
}
num += list.size() > 0 ? 1 : 0;
}
redisUtil.insert(reidsKey, JsonUtil.getObjectToString(list), time);
return list;
}
@Override
public void removeAuthByUserOrMenu(List<String> userIds, List<String> menuIds) {
userIds = userIds == null ? new ArrayList<>() : userIds;
menuIds = menuIds == null ? new ArrayList<>() : menuIds;
Set<String> allKeys = redisUtil.getAllKeys();
for (String cacheKey : allKeys) {
for (String user : userIds) {
if (cacheKey.startsWith(cacheKeyUtil.getUserAuthorize()) && cacheKey.contains(user)) {
redisUtil.remove(cacheKey);
}
}
for (String menuId : menuIds) {
if (cacheKey.startsWith(cacheKeyUtil.getUserAuthorize()) && cacheKey.contains(menuId)) {
redisUtil.remove(cacheKey);
}
}
}
}
@Override
public boolean getUserCurrentStanding(String userId, Integer standType) {
if (UserProvider.getUser() == null || UserProvider.getUser().getUserId() == null)
return false;
List<UserSystemVO> userStanding = this.getUserStanding(false, UserProvider.getUser().getUserId());
if (standType != null && userStanding.stream().anyMatch(t -> standType.toString().equals(t.getId()))) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,51 @@
package com.yunzhupaas.permission.service.impl;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yunzhupaas.permission.entity.ColumnsPurviewEntity;
import com.yunzhupaas.permission.mapper.ColumnsPurviewMapper;
import com.yunzhupaas.permission.service.ColumnsPurviewService;
import com.yunzhupaas.util.DateUtil;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 模块列表权限业务实现类
*
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2022/3/15 9:40
*/
@Service
public class ColumnsPurviewServiceImpl extends SuperServiceImpl<ColumnsPurviewMapper, ColumnsPurviewEntity> implements ColumnsPurviewService {
@Override
public ColumnsPurviewEntity getInfo(String moduleId) {
QueryWrapper<ColumnsPurviewEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ColumnsPurviewEntity::getModuleId, moduleId);
return this.getOne(queryWrapper);
}
@Override
public boolean update(String moduleId, ColumnsPurviewEntity entity) {
ColumnsPurviewEntity entitys = getInfo(moduleId);
// id不存在则是保存
if (entitys == null) {
entity.setId(RandomUtil.uuId());
entity.setCreatorUserId(UserProvider.getUser().getUserId());
return this.save(entity);
} else {
// 修改
entity.setId(entitys.getId());
entity.setLastModifyUserId(UserProvider.getUser().getUserId());
entity.setLastModifyTime(DateUtil.getNowDate());
}
return this.saveOrUpdate(entity);
}
}

View File

@@ -0,0 +1,168 @@
package com.yunzhupaas.permission.service.impl;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunzhupaas.permission.entity.GroupEntity;
import com.yunzhupaas.permission.entity.PositionEntity;
import com.yunzhupaas.permission.mapper.GroupMapper;
import com.yunzhupaas.permission.model.usergroup.PaginationGroup;
import com.yunzhupaas.permission.service.GroupService;
import com.yunzhupaas.util.DateUtil;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 分组管理业务类实现类
*
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2022/3/10 18:00
*/
@Service
public class GroupServiceImpl extends SuperServiceImpl<GroupMapper, GroupEntity> implements GroupService {
@Override
public List<GroupEntity> getList(PaginationGroup pagination) {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
// 定义变量判断是否需要使用修改时间倒序
boolean flag = false;
// 判断关键字
String keyword = pagination.getKeyword();
if (StringUtil.isNotEmpty(keyword)) {
flag = true;
queryWrapper.lambda().and(
t -> t.like(GroupEntity::getFullName, keyword)
.or().like(GroupEntity::getEnCode, keyword)
.or().like(GroupEntity::getDescription, keyword)
);
}
if (pagination.getEnabledMark() != null) {
queryWrapper.lambda().eq(GroupEntity::getEnabledMark, pagination.getEnabledMark());
}
if (StringUtil.isNotEmpty(pagination.getType())) {
flag = true;
queryWrapper.lambda().eq(GroupEntity::getType, pagination.getType());
}
// 获取列表
queryWrapper.lambda().orderByAsc(GroupEntity::getSortCode).orderByDesc(GroupEntity::getCreatorTime);
if (flag) {
queryWrapper.lambda().orderByDesc(GroupEntity::getLastModifyTime);
}
Page<GroupEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
IPage<GroupEntity> iPage = this.page(page, queryWrapper);
return pagination.setData(iPage.getRecords(), iPage.getTotal());
}
@Override
public List<GroupEntity> list() {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(GroupEntity::getEnabledMark, 1);
queryWrapper.lambda().orderByAsc(GroupEntity::getSortCode).orderByDesc(GroupEntity::getCreatorTime);
return this.list(queryWrapper);
}
@Override
public Map<String, Object> getGroupMap() {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().select(GroupEntity::getId,GroupEntity::getFullName);
return this.list(queryWrapper).stream().collect(Collectors.toMap(GroupEntity::getId,GroupEntity::getFullName));
}
@Override
public Map<String, Object> getGroupEncodeMap() {
return getGroupEncodeMap(false);
}
@Override
public Map<String, Object> getGroupEncodeMap(boolean enabledMark) {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
if(enabledMark){
queryWrapper.lambda().eq(GroupEntity::getEnabledMark,1);
}
queryWrapper.lambda().select(GroupEntity::getId,GroupEntity::getFullName,GroupEntity::getEnCode);
return this.list(queryWrapper).stream().collect(Collectors.toMap(group->group.getFullName() + "/" + group.getEnCode(),GroupEntity::getId));
}
@Override
public GroupEntity getInfo(String id) {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(GroupEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
public GroupEntity getInfo(String fullName,String enCode) {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(GroupEntity::getFullName, fullName);
queryWrapper.lambda().eq(GroupEntity::getEnCode, enCode);
return this.getOne(queryWrapper);
}
@Override
public void crete(GroupEntity entity) {
entity.setId(RandomUtil.uuId());
entity.setCreatorUserId(UserProvider.getUser().getUserId());
entity.setCreatorTime(DateUtil.getNowDate());
this.save(entity);
}
@Override
public Boolean update(String id, GroupEntity entity) {
entity.setId(id);
entity.setLastModifyUserId(UserProvider.getUser().getUserId());
entity.setLastModifyTime(DateUtil.getNowDate());
return this.updateById(entity);
}
@Override
public void delete(GroupEntity entity) {
this.removeById(entity.getId());
}
@Override
public Boolean isExistByFullName(String fullName, String id) {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(GroupEntity::getFullName, fullName);
if (!StringUtil.isEmpty(id)) {
queryWrapper.lambda().ne(GroupEntity::getId, id);
}
return this.count(queryWrapper) > 0;
}
@Override
public Boolean isExistByEnCode(String enCode, String id) {
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(GroupEntity::getEnCode, enCode);
if (!StringUtil.isEmpty(id)) {
queryWrapper.lambda().ne(GroupEntity::getId, id);
}
return this.count(queryWrapper) > 0;
}
@Override
public List<GroupEntity> getListByIds(List<String> list, Boolean filterEnabledMark) {
if (list.isEmpty()) {
return Collections.EMPTY_LIST;
}
QueryWrapper<GroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(GroupEntity::getId, list);
if (filterEnabledMark) {
queryWrapper.lambda().eq(GroupEntity::getEnabledMark, 1);
}
return this.list(queryWrapper);
}
}

View File

@@ -0,0 +1,533 @@
package com.yunzhupaas.permission.service.impl;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.yunzhupaas.base.entity.ModuleEntity;
import com.yunzhupaas.base.entity.SystemEntity;
import com.yunzhupaas.base.service.DbLinkService;
import com.yunzhupaas.base.service.ModuleService;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.Pagination;
import com.yunzhupaas.base.service.SystemService;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.constant.YunzhupaasConst;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.database.model.dto.PrepSqlDTO;
import com.yunzhupaas.database.sql.util.SqlFrameFastUtil;
import com.yunzhupaas.database.util.DataSourceUtil;
import com.yunzhupaas.constant.PermissionConst;
import com.yunzhupaas.database.util.DbTypeUtil;
import com.yunzhupaas.database.util.JdbcUtil;
import com.yunzhupaas.database.util.TenantDataSourceUtil;
import com.yunzhupaas.model.login.UserSystemVO;
import com.yunzhupaas.model.tenant.TenantAuthorizeModel;
import com.yunzhupaas.permission.entity.OrganizeAdministratorEntity;
import com.yunzhupaas.permission.entity.OrganizeEntity;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.permission.entity.UserRelationEntity;
import com.yunzhupaas.permission.mapper.OrganizeAdminIsTratorMapper;
import com.yunzhupaas.permission.model.organizeadministrator.OrganizeAdministratorListVo;
import com.yunzhupaas.permission.model.organizeadministrator.OrganizeAdministratorModel;
import com.yunzhupaas.permission.service.*;
import com.yunzhupaas.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 机构分级管理员
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
@Service
public class OrganizeAdministratorServiceImpl
extends SuperServiceImpl<OrganizeAdminIsTratorMapper, OrganizeAdministratorEntity>
implements OrganizeAdministratorService {
@Autowired
private OrganizeService organizeService;
@Autowired
private UserService userService;
@Autowired
private UserRelationService userRelationService;
@Autowired
private DbLinkService dbLinkService;
@Autowired
private SystemService systemApi;
@Autowired
private ModuleService moduleApi;
@Autowired
private ConfigValueUtil configValueUtil;
@Autowired
private AuthorizeService authorizeService;
@Autowired
private DataSourceUtil dataSourceUtils;
@Override
public OrganizeAdministratorEntity getOne(String userId, String organizeId) {
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId);
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getOrganizeId, organizeId);
// 排序
queryWrapper.lambda().orderByAsc(OrganizeAdministratorEntity::getSortCode)
.orderByDesc(OrganizeAdministratorEntity::getCreatorTime);
return this.getOne(queryWrapper);
}
@Override
public List<OrganizeAdministratorEntity> getOrganizeAdministratorEntity(String userId) {
return getOrganizeAdministratorEntity(userId, PermissionConst.ORGANIZE, false);
}
@Override
public List<OrganizeAdministratorEntity> getOrganizeAdministratorEntity(String userId, String type,
boolean filterMain) {
List<OrganizeAdministratorEntity> list = new ArrayList<>();
UserEntity entity1 = userService.getInfo(userId);
List<UserSystemVO> userStanding = authorizeService.getUserStanding(false, entity1.getId());
boolean isAdmin = userStanding.stream().filter(t -> "1".equals(t.getId())).count() > 0;
// 查询非组织权限
if ((entity1 != null && isAdmin) && !PermissionConst.ORGANIZE.equals(type)) {
List<String> collect = new ArrayList<>();
List<String> moduleAuthorize = new ArrayList<>();
List<String> moduleUrlAddressAuthorize = new ArrayList<>();
if (configValueUtil.isMultiTenancy()) {
TenantAuthorizeModel tenantAuthorizeModel = TenantDataSourceUtil
.getCacheModuleAuthorize(UserProvider.getUser().getTenantId());
moduleAuthorize = tenantAuthorizeModel.getModuleIdList();
moduleUrlAddressAuthorize = tenantAuthorizeModel.getUrlAddressList();
}
if (PermissionConst.SYSTEM.equals(type)) {
collect = systemApi.getList(null, false, false, filterMain, false, moduleAuthorize).stream()
.map(SystemEntity::getId).collect(Collectors.toList());
} else if (PermissionConst.MODULE.equals(type)) {
collect = moduleApi.getList(false, moduleAuthorize, moduleUrlAddressAuthorize).stream()
.map(ModuleEntity::getId).collect(Collectors.toList());
}
for (String t : collect) {
OrganizeAdministratorEntity entity = new OrganizeAdministratorEntity();
entity.setOrganizeId(t);
entity.setId(RandomUtil.uuId());
entity.setOrganizeType(type);
entity.setUserId(userId);
list.add(entity);
}
return list;
}
// 组织权限
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
if (PermissionConst.ORGANIZE.equals(type)) {
queryWrapper.lambda().isNull(OrganizeAdministratorEntity::getOrganizeType);
} else if (StringUtil.isNotEmpty(type)) {
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getOrganizeType, type);
}
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId);
// 排序
queryWrapper.lambda().orderByAsc(OrganizeAdministratorEntity::getSortCode)
.orderByDesc(OrganizeAdministratorEntity::getCreatorTime);
list = this.list(queryWrapper);
return list;
}
@Override
public List<OrganizeAdministratorEntity> getOrganizeAdministratorEntity(String userId, String type) {
// 组织权限
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
if (PermissionConst.ORGANIZE.equals(type)) {
queryWrapper.lambda().isNull(OrganizeAdministratorEntity::getOrganizeType);
} else if (StringUtil.isNotEmpty(type)) {
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getOrganizeType, type);
}
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId);
// 排序
queryWrapper.lambda().orderByAsc(OrganizeAdministratorEntity::getSortCode)
.orderByDesc(OrganizeAdministratorEntity::getCreatorTime);
List<OrganizeAdministratorEntity> list = this.list(queryWrapper);
return list;
}
@Override
@Transactional
public void create(OrganizeAdministratorEntity entity) {
// 判断是新建还是删除
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getOrganizeId, entity.getOrganizeId());
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, entity.getUserId());
// 查出数据是否重复
OrganizeAdministratorEntity administratorEntity = this.getOne(queryWrapper);
if (administratorEntity == null) {
entity.setId(RandomUtil.uuId());
entity.setCreatorUserId(UserProvider.getLoginUserId());
entity.setCreatorTime(new Date());
} else {
entity.setId(administratorEntity.getId());
entity.setCreatorUserId(UserProvider.getLoginUserId());
entity.setLastModifyTime(new Date());
}
this.saveOrUpdate(entity);
}
@Override
public void createList(List<OrganizeAdministratorEntity> list, String userId) {
// QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new
// QueryWrapper<>();
// queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId,userId);
// queryWrapper.lambda().select(OrganizeAdministratorEntity::getCreatorTime);
// IPage<OrganizeAdministratorEntity> list1 = this.page(new Page<>(1, 1),
// queryWrapper);
// boolean isData = !list1.getRecords().isEmpty() &&
// ObjectUtil.isNotEmpty(list1.getRecords().get(0).getCreatorTime());
// Date creatorTime = isData?list1.getRecords().get(0).getCreatorTime():new
// Date();
// this.remove(queryWrapper);
// for (OrganizeAdministratorEntity entity : list) {
// entity.setCreatorTime(creatorTime);
// this.save(entity);
// }
// userService.delCurUser(MsgCode.PS010.get(), ImmutableList.of(userId),2);
try {
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId);
Page<OrganizeAdministratorEntity> page = new Page<>(1, 1);
IPage<OrganizeAdministratorEntity> list1 = this.page(page, queryWrapper);
boolean isData = !list1.getRecords().isEmpty()
&& ObjectUtil.isNotEmpty(list1.getRecords().get(0).getCreatorTime());
String now = isData ? DateUtil.dateFormat(list1.getRecords().get(0).getCreatorTime()) : DateUtil.getNow();
JdbcUtil.creUpDe(new PrepSqlDTO(
XSSEscape.escapeEmpty(SqlFrameFastUtil.ADMINISTRATOR_DEL.replace("{userId}", userId)))
.withConn(dataSourceUtils, null));
String sql = DbTypeUtil.checkOracle(dataSourceUtils) || DbTypeUtil.checkPostgre(dataSourceUtils)
? SqlFrameFastUtil.INSERT_ADMINISTRATOR2
: SqlFrameFastUtil.INSERT_ADMINISTRATOR;
String column_key = StringUtil.EMPTY, column_plceholder = StringUtil.EMPTY,
column_value = TenantDataSourceUtil.getTenantColumn();
if (StringUtil.isNotEmpty(column_value)) {
column_key = StrPool.COMMA + configValueUtil.getMultiTenantColumn();
column_plceholder = ",?";
}
sql = sql.replace("%COLUMN_KEY%", column_key).replace("%COLUMN_PLACEHOLDER%", column_plceholder);
PrepSqlDTO dto = new PrepSqlDTO(sql).withConn(dataSourceUtils, null);
for (OrganizeAdministratorEntity entity : list) {
List<Object> data = new LinkedList<>();
data.add(RandomUtil.uuId());
data.add(userId);
data.add(entity.getOrganizeId());
data.add(entity.getOrganizeType());
data.add(entity.getThisLayerAdd());
data.add(entity.getThisLayerEdit());
data.add(entity.getThisLayerDelete());
data.add(entity.getSubLayerAdd());
data.add(entity.getSubLayerEdit());
data.add(entity.getSubLayerDelete());
data.add(entity.getThisLayerSelect());
data.add(entity.getSubLayerSelect());
data.add(entity.getManagerGroup());
data.add(now);
data.add(UserProvider.getLoginUserId());
data.add(1);
if (StringUtil.isNotEmpty(column_value)) {
data.add(column_value);
}
dto.addMultiData(data);
}
JdbcUtil.creUpDeBatchOneSql(dto);
userService.delCurUser(MsgCode.PS010.get(), ImmutableList.of(userId), 2);
} catch (Exception e) {
e.printStackTrace();
log.error("分级报错:" + e.getMessage());
}
}
@Override
public boolean update(String organizeId, OrganizeAdministratorEntity entity) {
entity.setId(entity.getId());
entity.setLastModifyTime(DateUtil.getNowDate());
entity.setLastModifyUserId(UserProvider.getLoginUserId());
return this.updateById(entity);
}
@Override
public boolean deleteByUserId(String userId) {
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId);
boolean remove = this.remove(queryWrapper);
userService.delCurUser(MsgCode.PS010.get(), ImmutableList.of(userId), 2);
userService.updateStand(ImmutableList.of(userId), 2);
return remove;
}
@Override
public List<OrganizeAdministratorEntity> getInfoByUserId(String userId) {
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId);
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getEnabledMark, 1);
return this.list(queryWrapper);
}
@Override
public OrganizeAdministratorEntity getInfo(String id) {
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
public void delete(OrganizeAdministratorEntity entity) {
this.removeById(entity.getId());
}
@Override
public String getManagerGroupByUserId(String userId) {
if (StringUtil.isEmpty(userId)) {
return null;
}
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId);
List<OrganizeAdministratorEntity> list = this.list(queryWrapper);
return list.size() > 0 ? list.get(0).getManagerGroup() : null;
}
@Override
public OrganizeAdministratorEntity getInfoByOrganizeId(String organizeId) {
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OrganizeAdministratorEntity::getOrganizeId, organizeId);
return this.getOne(queryWrapper);
}
@Override
public List<OrganizeAdministratorEntity> getListByOrganizeId(List<String> organizeIdList) {
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(OrganizeAdministratorEntity::getOrganizeId, organizeIdList);
return this.list(queryWrapper);
}
@Override
public List<OrganizeAdministratorListVo> getList(Pagination pagination) {
List<OrganizeAdministratorEntity> list = getOrganizeAdministratorEntity(UserProvider.getLoginUserId(),
PermissionConst.ORGANIZE, false);
Map<String, String> orgIdNameMaps = organizeService.getInfoList();
List<String> organizeIdList;
Map<String, OrganizeEntity> orgMaps = organizeService.getOrgMaps(null, true, null);
// 存放所有的有资格管理的组织id
if (UserProvider.getUser().getIsAdministrator()) {
organizeIdList = new ArrayList<>(orgMaps.keySet());
} else {
Set<String> orgId = new HashSet<>(16);
// 判断自己是哪些组织的管理员
list.stream().forEach(t -> {
if (t != null) {
// t.getThisLayerAdd() == 1 || t.getThisLayerEdit() == 1 ||
// t.getThisLayerDelete() == 1 ||
// (StringUtil.isNotEmpty(String.valueOf(t.getSubLayerSelect())) &&
// t.getThisLayerSelect() == 1)
if (t.getSubLayerSelect() != null && t.getThisLayerSelect() == 1) {
orgId.add(t.getOrganizeId());
}
// t.getSubLayerAdd() == 1 || t.getSubLayerEdit() == 1 || t.getSubLayerDelete()
// == 1 || (StringUtil.isNotEmpty(String.valueOf(t.getSubLayerSelect())) &&
// t.getSubLayerSelect() == 1)
if (t.getSubLayerSelect() != null && t.getSubLayerSelect() == 1) {
List<String> underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(),
true);
orgId.addAll(underOrganizations);
}
}
});
organizeIdList = new ArrayList<>(orgId);
}
if (organizeIdList.size() < 1) {
organizeIdList.add("");
}
List<OrganizeAdministratorListVo> jsonToList = new ArrayList<>();
List<List<String>> organizeList = Lists.partition(organizeIdList, 1000);
List<String> userId = new ArrayList<>();
for (List<String> objectId : organizeList) {
userId.addAll(userRelationService.getListByOrgId(objectId).stream().map(UserRelationEntity::getUserId)
.collect(Collectors.toList()));
}
userId.remove(UserProvider.getUser().getUserId());
if (userId.isEmpty()) {
return jsonToList;
}
QueryWrapper<UserEntity> userWrapper = new QueryWrapper<>();
userWrapper.lambda().select(UserEntity::getId, UserEntity::getAccount, UserEntity::getRealName,
UserEntity::getGender, UserEntity::getMobilePhone);
userWrapper.lambda().in(UserEntity::getId, userId);
userWrapper.lambda().eq(UserEntity::getEnabledMark, 1);
if (StringUtil.isNotEmpty(pagination.getKeyword())) {
userWrapper.lambda().and(
t -> t.like(UserEntity::getRealName, pagination.getKeyword())
.or().like(UserEntity::getAccount, pagination.getKeyword())
.or().like(UserEntity::getMobilePhone, pagination.getKeyword()));
}
List<UserEntity> userList = userService.list(userWrapper);
if (userList.isEmpty()) {
return jsonToList;
}
QueryWrapper<OrganizeAdministratorEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().isNotNull(OrganizeAdministratorEntity::getManagerGroup);
queryWrapper.lambda().select(OrganizeAdministratorEntity::getUserId,
OrganizeAdministratorEntity::getCreatorTime, OrganizeAdministratorEntity::getManagerGroup);
queryWrapper.lambda().in(OrganizeAdministratorEntity::getUserId,
userList.stream().map(UserEntity::getId).collect(Collectors.toList()));
queryWrapper.lambda().orderByDesc(OrganizeAdministratorEntity::getCreatorTime);
List<OrganizeAdministratorEntity> entityList = this.list(queryWrapper);
List<String> ids = new ArrayList<>();
for (OrganizeAdministratorEntity entity : entityList) {
if (!ids.contains(entity.getUserId())) {
ids.add(entity.getUserId());
}
}
List listPage = PageUtil.getListPage((int) pagination.getCurrentPage(), (int) pagination.getPageSize(), ids);
if (!listPage.isEmpty()) {
List<OrganizeAdministratorEntity> organizeAdminList = entityList.stream()
.filter(t -> listPage.contains(t.getUserId())).distinct()
.sorted(Comparator.comparing(OrganizeAdministratorEntity::getCreatorTime).reversed())
.collect(Collectors.toList());
for (OrganizeAdministratorEntity entity : organizeAdminList) {
UserEntity info = userList.stream().filter(t -> t.getId().equals(entity.getUserId())).findFirst()
.orElse(null);
if (info != null) {
OrganizeAdministratorListVo vo = JsonUtil.getJsonToBean(info, OrganizeAdministratorListVo.class);
// 所属组织
List<UserRelationEntity> orgRelationByUserId = userRelationService
.getAllOrgRelationByUserId(entity.getUserId());
StringBuilder orgName = new StringBuilder();
orgRelationByUserId.stream().forEach(or -> {
OrganizeEntity organizeEntity = orgMaps.get(or.getObjectId());
if (organizeEntity != null && StringUtil.isNotEmpty(organizeEntity.getOrganizeIdTree())) {
String fullNameByOrgIdTree = organizeService.getFullNameByOrgIdTree(orgIdNameMaps,
organizeEntity.getOrganizeIdTree(), "/");
orgName.append("," + fullNameByOrgIdTree);
}
});
// 组织名称
String org = orgName.length() > 0 ? orgName.toString().replaceFirst(",", "") : "";
vo.setOrganizeId(org);
vo.setManagerGroup(entity.getManagerGroup());
vo.setCreatorTime(entity.getCreatorTime().getTime());
jsonToList.add(vo);
}
}
}
return pagination.setData(jsonToList, ids.size());
}
@Override
public List<String> getOrganizeUserList(String type) {
if (UserProvider.getUser().getIsAdministrator()) {
return organizeService.getList(true).stream().map(OrganizeEntity::getId).collect(Collectors.toList());
}
List<OrganizeAdministratorEntity> list = getOrganizeAdministratorEntity(UserProvider.getLoginUserId());
Set<String> orgId = new HashSet<>(16);
// 判断自己是哪些组织的管理员
list.stream().forEach(t -> {
if (t != null) {
if (t.getSubLayerSelect() != null && t.getThisLayerSelect() == 1) {
orgId.add(t.getOrganizeId());
}
if (t.getSubLayerSelect() != null && t.getSubLayerSelect() == 1) {
List<String> underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), true);
orgId.addAll(underOrganizations);
}
}
});
List<String> orgIds = new ArrayList<>(orgId);
if (YunzhupaasConst.CURRENT_ORG_SUB.equals(type)) {
return orgIds;
}
List<String> userList = userRelationService.getListByObjectIdAll(orgIds).stream()
.map(UserRelationEntity::getUserId).collect(Collectors.toList());
return userList;
}
@Override
public List<OrganizeEntity> getListByAuthorize() {
// 通过权限转树
List<OrganizeAdministratorEntity> listss = getOrganizeAdministratorEntity(UserProvider.getLoginUserId());
Set<String> orgIds = new HashSet<>(16);
// 判断自己是哪些组织的管理员
listss.stream().forEach(t -> {
if (t != null) {
if (t.getThisLayerSelect() != null && t.getThisLayerSelect() == 1) {
orgIds.add(t.getOrganizeId());
}
if (t.getSubLayerSelect() != null && t.getSubLayerSelect() == 1) {
List<String> underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), true);
orgIds.addAll(underOrganizations);
}
}
});
List<String> list1 = new ArrayList<>(orgIds);
// 得到所有有权限的组织
List<OrganizeEntity> organizeName = organizeService.getOrganizeName(list1);
return organizeName;
}
@Override
public OrganizeAdministratorModel getOrganizeAdministratorList() {
// 通过权限转树
List<OrganizeAdministratorEntity> list = getOrganizeAdministratorEntity(UserProvider.getUser().getUserId());
List<String> addList = new ArrayList<>();
List<String> editList = new ArrayList<>();
List<String> deleteList = new ArrayList<>();
List<String> selectList = new ArrayList<>();
// 判断自己是哪些组织的管理员
list.forEach(t -> {
if (t != null) {
// 查询
if (t.getThisLayerSelect() != null && t.getThisLayerSelect() == 1) {
selectList.add(t.getOrganizeId());
// 修改
if (t.getThisLayerEdit() != null && t.getThisLayerEdit() == 1) {
editList.add(t.getOrganizeId());
}
// 删除
if (t.getThisLayerDelete() != null && t.getThisLayerDelete() == 1) {
deleteList.add(t.getOrganizeId());
}
// 新增
if (t.getThisLayerAdd() != null && t.getThisLayerAdd() == 1) {
addList.add(t.getOrganizeId());
}
}
// 查询
if (t.getSubLayerSelect() != null && t.getSubLayerSelect() == 1) {
List<String> underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), false);
selectList.addAll(underOrganizations);
// 修改
if (t.getSubLayerEdit() != null && t.getSubLayerEdit() == 1) {
editList.addAll(underOrganizations);
}
// 删除
if (t.getSubLayerDelete() != null && t.getSubLayerDelete() == 1) {
deleteList.addAll(underOrganizations);
}
// 新增
if (t.getSubLayerAdd() != null && t.getSubLayerAdd() == 1) {
addList.addAll(underOrganizations);
}
}
}
});
OrganizeAdministratorModel model = new OrganizeAdministratorModel(addList, editList, deleteList, selectList);
return model;
}
}

View File

@@ -0,0 +1,362 @@
package com.yunzhupaas.permission.service.impl;
import com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.constant.YunzhupaasConst;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.constant.PermissionConst;
import com.yunzhupaas.permission.entity.*;
import com.yunzhupaas.permission.mapper.OrganizeRelationMapper;
import com.yunzhupaas.permission.model.organize.OrganizeConditionModel;
import com.yunzhupaas.permission.model.organize.OrganizeModel;
import com.yunzhupaas.permission.service.*;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 组织关系 服务实现类
* </p>
*
* @author
* @since 2022-01-19
*/
@Service
public class OrganizeRelationServiceImpl extends SuperServiceImpl<OrganizeRelationMapper, OrganizeRelationEntity>
implements OrganizeRelationService {
@Autowired
RoleService roleService;
@Autowired
PositionService positionService;
@Autowired
UserRelationService userRelationService;
@Autowired
UserService userService;
@Autowired
AuthorizeService authorizeService;
@Autowired
OrganizeService organizeService;
@Autowired
OrganizeAdministratorService organizeAdministratorService;
@Autowired
PermissionGroupService permissionGroupService;
@Override
public List<OrganizeRelationEntity> getRelationListByOrganizeId(List<String> organizeIds) {
if (organizeIds.isEmpty()) {
return Collections.EMPTY_LIST;
}
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
query.lambda().in(OrganizeRelationEntity::getOrganizeId, organizeIds);
query.lambda().orderByDesc(OrganizeRelationEntity::getCreatorTime);
return this.list(query);
}
@Override
public List<OrganizeRelationEntity> getRelationListByOrganizeId(List<String> organizeIds, String objectType) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
// 查询组织关系表集合
if (StringUtil.isNotEmpty(objectType)) {
query.lambda().eq(OrganizeRelationEntity::getObjectType, objectType);
}
if (organizeIds.size() > 0) {
query.lambda().in(OrganizeRelationEntity::getOrganizeId, organizeIds);
} else {
organizeIds.add("");
query.lambda().in(OrganizeRelationEntity::getOrganizeId, organizeIds);
}
query.lambda().orderByDesc(OrganizeRelationEntity::getCreatorTime);
return this.list(query);
}
@Override
public List<String> getPositionListByOrganizeId(List<String> organizeIds) {
if (organizeIds.size() > 0) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
// 查询组织关系表集合
query.lambda().eq(OrganizeRelationEntity::getObjectType, PermissionConst.POSITION);
query.lambda().in(OrganizeRelationEntity::getOrganizeId, organizeIds);
query.lambda().orderByDesc(OrganizeRelationEntity::getCreatorTime);
return this.list(query).stream().map(OrganizeRelationEntity::getObjectId).collect(Collectors.toList());
}
return new ArrayList<>();
}
@Override
public List<OrganizeRelationEntity> getRelationListByRoleId(String roleId) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
// 查询组织关系表集合
query.lambda().eq(OrganizeRelationEntity::getObjectType, PermissionConst.ROLE);
query.lambda().in(OrganizeRelationEntity::getObjectId, roleId);
query.lambda().orderByDesc(OrganizeRelationEntity::getCreatorTime);
return this.list(query);
}
@Override
public List<OrganizeRelationEntity> getRelationListByRoleIdList(List<String> roleId) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
// 查询组织关系表集合
query.lambda().eq(OrganizeRelationEntity::getObjectType, PermissionConst.ROLE);
query.lambda().in(OrganizeRelationEntity::getObjectId, roleId);
query.lambda().orderByDesc(OrganizeRelationEntity::getCreatorTime);
return this.list(query);
}
@Override
public List<OrganizeRelationEntity> getRelationListByObjectIdAndType(String objectType, String objectId) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
query.lambda().eq(OrganizeRelationEntity::getObjectId, objectId);
query.lambda().eq(OrganizeRelationEntity::getObjectType, objectType);
return this.list(query);
}
@Override
public Boolean existByRoleIdAndOrgId(String roleId, String organizeId) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
query.lambda().eq(OrganizeRelationEntity::getObjectType, PermissionConst.ROLE);
query.lambda().in(OrganizeRelationEntity::getObjectId, roleId);
query.lambda().in(OrganizeRelationEntity::getOrganizeId, organizeId);
return count(query) > 0;
}
@Override
public Boolean existByObjTypeAndOrgId(String objectType, String organizeId) {
return existByObjAndOrgId(objectType, null, organizeId);
}
@Override
public Boolean existByObjAndOrgId(String objectType, String objId, String organizeId) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
query.lambda().eq(OrganizeRelationEntity::getObjectType, objectType);
if (StringUtil.isNotEmpty(objId)) {
query.lambda().eq(OrganizeRelationEntity::getObjectId, objId);
}
query.lambda().in(OrganizeRelationEntity::getOrganizeId, organizeId);
return count(query) > 0;
}
@Override
public List<OrganizeRelationEntity> getRelationListByType(String objectType) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
// 查询组织关系表集合
query.lambda().eq(OrganizeRelationEntity::getObjectType, objectType);
query.lambda().orderByDesc(OrganizeRelationEntity::getCreatorTime);
return this.list(query);
}
@Override
public List<OrganizeRelationEntity> getListByTypeAndOrgId(String objectType, String orgId) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
// 查询组织关系表集合
query.lambda().eq(OrganizeRelationEntity::getObjectType, objectType)
.eq(OrganizeRelationEntity::getOrganizeId, orgId);
return this.list(query);
}
@Override
public Boolean deleteAllByRoleId(String roleId) {
QueryWrapper<OrganizeRelationEntity> query = new QueryWrapper<>();
query.lambda().eq(OrganizeRelationEntity::getObjectType, PermissionConst.ROLE);
query.lambda().eq(OrganizeRelationEntity::getObjectId, roleId);
return this.remove(query);
}
/* ========================== 自动切换岗位,组织相关 ============================== */
@Override
public String autoGetMajorPositionId(String userId, String currentMajorOrgId, String currentMajorPosId) {
// 属于该该组织底下的岗位
List<PositionEntity> positionList = positionService.getListByOrgIdAndUserId(currentMajorOrgId, userId);
if (positionList.size() > 0) {
// 默认岗位是否在此组织内,若存在不做切换
if (positionList.stream().anyMatch(p -> p.getId().equals(currentMajorPosId))) {
return currentMajorPosId;
} else {
// 默认第一个岗位
return positionList.get(0).getId();
}
}
return "";
}
@Override
public String autoGetMajorOrganizeId(String userId, List<String> userAllOrgIds, String currentMajorOrgId,
String systemId) {
if (userAllOrgIds.size() > 0) {
if (userAllOrgIds.contains(currentMajorOrgId)
&& checkBasePermission(userId, currentMajorOrgId, systemId).size() > 0) {
// 保持原默认组织不切换
return currentMajorOrgId;
} else {
// 去除原本默认组织ID
List<String> selectOrgIds = userAllOrgIds.stream().filter(usi -> !usi.equals(currentMajorOrgId))
.collect(Collectors.toList());
// 若不存在,强制切换有基本登录权限的角色
for (String orgId : selectOrgIds) {
if (this.checkBasePermission(userId, orgId, systemId).size() > 0) {
// 这个组织ID底下角色存在基础登录权限
return orgId;
}
}
}
// 随机赋值一个
return userAllOrgIds.get(0);
} else {
return "";
}
}
/* == 自动key.equals == */
@Override
public void autoSetOrganize(List<String> allUpdateUserIds) {
if (allUpdateUserIds.size() > 0) {
for (UserEntity userEntity : userService.listByIds(allUpdateUserIds)) {
String useId = userEntity.getId();
String majorOrgId = userEntity.getOrganizeId();
List<String> orgList = userRelationService.getListByObjectType(useId, PermissionConst.ORGANIZE)
.stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
String changeOrgId = this.autoGetMajorOrganizeId(useId, orgList, majorOrgId, null);
if (!changeOrgId.equals(majorOrgId)) {
// 切换默认组织
UserEntity updateUserEntity = new UserEntity();
updateUserEntity.setId(useId);
updateUserEntity.setOrganizeId(changeOrgId);
userService.updateById(updateUserEntity);
}
}
}
}
@Override
public void autoSetPosition(List<String> allUpdateUserIds) {
if (allUpdateUserIds.size() > 0) {
for (UserEntity user : userService.listByIds(allUpdateUserIds)) {
String majorPosId = user.getPositionId();
String changePositionId = this.autoGetMajorPositionId(user.getId(), user.getOrganizeId(), majorPosId);
if (!changePositionId.equals(majorPosId)) {
UserEntity updateUser = new UserEntity();
updateUser.setId(user.getId());
updateUser.setPositionId(changePositionId);
userService.updateById(updateUser);
}
}
}
}
/* ===================== 权限判断 ======================= */
@Override
public List<PermissionGroupEntity> checkBasePermission(String userId, String orgId, String systemId) {
List<PermissionGroupEntity> permissionGroupByUserId = permissionGroupService.getPermissionGroupByUserId(userId,
orgId, false, systemId);
return permissionGroupByUserId;
}
@Override
public List<String> getOrgIds(List<String> departIds, String type) {
List<String> idList = new ArrayList<>(16);
// 获取所有组织
if (departIds.size() > 0) {
List<String> collect = departIds.stream().filter(YunzhupaasConst.SYSTEM_PARAM.keySet()::contains)
.collect(Collectors.toList());
String organizeId = UserProvider.getUser().getOrganizeId();
collect.forEach(t -> {
if (YunzhupaasConst.CURRENT_ORG.equals(t) || YunzhupaasConst.CURRENT_ORG_TYPE.equals(t)) {
idList.add(organizeId + "--" + com.yunzhupaas.constant.PermissionConst.COMPANY);
idList.add(organizeId);
} else if (YunzhupaasConst.CURRENT_ORG_SUB.equals(t)
|| YunzhupaasConst.CURRENT_ORG_SUB_TYPE.equals(t)) {
List<String> underOrganizations = organizeService.getUnderOrganizations(organizeId, true);
underOrganizations.add(organizeId);
underOrganizations.forEach(orgId -> {
idList.add(orgId + "--" + com.yunzhupaas.constant.PermissionConst.COMPANY);
idList.add(orgId);
});
} else if (YunzhupaasConst.CURRENT_GRADE.equals(t) || YunzhupaasConst.CURRENT_GRADE_TYPE.equals(t)) {
List<String> organizeUserList = organizeAdministratorService
.getOrganizeUserList(YunzhupaasConst.CURRENT_ORG_SUB);
organizeUserList.forEach(orgId -> {
idList.add(orgId + "--" + com.yunzhupaas.constant.PermissionConst.COMPANY);
idList.add(orgId);
});
}
});
departIds.removeAll(collect);
idList.addAll(departIds);
for (String departId : departIds) {
String[] split = departId.split("--");
if (split.length == 1 || split.length == 0) {
continue;
}
if (split.length > 1) {
if (com.yunzhupaas.constant.PermissionConst.ORGANIZE.equals(split[1])) {
departId = split[0];
}
if (com.yunzhupaas.constant.PermissionConst.DEPARTMENT.equals(split[1])) {
departId = split[0];
}
}
if (!com.yunzhupaas.constant.PermissionConst.ROLE.equals(type)) {
List<String> underOrganizations = organizeService.getUnderOrganizations(departId, true);
if (underOrganizations.size() > 0) {
idList.addAll(underOrganizations);
idList.add(organizeId);
}
}
}
}
return idList.stream().distinct().collect(Collectors.toList());
}
@Override
public List<OrganizeModel> getOrgIdsList(OrganizeConditionModel organizeConditionModel) {
List<String> ids = new ArrayList<>();
List<String> orgIds = getOrgIds(organizeConditionModel.getDepartIds(), null);
Map<String, String> orgIdNameMaps = Optional.ofNullable(organizeConditionModel.getOrgIdNameMaps())
.orElse(organizeService.getInfoList());
orgIds.forEach(t -> ids.add(t.split("--")[0]));
List<OrganizeEntity> listAll = organizeService.getListAll(ids, organizeConditionModel.getKeyword());
List<OrganizeModel> organizeList = JsonUtil.getJsonToList(listAll, OrganizeModel.class);
organizeList.forEach(t -> {
t.setIcon("department".equals(t.getType()) ? "icon-ym icon-ym-tree-department1"
: "icon-ym icon-ym-tree-organization3");
t.setLastFullName(t.getFullName());
if (StringUtil.isNotEmpty(t.getOrganizeIdTree())) {
t.setOrganizeIds(Arrays.asList(t.getOrganizeIdTree().split(",")));
t.setOrganize(organizeService.getFullNameByOrgIdTree(orgIdNameMaps, t.getOrganizeIdTree(), "/"));
String[] split = t.getOrganizeIdTree().split(",");
List<String> list = Arrays.asList(split);
Collections.reverse(list);
for (int i = 1; i < list.size(); i++) {
String orgId = list.get(i);
List<OrganizeModel> collect1 = organizeList.stream().filter(tt -> orgId.equals(tt.getId()))
.collect(Collectors.toList());
if (collect1.size() > 0) {
String[] split1 = StringUtil.isNotEmpty(t.getOrganizeIdTree())
? t.getOrganizeIdTree().split(orgId)
: new String[0];
if (split1.length > 0) {
t.setFullName(organizeService.getFullNameByOrgIdTree(orgIdNameMaps, split1[1], "/"));
}
t.setOrganize(
organizeService.getFullNameByOrgIdTree(orgIdNameMaps, t.getOrganizeIdTree(), "/"));
t.setParentId(orgId);
break;
}
}
}
});
return organizeList;
}
}

View File

@@ -0,0 +1,590 @@
package com.yunzhupaas.permission.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.constant.PermissionConst;
import com.yunzhupaas.message.util.SynThirdConsts;
import com.yunzhupaas.permission.constant.AuthorizeConst;
import com.yunzhupaas.permission.entity.*;
import com.yunzhupaas.permission.mapper.PermissionGroupMapper;
import com.yunzhupaas.permission.model.permissiongroup.PaginationPermissionGroup;
import com.yunzhupaas.permission.service.*;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.type.AuthorizeType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class PermissionGroupServiceImpl extends SuperServiceImpl<PermissionGroupMapper, PermissionGroupEntity> implements PermissionGroupService {
@Autowired
private UserService userService;
@Autowired
private UserRelationService userRelationService;
@Autowired
private OrganizeRelationService organizeRelationService;
@Autowired
private RoleService roleService;
@Autowired
private PositionService positionService;
@Autowired
private GroupService groupService;
@Autowired
private AuthorizeService authorizeService;
@Autowired
private OrganizeService organizeService;
@Override
public List<PermissionGroupEntity> list(PaginationPermissionGroup pagination) {
boolean flag = false;
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
String keyword = pagination.getKeyword();
if (StringUtil.isNotEmpty(keyword)) {
flag = true;
queryWrapper.lambda().and(
t -> t.like(PermissionGroupEntity::getFullName, keyword)
.or().like(PermissionGroupEntity::getEnCode, keyword)
.or().like(PermissionGroupEntity::getDescription, keyword)
);
}
if (pagination.getEnabledMark() != null) {
queryWrapper.lambda().eq(PermissionGroupEntity::getEnabledMark, pagination.getEnabledMark());
}
queryWrapper.lambda().orderByAsc(PermissionGroupEntity::getSortCode).orderByDesc(PermissionGroupEntity::getCreatorTime);
if (flag) {
queryWrapper.lambda().orderByDesc(PermissionGroupEntity::getLastModifyTime);
}
Page<PermissionGroupEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
IPage<PermissionGroupEntity> iPage = this.page(page, queryWrapper);
return pagination.setData(iPage.getRecords(), iPage.getTotal());
}
@Override
public List<PermissionGroupEntity> list(boolean filterEnabledMark, List<String> ids) {
if (ids != null && ids.size() == 0) {
return new ArrayList<>();
}
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
if (filterEnabledMark) {
queryWrapper.lambda().eq(PermissionGroupEntity::getEnabledMark, 1);
}
if (ids != null && ids.size() > 0) {
queryWrapper.lambda().in(PermissionGroupEntity::getId, ids);
}
return this.list(queryWrapper);
}
@Override
public PermissionGroupEntity info(String id) {
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PermissionGroupEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
public boolean create(PermissionGroupEntity entity) {
entity.setId(RandomUtil.uuId());
return this.save(entity);
}
@Override
public boolean update(String id, PermissionGroupEntity entity) {
entity.setId(id);
return this.updateById(entity);
}
@Override
public boolean delete(PermissionGroupEntity entity) {
return this.removeById(entity);
}
@Override
public boolean isExistByFullName(String id, PermissionGroupEntity entity) {
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PermissionGroupEntity::getFullName, entity.getFullName());
if (StringUtil.isNotEmpty(id)) {
queryWrapper.lambda().ne(PermissionGroupEntity::getId, id);
}
return this.count(queryWrapper) > 0;
}
@Override
public boolean isExistByEnCode(String id, PermissionGroupEntity entity) {
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PermissionGroupEntity::getEnCode, entity.getEnCode());
if (StringUtil.isNotEmpty(id)) {
queryWrapper.lambda().ne(PermissionGroupEntity::getId, id);
}
return this.count(queryWrapper) > 0;
}
@Override
public PermissionGroupEntity permissionMember(String id) {
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PermissionGroupEntity::getId, id);
queryWrapper.lambda().select(PermissionGroupEntity::getId, PermissionGroupEntity::getPermissionMember);
return this.getOne(queryWrapper);
}
@Override
public List<PermissionGroupEntity> getPermissionGroupByUserId(String userId, String organizeId, boolean singletonOrg, String systemId) {
List<PermissionGroupEntity> list = new ArrayList<>();
// 用户本身有没有权限
UserEntity userEntity = userService.getInfo(userId);
if (userEntity == null) {
return list;
}
List<PermissionGroupEntity> allGroupList = this.list(true, null).stream().filter(t -> Objects.equals(0,t.getType())).collect(Collectors.toList());
allGroupList.forEach(permissionGroupEntity -> {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
list.add(permissionGroupEntity);
}
});
List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
String finalUserId = userId + "--" + PermissionConst.USER;
List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(finalUserId)).collect(Collectors.toList());
collect.forEach(permissionGroupEntity -> {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
list.add(permissionGroupEntity);
}
});
// 用户关系表
List<UserRelationEntity> listByUserId = userRelationService.getListByUserId(userEntity.getId()).stream().filter(r -> StringUtil.isNotEmpty(r.getObjectId())).collect(Collectors.toList());
// 分组有没有权限
List<String> groupIds = new ArrayList<>();
List<String> groupId = listByUserId.stream().filter(t -> PermissionConst.GROUP.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> groupName = groupService.getListByIds(groupId, true)
.stream().map(GroupEntity::getId).collect(Collectors.toList());
groupName.forEach(t -> groupIds.add(t + "--group"));
for (String id : groupIds) {
List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id)).collect(Collectors.toList());
collect1.forEach(permissionGroupEntity -> {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
list.add(permissionGroupEntity);
}
});
}
// 全局角色如果有权限
List<String> roleAllList = listByUserId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> globalList = roleService.getGlobalList(roleAllList)
.stream().map(RoleEntity::getId).collect(Collectors.toList());
for (String id : globalList) {
List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream()
.filter(entity -> entity.getPermissionMember().contains(id + "--role")).collect(Collectors.toList());
collect1.forEach(permissionGroupEntity -> {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
list.add(permissionGroupEntity);
}
});
}
// 组织有权限
List<String> organizeIds = new ArrayList<>();
List<String> orgIds = new ArrayList<>();
if(list.size() > 0) {
// 当前组织及组织下岗位、角色权限组
organizeIds.add(userEntity.getOrganizeId());
} else {
// 此情况下不找
if (StringUtil.isNotEmpty(organizeId)) {
organizeIds.add(organizeId);
} else {
// 找到一个有权限的组织、岗位、角色
List<UserRelationEntity> listByObjectType = userRelationService.getListByObjectType(userId, PermissionConst.ORGANIZE);
List<String> collect2 = listByObjectType.stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
organizeIds.addAll(collect2);
organizeIds.add(userEntity.getOrganizeId());
}
}
// 拼上后缀
if (organizeIds.size() > 0) {
List<String> collect1 = new ArrayList<>();
collect1.addAll(organizeService.getOrgEntityList(organizeIds, true)
.stream().map(OrganizeEntity::getId).collect(Collectors.toList()));
orgIds.addAll(collect1);
collect1.forEach(t -> {
orgIds.add(t + "--" + PermissionConst.COMPANY);
orgIds.add(t + "--" + PermissionConst.DEPARTMENT);
});
}
List<OrganizeRelationEntity> relationListByOrganizeId = organizeRelationService.getRelationListByOrganizeId(organizeIds);
List<PermissionGroupEntity> orgList = new ArrayList<>();
List<PositionEntity> listByOrganizeId = positionService.getListByOrganizeId(orgIds, false);
for (String oId : orgIds) {
List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(oId)).collect(Collectors.toList());
collect1.forEach(permissionGroupEntity -> {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
orgList.add(permissionGroupEntity);
}
});
// 判断该组织下的岗位是否有权限
List<String> positionListByTypeAndOrgId = listByOrganizeId.stream().filter(t -> t.getOrganizeId().equals(oId))
.map(PositionEntity::getId).collect(Collectors.toList());
List<String> positionId = listByUserId.stream().filter(t -> PermissionConst.POSITION.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> containsPosition = positionListByTypeAndOrgId.stream().filter(positionId::contains).collect(Collectors.toList());
List<String> positionName = positionService.getPositionName(containsPosition, true)
.stream().map(PositionEntity::getId).collect(Collectors.toList());
for (String id : positionName) {
List<PermissionGroupEntity> collect2 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id + "--position")).collect(Collectors.toList());
collect2.forEach(permissionGroupEntity -> {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
orgList.add(permissionGroupEntity);
}
});
}
// 判断该组织下的角色是否有权限
List<String> roleListByTypeAndOrgId = relationListByOrganizeId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(OrganizeRelationEntity::getObjectId).collect(Collectors.toList());
List<String> roleId = listByUserId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<RoleEntity> roleName = roleService.getListByIds(roleId, null, true)
.stream().filter(t -> t.getGlobalMark() != 1).collect(Collectors.toList());
List<String> containsRole = roleName.stream().filter(t -> roleListByTypeAndOrgId.contains(t.getId())).collect(Collectors.toList())
.stream().map(RoleEntity::getId).collect(Collectors.toList());;
for (String id : containsRole) {
List<PermissionGroupEntity> collect2 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id + "--role")).collect(Collectors.toList());
collect2.forEach(permissionGroupEntity -> {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
orgList.add(permissionGroupEntity);
}
});
}
if (orgList.size() > 0) {
if (!singletonOrg) {
break;
}
}
}
list.addAll(orgList);
return list;
}
@Override
public String getPermissionGroupByUserId(String userId) {
// 用户本身有没有权限
UserEntity userEntity = userService.getInfo(userId);
if (userEntity == null) {
return "";
}
List<PermissionGroupEntity> allGroupList = this.list(true, null).stream().filter(t -> Objects.equals(0,t.getType())).collect(Collectors.toList());
for (PermissionGroupEntity permissionGroupEntity : allGroupList) {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
return "";
}
}
List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
String finalUserId = userId + "--" + PermissionConst.USER;
List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(finalUserId)).collect(Collectors.toList());
for (PermissionGroupEntity permissionGroupEntity : collect) {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
return "";
}
}
// 用户关系表
List<UserRelationEntity> listByUserId = userRelationService.getListByUserId(userEntity.getId());
// 分组有没有权限
List<String> groupIds = new ArrayList<>();
List<String> groupId = listByUserId.stream().filter(t -> PermissionConst.GROUP.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> groupName = groupService.getListByIds(groupId, true)
.stream().map(GroupEntity::getId).collect(Collectors.toList());
groupName.forEach(t -> groupIds.add(t + "--group"));
for (String id : groupIds) {
List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id)).collect(Collectors.toList());
for (PermissionGroupEntity permissionGroupEntity : collect1) {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
return "";
}
}
}
// 全局角色如果有权限
List<String> roleAllList = listByUserId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> globalList = roleService.getGlobalList(roleAllList)
.stream().map(RoleEntity::getId).collect(Collectors.toList());
for (String id : globalList) {
List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream()
.filter(entity -> entity.getPermissionMember().contains(id + "--role")).collect(Collectors.toList());
for (PermissionGroupEntity permissionGroupEntity : collect1) {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
return "";
}
}
}
// 组织有权限
List<String> orgIds = new ArrayList<>();
List<UserRelationEntity> listByObjectType = userRelationService.getListByObjectType(userId, PermissionConst.ORGANIZE);
List<String> collect2 = new ArrayList<>();
collect2.add(userEntity.getOrganizeId());
collect2.addAll(listByObjectType.stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList()));
orgIds.addAll(collect2);
collect2.forEach(t -> {
orgIds.add(t + "--" + PermissionConst.COMPANY);
orgIds.add(t + "--" + PermissionConst.DEPARTMENT);
});
List<OrganizeRelationEntity> relationListByOrganizeId = organizeRelationService.getRelationListByOrganizeId(collect2);
List<PositionEntity> listByOrganizeId = positionService.getListByOrganizeId(orgIds, false);
for (String orgId : orgIds) {
List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(orgId)).collect(Collectors.toList());
for (PermissionGroupEntity permissionGroupEntity : collect1) {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
return orgId.split("--")[0];
}
}
// 判断该组织下的岗位是否有权限
List<String> positionListByTypeAndOrgId = listByOrganizeId.stream().filter(t -> t.getOrganizeId().equals(orgId))
.map(PositionEntity::getId).collect(Collectors.toList());
List<String> positionId = listByUserId.stream().filter(t -> PermissionConst.POSITION.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> containsPosition = positionListByTypeAndOrgId.stream().filter(positionId::contains).collect(Collectors.toList());
List<String> positionName = positionService.getPositionName(containsPosition, true)
.stream().map(PositionEntity::getId).collect(Collectors.toList());
for (String id : positionName) {
List<PermissionGroupEntity> collect3 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id + "--position")).collect(Collectors.toList());
for (PermissionGroupEntity permissionGroupEntity : collect3) {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
return orgId.split("--")[0];
}
}
}
// 判断该组织下的角色是否有权限
List<String> roleListByTypeAndOrgId = relationListByOrganizeId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(OrganizeRelationEntity::getObjectId).collect(Collectors.toList());
List<String> roleId = listByUserId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<RoleEntity> roleName = roleService.getListByIds(roleId, null, true)
.stream().filter(t -> t.getGlobalMark() != 1).collect(Collectors.toList());
List<String> containsRole = roleName.stream().filter(t -> roleListByTypeAndOrgId.contains(t.getId())).collect(Collectors.toList())
.stream().map(RoleEntity::getId).collect(Collectors.toList());;
for (String id : containsRole) {
List<PermissionGroupEntity> collect3 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id + "--role")).collect(Collectors.toList());
for (PermissionGroupEntity permissionGroupEntity : collect3) {
if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
return orgId.split("--")[0];
}
}
}
}
return "";
}
@Override
public String getOrgIdByUserIdAndSystemId(String userId, String systemId) {
// 用户本身有没有权限
UserEntity userEntity = userService.getInfo(userId);
if (userEntity == null) {
return "";
}
// 判断有这个应用的权限组有哪些
List<String> collect = authorizeService.getListByObjectAndItemIdAndType(systemId, PermissionConst.SYSTEM).stream().map(AuthorizeEntity::getObjectId).collect(Collectors.toList());
List<PermissionGroupEntity> list = this.list(true, collect).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
List<PermissionGroupEntity> allGroupList = this.list(true, collect).stream().filter(t -> Objects.equals(0,t.getType())).collect(Collectors.toList());
if(allGroupList.size()>0){
return "";
}
List<String> objectIds = new ArrayList<>();
objectIds.add(userId + "--" + PermissionConst.USER);
// 用户关系
List<UserRelationEntity> listByUserId = userRelationService.getListByUserId(userEntity.getId())
.stream().filter(t -> userId.equals(t.getUserId())).collect(Collectors.toList());
// 分组
List<String> groupId = listByUserId.stream().filter(t -> PermissionConst.GROUP.equals(t.getObjectType())).map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> groupName = groupService.getListByIds(groupId, true)
.stream().map(GroupEntity::getId).collect(Collectors.toList());
groupName.forEach(t -> {
objectIds.add(t + "--group");
});
// 角色
List<String> roleAllList = listByUserId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType())).map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> globalList = roleService.getGlobalList(roleAllList)
.stream().map(RoleEntity::getId).collect(Collectors.toList());
globalList.forEach(t -> {
objectIds.add(t + "--role");
});
for (String objectId : objectIds) {
List<PermissionGroupEntity> collect1 = list.stream().filter(t -> t.getPermissionMember().contains(objectId)).collect(Collectors.toList());
if (collect1.size() > 0) {
return "";
}
}
// 组织
List<String> orgIds = listByUserId.stream().filter(t -> PermissionConst.ORGANIZE.equals(t.getObjectType())).map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<OrganizeEntity> orgEntityList = organizeService.getOrgEntityList(orgIds, true);
List<PositionEntity> listByOrganizeId = positionService.getListByOrganizeId(orgIds, false);
List<OrganizeRelationEntity> relationListByOrganizeId = organizeRelationService.getRelationListByOrganizeId(orgEntityList.stream().map(OrganizeEntity::getId).collect(Collectors.toList()));
for (OrganizeEntity organizeEntity : orgEntityList) {
List<PermissionGroupEntity> collect1 = list.stream().filter(entity -> entity.getPermissionMember().contains(organizeEntity.getId())).collect(Collectors.toList());
if (collect1.size() > 0) {
return organizeEntity.getId();
}
// 角色
List<String> roleListByTypeAndOrgId = relationListByOrganizeId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(OrganizeRelationEntity::getObjectId).collect(Collectors.toList());
List<String> roleId = listByUserId.stream().filter(t -> PermissionConst.ROLE.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<RoleEntity> roleName = roleService.getListByIds(roleId, null, true)
.stream().filter(t -> t.getGlobalMark() != 1).collect(Collectors.toList());
List<String> containsRole = roleName.stream().filter(t -> roleListByTypeAndOrgId.contains(t.getId())).collect(Collectors.toList())
.stream().map(RoleEntity::getId).collect(Collectors.toList());
for (String containsId : containsRole) {
if (list.stream().anyMatch(entity -> entity.getPermissionMember().contains(containsId))) {
return organizeEntity.getId();
}
}
// 岗位
List<String> positionListByTypeAndOrgId = listByOrganizeId.stream().filter(t -> t.getOrganizeId().equals(organizeEntity.getId()))
.map(PositionEntity::getId).collect(Collectors.toList());
List<String> positionId = listByUserId.stream().filter(t -> PermissionConst.POSITION.equals(t.getObjectType()))
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
List<String> containsPosition = positionListByTypeAndOrgId.stream().filter(positionId::contains).collect(Collectors.toList());
List<String> positionName = positionService.getPositionName(containsPosition, true)
.stream().map(PositionEntity::getId).collect(Collectors.toList());
for (String containsId : positionName) {
if (list.stream().anyMatch(entity -> entity.getPermissionMember().contains(containsId))) {
return organizeEntity.getId();
}
}
}
return "";
}
@Override
public List<PermissionGroupEntity> getPermissionGroupAllByUserId(String userId) {
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().like(PermissionGroupEntity::getPermissionMember, userId);
queryWrapper.lambda().eq(PermissionGroupEntity::getEnabledMark, 1);
return this.list(queryWrapper);
// UserEntity userEntity = userService.getInfo(userId);
// // 通过用户id获取相关的组织、部门、岗位、角色、分组
// if (userEntity == null) {
// return new ArrayList<>();
// }
// if (userEntity.getIsAdministrator() == 1) {
// return this.list(true, null);
// }
// Set<String> objIds = new HashSet<>();
//
// // 用户与组织关系
// List<String> orgIds = new ArrayList<>();
// List<String> orgId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.ORGANIZE).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
// orgId.forEach(t -> orgIds.add(t + "--" + PermissionConst.ORGANIZE));
// // 用户与岗位关系
// List<String> positionIds = new ArrayList<>();
// List<String> positionId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.POSITION).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
// positionId.forEach(t -> positionIds.add(t + "--" + PermissionConst.POSITION));
// // 用户与角色关系
// List<String> roleIds = new ArrayList<>();
// List<String> roleId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.ROLE).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
// roleId.forEach(t -> roleIds.add(t + "--" + PermissionConst.ROLE));
// // 用户与跟分组关系
// List<String> groupIds = new ArrayList<>();
// List<String> groupId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.GROUP).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
// groupId.forEach(t -> groupIds.add(t + "--" + PermissionConst.GROUP));
//
// objIds.addAll(orgIds);
// objIds.addAll(positionIds);
// objIds.addAll(roleIds);
// objIds.addAll(groupIds);
//
// Set<String> permissionGroupIds = new HashSet<>();
//
// List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null);
// objIds.forEach(objId -> {
// List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(objId)).collect(Collectors.toList());
// if (collect.size() > 0) {
// permissionGroupIds.addAll(collect.stream().map(PermissionGroupEntity::getId).collect(Collectors.toList()));
// }
// });
// return this.list(true, new ArrayList<>(permissionGroupIds));
}
@Override
@Transactional
public boolean updateByUser(String fromId, String toId, List<String> permissionList) {
if (StringUtil.isEmpty(fromId)) {
return false;
}
String fromIds = fromId + "--" + PermissionConst.USER;
List<PermissionGroupEntity> permissionGroupAllByUserId = this.getPermissionGroupAllByUserId(fromId);
permissionGroupAllByUserId.forEach(t -> {
if (permissionList.contains(t.getId())) {
t.setPermissionMember(StringUtil.isNotEmpty(t.getPermissionMember()) ? t.getPermissionMember().replaceAll(fromIds, toId + "--" + PermissionConst.USER) : "");
this.updateById(t);
}
});
return true;
}
@Override
public List<PermissionGroupEntity> getPermissionGroupByModuleId(String moduleId) {
// 获取到菜单和权限组的关系
List<AuthorizeEntity> authorizeEntityList = authorizeService.getListByObjectAndItem(moduleId, AuthorizeType.MODULE);
// 获取权限组信息
List<PermissionGroupEntity> list = this.list(true,
authorizeEntityList.stream().map(AuthorizeEntity::getObjectId).collect(Collectors.toList()));
return list;
}
@Override
public List<PermissionGroupEntity> list(List<String> ids) {
if (ids.size() == 0) {
return new ArrayList<>();
}
QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(PermissionGroupEntity::getId, ids);
return this.list(queryWrapper);
}
@Override
public List<PermissionGroupEntity> getPermissionGroupByObjectId(String objectId, String objectType) {
List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
String id = objectId + "--" + objectType;
List<String> idList = new ArrayList<>();
idList.add(id);
if (AuthorizeConst.USER.equalsIgnoreCase(objectType)) {
List<UserRelationEntity> allOrgRelationByUserId = userRelationService.getListByObjectType(objectId,null);
for (UserRelationEntity item : allOrgRelationByUserId) {
String oType = item.getObjectType();
if (PermissionConst.ORGANIZE.equals(oType)) {
oType = PermissionConst.COMPANY;
idList.add(item.getObjectId() + "--" + PermissionConst.DEPARTMENT);
}
idList.add(item.getObjectId() + "--" + oType.toLowerCase());
}
}
List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> {
boolean hashOperations = false;
for (String s : idList) {
if (entity.getPermissionMember().contains(s)) {
hashOperations = true;
break;
}
}
return hashOperations;
}).collect(Collectors.toList());
List<PermissionGroupEntity> allGroupList = this.list(true, null).stream().filter(t -> Objects.equals(0,t.getType())).collect(Collectors.toList());
for (PermissionGroupEntity entity : allGroupList) {
if(!collect.contains(entity)) {
collect.add(entity);
}
}
return collect;
}
}

View File

@@ -0,0 +1,484 @@
package com.yunzhupaas.permission.service.impl;
import com.yunzhupaas.base.Pagination;
import com.yunzhupaas.base.service.DictionaryDataService;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunzhupaas.base.vo.ListVO;
import com.yunzhupaas.constant.PermissionConst;
import com.yunzhupaas.permission.entity.*;
import com.yunzhupaas.permission.model.permission.PermissionModel;
import com.yunzhupaas.permission.model.position.PaginationPosition;
import com.yunzhupaas.permission.mapper.PositionMapper;
import com.yunzhupaas.permission.service.*;
import com.yunzhupaas.util.*;
import com.yunzhupaas.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import org.springframework.web.bind.annotation.RequestBody;
import jakarta.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;
/**
* 岗位信息
*
* @copyright 深圳市乐程软件有限公司
* @author 云筑产品开发平台组
* @version V3.1.0
* @date 2024-09-26 上午9:18
*/
@Service
public class PositionServiceImpl extends SuperServiceImpl<PositionMapper, PositionEntity> implements PositionService {
@Autowired
private AuthorizeService authorizeService;
@Autowired
private UserRelationService userRelationService;
@Autowired
private RedisUtil redisUtil;
@Autowired
private CacheKeyUtil cacheKeyUtil;
@Autowired
private OrganizeRelationService organizeRelationService;
@Autowired
private OrganizeService organizeService;
@Autowired
private OrganizeAdministratorService organizeAdministratorService;
@Autowired
private DictionaryDataService dictionaryDataService;
@Override
public List<PositionEntity> getList(boolean filterEnabledMark) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
if (filterEnabledMark) {
queryWrapper.lambda().eq(PositionEntity::getEnabledMark, 1);
}
queryWrapper.lambda().orderByAsc(PositionEntity::getSortCode).orderByDesc(PositionEntity::getCreatorTime);
return this.list(queryWrapper);
}
@Override
public List<PositionEntity> getPosList(List<String> idList) {
if (idList.size()>0){
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(PositionEntity::getId,idList).select(PositionEntity::getId,PositionEntity::getFullName, PositionEntity::getEnabledMark);
return this.list(queryWrapper);
}
return new ArrayList<>();
}
@Override
public List<PositionEntity> getPosList(Set<String> idList) {
if (idList.size()>0){
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().orderByAsc(PositionEntity::getSortCode).orderByDesc(PositionEntity::getCreatorTime);
queryWrapper.lambda().select(PositionEntity::getId,PositionEntity::getFullName).in(PositionEntity::getId,idList);
return this.list(queryWrapper);
}
return new ArrayList<>();
}
@Override
public Map<String, Object> getPosMap() {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().select(PositionEntity::getId,PositionEntity::getFullName);
return this.list(queryWrapper).stream().collect(Collectors.toMap(PositionEntity::getId,PositionEntity::getFullName,(p1, p2) -> p1));
}
@Override
public Map<String, Object> getPosEncodeAndName() {
return getPosEncodeAndName(false);
}
@Override
public Map<String, Object> getPosEncodeAndName(boolean enabledMark) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
if(enabledMark){
queryWrapper.lambda().eq(PositionEntity::getEnabledMark,1);
}
queryWrapper.lambda().select(PositionEntity::getId,PositionEntity::getFullName,PositionEntity::getEnCode);
return this.list(queryWrapper).stream().collect(Collectors.toMap(p->p.getFullName() + "/" + p.getEnCode(),PositionEntity::getId,(p1, p2) -> p1));
}
@Override
public List<PositionEntity> getPosRedisList() {
if(redisUtil.exists(cacheKeyUtil.getPositionList())){
return JsonUtil.getJsonToList(redisUtil.getString(cacheKeyUtil.getPositionList()).toString(),PositionEntity.class);
}
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PositionEntity::getEnabledMark,1);
List<PositionEntity> list=this.list(queryWrapper);
if(list.size()>0){
redisUtil.insert(cacheKeyUtil.getPositionList(), JsonUtil.getObjectToString(list),300);
}
return list;
}
@Override
public List<PositionEntity> getList(PaginationPosition paginationPosition) {
// 需要查询哪些组织
List<String> orgIds = new ArrayList<>();
// 所有有权限的组织
Set<String> orgId = new HashSet<>(16);
if (!UserProvider.getUser().getIsAdministrator()) {
// 通过权限转树
List<OrganizeAdministratorEntity> listss = organizeAdministratorService.getOrganizeAdministratorEntity(UserProvider.getUser().getUserId());
// 判断自己是哪些组织的管理员
listss.forEach(t -> {
if (t != null) {
if (t.getThisLayerSelect() != null && t.getThisLayerSelect() == 1) {
orgId.add(t.getOrganizeId());
}
if (t.getSubLayerSelect() != null && t.getSubLayerSelect() == 1) {
List<String> underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), false);
orgId.addAll(underOrganizations);
}
}
});
} else {
orgId.addAll(organizeService.getOrgMapsAll(OrganizeEntity::getId).keySet());
}
if (orgId.size() == 0) {
return new ArrayList<>();
}
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
if (StringUtil.isNotEmpty(paginationPosition.getKeyword())) {
queryWrapper.lambda().and(
t -> t.like(PositionEntity::getFullName, paginationPosition.getKeyword())
.or().like(PositionEntity::getEnCode, paginationPosition.getKeyword())
);
}
if (paginationPosition.getEnabledMark() != null) {
queryWrapper.lambda().eq(PositionEntity::getEnabledMark, paginationPosition.getEnabledMark());
}
if (StringUtil.isNotEmpty(paginationPosition.getEnCode())) {
queryWrapper.lambda().eq(PositionEntity::getType, paginationPosition.getEnCode());
}
if (StringUtil.isNotEmpty(paginationPosition.getOrganizeId())) {
List<String> underOrganizations = organizeService.getUnderOrganizations(paginationPosition.getOrganizeId(), false);
// 判断哪些组织时有权限的
List<String> collect = underOrganizations.stream().filter(orgId::contains).collect(Collectors.toList());
orgIds.add(paginationPosition.getOrganizeId());
orgIds.addAll(collect);
orgIds.add(paginationPosition.getOrganizeId());
queryWrapper.lambda().in(PositionEntity::getOrganizeId, orgIds);
} else {
queryWrapper.lambda().in(PositionEntity::getOrganizeId, orgId);
}
long count = this.count(queryWrapper);
queryWrapper.lambda().select(PositionEntity::getId, PositionEntity::getEnCode, PositionEntity::getCreatorTime,
PositionEntity::getOrganizeId, PositionEntity::getEnabledMark, PositionEntity::getFullName,
PositionEntity::getSortCode, PositionEntity::getType, PositionEntity::getDescription);
queryWrapper.lambda().orderByAsc(PositionEntity::getSortCode).orderByDesc(PositionEntity::getCreatorTime);
if(Objects.equals(paginationPosition.getDataType(),1)){
return list(queryWrapper);
}
Page<PositionEntity> page = new Page<>(paginationPosition.getCurrentPage(), paginationPosition.getPageSize(), count, false);
page.setOptimizeCountSql(false);
IPage<PositionEntity> iPage = this.page(page, queryWrapper);
return paginationPosition.setData(iPage.getRecords(), page.getTotal());
}
@Override
public List<PositionEntity> getListByUserId(String userId) {
QueryWrapper<PositionEntity> query = new QueryWrapper<>();
List<String> ids = new ArrayList<>();
userRelationService.getListByObjectType(userId, PermissionConst.POSITION).forEach(r->{
ids.add(r.getObjectId());
});
if(ids.size() > 0){
query.lambda().in(PositionEntity::getId, ids);
return this.list(query);
}else {
return new ArrayList<>();
}
}
@Override
public PositionEntity getInfo(String id) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PositionEntity::getId,id);
return this.getOne(queryWrapper);
}
@Override
public PositionEntity getByFullName(String fullName) {
PositionEntity positionEntity = new PositionEntity();
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PositionEntity::getFullName, fullName);
queryWrapper.lambda().select(PositionEntity::getId);
List<PositionEntity> list = this.list(queryWrapper);
if (list.size() > 0) {
positionEntity = list.get(0);
}
return positionEntity;
}
@Override
public PositionEntity getByFullName(String fullName,String encode) {
PositionEntity positionEntity = new PositionEntity();
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PositionEntity::getFullName, fullName);
queryWrapper.lambda().eq(PositionEntity::getEnCode, encode);
queryWrapper.lambda().select(PositionEntity::getId);
List<PositionEntity> list = this.list(queryWrapper);
if (list.size() > 0) {
positionEntity = list.get(0);
}
return positionEntity;
}
@Override
public boolean isExistByFullName(PositionEntity entity, boolean isFilter) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
if(entity != null) {
queryWrapper.lambda().eq(PositionEntity::getFullName, entity.getFullName());
}
//是否需要过滤
if (isFilter) {
queryWrapper.lambda().ne(PositionEntity::getId, entity.getId());
}
List<PositionEntity> entityList = this.list(queryWrapper);
for (PositionEntity positionEntity : entityList) {
//如果组织id相同则代表已存在
if (entity != null && entity.getOrganizeId().equals(positionEntity.getOrganizeId())){
return true;
}
}
return false;
}
@Override
public boolean isExistByEnCode(PositionEntity entity, boolean isFilter) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
if(entity != null){
queryWrapper.lambda().eq(PositionEntity::getEnCode, entity.getEnCode());
if (isFilter) {
queryWrapper.lambda().ne(PositionEntity::getId, entity.getId());
}
}
List<PositionEntity> entityList = this.list(queryWrapper);
// for (PositionEntity positionEntity : entityList) {
// //如果组织id相同则代表已存在
// if (entity != null && entity.getOrganizeId().equals(positionEntity.getOrganizeId())){
// return true;
// }
// }
return entityList.size() > 0;
}
@Override
public void create(PositionEntity entity) {
if (StringUtil.isEmpty(entity.getId())) {
entity.setId(RandomUtil.uuId());
}
entity.setCreatorUserId(UserProvider.getUser().getUserId());
this.save(entity);
}
@Override
public boolean update(String id, PositionEntity entity) {
entity.setId(id);
entity.setLastModifyTime(new Date());
entity.setLastModifyUserId(UserProvider.getUser().getUserId());
return this.updateById(entity);
}
@Override
@DSTransactional
public void delete(PositionEntity entity) {
this.removeById(entity.getId());
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getObjectId,entity.getId());
userRelationService.remove(queryWrapper);
QueryWrapper<AuthorizeEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(AuthorizeEntity::getObjectId,entity.getId());
authorizeService.remove(wrapper);
}
@Override
@DSTransactional
public boolean first(String id) {
boolean isOk = false;
//获取要上移的那条数据的信息
PositionEntity upEntity = this.getById(id);
Long upSortCode = upEntity.getSortCode() == null ? 0 : upEntity.getSortCode();
//查询上几条记录
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.lt(PositionEntity::getSortCode, upSortCode)
.eq(PositionEntity::getOrganizeId,upEntity.getOrganizeId())
.orderByDesc(PositionEntity::getSortCode);
List<PositionEntity> downEntity = this.list(queryWrapper);
if(downEntity.size()>0){
//交换两条记录的sort值
Long temp = upEntity.getSortCode();
upEntity.setSortCode(downEntity.get(0).getSortCode());
downEntity.get(0).setSortCode(temp);
this.updateById(downEntity.get(0));
this.updateById(upEntity);
isOk = true;
}
return isOk;
}
@Override
@DSTransactional
public boolean next(String id) {
boolean isOk = false;
//获取要下移的那条数据的信息
PositionEntity downEntity = this.getById(id);
Long upSortCode = downEntity.getSortCode() == null ? 0 : downEntity.getSortCode();
//查询下几条记录
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.gt(PositionEntity::getSortCode, upSortCode)
.eq(PositionEntity::getOrganizeId,downEntity.getOrganizeId())
.orderByAsc(PositionEntity::getSortCode);
List<PositionEntity> upEntity = this.list(queryWrapper);
if(upEntity.size()>0){
//交换两条记录的sort值
Long temp = downEntity.getSortCode();
downEntity.setSortCode(upEntity.get(0).getSortCode());
upEntity.get(0).setSortCode(temp);
this.updateById(upEntity.get(0));
this.updateById(downEntity);
isOk = true;
}
return isOk;
}
@Override
public List<PositionEntity> getPositionName(List<String> id, boolean filterEnabledMark) {
List<PositionEntity> roleList = new ArrayList<>();
if (id.size() > 0) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(PositionEntity::getId, id);
roleList = this.list(queryWrapper);
}
return roleList;
}
@Override
public List<PositionEntity> getPositionName(List<String> id, String keyword) {
List<PositionEntity> roleList = new ArrayList<>();
if (id.size() > 0) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(PositionEntity::getId, id);
//关键字(名称、编码)
if (!StringUtil.isEmpty(keyword)) {
queryWrapper.lambda().and(
t->t.like(PositionEntity::getFullName,keyword)
.or().like(PositionEntity::getEnCode,keyword)
);
}
roleList = this.list(queryWrapper);
}
return roleList;
}
@Override
public List<PositionEntity> getListByOrganizeId(List<String> organizeIds, boolean enabledMark) {
if (organizeIds.size() == 0) {
return new ArrayList<>();
}
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(PositionEntity::getOrganizeId, organizeIds);
if (enabledMark) {
queryWrapper.lambda().eq(PositionEntity::getEnabledMark, 1);
}
queryWrapper.lambda().orderByAsc(PositionEntity::getSortCode).orderByDesc(PositionEntity::getCreatorTime);
// queryWrapper.lambda().select(PositionEntity::getId, PositionEntity::getFullName);
return this.list(queryWrapper);
}
@Override
public List<PositionEntity> getListByOrgIdAndUserId(String organizeId, String userId) {
// 用户绑定的所有岗位
List<String> positionIds = userRelationService.getListByUserIdAndObjType(userId, PermissionConst.POSITION).stream()
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
if(positionIds.size() > 0){
List<PositionEntity> positionEntities = this.listByIds(positionIds);
return positionEntities.stream().filter(p-> p.getOrganizeId().equals(organizeId)).collect(Collectors.toList());
}else {
return new ArrayList<>();
}
}
@Override
public List<PositionEntity> getListByFullName(String fullName, String enCode) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PositionEntity::getFullName, fullName).eq(PositionEntity::getEnCode, enCode);
return this.list(queryWrapper);
}
@Override
public List<PositionEntity> getCurPositionsByOrgId(String orgId) {
String userId = UserProvider.getUser().getUserId();
List<UserRelationEntity> userRelations = userRelationService.getListByObjectType(userId, PermissionConst.POSITION);
List<PositionEntity> positions = new ArrayList<>();
userRelations.forEach(ur->{
PositionEntity entity = this.getInfo(ur.getObjectId());
if(entity.getOrganizeId().equals(orgId)){
positions.add(entity);
}
});
return positions;
}
@Override
public List<PositionEntity> getList(List<String> idList, Pagination pagination, boolean isPage) {
if (idList.size() > 0) {
QueryWrapper<PositionEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(PositionEntity::getId, idList);
queryWrapper.lambda().eq(PositionEntity::getEnabledMark, 1);
if (StringUtil.isNotEmpty(pagination.getKeyword())) {
queryWrapper.lambda().and(
t -> t.like(PositionEntity::getFullName, pagination.getKeyword())
.or().like(PositionEntity::getEnCode, pagination.getKeyword())
);
}
if(isPage) {
Page<PositionEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
IPage<PositionEntity> iPage = this.page(page, queryWrapper);
return pagination.setData(iPage.getRecords(), iPage.getTotal());
}else {
return list(queryWrapper);
}
}
return Collections.emptyList();
}
@Override
public List<PermissionModel> getListByOrganizeIds(List<String> organizeIds, boolean needCode, boolean enabledMark) {
List<PermissionModel> permissionList = new LinkedList<>();
for (String organizeId : organizeIds) {
OrganizeEntity info = organizeService.getInfo(organizeId);
if (info != null) {
PermissionModel parentModel = new PermissionModel();
List<PositionEntity> list = this.getListByOrganizeId(Collections.singletonList(organizeId), enabledMark);
list.stream().forEach(t->{
if(needCode){
t.setFullName(t.getFullName()+"/"+t.getEnCode());
}
});
List<PermissionModel> positionModels = JsonUtil.getJsonToList(list, PermissionModel.class);
parentModel.setChildren(positionModels);
parentModel.setHasChildren(true);
parentModel.setFullName(info.getFullName());
parentModel.setId(info.getId());
permissionList.add(parentModel);
}
}
return permissionList;
}
}

View File

@@ -0,0 +1,524 @@
package com.yunzhupaas.permission.service.impl;
import com.github.pagehelper.page.PageMethod;
import com.yunzhupaas.base.Pagination;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.constant.PermissionConst;
import com.yunzhupaas.permission.entity.*;
import com.yunzhupaas.permission.mapper.RoleMapper;
import com.yunzhupaas.permission.model.role.RoleModel;
import com.yunzhupaas.permission.model.role.RolePagination;
import com.yunzhupaas.permission.service.*;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.UserProvider;
import com.yunzhupaas.util.treeutil.SumTree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 系统角色
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
@Service
public class RoleServiceImpl extends SuperServiceImpl<RoleMapper, RoleEntity> implements RoleService {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@Autowired
private UserRelationService userRelationService;
@Autowired
private AuthorizeService authorizeService;
@Autowired
private OrganizeRelationService organizeRelationService;
@Autowired
private OrganizeService organizeService;
@Autowired
private OrganizeAdministratorService organizeAdministratorService;
@Override
public List<RoleEntity> getList(boolean filterEnabledMark) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
if (filterEnabledMark) {
queryWrapper.lambda().eq(RoleEntity::getEnabledMark, 1);
}
queryWrapper.lambda().orderByAsc(RoleEntity::getSortCode).orderByDesc(RoleEntity::getCreatorTime);
return this.list(queryWrapper);
}
@Override
public List<RoleEntity> getList(RolePagination pagination, Integer globalMark) {
// 需要查询哪些组织
List<String> orgIds = new ArrayList<>();
// 所有有权限的组织
Set<String> orgId = new HashSet<>(16);
if (!UserProvider.getUser().getIsAdministrator()) {
// 通过权限转树
List<OrganizeAdministratorEntity> listss = organizeAdministratorService.getOrganizeAdministratorEntity(UserProvider.getUser().getUserId());
// 判断自己是哪些组织的管理员
listss.forEach(t -> {
if (t != null) {
if (t.getThisLayerSelect() != null && t.getThisLayerSelect() == 1) {
orgId.add(t.getOrganizeId());
}
if (t.getSubLayerSelect() != null && t.getSubLayerSelect() == 1) {
List<String> underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), false);
orgId.addAll(underOrganizations);
}
}
});
} else {
orgId.addAll(organizeService.getOrgMapsAll(OrganizeEntity::getId).keySet());
}
if (!StringUtil.isEmpty(pagination.getOrganizeId())) {
List<String> underOrganizations = organizeService.getUnderOrganizations(pagination.getOrganizeId(), false);
// 判断哪些组织时有权限的
List<String> collect = underOrganizations.stream().filter(orgId::contains).collect(Collectors.toList());
orgIds.add(pagination.getOrganizeId());
orgIds.addAll(collect);
orgIds.add(pagination.getOrganizeId());
} else {
if (orgId.size() == 0) {
return new ArrayList<>();
}
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
if (StringUtil.isNotEmpty(pagination.getKeyword())) {
queryWrapper.lambda().and(
t -> t.like(RoleEntity::getFullName, pagination.getKeyword())
.or().like(RoleEntity::getEnCode, pagination.getKeyword())
);
}
if (globalMark > -1) {
queryWrapper.lambda().eq(RoleEntity::getGlobalMark, globalMark);
}
if (!UserProvider.getUser().getIsAdministrator()) {
queryWrapper.lambda().ne(RoleEntity::getGlobalMark, 1);
List<String> collect = organizeRelationService.getRelationListByOrganizeId(new ArrayList<>(orgId), PermissionConst.ROLE).stream().map(OrganizeRelationEntity::getObjectId).collect(Collectors.toList());
if (collect.size() == 0) {
collect.add("");
}
queryWrapper.lambda().in(RoleEntity::getId, collect);
}
if (pagination.getEnabledMark() != null) {
queryWrapper.lambda().eq(RoleEntity::getEnabledMark, pagination.getEnabledMark());
}
if(Objects.equals(pagination.getDataType(),1)){
queryWrapper.lambda().orderByAsc(RoleEntity::getSortCode).orderByDesc(RoleEntity::getCreatorTime);
return this.list(queryWrapper);
}
long count = this.count(queryWrapper);
queryWrapper.lambda().orderByAsc(RoleEntity::getSortCode).orderByDesc(RoleEntity::getCreatorTime);
Page<RoleEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize(), count, false);
page.setOptimizeCountSql(false);
IPage<RoleEntity> iPage = this.page(page, queryWrapper);
return pagination.setData(iPage.getRecords(), page.getTotal());
}
String keyword = "";
if (!StringUtil.isEmpty(pagination.getKeyword())) {
keyword = "%" + pagination.getKeyword() + "%";
}
PageHelper.startPage((int) pagination.getCurrentPage(), (int) pagination.getPageSize(), false);
PageMethod.getLocalPage().keepOrderBy(true);
List<String> query = this.baseMapper.query(orgIds, keyword, globalMark, pagination.getEnabledMark());
Long count = this.baseMapper.count(orgIds, keyword, globalMark, pagination.getEnabledMark());
PageInfo pageInfo = new PageInfo(query);
// 赋值分页参数
pagination.setTotal(count);
pagination.setCurrentPage(pageInfo.getPageNum());
pagination.setPageSize(pageInfo.getPageSize());
if (pageInfo.getList() != null && pageInfo.getList().size() > 0) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(RoleEntity::getId, pageInfo.getList());
queryWrapper.lambda().orderByAsc(RoleEntity::getSortCode).orderByDesc(RoleEntity::getCreatorTime);
return this.list(queryWrapper);
}
return new ArrayList<>();
}
@Override
public List<RoleEntity> getListByUserId(String userId) {
QueryWrapper<RoleEntity> query = new QueryWrapper<>();
List<String> roleRelations = userRelationService.getListByObjectType(userId, PermissionConst.ROLE).stream()
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
if (roleRelations.size() > 0) {
query.lambda().in(RoleEntity::getId, roleRelations);
return this.list(query);
} else {
return new ArrayList<>();
}
}
@Override
public List<RoleEntity> getListByUserIdAndOrgId(String userId, String orgId) {
return getListByUserId(userId).stream()
.filter(role -> organizeRelationService.existByRoleIdAndOrgId(role.getId(), orgId))
.collect(Collectors.toList());
}
@Override
public List<String> getRoleIdsByCurrentUser() {
UserEntity userEntity = userService.getInfo(UserProvider.getUser().getUserId());
return getAllRoleIdsByUserIdAndOrgId(userEntity.getId(), userEntity.getOrganizeId());
}
@Override
public List<String> getRoleIdsByCurrentUser(String orgId) {
UserEntity userEntity = userService.getInfo(UserProvider.getUser().getUserId());
return getAllRoleIdsByUserIdAndOrgId(userEntity.getId(), orgId);
}
@Override
public List<String> getAllRoleIdsByUserIdAndOrgId(String userId, String orgId) {
// 用户当前组织下的角色
List<String> roleIds = getListByUserIdAndOrgId(userId, orgId).stream()
.map(RoleEntity::getId).collect(Collectors.toList());
// 用户绑定的全局角色
List<String> globalRoleIds = userRelationService.getListByUserIdAndObjType(userId, PermissionConst.ROLE).stream()
.map(UserRelationEntity::getObjectId).collect(Collectors.toList());
globalRoleIds = roleService.getListByIds(globalRoleIds, null, false).stream().filter(r -> r.getGlobalMark() != null && r.getGlobalMark() == 1)
.map(RoleEntity::getId).collect(Collectors.toList());
roleIds.addAll(globalRoleIds);
return roleIds.stream().distinct().collect(Collectors.toList());
}
@Override
public RoleEntity getInfo(String id) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(RoleEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
public Boolean isExistByFullName(String fullName, String id, Integer globalMark) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(RoleEntity::getFullName, fullName);
queryWrapper.lambda().eq(RoleEntity::getGlobalMark, globalMark);
if (!StringUtil.isEmpty(id)) {
queryWrapper.lambda().ne(RoleEntity::getId, id);
}
return this.count(queryWrapper) > 0 ? true : false;
}
@Override
public Boolean isExistByEnCode(String enCode, String id) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(RoleEntity::getEnCode, enCode);
if (!StringUtil.isEmpty(id)) {
queryWrapper.lambda().ne(RoleEntity::getId, id);
}
return this.count(queryWrapper) > 0 ? true : false;
}
@Override
public Boolean update(String id, RoleEntity entity) {
entity.setId(id);
entity.setLastModifyTime(new Date());
entity.setLastModifyUserId(UserProvider.getUser().getUserId());
return this.updateById(entity);
}
@Override
public void create(RoleEntity entity) {
if (StringUtil.isEmpty(entity.getId())) {
entity.setId(RandomUtil.uuId());
}
entity.setCreatorUserId(UserProvider.getUser().getUserId());
this.save(entity);
}
@Override
@Transactional
public void delete(RoleEntity entity) {
if (entity != null) {
this.removeById(entity.getId());
QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AuthorizeEntity::getObjectId, entity.getId());
authorizeService.remove(queryWrapper);
QueryWrapper<UserRelationEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(UserRelationEntity::getObjectId, entity.getId());
userRelationService.remove(wrapper);
}
}
@Override
public List<RoleEntity> getListByIds(List<String> id, String keyword, boolean filterEnabledMark) {
List<RoleEntity> roleList = new ArrayList<>();
if (id.size() > 0) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(RoleEntity::getId, id);
if (filterEnabledMark) {
queryWrapper.lambda().eq(RoleEntity::getEnabledMark, 1);
}
if (StringUtil.isNotEmpty(keyword)) {
queryWrapper.lambda().and(
t -> t.like(RoleEntity::getFullName, keyword)
.or().like(RoleEntity::getEnCode, keyword)
);
}
roleList = this.list(queryWrapper);
}
return roleList;
}
@Override
public List<RoleEntity> getSwaptListByIds(Set<String> roleIds) {
if (roleIds.size() > 0) {
QueryWrapper<RoleEntity> roleWrapper = new QueryWrapper<>();
roleWrapper.lambda().select(RoleEntity::getFullName, RoleEntity::getId).in(RoleEntity::getId, roleIds);
List<RoleEntity> list = roleService.list(roleWrapper);
return list;
}
return new ArrayList<>();
}
@Override
public Map<String, Object> getRoleMap() {
QueryWrapper<RoleEntity> roleWrapper = new QueryWrapper<>();
roleWrapper.lambda().select(RoleEntity::getFullName, RoleEntity::getId);
List<RoleEntity> list = roleService.list(roleWrapper);
return list.stream().collect(Collectors.toMap(RoleEntity::getId, RoleEntity::getFullName));
}
@Override
public Map<String, Object> getRoleNameAndIdMap() {
return getRoleNameAndIdMap(false);
}
@Override
public Map<String, Object> getRoleNameAndIdMap(boolean enabledMark) {
QueryWrapper<RoleEntity> roleWrapper = new QueryWrapper<>();
if(enabledMark){
roleWrapper.lambda().eq(RoleEntity::getEnabledMark, 1);
}
List<RoleEntity> list = roleService.list(roleWrapper);
Map<String, Object> roleNameMap = new HashMap<>();
list.stream().forEach(role -> roleNameMap.put(role.getFullName() + "/" + role.getEnCode(), role.getId()));
return roleNameMap;
}
@Override
public RoleEntity getInfoByFullName(String fullName) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(RoleEntity::getFullName, fullName);
return this.getOne(queryWrapper);
}
@Override
public RoleEntity getInfoByFullName(String fullName, String enCode) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(RoleEntity::getFullName, fullName);
queryWrapper.lambda().eq(RoleEntity::getEnCode, enCode);
return this.getOne(queryWrapper);
}
@Override
public List<RoleEntity> getGlobalList() {
return getGlobalList(true);
}
@Override
public List<RoleEntity> getGlobalList(boolean enabledMark) {
QueryWrapper<RoleEntity> query = new QueryWrapper<>();
query.lambda().eq(RoleEntity::getGlobalMark, 1);
if(enabledMark){
query.lambda().eq(RoleEntity::getEnabledMark, 1);
}
return this.list(query);
}
@Override
public List<RoleEntity> getGlobalList(List<String> ids) {
if (ids.isEmpty()) {
return Collections.EMPTY_LIST;
}
QueryWrapper<RoleEntity> query = new QueryWrapper<>();
query.lambda().in(RoleEntity::getId, ids);
query.lambda().eq(RoleEntity::getGlobalMark, 1).eq(RoleEntity::getEnabledMark, 1);
return this.list(query);
}
@Override
public Boolean existCurRoleByOrgId(String orgId) {
List<UserRelationEntity> roleRelationList = userRelationService
.getListByObjectType(UserProvider.getUser().getUserId(), PermissionConst.ROLE);
for (UserRelationEntity userRelationEntity : roleRelationList) {
if (organizeRelationService.existByRoleIdAndOrgId(userRelationEntity.getObjectId(), orgId)) {
return true;
}
}
return false;
}
@Override
public List<RoleEntity> getCurRolesByOrgId(String orgId) {
String userId = UserProvider.getUser().getUserId();
List<UserRelationEntity> userRelations = userRelationService.getListByObjectType(userId, PermissionConst.ROLE);
List<RoleEntity> roles = new ArrayList<>();
userRelations.forEach(ur -> {
// 获取全局角色
RoleEntity roleEntity = this.getInfo(ur.getObjectId());
if (roleEntity != null && roleEntity.getGlobalMark() != null && roleEntity.getGlobalMark() == 1 && roleEntity.getEnabledMark() == 1) {
roles.add(roleEntity);
} else {
organizeRelationService.getRelationListByRoleId(ur.getObjectId()).forEach(or -> {
if (roleEntity.getEnabledMark() == 1 && or.getOrganizeId().equals(orgId)) {
roles.add(roleEntity);
}
});
}
});
return roles;
}
@Override
public List<RoleEntity> getRolesByOrgId(String orgId) {
List<String> ids = new ArrayList<>();
organizeRelationService.getListByTypeAndOrgId(PermissionConst.ROLE, orgId).forEach(o -> {
ids.add(o.getObjectId());
});
QueryWrapper<RoleEntity> query = new QueryWrapper<>();
if (ids.size() > 0) {
query.lambda().in(RoleEntity::getId, ids);
return this.list(query);
} else {
return new ArrayList<>();
}
}
@Override
public String getBindInfo(String roleId, List<String> reduceOrgIds) {
if (reduceOrgIds.size() > 0) {
StringBuilder info = new StringBuilder();
RoleEntity roleEntity = this.getInfo(roleId);
List<UserRelationEntity> bingUserByRoleList = userRelationService.getListByObjectId(roleId, PermissionConst.ROLE);
if (bingUserByRoleList.size() < 1) {
return null;
}
info.append("已绑定用户:");
boolean bindFlag = false;
for (UserRelationEntity bingUser : bingUserByRoleList) {
String userId = bingUser.getUserId();
if (roleEntity.getGlobalMark() == 1) {
UserEntity user = userService.getInfo(userId);
info.append("[ ").append(user.getRealName()).append("/").append(user.getAccount()).append(" ] ");
bindFlag = true;
} else {
// 这个用户所绑定的组织
List<UserRelationEntity> bingUserByOrg = userRelationService.getListByObjectType(userId, PermissionConst.ORGANIZE);
for (UserRelationEntity bingOrg : bingUserByOrg) {
String orgId = bingOrg.getObjectId();
if (reduceOrgIds.contains(orgId)) {
OrganizeEntity org = organizeService.getInfo(orgId);
UserEntity user = userService.getInfo(bingOrg.getUserId());
info.append("[").append(org.getFullName()).append(":用户(").append(user.getRealName()).append("]; ");
bindFlag = true;
}
}
}
}
if (bindFlag) {
return info.toString();
} else {
return null;
}
} else {
return null;
}
}
@Override
public List<RoleEntity> getList(List<String> idList, Pagination pagination, boolean filterEnabledMark) {
if (idList.size() > 0) {
QueryWrapper<RoleEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(RoleEntity::getId, idList);
if (filterEnabledMark) {
queryWrapper.lambda().eq(RoleEntity::getEnabledMark, 1);
}
if (StringUtil.isNotEmpty(pagination.getKeyword())) {
queryWrapper.lambda().and(
t -> t.like(RoleEntity::getFullName, pagination.getKeyword())
.or().like(RoleEntity::getEnCode, pagination.getKeyword())
);
}
Page<RoleEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
IPage<RoleEntity> iPage = this.page(page, queryWrapper);
return pagination.setData(iPage.getRecords(), iPage.getTotal());
}
return Collections.emptyList();
}
@Override
public List<RoleModel> getListByOrganizeIds(List<String> organizeIds, boolean needCode, boolean enabledMark) {
List<RoleModel> modelAll = new ArrayList<>();
for (String organizeId : organizeIds) {
OrganizeEntity organizeEntity = organizeService.getInfo(organizeId);
if (organizeEntity != null) {
RoleModel organizeModel = JsonUtil.getJsonToBean(organizeEntity, RoleModel.class);
List<OrganizeRelationEntity> roleRelations = organizeRelationService.getListByTypeAndOrgId(PermissionConst.ROLE, organizeId);
List<SumTree<RoleModel>> roleList = new ArrayList<>();
for (OrganizeRelationEntity roleRelation : roleRelations) {
RoleEntity roleEntity = roleService.getInfo(roleRelation.getObjectId());
if (roleEntity == null || (enabledMark && roleEntity.getEnabledMark() != 1)) {
continue;
}
// 非全局
if (roleEntity.getGlobalMark() == 0) {
RoleModel roleModel = JsonUtil.getJsonToBean(roleEntity, RoleModel.class);
String fullName = roleEntity.getFullName();
if (needCode) {
fullName += "/" + roleEntity.getEnCode();
}
roleModel.setFullName(fullName);
roleModel.setHasChildren(false);
roleList.add(roleModel);
}
}
organizeModel.setHasChildren(true);
organizeModel.setChildren(roleList);
modelAll.add(organizeModel);
}
}
// 获取全局角色
List<SumTree<RoleModel>> models = new ArrayList<>();
roleService.getGlobalList(enabledMark).forEach(r -> {
RoleModel jsonToBean = JsonUtil.getJsonToBean(r, RoleModel.class);
String fullName = r.getFullName();
if (needCode) {
fullName += "/" + r.getEnCode();
}
jsonToBean.setFullName(fullName);
models.add(jsonToBean);
});
RoleModel modelGlobal = new RoleModel();
modelGlobal.setFullName("全局");
modelGlobal.setHasChildren(true);
modelGlobal.setId("0");
modelGlobal.setChildren(models);
modelAll.add(modelGlobal);
return modelAll;
}
}

View File

@@ -0,0 +1,55 @@
package com.yunzhupaas.permission.service.impl;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yunzhupaas.permission.entity.SocialsUserEntity;
import com.yunzhupaas.permission.mapper.SocialsUserMapper;
import com.yunzhupaas.permission.service.SocialsUserService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/14 9:33:16
*/
@Service
public class SocialsUserServiceImpl extends SuperServiceImpl<SocialsUserMapper, SocialsUserEntity> implements SocialsUserService {
@Override
public List<SocialsUserEntity> getListByUserId(String userId) {
QueryWrapper<SocialsUserEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(SocialsUserEntity::getUserId,userId);
return this.list(queryWrapper);
}
@Override
public List<SocialsUserEntity> getUserIfnoBySocialIdAndType(String socialId, String socialType) {
QueryWrapper<SocialsUserEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(SocialsUserEntity::getSocialId,socialId);
queryWrapper.lambda().eq(SocialsUserEntity::getSocialType,socialType);
return this.list(queryWrapper);
}
@Override
public List<SocialsUserEntity> getListByUserIdAndSource(String userId, String socialType) {
QueryWrapper<SocialsUserEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(SocialsUserEntity::getUserId,userId);
queryWrapper.lambda().eq(SocialsUserEntity::getSocialType,socialType);
return this.list(queryWrapper);
}
@Override
public SocialsUserEntity getInfoBySocialId(String socialId,String socialType){
QueryWrapper<SocialsUserEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(SocialsUserEntity::getSocialId,socialId);
queryWrapper.lambda().eq(SocialsUserEntity::getSocialType,socialType);
return this.getOne(queryWrapper);
}
}

View File

@@ -0,0 +1,77 @@
package com.yunzhupaas.permission.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.permission.connector.UserInfoService;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.permission.service.UserService;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.Md5Util;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* 用户信息保存
*
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2022/7/28 14:38
*/
@Service
public class UserInfoServiceImpl implements UserInfoService {
@Autowired
private UserService userService;
@Override
public Boolean create(Map<String, Object> map) {
UserEntity entity = JsonUtil.getJsonToBean(map, UserEntity.class);
QueryWrapper<UserEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserEntity::getAccount, entity.getAccount());
UserEntity entity1 = userService.getOne(queryWrapper);
if (entity1 != null) {
entity.setId(entity1.getId());
if(StringUtil.isNotEmpty(entity.getPassword())) {
entity.setPassword(Md5Util.getStringMd5(Md5Util.getStringMd5(entity.getPassword()) + entity1.getSecretkey().toLowerCase()));
}
return userService.updateById(entity);
} else {
if (StringUtil.isEmpty(entity.getId())) {
String userId = RandomUtil.uuId();
entity.setId(userId);
}
entity.setSecretkey(RandomUtil.uuId());
entity.setPassword(Md5Util.getStringMd5(Md5Util.getStringMd5(entity.getPassword()) + entity.getSecretkey().toLowerCase()));
entity.setIsAdministrator(0);
return userService.save(entity);
}
}
@Override
public Boolean update(Map<String, Object> map) {
return create(map);
}
@Override
public Boolean delete(Map<String, Object> map) {
UserEntity entity = JsonUtil.getJsonToBean(map, UserEntity.class);
QueryWrapper<UserEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserEntity::getAccount, entity.getAccount());
UserEntity entity1 = userService.getOne(queryWrapper);
if (entity1 != null) {
entity.setId(entity1.getId());
}
return userService.removeById(entity.getId());
}
@Override
public Map<String, Object> getInfo(String id) {
UserEntity entity = userService.getInfo(id);
return JsonUtil.entityToMap(entity);
}
}

View File

@@ -0,0 +1,47 @@
package com.yunzhupaas.permission.service.impl;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.permission.entity.UserOldPasswordEntity;
import com.yunzhupaas.permission.mapper.UserOldPasswordMapper;
import com.yunzhupaas.permission.service.UserOldPasswordService;
import com.yunzhupaas.permission.service.UserRelationService;
import com.yunzhupaas.util.DateUtil;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 用户信息
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
@Service
@DSTransactional
public class UserOldPasswordServiceImpl extends SuperServiceImpl<UserOldPasswordMapper, UserOldPasswordEntity> implements UserOldPasswordService {
@Override
public List<UserOldPasswordEntity> getList(String userId) {
QueryWrapper<UserOldPasswordEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserOldPasswordEntity::getUserId,userId);
queryWrapper.lambda().orderByDesc(UserOldPasswordEntity::getCreatorTime);
return this.list(queryWrapper);
}
@Override
public Boolean create(UserOldPasswordEntity entity) {
entity.setId(RandomUtil.uuId());
entity.setCreatorTime(DateUtil.getNowDate());
this.save(entity);
return true;
}
}

View File

@@ -0,0 +1,379 @@
package com.yunzhupaas.permission.service.impl;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.constant.PermissionConst;
import com.yunzhupaas.message.entity.SynThirdInfoEntity;
import com.yunzhupaas.message.service.SynThirdInfoService;
import com.yunzhupaas.message.util.SynThirdConsts;
import com.yunzhupaas.permission.entity.PermissionEntityBase;
import com.yunzhupaas.permission.entity.PositionEntity;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.permission.entity.UserRelationEntity;
import com.yunzhupaas.permission.mapper.UserRelationMapper;
import com.yunzhupaas.permission.model.permission.PermissionModel;
import com.yunzhupaas.permission.model.userrelation.UserRelationForm;
import com.yunzhupaas.permission.service.*;
import com.yunzhupaas.permission.util.PermissionUtil;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import static com.yunzhupaas.util.Constants.ADMIN_KEY;
/**
* 用户关系
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024-09-26 上午9:18
*/
@Service
public class UserRelationServiceImpl extends SuperServiceImpl<UserRelationMapper, UserRelationEntity> implements UserRelationService {
@Autowired
private UserService userService;
@Autowired
private PositionService positionService;
@Autowired
private OrganizeService organizeService;
@Autowired
private OrganizeRelationService organizeRelationService;
@Autowired
private UserRelationService userRelationService;
@Autowired
private SynThirdInfoService synThirdInfoService;
@Override
public List<UserRelationEntity> getListByUserId(String userId) {
return getListByUserIdAll(Collections.singletonList(userId));
}
@Override
public List<UserRelationEntity> getListByUserIdAndObjType(String userId, String objectType) {
QueryWrapper<UserRelationEntity> query = new QueryWrapper<>();
query.lambda().in(UserRelationEntity::getUserId, userId);
query.lambda().in(UserRelationEntity::getObjectType, objectType);
query.lambda().orderByAsc(UserRelationEntity::getSortCode).orderByDesc(UserRelationEntity::getCreatorTime);
return this.list(query);
}
@Override
public List<UserRelationEntity> getListByUserIdAll(List<String> userId) {
if (userId.size() > 0) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(UserRelationEntity::getUserId, userId);
return this.list(queryWrapper);
}
return new ArrayList<>();
}
@Override
public List<UserRelationEntity> getListByObjectId(String objectId) {
return getListByObjectId(objectId, null);
}
@Override
public List<UserRelationEntity> getListByObjectType(String objectType) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getObjectType, objectType);
return this.list(queryWrapper);
}
@Override
public List<UserRelationEntity> getListByObjectId(String objectId, String objectType) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getObjectId, objectId);
if(objectType != null){
queryWrapper.lambda().eq(UserRelationEntity::getObjectType, objectType);
}
queryWrapper.lambda().orderByAsc(UserRelationEntity::getSortCode).orderByDesc(UserRelationEntity::getCreatorTime);
return this.list(queryWrapper);
}
@Override
public List<UserRelationEntity> getListByObjectIdAll(List<String> objectId) {
List<UserRelationEntity> list = new ArrayList<>();
if (objectId.size() > 0) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(UserRelationEntity::getObjectId, objectId);
list = this.list(queryWrapper);
}
return list;
}
@Override
public void deleteAllByObjId(String objId) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getObjectId, objId);
this.remove(queryWrapper);
}
@Override
public void deleteAllByUserId(String userId) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getUserId, userId);
queryWrapper.lambda().ne(UserRelationEntity::getObjectType, PermissionConst.GROUP);
userRelationService.remove(queryWrapper);
}
@Override
public void createByList(List<UserRelationEntity> userRelationEntityList) {
userRelationEntityList.forEach(t -> {
this.save(t);
});
}
@Override
public UserRelationEntity getInfo(String id) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
@DSTransactional
public void save(String objectId, List<UserRelationEntity> entitys) {
List<UserRelationEntity> existList = this.getListByObjectId(objectId);
List<UserRelationEntity> relationList = new ArrayList<>();
for (int i = 0; i < entitys.size(); i++) {
UserRelationEntity entity = entitys.get(i);
entity.setId(RandomUtil.uuId());
entity.setSortCode(Long.parseLong(i + ""));
entity.setCreatorUserId(UserProvider.getUser().getUserId());
if (existList.stream().filter(t -> t.getUserId().equals(entity.getUserId())).count() == 0) {
relationList.add(entity);
}
}
for (UserRelationEntity entity : relationList) {
this.save(entity);
}
}
@Override
public void save(List<UserRelationEntity> list) {
for (UserRelationEntity entity : list) {
this.save(entity);
}
}
@Override
@DSTransactional
public void delete(String[] ids) {
for (String item : ids) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getId, item);
this.remove(queryWrapper);
}
}
@Override
@DSTransactional
public void saveObjectId(String objectId, UserRelationForm userRelationForm) {
// 修改前的岗位绑定人员ID
List<String> beforeUserIds = userRelationService.getListByObjectId(objectId)
.stream().map(UserRelationEntity::getUserId).collect(Collectors.toList());
//清除原有成员数据
deleteAllByObjId(objectId);
UserInfo userInfo = UserProvider.getUser();
List<UserRelationEntity> list = new ArrayList<>();
int i = 0;
for (String userId : userRelationForm.getUserIds()) {
UserRelationEntity entity = new UserRelationEntity();
entity.setId(RandomUtil.uuId());
entity.setSortCode(Long.parseLong(i + ""));
entity.setObjectId(objectId);
entity.setObjectType(userRelationForm.getObjectType());
entity.setCreatorUserId(userInfo.getUserId());
entity.setUserId(userId);
list.add(entity);
i++;
}
save(objectId, list);
// 并集:所有未修改的人员
List<String> unUpdateUserId = beforeUserIds.stream().filter(b-> userRelationForm.getUserIds()
.contains(b)).collect(Collectors.toList());
// 差集:所有修改过的人员(包括:删除此岗位、添加此岗位的人员)
beforeUserIds.addAll(userRelationForm.getUserIds());
List<String> allUpdateIds = beforeUserIds.stream().filter(u-> !unUpdateUserId.contains(u))
.collect(Collectors.toList());
if (PermissionConst.POSITION.equals(userRelationForm.getObjectType())) {
// 自动切换岗位
organizeRelationService.autoSetPosition(allUpdateIds);
}
userService.delCurUser(MsgCode.PS010.get(), allUpdateIds,3);
}
@Override
public List<UserRelationEntity> getRelationByUserIds(List<String> userIds) {
if (userIds.size() == 0) {
return new ArrayList<>();
}
QueryWrapper<UserRelationEntity> query = new QueryWrapper<>();
query.lambda().in(UserRelationEntity::getUserId, userIds);
query.lambda().eq(UserRelationEntity::getObjectType, PermissionConst.ORGANIZE);
return this.list(query);
}
@Override
public List<UserRelationEntity> getListByObjectType(String userId, String objectType) {
QueryWrapper<UserRelationEntity> query = new QueryWrapper<>();
query.lambda().eq(UserRelationEntity::getUserId, userId);
if (StringUtil.isNotEmpty(objectType)) {
query.lambda().eq(UserRelationEntity::getObjectType, objectType);
}
query.lambda().orderByAsc(UserRelationEntity::getSortCode).orderByDesc(UserRelationEntity::getCreatorTime);
return this.list(query);
}
@Override
public List<UserRelationEntity> getAllOrgRelationByUserId(String userId){
return this.getListByObjectType(userId,PermissionConst.ORGANIZE);
}
@Override
public List<PermissionModel> getObjectVoList(String objectType) {
String userId = UserProvider.getUser().getUserId();
UserEntity userEntity = userService.getInfo(userId);
String majorOrgId = UserProvider.getUser().getOrganizeId();
// 组装对应组织/岗位/角色对象
switch (objectType) {
case PermissionConst.ORGANIZE:
// 使用in查询减少数据库查询次数
List<String> ids = new ArrayList<>();
this.getListByObjectType(userId, objectType).forEach(r -> ids.add(r.getObjectId()));
List<PermissionModel> permissionModels = setModel(organizeService.getOrgEntityList(ids, false), majorOrgId);
permissionModels.forEach(p->p.setFullName(PermissionUtil.getLinkInfoByOrgId(p.getId(), organizeService, false)));
return permissionModels;
case PermissionConst.POSITION:
// 岗位遵循一对多关系
List<PositionEntity> positionList = positionService.getListByUserId(userId);
if (positionList.size() > 0) {
return setModel(positionList.stream().filter(p -> p.getOrganizeId().equals(majorOrgId))
.collect(Collectors.toList()), userEntity.getPositionId());
}
default:
return new ArrayList<>();
}
}
/**
* 设置返回模型
*
* @param permissionList
* @param majorId
*/
private <T extends PermissionEntityBase> List<PermissionModel> setModel (List<T> permissionList, String majorId){
List<PermissionModel> voList = new ArrayList<>();
permissionList.forEach(p -> {
PermissionModel model = new PermissionModel();
if (p.getId().equals(majorId)) {
model.setIsDefault(true);
} else {
model.setIsDefault(false);
}
model.setFullName(p.getFullName());
model.setId(p.getId());
model.setFullName(p.getFullName());
voList.add(model);
});
return voList;
}
@Override
public Boolean existByObj(String objectType, String objectId) {
QueryWrapper<UserRelationEntity> query = new QueryWrapper<>();
query.lambda()
.eq(UserRelationEntity::getObjectType, objectType)
.eq(UserRelationEntity::getObjectId, objectId);
return this.count(query) > 0;
}
@Override
public List<UserRelationEntity> getListByRoleId(String roleId) {
List<UserRelationEntity> list = new ArrayList<>();
organizeRelationService.getRelationListByRoleId(roleId).forEach(o->{
QueryWrapper<UserRelationEntity> query = new QueryWrapper<>();
query.lambda()
.eq(UserRelationEntity::getObjectType, PermissionConst.ORGANIZE)
.eq(UserRelationEntity::getObjectId, o.getOrganizeId());
list.addAll(this.list(query));
});
return list;
}
@Override
public List<UserRelationEntity> getListByUserId(String userId, String objectType) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getUserId, userId);
queryWrapper.lambda().eq(UserRelationEntity::getObjectType, objectType);
return this.list(queryWrapper);
}
@Override
public List<UserRelationEntity> getListByOrgId(List<String> orgIdList) {
if (orgIdList.size() > 0) {
QueryWrapper<UserRelationEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserRelationEntity::getObjectType, PermissionConst.ORGANIZE).in(UserRelationEntity::getObjectId, orgIdList);
return this.list(queryWrapper);
}
return new ArrayList<>();
}
@Override
public void syncDingUserRelation(String sysObjId, List<Long> deptIdList) {
List<UserRelationEntity> list = new ArrayList<>();
UserRelationEntity entity = null;
// 查询对应的中间表获取到对应的本地组织id
QueryWrapper<SynThirdInfoEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().in(SynThirdInfoEntity::getThirdObjId,deptIdList);
wrapper.lambda().eq(SynThirdInfoEntity::getThirdType, SynThirdConsts.THIRD_TYPE_DING_To_Sys);
List<SynThirdInfoEntity> synThirdInfoLists = synThirdInfoService.getBaseMapper().selectList(wrapper);
HashMap<String,String> map = new HashMap<>();
for (SynThirdInfoEntity obj : synThirdInfoLists) {
map.put(obj.getThirdObjId(),obj.getSysObjId());
}
// 已经存在的数据
List<String> collect = deptIdList.stream().map(t -> String.valueOf(t)).collect(Collectors.toList());
QueryWrapper<UserRelationEntity> relationWrapper = new QueryWrapper<>();
relationWrapper.lambda().in(UserRelationEntity::getObjectId,collect);
relationWrapper.lambda().eq(UserRelationEntity::getObjectType,"Organize");
relationWrapper.lambda().eq(UserRelationEntity::getUserId,sysObjId);
List<UserRelationEntity> userRelationEntities = this.getBaseMapper().selectList(relationWrapper);
List<String> deleteIdS = userRelationEntities.stream().map(t -> t.getId()).collect(Collectors.toList());
this.removeByIds(deleteIdS);
UserEntity adminAccount = userService.getUserByAccount(ADMIN_KEY);
String adminId = adminAccount == null ? null : adminAccount.getId();
for (Long id : deptIdList) {
String objectId = String.valueOf(id);
entity= new UserRelationEntity();
entity.setId(RandomUtil.uuId());
entity.setObjectId(map.get(objectId));
entity.setCreatorUserId(adminId);
entity.setSortCode(0L);
entity.setUserId(sysObjId);
entity.setObjectType("Organize");
list.add(entity);
}
this.saveBatch(list);
}
}

View File

@@ -0,0 +1,190 @@
package com.yunzhupaas.permission.util;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.exception.DataException;
import com.yunzhupaas.permission.entity.OrganizeEntity;
import com.yunzhupaas.permission.service.OrganizeService;
import com.yunzhupaas.util.StringUtil;
import java.util.*;
/**
* 类功能
*
* @author 云筑产品开发平台组
* @version V3.2.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/1/27
*/
public class PermissionUtil {
/**
* 递归取组织结构id
*
* @param organizeInfo 组织信息集合
* @param organizeId 组织id
* @param infoType 信息类型 1:id 2:fullName
*/
private static LinkedList<String> getOrganizeInfos(LinkedList<String> organizeInfo, String organizeId, Integer infoType, OrganizeService organizeService) {
OrganizeEntity infoEntity = organizeService.getInfo(organizeId);
if (infoEntity != null) {
organizeInfo.add(infoType.equals(1) ? organizeId : infoEntity.getFullName());
// -1 为顶级节点
if (!"-1".equals(infoEntity.getParentId())) {
getOrganizeInfos(organizeInfo, infoEntity.getParentId(), infoType, organizeService);
} else {
// 结束时,进行倒序排列
Collections.reverse(organizeInfo);
}
}
return organizeInfo;
}
public static List<LinkedList<String>> getOrgIdsTree(List<String> organizeIds, Integer infoType, OrganizeService organizeService) {
List<LinkedList<String>> organizeIdsTree = new ArrayList<>();
organizeIds.forEach(id -> {
organizeIdsTree.add(getOrganizeInfos(new LinkedList<>(), id, infoType, organizeService));
});
return organizeIdsTree;
}
/**
* 获取组名连接信息
*
* @param organizeIds 组织id集合
* @return 组织链式信息
*/
public static String getLinkInfoByOrgId(List<String> organizeIds, OrganizeService organizeService) {
StringBuilder organizeInfoVo = new StringBuilder();
for (String id : organizeIds) {
if (id != null) {
StringBuilder organizeInfo = new StringBuilder();
for (String name : getOrganizeInfos(new LinkedList<>(), id, 2, organizeService)) {
organizeInfo.append(name).append("/");
}
// 去除最后一个斜杠
if (organizeInfo.length() > 0) {
organizeInfo = new StringBuilder(organizeInfo.substring(0, organizeInfo.length() - 1));
}
organizeInfo.append(",");
organizeInfoVo.append(organizeInfo);
}
}
return organizeInfoVo.toString();
}
/**
* 获取组名连接信息
*
* @param organizeId 组织id
* @return 组织链式信息
*/
public static String getLinkInfoByOrgId(String organizeId, OrganizeService organizeService) {
return getLinkInfoByOrgId(Collections.singletonList(organizeId), organizeService);
}
/**
* 去掉尾部的封号
*/
public static String getLinkInfoByOrgId(String organizeId, OrganizeService organizeService, Boolean separateFlag) {
String linkInfo = getLinkInfoByOrgId(organizeId, organizeService);
if (StringUtil.isEmpty(linkInfo)) {
return linkInfo;
}
if (!separateFlag) {
linkInfo = linkInfo.substring(0, linkInfo.length() - 1);
}
return linkInfo;
}
public static List<String> getOrgIdsByFormTree(OrganizeService organizeService, List<List<String>> organizeIdsTree) throws DataException {
List<String> orgIds = new ArrayList<>();
for (List<String> organizeIds : organizeIdsTree) {
// 组织id数组树最后一个数组最后一个id是需要储存的id
String organizeId = organizeIds.get(organizeIds.size() - 1);
orgIds.add(organizeId);
}
// 判断每个OrgId的有效性
int count = organizeService.listByIds(orgIds).size();
if (count != orgIds.size()) {
throw new DataException(MsgCode.FA026.get());
}
return orgIds;
}
/**
* 将树形数据移出
*
* @param list
* @return
*/
public static List<Map<String, Object>> getListFromTree(List<Map<String, Object>> list) {
List<Map<String, Object>> result = new ArrayList<>();
for (Map<String, Object> map : list) {
if (map.get("children") != null) {
result.add(map);
List<Map<String, Object>> children = (List<Map<String, Object>>) map.get("children");
result.addAll(getListFromTree(children));
} else {
result.add(map);
}
}
return result;
}
/**
* 递归讲list转换成树形
*
* @param list
* @param parentField
* @param childField
* @return
*/
public static List<Map<String, Object>> getTreeObj(List<Map<String, Object>> list, String parentField, String childField) {
List<Map<String, Object>> result = new ArrayList<>(list);
for (int i = 0; i < result.size(); i++) {
Map<String, Object> item = result.get(i);
if ((item.get(parentField) != null && !StringUtil.isNotEmpty(item.get(parentField).toString())) || (item.get(parentField) != null && !"[]".equals(item.get(parentField).toString()))) {
if (hasChild(item, result, parentField, childField) && result.size() > 0) {
result.remove(item);
i--;
}
}
}
return result;
}
/**
* 判断是否有子数据
*
* @param node
* @param list
* @param parentField
* @param childField
* @return
*/
public static boolean hasChild(Map<String, Object> node, List<Map<String, Object>> list, String parentField, String childField) {
for (int i = 0; i < list.size(); i++) {
Map<String, Object> ele = list.get(i);
if (ele.get(childField).equals(node.get(parentField))) {
if (ele.get("children") == null) {
ele.put("children", new ArrayList<>());
}
List<Map<String, Object>> children = (List<Map<String, Object>>) ele.get("children");
children.add(node);
ele.put("children", children);
return true;
}
if (ele.get("children") != null) {
List<Map<String, Object>> children = (List<Map<String, Object>>) ele.get("children");
if (hasChild(node, children, parentField, childField)) {
return true;
}
}
}
return false;
}
}

View File

@@ -0,0 +1,56 @@
package com.yunzhupaas.permission.util.implicit;
import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.request.AuthDefaultRequest;
import me.zhyd.oauth.request.AuthDingTalkRequest;
/**
* 免登陆接口 通用接口
*
* @author 云筑产品开发平台组
* @version v5.0.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/5/23 11:09:55
*/
public enum ImplicitDefaultSource implements AuthSource {
WECHAT_ENTERPRISE {
public String authorize() {
return "https://open.weixin.qq.com/connect/oauth2/authorize";
}
public String accessToken() {
return "https://qyapi.weixin.qq.com/cgi-bin/gettoken";
}
public String userInfo() {
return "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo";
}
public Class<? extends AuthDefaultRequest> getTargetClass() {
return AuthDingTalkRequest.class;
}
},
DINGTALK {
public String authorize() {
return "https://oapi.dingtalk.com/connect/oauth2/sns_authorize";
}
public String accessToken() {
return "https://oapi.dingtalk.com/gettoken";
}
public String userInfo() {
return "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo";
}
public Class<? extends AuthDefaultRequest> getTargetClass() {
return AuthDingTalkRequest.class;
}
},
;
private ImplicitDefaultSource() {
}
}

View File

@@ -0,0 +1,30 @@
package com.yunzhupaas.permission.util.implicit;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
/**
* 免登陆接口
*
* @author 云筑产品开发平台组
* @version v5.0.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/5/23 14:09:49
*/
public interface ImplicitLoginRequest {
/**
* 获取网页授权链接
*
* @return
*/
String getAuthLoginLink();
/**
* 获取网页授权链接
*
* @return
*/
AuthResponse getUserId(AuthCallback authCallback);
}

View File

@@ -0,0 +1,107 @@
package com.yunzhupaas.permission.util.implicit;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.exception.LoginException;
import com.yunzhupaas.permission.util.implicit.request.ImplicitDingTalkRequest;
import com.yunzhupaas.permission.util.implicit.request.ImplicitQywxRequest;
import com.yunzhupaas.permission.util.socials.AuthCallbackNew;
import com.yunzhupaas.permission.util.socials.SocialsConfig;
import com.yunzhupaas.util.StringUtil;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.net.URLEncoder;
/**
* 免登工具类
*
* @author 云筑产品开发平台组
* @version v5.0.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/5/23 11:09:26
*/
@Component
public class ImplicitLoginUtil {
@Autowired
private SocialsConfig socialsConfig;
@Autowired
private ConfigValueUtil configValueUtil;
public String getAuthLink(String source) {
ImplicitLoginRequest authRequest = this.getAuthRequest(source, null, null);
return authRequest.getAuthLoginLink();
}
public String loginByCode(String source, String code, String state) {
//获取第三方请求
AuthCallbackNew callback = new AuthCallbackNew();
callback.setAuthCode(code);
callback.setAuth_code(code);
callback.setAuthorization_code(code);
callback.setCode(code);
callback.setState(state);
ImplicitLoginRequest authRequest = this.getAuthRequest(source, null, null);
AuthResponse<AuthUser> res = authRequest.getUserId(callback);
if (AuthResponseStatus.FAILURE.getCode() == res.getCode()) {
throw new LoginException("连接失败!");
} else if (AuthResponseStatus.SUCCESS.getCode() != res.getCode()) {
throw new LoginException("授权失败:" + res.getMsg());
}
//登录用户第三方id
return getSocialUuid(res);
}
private String getSocialUuid(AuthResponse<AuthUser> res) {
String uuid = res.getData().getUuid();
if (res.getData().getToken() != null && StringUtil.isNotEmpty(res.getData().getToken().getUnionId())) {
uuid = res.getData().getToken().getUnionId();
}
return uuid;
}
/**
* 根据配置信息获取请求对象
*
* @param
* @return
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/21
*/
public ImplicitLoginRequest getAuthRequest(String source, String userId, String tenantId) {
ImplicitLoginRequest authRequest = null;
String url = configValueUtil.getApiDomain() + "/api/oauth/Login/implicit";
SocialsConfig.Config socialConfig;
switch (source.toLowerCase()) {
case "dingtalk":
socialConfig = socialsConfig.getSocialMap().get("dingtalk");
authRequest = new ImplicitDingTalkRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(URLEncoder.encode(url))
.build());
break;
case "wechat_enterprise":
socialConfig = socialsConfig.getSocialMap().get("wechat_enterprise");
authRequest = new ImplicitQywxRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(URLEncoder.encode(url))
.agentId(socialConfig.getAgentId())
.build());
break;
default:
break;
}
if (null == authRequest) {
throw new AuthException(MsgCode.OA024.get());
}
return authRequest;
}
}

View File

@@ -0,0 +1,145 @@
package com.yunzhupaas.permission.util.implicit.request;
import com.alibaba.fastjson.JSONObject;
import com.xkcoding.http.support.HttpHeader;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.permission.util.implicit.ImplicitDefaultSource;
import com.yunzhupaas.permission.util.implicit.ImplicitLoginRequest;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.enums.AuthUserGender;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.log.Log;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.AuthDefaultRequest;
import me.zhyd.oauth.utils.HttpUtils;
import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.util.Date;
public class ImplicitDingTalkRequest extends AuthDefaultRequest implements ImplicitLoginRequest {
public ImplicitDingTalkRequest(AuthConfig config) {
super(config, ImplicitDefaultSource.DINGTALK);
}
@Override
public String getAuthLoginLink() {
return UrlBuilder.fromBaseUrl(this.source.authorize())
.queryParam("appid", this.config.getClientId())
.queryParam("redirect_uri", this.config.getRedirectUri())
.queryParam("response_type", "code")
.queryParam("scope", "snsapi_auth")
.queryParam("state", "STATE")
.build();
}
@Override
public AuthResponse getUserId(AuthCallback authCallback) {
try {
AuthToken authToken = AuthToken.builder()
.code(authCallback.getCode()).build();
AuthUser user = this.getUserByCode(authToken);
return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build();
} catch (Exception var4) {
Exception e = var4;
Log.error("Failed to login with oauth authorization.", e);
return this.responseError(e);
}
}
AuthResponse responseError(Exception e) {
int errorCode = AuthResponseStatus.FAILURE.getCode();
String errorMsg = e.getMessage();
if (e instanceof AuthException) {
AuthException authException = (AuthException) e;
errorCode = authException.getErrorCode();
if (StringUtils.isNotEmpty(authException.getErrorMsg())) {
errorMsg = authException.getErrorMsg();
}
}
return AuthResponse.builder().code(errorCode).msg(errorMsg).build();
}
@Override
protected AuthToken getAccessToken(AuthCallback authCallback) {
return null;
}
@Override
protected AuthUser getUserInfo(AuthToken authToken) {
return null;
}
/**
* 钉钉签名计算
*
* @param time
* @return
*/
private String getSignature(long time) {
// 根据timestamp, appSecret计算签名值
String appSecret = this.config.getClientSecret();
// 根据timestamp, appSecret计算签名值
String stringToSign = "" + time;
Mac mac = null;
try {
mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(appSecret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signatureBytes = mac.doFinal(stringToSign.getBytes("UTF-8"));
String signature = new String(Base64.encodeBase64(signatureBytes));
if ("".equals(signature)) {
return "";
}
String encoded = URLEncoder.encode(signature, "UTF-8");
return encoded.replace("+", "%20").replace("*", "%2A").replace("~", "%7E").replace("/", "%2F");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
protected String doGetUserByCode(AuthToken authToken) {
long time = new Date().getTime();
String signature = this.getSignature(time);
String url = UrlBuilder.fromBaseUrl("https://oapi.dingtalk.com/sns/getuserinfo_bycode")
.queryParam("accessKey", this.config.getClientId())
.queryParam("timestamp", time)
.queryParam("signature", signature)
.build();
JSONObject map = new JSONObject();
map.put("tmp_auth_code", authToken.getCode());
return (new HttpUtils(this.config.getHttpConfig())).post(url, map.toJSONString(), new HttpHeader().add("Content-Type", "application/json")).getBody();
}
protected AuthUser getUserByCode(AuthToken authToken) {
String response = this.doGetUserByCode(authToken);
JSONObject object = this.checkResponse(response);
if (object.get("user_info") != null) {
JSONObject userInfo = (JSONObject) object.get("user_info");
AuthToken token = AuthToken.builder().openId(userInfo.getString("openid")).unionId(userInfo.getString("unionid")).build();
return AuthUser.builder().rawUserInfo(userInfo).uuid(userInfo.getString("unionid")).nickname(userInfo.getString("nick"))
.username(object.getString("nick")).gender(AuthUserGender.UNKNOWN).source(this.source.toString()).token(token).build();
} else {
throw new AuthException(MsgCode.OA024.get());
}
}
private JSONObject checkResponse(String response) {
JSONObject object = JSONObject.parseObject(response);
if (object.containsKey("errcode") && object.getIntValue("errcode") != 0) {
throw new AuthException(object.getString("errmsg"), this.source);
} else {
return object;
}
}
}

View File

@@ -0,0 +1,125 @@
package com.yunzhupaas.permission.util.implicit.request;
import com.alibaba.fastjson.JSONObject;
import com.yunzhupaas.permission.util.implicit.ImplicitDefaultSource;
import com.yunzhupaas.permission.util.implicit.ImplicitLoginRequest;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.log.Log;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.AuthDefaultRequest;
import me.zhyd.oauth.utils.HttpUtils;
import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder;
public class ImplicitQywxRequest extends AuthDefaultRequest implements ImplicitLoginRequest {
public ImplicitQywxRequest(AuthConfig config) {
super(config, ImplicitDefaultSource.WECHAT_ENTERPRISE);
}
@Override
public String getAuthLoginLink() {
return UrlBuilder.fromBaseUrl(this.source.authorize())
.queryParam("appid", this.config.getClientId())
.queryParam("redirect_uri", this.config.getRedirectUri())
.queryParam("response_type", "code")
.queryParam("scope", "snsapi_privateinfo")
.queryParam("agentid", this.config.getAgentId())
.queryParam("state", "STATE#wechat_redirect")
.build();
}
@Override
public AuthResponse getUserId(AuthCallback authCallback) {
try {
this.checkCode(authCallback);
AuthToken authToken = this.getAccessToken(authCallback);
AuthUser user = this.getUserInfo(authToken);
return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build();
} catch (Exception var4) {
Exception e = var4;
Log.error("Failed to login with oauth authorization.", e);
return this.responseError(e);
}
}
AuthResponse responseError(Exception e) {
int errorCode = AuthResponseStatus.FAILURE.getCode();
String errorMsg = e.getMessage();
if (e instanceof AuthException) {
AuthException authException = (AuthException) e;
errorCode = authException.getErrorCode();
if (StringUtils.isNotEmpty(authException.getErrorMsg())) {
errorMsg = authException.getErrorMsg();
}
}
return AuthResponse.builder().code(errorCode).msg(errorMsg).build();
}
@Override
protected AuthToken getAccessToken(AuthCallback authCallback) {
try {
String response = this.doGetAccessToken();
JSONObject object = this.checkResponse(response);
AuthToken authToken = AuthToken.builder()
.accessToken(object.getString("access_token"))
.code(authCallback.getCode())
.expireIn(object.getIntValue("expires_in")).build();
return authToken;
} catch (Exception var5) {
Exception e = var5;
throw new AuthException("企业微信获取token失败", e);
}
}
@Override
protected AuthUser getUserInfo(AuthToken authToken) {
String response = this.doGetUserInfo(authToken);
JSONObject object = this.checkResponse(response);
if (!object.containsKey("userid")) {
throw new AuthException(AuthResponseStatus.UNIDENTIFIED_PLATFORM, this.source);
} else {
return AuthUser.builder().rawUserInfo(object).uuid(object.getString("userid")).token(authToken).source(this.source.toString()).build();
}
}
protected String doGetAccessToken() {
return (new HttpUtils(this.config.getHttpConfig())).get(this.accessTokenUrl()).getBody();
}
protected String accessTokenUrl() {
return UrlBuilder.fromBaseUrl(this.source.accessToken())
.queryParam("corpid", this.config.getClientId())
.queryParam("corpsecret", this.config.getClientSecret())
.build();
}
protected String doGetUserInfo(AuthToken authToken) {
return (new HttpUtils(this.config.getHttpConfig())).get(this.userInfoUrl(authToken)).getBody();
}
protected String userInfoUrl(AuthToken authToken) {
return UrlBuilder.fromBaseUrl(this.source.userInfo())
.queryParam("access_token", authToken.getAccessToken())
.queryParam("code", authToken.getCode())
.build();
}
private JSONObject checkResponse(String response) {
JSONObject object = JSONObject.parseObject(response);
if (object.containsKey("errcode") && object.getIntValue("errcode") != 0) {
throw new AuthException(object.getString("errmsg"), this.source);
} else {
return object;
}
}
}

View File

@@ -0,0 +1,18 @@
package com.yunzhupaas.permission.util.socials;
import lombok.Data;
import me.zhyd.oauth.model.AuthCallback;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/21 17:17:44
*/
@Data
public class AuthCallbackNew extends AuthCallback {
private String authCode;
}

View File

@@ -0,0 +1,58 @@
package com.yunzhupaas.permission.util.socials;
import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.request.AuthDefaultRequest;
import me.zhyd.oauth.request.AuthDingTalkRequest;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/15 17:20:40
*/
public enum AuthDefaultSourceNew implements AuthSource {
DINGTALK_NEW {
public String authorize() {
return "https://login.dingtalk.com/oauth2/auth";
// return "https://oapi.dingtalk.com/connect/sns_authorize";
}
public String accessToken() {
return "https://api.dingtalk.com/v1.0/oauth2/userAccessToken";
// return "https://oapi.dingtalk.com/gettoken";
}
public String userInfo() {
return "https://api.dingtalk.com/v1.0/contact/users/me";
// return "https://oapi.dingtalk.com/user/getuserinfo";
}
public Class<? extends AuthDefaultRequest> getTargetClass() {
return AuthDingTalkRequest.class;
}
},
WECHAT_APPLETS {
@Override
public String authorize() {
return null;
}
@Override
public String accessToken() {
return null;
}
public String userInfo() {
return "https://api.weixin.qq.com/sns/jscode2session";
}
public Class<? extends AuthDefaultRequest> getTargetClass() {
return AuthWechatAppletsRequest.class;
}
},;
private AuthDefaultSourceNew() {
}
}

View File

@@ -0,0 +1,125 @@
package com.yunzhupaas.permission.util.socials;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xkcoding.http.support.HttpHeader;
import com.yunzhupaas.constant.MsgCode;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.enums.AuthUserGender;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.log.Log;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.AuthDefaultRequest;
import me.zhyd.oauth.utils.HttpUtils;
import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/15 17:19:14
*/
public class AuthDingTalkNewRequest extends AuthDefaultRequest {
public AuthDingTalkNewRequest(AuthConfig config) {
super(config, AuthDefaultSourceNew.DINGTALK_NEW);
}
public AuthDingTalkNewRequest(AuthConfig config, AuthStateCache authStateCache) {
super(config, AuthDefaultSourceNew.DINGTALK_NEW, authStateCache);
}
public String authorize(String state) {
String encode = null;
try {
encode = URLEncoder.encode(this.config.getRedirectUri(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
;
return UrlBuilder.fromBaseUrl(this.source.authorize()).queryParam("response_type", "code").queryParam("client_id", this.config.getClientId()).queryParam("scope", "openid").queryParam("redirect_uri", encode).queryParam("prompt", "consent").build();
}
protected AuthToken getAccessToken(AuthCallback authCallback) {
return this.getToken(this.accessTokenUrl(authCallback.getCode()), authCallback);
}
protected String accessTokenUrl(String code) {
return UrlBuilder.fromBaseUrl(this.source.accessToken()).build();
}
public AuthResponse login(AuthCallback authCallback) {
try {
this.checkCode(authCallback);
AuthToken authToken = this.getAccessToken(authCallback);
AuthUser user = this.getUserInfo(authToken);
return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build();
} catch (Exception var4) {
Log.error("Failed to login with oauth authorization.", var4);
return this.responseError(var4);
}
}
AuthResponse responseError(Exception e) {
int errorCode = AuthResponseStatus.FAILURE.getCode();
String errorMsg = e.getMessage();
if (e instanceof AuthException) {
AuthException authException = (AuthException) e;
errorCode = authException.getErrorCode();
if (StringUtils.isNotEmpty(authException.getErrorMsg())) {
errorMsg = authException.getErrorMsg();
}
}
return AuthResponse.builder().code(errorCode).msg(errorMsg).build();
}
private AuthToken getToken(String accessTokenUrl, AuthCallback authCallback) {
JSONObject map = new JSONObject();
map.put("clientId", this.config.getClientId());
map.put("clientSecret", this.config.getClientSecret());
map.put("code", authCallback.getCode());
map.put("refreshToken", authCallback.getCode());
map.put("grantType", "authorization_code");
String response = (new HttpUtils(this.config.getHttpConfig())).post(accessTokenUrl, map.toJSONString(), new HttpHeader().add("Content-Type", "application/json")).getBody();
JSONObject accessTokenObject = JSONObject.parseObject(response);
this.checkResponse(accessTokenObject);
return AuthToken.builder().accessToken(accessTokenObject.getString("accessToken")).refreshToken(accessTokenObject.getString("refreshToken")).expireIn(accessTokenObject.getIntValue("expireIn")).openId(accessTokenObject.getString("openid")).build();
}
private void checkResponse(JSONObject object) {
if (object.containsKey("errcode")) {
throw new AuthException(object.getIntValue("errcode"), object.getString("errmsg"));
}
}
protected AuthUser getUserInfo(AuthToken authToken) {
HttpHeader httpHeader = new HttpHeader()
.add("x-acs-dingtalk-access-token", authToken.getAccessToken())
.add("Content-Type", "application/json");
String response = (new HttpUtils(this.config.getHttpConfig())).get(this.userInfoUrl(authToken), null, httpHeader, false).getHttpResponse().getBody();
JSONObject object = JSON.parseObject(response);
if (object.get("unionId") != null) {
AuthToken token = AuthToken.builder().openId(object.getString("openId")).unionId(object.getString("unionId")).build();
return AuthUser.builder().rawUserInfo(object).uuid(object.getString("unionId")).nickname(object.getString("nick")).username(object.getString("nick")).gender(AuthUserGender.UNKNOWN).source(this.source.toString()).token(token).build();
} else {
throw new AuthException(MsgCode.OA024.get());
}
}
protected String userInfoUrl(AuthToken authToken) {
return UrlBuilder.fromBaseUrl(this.source.userInfo()).build();
}
}

View File

@@ -0,0 +1,441 @@
package com.yunzhupaas.permission.util.socials;
import com.xkcoding.http.config.HttpConfig;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.util.StringUtil;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.enums.scope.*;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.request.*;
import me.zhyd.oauth.utils.AuthScopeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URLEncoder;
import java.util.Arrays;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/21 12:00:56
*/
@Component
public class AuthSocialsUtil {
@Autowired
private SocialsConfig socialsConfig;
@Autowired
private ConfigValueUtil configValueUtil;
/**
* 根据配置信息获取请求对象
*
* @param
* @return
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/21
*/
public AuthRequest getAuthRequest(String source, String userId, boolean isLogin, String ticket, String tenantId) {
AuthRequest authRequest = null;
String addUrlStr = "";
String urlStr = configValueUtil.getApiDomain() + "/api/oauth/Login/socials?source=" + source;
if (!isLogin) {
urlStr = configValueUtil.getApiDomain() + "/api/oauth/Login/socials?source=" + source;
}
if (StringUtil.isNotEmpty(userId)) {
addUrlStr = "&userId=" + userId;
}
if (StringUtil.isNotEmpty(ticket)) {
addUrlStr = "&yunzhupaas_ticket=" + ticket;
}
if (StringUtil.isNotEmpty(tenantId)) {
addUrlStr += "&tenantId=" + tenantId;
}
String url = urlStr + addUrlStr;
SocialsConfig.Config socialConfig;
switch (source.toLowerCase()) {
//todo 官方登录api调整目前数据问题
case "dingtalk":
socialConfig = socialsConfig.getSocialMap().get("dingtalk");
authRequest = new AuthDingTalkNewRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
//todo 未申请企业
case "qq":
socialConfig = socialsConfig.getSocialMap().get("qq");
authRequest = new AuthQqRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "wechat_open":
socialConfig = socialsConfig.getSocialMap().get("wechat_open");
authRequest = new AuthWeChatOpenRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(URLEncoder.encode(url))
.build());
break;
case "github":
socialConfig = socialsConfig.getSocialMap().get("github");
authRequest = new AuthGithubRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(URLEncoder.encode(url))
.scopes(AuthScopeUtils.getScopes(AuthGithubScope.values()))
// 针对国外平台配置代理
// .httpConfig(HttpConfig.builder()
// .timeout(15000)
// .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)))
// .build())
.build());
break;
case "wechat_enterprise":
socialConfig = socialsConfig.getSocialMap().get("wechat_enterprise");
authRequest = new AuthWeChatEnterpriseQrcodeRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(URLEncoder.encode(url))
.agentId(socialConfig.getAgentId())
.build());
break;
case "feishu":
socialConfig = socialsConfig.getSocialMap().get("feishu");
authRequest = new AuthFeishuRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "baidu":
socialConfig = socialsConfig.getSocialMap().get("baidu");
authRequest = new AuthBaiduRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(Arrays.asList(
AuthBaiduScope.BASIC.getScope(),
AuthBaiduScope.SUPER_MSG.getScope(),
AuthBaiduScope.NETDISK.getScope()
))
// .clientId("")
// .clientSecret("")
// .redirectUri("http://localhost:9001/oauth/baidu/callback")
.build());
break;
case "gitee":
socialConfig = socialsConfig.getSocialMap().get("gitee");
authRequest = new AuthGiteeRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(AuthScopeUtils.getScopes(AuthGiteeScope.values()))
.build());
break;
case "weibo":
socialConfig = socialsConfig.getSocialMap().get("weibo");
authRequest = new AuthWeiboRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(Arrays.asList(
AuthWeiboScope.EMAIL.getScope(),
AuthWeiboScope.FRIENDSHIPS_GROUPS_READ.getScope(),
AuthWeiboScope.STATUSES_TO_ME_READ.getScope()
))
.build());
break;
case "coding":
socialConfig = socialsConfig.getSocialMap().get("coding");
authRequest = new AuthCodingRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.domainPrefix("")
.scopes(Arrays.asList(
AuthCodingScope.USER.getScope(),
AuthCodingScope.USER_EMAIL.getScope(),
AuthCodingScope.USER_PHONE.getScope()
))
.build());
break;
case "oschina":
socialConfig = socialsConfig.getSocialMap().get("oschina");
authRequest = new AuthOschinaRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "alipay":
socialConfig = socialsConfig.getSocialMap().get("alipay");
// 支付宝在创建回调地址时不允许使用localhost或者127.0.0.1所以这儿的回调地址使用的局域网内的ip
authRequest = new AuthAlipayRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.alipayPublicKey("")
.build());
break;
case "csdn":
socialConfig = socialsConfig.getSocialMap().get("csdn");
authRequest = new AuthCsdnRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "taobao":
socialConfig = socialsConfig.getSocialMap().get("taobao");
authRequest = new AuthTaobaoRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "google":
socialConfig = socialsConfig.getSocialMap().get("google");
authRequest = new AuthGoogleRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(AuthScopeUtils.getScopes(AuthGoogleScope.USER_EMAIL, AuthGoogleScope.USER_PROFILE, AuthGoogleScope.USER_OPENID))
// 针对国外平台配置代理
.httpConfig(HttpConfig.builder()
.timeout(15000)
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)))
.build())
.build());
break;
case "facebook":
socialConfig = socialsConfig.getSocialMap().get("facebook");
authRequest = new AuthFacebookRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(AuthScopeUtils.getScopes(AuthFacebookScope.values()))
// 针对国外平台配置代理
.httpConfig(HttpConfig.builder()
.timeout(15000)
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)))
.build())
.build());
break;
case "douyin":
socialConfig = socialsConfig.getSocialMap().get("douyin");
authRequest = new AuthDouyinRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "linkedin":
socialConfig = socialsConfig.getSocialMap().get("linkedin");
authRequest = new AuthLinkedinRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(null)
.build());
break;
case "microsoft":
socialConfig = socialsConfig.getSocialMap().get("microsoft");
authRequest = new AuthMicrosoftRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(Arrays.asList(
AuthMicrosoftScope.USER_READ.getScope(),
AuthMicrosoftScope.USER_READWRITE.getScope(),
AuthMicrosoftScope.USER_READBASIC_ALL.getScope(),
AuthMicrosoftScope.USER_READ_ALL.getScope(),
AuthMicrosoftScope.USER_READWRITE_ALL.getScope(),
AuthMicrosoftScope.USER_INVITE_ALL.getScope(),
AuthMicrosoftScope.USER_EXPORT_ALL.getScope(),
AuthMicrosoftScope.USER_MANAGEIDENTITIES_ALL.getScope(),
AuthMicrosoftScope.FILES_READ.getScope()
))
.build());
break;
case "mi":
socialConfig = socialsConfig.getSocialMap().get("mi");
authRequest = new AuthMiRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "toutiao":
socialConfig = socialsConfig.getSocialMap().get("toutiao");
authRequest = new AuthToutiaoRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "teambition":
socialConfig = socialsConfig.getSocialMap().get("teambition");
authRequest = new AuthTeambitionRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "pinterest":
socialConfig = socialsConfig.getSocialMap().get("pinterest");
authRequest = new AuthPinterestRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
// 针对国外平台配置代理
.httpConfig(HttpConfig.builder()
.timeout(15000)
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)))
.build())
.build());
break;
case "renren":
socialConfig = socialsConfig.getSocialMap().get("renren");
authRequest = new AuthRenrenRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "stack_overflow":
socialConfig = socialsConfig.getSocialMap().get("stack_overflow");
authRequest = new AuthStackOverflowRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.stackOverflowKey("")
.build());
break;
case "huawei":
socialConfig = socialsConfig.getSocialMap().get("huawei");
authRequest = new AuthHuaweiRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(Arrays.asList(
AuthHuaweiScope.BASE_PROFILE.getScope(),
AuthHuaweiScope.MOBILE_NUMBER.getScope(),
AuthHuaweiScope.ACCOUNTLIST.getScope(),
AuthHuaweiScope.SCOPE_DRIVE_FILE.getScope(),
AuthHuaweiScope.SCOPE_DRIVE_APPDATA.getScope()
))
.build());
break;
case "kujiale":
socialConfig = socialsConfig.getSocialMap().get("kujiale");
authRequest = new AuthKujialeRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "gitlab":
socialConfig = socialsConfig.getSocialMap().get("gitlab");
authRequest = new AuthGitlabRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.scopes(AuthScopeUtils.getScopes(AuthGitlabScope.values()))
.build());
break;
case "meituan":
socialConfig = socialsConfig.getSocialMap().get("meituan");
authRequest = new AuthMeituanRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "eleme":
socialConfig = socialsConfig.getSocialMap().get("eleme");
authRequest = new AuthElemeRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
// case "mygitlab":
// authRequest = new AuthMyGitlabRequest(AuthConfig.builder()
// .clientId("")
// .clientSecret("")
// .redirectUri("http://127.0.0.1:8443/oauth/callback/mygitlab")
// .build());
// break;
case "twitter":
socialConfig = socialsConfig.getSocialMap().get("twitter");
authRequest = new AuthTwitterRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
// 针对国外平台配置代理
.httpConfig(HttpConfig.builder()
.timeout(15000)
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)))
.build())
.build());
break;
case "wechat_mp":
socialConfig = socialsConfig.getSocialMap().get("wechat_mp");
authRequest = new AuthWeChatMpRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "aliyun":
socialConfig = socialsConfig.getSocialMap().get("aliyun");
authRequest = new AuthAliyunRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "xmly":
socialConfig = socialsConfig.getSocialMap().get("xmly");
authRequest = new AuthXmlyRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
case "wechat_enterprise_web":
socialConfig = socialsConfig.getSocialMap().get("wechat_enterprise_web");
authRequest = new AuthWeChatEnterpriseWebRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.agentId(socialConfig.getAgentId())
.build());
break;
case "wechat_applets":
socialConfig = socialsConfig.getSocialMap().get("wechat_applets");
authRequest = new AuthWechatAppletsRequest(AuthConfig.builder()
.clientId(socialConfig.getClientId())
.clientSecret(socialConfig.getClientSecret())
.redirectUri(url)
.build());
break;
default:
break;
}
if (null == authRequest) {
throw new AuthException(MsgCode.OA024.get());
}
return authRequest;
}
}

View File

@@ -0,0 +1,89 @@
package com.yunzhupaas.permission.util.socials;
import com.alibaba.fastjson.JSONObject;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.log.Log;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.AuthDefaultRequest;
import me.zhyd.oauth.utils.HttpUtils;
import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/9/16 12:11:36
*/
public class AuthWechatAppletsRequest extends AuthDefaultRequest {
public AuthWechatAppletsRequest(AuthConfig config) {
super(config, AuthDefaultSourceNew.WECHAT_APPLETS);
}
public AuthWechatAppletsRequest(AuthConfig config, AuthStateCache authStateCache) {
super(config, AuthDefaultSourceNew.WECHAT_APPLETS, authStateCache);
}
@Override
protected AuthToken getAccessToken(AuthCallback authCallback) {
return null;
}
@Override
protected AuthUser getUserInfo(AuthToken authToken) {
return null;
}
protected String getuserInfoUrl(AuthCallback authCallback) {
return UrlBuilder.fromBaseUrl(this.source.userInfo())
.queryParam("appid", this.config.getClientId())
.queryParam("secret", this.config.getClientSecret())
.queryParam("js_code",authCallback.getCode())
.queryParam("grant_type", "authorization_code").build();
}
AuthResponse responseError(Exception e) {
int errorCode = AuthResponseStatus.FAILURE.getCode();
String errorMsg = e.getMessage();
if (e instanceof AuthException) {
AuthException authException = (AuthException) e;
errorCode = authException.getErrorCode();
if (StringUtils.isNotEmpty(authException.getErrorMsg())) {
errorMsg = authException.getErrorMsg();
}
}
return AuthResponse.builder().code(errorCode).msg(errorMsg).build();
}
public AuthResponse login(AuthCallback authCallback) {
try {
AuthUser user = this.getUserUnionid(authCallback);
return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build();
} catch (Exception var4) {
Log.error("Failed to login with oauth authorization.", var4);
return this.responseError(var4);
}
}
protected AuthUser getUserUnionid(AuthCallback authCallback) {
String response = (new HttpUtils(this.config.getHttpConfig())).get(this.getuserInfoUrl(authCallback)).getBody();
JSONObject object = JSONObject.parseObject(response);
AuthToken authToken=new AuthToken();
if (object.containsKey("unionid")) {
authToken.setUnionId(object.getString("unionid"));
}
return AuthUser.builder().rawUserInfo(object).token(authToken).source(this.source.toString()).build();
}
}

View File

@@ -0,0 +1,105 @@
package com.yunzhupaas.permission.util.socials;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 单点登录枚举
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/14 10:10:30
*/
public enum SocialsAuthEnum {
WECHAT_OPEN("微信", "/cdn/socials/wechat_open.png", "绑定微信后用户可通过微信扫码登录YUNZHUPAAS系统。",
"", "v1.1.0", true, "icon-ym icon-ym-logo-wechat"),
QQ("QQ", "/cdn/socials/qq.png", "绑定QQ后用户可通过QQ扫码登录YUNZHUPAAS系统。",
"", "v1.1.0", true, "icon-ym icon-ym-logo-qq"),
WECHAT_ENTERPRISE("企业微信", "/cdn/socials/wxWork.png", "绑定企业微信后,您可在网页端扫码登录, 在企业微信应用内和小程序免登录, 并能实时接收小程序通知,沟通和协作将更加便捷。",
"", "v1.10.0", true, "icon-ym icon-ym-logo-wxWork"),
DINGTALK("钉钉", "/cdn/socials/dingtalk.png", "绑定阿里钉钉后,您可在网页端扫码登录并能接收相关通知。",
"", "v1.0.1", true, "icon-ym icon-ym-logo-dingding"),
FEISHU("飞书", "/cdn/socials/feishu.png", "绑定飞书后,用户可扫码登录 YUNZHUPAAS。",
"", "1.15.9", true, "icon-ym icon-ym-logo-feishu"),
GITHUB("Github", "/cdn/socials/gitHub.png", "绑定GitHub后用户可扫码登录 YUNZHUPAAS。",
"", "v1.0.1", true, "icon-ym icon-ym-logo-github"),
GITEE("Gitee", "", "绑定Gitee后用户可登录 YUNZHUPAAS。",
"", "v1.0.1", false, "icon-ym icon-ym-logo-github"),
;
// 平台名
private final String name;
// 帮助文档
private final String logo;
// 描述
private final String describetion;
// 官网api文档
private final String apiDoc;
// 集成该平台的 版本
private final String since;
// 首页展示
private final boolean latest;
// 官网api文档
private final String icon;
SocialsAuthEnum(String name, String logo, String describetion, String apiDoc, String since, boolean latest,
String icon) {
this.name = name;
this.logo = logo;
this.describetion = describetion;
this.apiDoc = apiDoc;
this.since = since;
this.latest = latest;
this.icon = icon;
}
public static List<Map<String, Object>> getPlatformInfos() {
List<Map<String, Object>> list = new LinkedList<>();
Map<String, Object> map = null;
SocialsAuthEnum[] justAuthPlatformInfos = SocialsAuthEnum.values();
for (SocialsAuthEnum justAuthPlatformInfo : justAuthPlatformInfos) {
map = new HashMap<>();
map.put("name", justAuthPlatformInfo.getName());
map.put("logo", justAuthPlatformInfo.getLogo());
map.put("describetion", justAuthPlatformInfo.getDescribetion());
map.put("apiDoc", justAuthPlatformInfo.getApiDoc());
map.put("since", justAuthPlatformInfo.getSince());
map.put("enname", justAuthPlatformInfo.name().toLowerCase());
map.put("isLatest", justAuthPlatformInfo.isLatest());
map.put("icon", justAuthPlatformInfo.getIcon());
list.add(map);
}
return list;
}
public String getIcon() {
return icon;
}
public String getName() {
return name;
}
public String getLogo() {
return logo;
}
public String getDescribetion() {
return describetion;
}
public String getApiDoc() {
return apiDoc;
}
public String getSince() {
return since;
}
public boolean isLatest() {
return latest;
}
}

View File

@@ -0,0 +1,136 @@
package com.yunzhupaas.permission.util.socials;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 流程设计
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/9/6 14:58:23
*/
@Component
@ConfigurationProperties(prefix = SocialsConfig.PREFIX)
public class SocialsConfig {
public static final String PREFIX = "socials";
private boolean socialsEnabled = false;
private List<Config> config;
private Map<String, Config> socialMap;
public SocialsConfig() {
}
public SocialsConfig(List<Config> config, Map<String, Config> socialMap) {
this.config = config;
this.socialMap = socialMap;
}
public boolean isSocialsEnabled() {
return socialsEnabled;
}
public void setSocialsEnabled(boolean socialsEnabled) {
this.socialsEnabled = socialsEnabled;
}
public void setConfig(List<Config> config) {
this.config = config;
this.socialMap = new HashMap<>();
config.stream().forEach(item -> {
this.socialMap.put(item.getProvider(), item);
});
}
public List<Config> getConfig() {
return config;
}
public Map<String, Config> getSocialMap() {
return socialMap;
}
public static class Config {
private String provider;
private String clientId;
private String clientSecret;
private String agentId;
public Config() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Config config = (Config) o;
return Objects.equals(provider, config.provider) && Objects.equals(clientId, config.clientId) && Objects.equals(clientSecret, config.clientSecret) && Objects.equals(agentId, config.agentId);
}
@Override
public int hashCode() {
return Objects.hash(provider, clientId, clientSecret, agentId);
}
@Override
public String toString() {
return "Config{" +
"provider='" + provider + '\'' +
", clientId='" + clientId + '\'' +
", clientSecret='" + clientSecret + '\'' +
", agentId='" + agentId + '\'' +
'}';
}
public String getProvider() {
return provider;
}
public void setProvider(String provider) {
this.provider = provider;
}
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getClientSecret() {
return clientSecret;
}
public void setClientSecret(String clientSecret) {
this.clientSecret = clientSecret;
}
public String getAgentId() {
return agentId;
}
public void setAgentId(String agentId) {
this.agentId = agentId;
}
public Config(String provider, String clientId, String clientSecret, String agentId) {
this.provider = provider;
this.clientId = clientId;
this.clientSecret = clientSecret;
this.agentId = agentId;
}
}
}