【JNPF】关于数据授权
一、平台设置流程
可以参考官方视频的设置:
https://www.bilibili.com/video/BV1cE4HexEfZ
1、先进入 系统管理 - 系统菜单,选择应用后点击【菜单管理】:2、对应展示的每个菜单,选择【数据权限】:
3、业务数据权限配置
一、配置数据源连接,选择业务对应的数据源
二、配置字段条件,允许一个字段配置多种条件
三、切换到方案管理,每个方案可以把字段条件进行组合为一个方案
4、把数据权限分配到角色中
有两种分配方式
一、系统权限 - 角色管理 - 角色权限
二、系统权限 - 权限管理 - 批量设置
二、表结构和代码分析
数据权限涉及到了三张表:
对应上面的三个步骤,数据源 -> 字段管理 -> 数据权限
CREATE TABLE `base_moduledataauthorize` ( `F_Id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '自然主键', `F_FullName` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '字段名称', `F_EnCode` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '字段编号', `F_Type` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '字段类型', `F_ConditionSymbol` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件符号', `F_ConditionSymbolJson` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件符号Json', `F_ConditionText` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '条件内容', `F_PropertyJson` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '扩展属性', `F_Description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '描述', `F_SortCode` bigint DEFAULT NULL COMMENT '排序', `F_EnabledMark` int DEFAULT NULL COMMENT '有效标志', `F_CreatorTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreatorUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建用户', `F_LastModifyTime` datetime DEFAULT NULL COMMENT '修改时间', `F_LastModifyUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '修改用户', `F_DeleteMark` int DEFAULT NULL COMMENT '删除标志', `F_DeleteTime` datetime DEFAULT NULL COMMENT '删除时间', `F_DeleteUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '删除用户', `F_ModuleId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '功能主键', `F_FieldRule` int DEFAULT NULL COMMENT '字段规则', `F_ChildTableKey` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '子表规则key', `F_BindTable` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '绑定表格Id', `F_TenantId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`F_Id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='数据权限配置'; CREATE TABLE `base_moduledataauthorizelink` ( `F_Id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '自然主键', `F_LinkId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据源连接', `F_LinkTables` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '连接表名', `F_ModuleId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '菜单主键', `F_Type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '权限类型', `F_TenantId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`F_Id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='数据权限连接管理'; CREATE TABLE `base_moduledataauthorizescheme` ( `F_Id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '自然主键', `F_EnCode` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '方案编号', `F_FullName` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '方案名称', `F_ConditionJson` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件规则Json', `F_ConditionText` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件规则描述', `F_Description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '描述', `F_SortCode` bigint DEFAULT NULL COMMENT '排序', `F_EnabledMark` int DEFAULT NULL COMMENT '有效标志', `F_CreatorTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreatorUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建用户', `F_LastModifyTime` datetime DEFAULT NULL COMMENT '修改时间', `F_LastModifyUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '修改用户', `F_DeleteMark` int DEFAULT NULL COMMENT '删除标志', `F_DeleteTime` datetime DEFAULT NULL COMMENT '删除时间', `F_DeleteUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '删除用户', `F_ModuleId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '功能主键', `F_AllData` int DEFAULT NULL COMMENT '全部数据标识', `F_TenantId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`F_Id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='数据权限方案';
然后就是怎么调用权限解析的,看源码找了半天,发现消息发送业务是有这么一个使用方法:
内部实现如下:
可以看到先是获取了QueryWrapper对象,调用了一个获取权限对象的方法
从权限对象获得ResourceList,这个ResourceList需要过滤出当前这个moduleId的才行
而下一步都是对Resource的信息的记录转换成SQL查询条件
关于ResourceList是通过这里查询的
到最后的SQL实现就是通过角色id查询的,而最后的
base_moduledataauthorizescheme表就是权限方案,可以看到是通过获取方案记录进行实现的
<select id="findResource" parameterType="String" resultMap="ResourceVO"> SELECT * FROM base_moduledataauthorizescheme WHERE F_Id IN (SELECT F_ItemId FROM base_authorize WHERE F_ObjectId IN (${objectId}) AND F_ItemType = 'resource') and F_EnabledMark = 1 Order by F_SortCode desc </select>
三、开发使用
通过QueryWrapper实现的,业务SQL需要通过customeSqlSegment来实现条件注入
权限类型的转换:
JNPF是通过枚举类来设置这几种权限值:
package jnpf.permission.model.authorize; import lombok.Getter; /** * 数据权限过滤条件字段 * @author JNPF开发平台组 * @version V3.2 * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com) * @date 2021/10/9 */ @Getter public enum AuthorizeConditionEnum { /** * 任意文本 */ TEXT("text", "任意文本"), /** * 当前组织 */ ORGANIZE("@organizeId","当前组织"), /** * 当前组织及子组织 */ ORGANIZEANDUNDER("@organizationAndSuborganization", "当前组织及子组织"), /** * 当前用户 */ USER("@userId","当前用户"), USER_ACCOUNT("@userAccount","当前用户账号"), USER_NAME("@userName","当前用户名称"), /** * 当前用户及下属 */ USERANDUNDER("@userAraSubordinates", "当前用户及下属"), /** * 当前用户及下属账号 */ USER_ACC_AND_UNDER("@userAccountAraSubordinates", "当前用户及下属账号"), /** * 当前用户及下属账号 */ USER_NAME_AND_UNDER("@userNameAraSubordinates", "当前用户及下属姓名"), /** * 当前分管组织 */ BRANCHMANAGEORG("@branchManageOrganize", "当前分管组织"), /** * 当前分管组织及子组织 */ BRANCHMANAGEORGANIZEUNDER("@branchManageOrganizeAndSub","当前分管组织及子组织") ; private final String condition; private final String description; AuthorizeConditionEnum(String condition, String description) { this.condition = condition; this.description = description; } }
在解析权限时,通过权限方案读取到的配置来匹配枚举对象
转换成查询条件的值,因为业务表有时候设置的不是用户id,而是账户,所以我这里追加了权限选项和对应的条件
package jnpf.permission.service.impl; import cn.hutool.core.text.StrPool; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jnpf.emnus.SearchMethodEnum; import jnpf.base.UserInfo; import jnpf.base.model.base.SystemBaeModel; import jnpf.base.model.button.ButtonModel; import jnpf.base.model.column.ColumnModel; import jnpf.base.model.form.ModuleFormModel; import jnpf.base.model.module.ModuleModel; import jnpf.base.model.resource.ResourceModel; import jnpf.base.service.SuperServiceImpl; import jnpf.base.service.SystemService; import jnpf.config.ConfigValueUtil; import jnpf.database.model.dto.PrepSqlDTO; import jnpf.database.sql.util.SqlFrameFastUtil; import jnpf.database.util.DataSourceUtil; import jnpf.database.util.DbTypeUtil; import jnpf.database.util.JdbcUtil; import jnpf.database.util.TenantDataSourceUtil; import jnpf.permission.constant.AuthorizeConst; import jnpf.permission.entity.*; import jnpf.permission.mapper.AuthorizeMapper; import jnpf.permission.model.authorize.*; import jnpf.permission.model.portalManage.AuthorizePortalManagePrimary; import jnpf.permission.service.*; import jnpf.util.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.mybatis.dynamic.sql.*; import org.mybatis.dynamic.sql.select.QueryExpressionDSL; import org.mybatis.dynamic.sql.select.SelectModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.sql.DataSource; import java.util.*; import java.util.stream.Collectors; /** * 操作权限 * * @author JNPF开发平台组 * @version V3.1.0 * @copyright 引迈信息技术有限公司 * @date 2019年9月26日 上午9:18 */ @Slf4j @Service @DSTransactional public class AuthorizeServiceImpl extends SuperServiceImpl<AuthorizeMapper, AuthorizeEntity> implements AuthorizeService { @Autowired private UserRelationService userRelationService; @Autowired private DataSourceUtil dataSourceUtils; @Autowired private UserProvider userProvider; @Autowired private CacheKeyUtil cacheKeyUtil; @Autowired private RedisUtil redisUtil; @Autowired private UserService userService; @Autowired private RoleService roleService; @Autowired private OrganizeService organizeService; @Autowired private OrganizeAdministratorService organizeAdminIsTratorService; @Autowired private SystemService systemService; @Autowired private ConfigValueUtil configValueUtil; @Autowired private DataSource dataSource; @Override public AuthorizeVO getAuthorize(boolean isCache) { // 是否从缓冲里面获取权限 if (isCache) { return getCacheAuthor(userProvider.get()); } else { return getAuthorize(userProvider.get()); } } private AuthorizeVO getCacheAuthor(UserInfo userInfo) { // 是否从缓冲里面获取权限 String cacheKey = cacheKeyUtil.getUserAuthorize() + userInfo.getUserId(); if (!redisUtil.exists(cacheKey)) { AuthorizeVO authorizeModel = getAuthorize(userInfo); if (authorizeModel.getModuleList().size() != 0) { redisUtil.insert(cacheKey, authorizeModel, 60); } return authorizeModel; } else { return JsonUtil.getJsonToBean(redisUtil.getString(cacheKey).toString(), AuthorizeVO.class); } } @Override public AuthorizeVO getAuthorize(UserInfo userInfo) { 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<>(); Boolean isAdmin = userInfo.getIsAdministrator(); // String majorOrgId = userService.getInfo(userInfo.getUserId()).getOrganizeId(); if (!isAdmin) { List<String> roleIds = new ArrayList<>(); roleService.getRoleIdsByCurrentUser(userInfo.getOrganizeId()).forEach(role -> { RoleEntity info = roleService.getInfo(role); //判断角色状态是否为有效,显示当前组织内角色的并集 if (info != null && info.getEnabledMark() == 1) { roleIds.add("'" + role + "'" ); } }); if (roleIds.size() != 0) { String roleIdsStr = String.join("," , roleIds); systemList = this.baseMapper.findSystem(roleIdsStr); moduleList = this.baseMapper.findModule(roleIdsStr); buttonList = this.baseMapper.findButton(roleIdsStr); columnList = this.baseMapper.findColumn(roleIdsStr); resourceList = this.baseMapper.findResource(roleIdsStr); formsList = this.baseMapper.findForms(roleIdsStr); } } else { moduleList = this.baseMapper.findModuleAdmin(1); buttonList = this.baseMapper.findButtonAdmin(1); columnList = this.baseMapper.findColumnAdmin(1); resourceList = this.baseMapper.findResourceAdmin(1); formsList = this.baseMapper.findFormsAdmin(1); systemList = JsonUtil.getJsonToList(systemService.getList(null, true), SystemBaeModel.class); } return new AuthorizeVO(moduleList, buttonList, columnList, resourceList, formsList, systemList); } @Override public void savePortalManage(String portalManageId, SaveAuthForm saveAuthForm) { final String AUTHORIZE_PORTAL_MANAGE = "portalManage"; final String AUTHORIZE_ROLE = "role"; String userId = UserProvider.getLoginUserId(); // 原始授权角色 List<AuthorizeEntity> list = new ArrayList<>(); for (int i = 0; i < saveAuthForm.getObjectId().length; i++) { AuthorizeEntity authorizeEntity = new AuthorizeEntity(); authorizeEntity.setId(RandomUtil.uuId()); authorizeEntity.setItemType(AUTHORIZE_PORTAL_MANAGE); authorizeEntity.setItemId(portalManageId); authorizeEntity.setObjectType(AUTHORIZE_ROLE); authorizeEntity.setObjectId(saveAuthForm.getObjectId()[i]); authorizeEntity.setSortCode((long) i); authorizeEntity.setCreatorTime(new Date()); authorizeEntity.setCreatorUserId(userId); list.add(authorizeEntity); } remove(new AuthorizePortalManagePrimary(null, portalManageId).getQuery()); saveBatch(list); } @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.get(); 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); // 删除角色相关信息 List<String> objectIdAll = objectList.stream().map(AuthorizeEntity::getObjectId).collect(Collectors.toList()); userService.delCurRoleUser(objectIdAll); if (!isBatch) { String ids = String.join("," , objectIdAll); JdbcUtil.delete(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); 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); } PrepSqlDTO dto = new PrepSqlDTO(sql, data).withConn(dataSourceUtils, null); JdbcUtil.creUpDe(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(String objectId) { QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(AuthorizeEntity::getObjectId, objectId); return this.list(queryWrapper); } @Override public Boolean existByObjId(String objectId) { QueryWrapper<AuthorizeEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(AuthorizeEntity::getObjectId, objectId); queryWrapper.lambda().eq(AuthorizeEntity::getItemType, "module" ); return this.count(queryWrapper) > 0; } @Override public List<SystemBaeModel> systemListByRoleIds(List<String> roleIds) { if (!userProvider.get().getIsAdministrator()) { StringJoiner joiner = new StringJoiner("," ); if (roleIds.size() < 1) { roleIds.add("" ); } roleIds.forEach(t -> joiner.add("'" + t + "'" )); List<SystemBaeModel> systemBaeModelList = this.baseMapper.findSystem(joiner.toString()); return systemBaeModelList == null ? new ArrayList<>(16) : systemBaeModelList; } return JsonUtil.getJsonToList(systemService.getList(null, true), SystemBaeModel.class); } @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); } /** * 获取条件过滤 * * @param conditionModel 数据权限条件模型 * @return */ @Override @DS("" ) public <T> QueryWrapper<T> getCondition(AuthorizeConditionModel conditionModel) { QueryWrapper<T> queryWhere = conditionModel.getObj(); String moduleId = conditionModel.getModuleId(); String tableName = conditionModel.getTableName(); UserInfo userInfo = userProvider.get(); AuthorizeVO model = this.getAuthorize(true); List<ResourceModel> resourceList = model.getResourceList().stream().filter(m -> m.getModuleId().equals(moduleId)).collect(Collectors.toList()); if (resourceList.size() == 0) { return null; } List<ResourceModel> resourceList1 = new ArrayList<>(); //拼接计数 int t = 1; for (ResourceModel item : resourceList) { if (item.getAllData() != null && item.getAllData() == 1) { t = 0; break; } List<ConditionModel> conditionModelList = JsonUtil.getJsonToList(item.getConditionJson(), ConditionModel.class); for (int i = 0; i < conditionModelList.size(); i++) { ConditionModel conditionItem = conditionModelList.get(i); for (int k = 0; k < conditionItem.getGroups().size(); k++) { ConditionModel.ConditionItemModel fieldItem = conditionItem.getGroups().get(k); String itemTable = fieldItem.getBindTable(); if (StringUtil.isNotEmpty(itemTable) && itemTable.equalsIgnoreCase(tableName)) { resourceList1.add(item); } } } } if (t == 1) { if (resourceList1.size() > 0) { queryWhere.and(tw -> { for (ResourceModel item : resourceList1) { List<ConditionModel> conditionModelList = JsonUtil.getJsonToList(item.getConditionJson(), ConditionModel.class); for (int i = 0; i < conditionModelList.size(); i++) { ConditionModel conditionItem = conditionModelList.get(i); for (int k = 0; k < conditionItem.getGroups().size(); k++) { ConditionModel.ConditionItemModel fieldItem = conditionItem.getGroups().get(k); String itemField = fieldItem.getField(); String itemValue = fieldItem.getValue(); String itemMethod = fieldItem.getOp(); Object value; if (AuthorizeConditionEnum.USER.getCondition().equals(itemValue)) { //当前用户 value = userInfo.getUserId(); //任意文本 当前用户 当前组织 包含为模糊查询 if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { itemMethod = SearchMethodEnum.Like.getMessage(); } if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { itemMethod = SearchMethodEnum.NotLike.getMessage(); } } else if (AuthorizeConditionEnum.USER_ACCOUNT.getCondition().equals(itemValue)) { //当前用户 value = userInfo.getUserAccount(); //任意文本 当前用户 当前组织 包含为模糊查询 if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { itemMethod = SearchMethodEnum.Like.getMessage(); } if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { itemMethod = SearchMethodEnum.NotLike.getMessage(); } } else if (AuthorizeConditionEnum.USER_NAME.getCondition().equals(itemValue)) { //当前用户 value = userInfo.getUserName(); //任意文本 当前用户 当前组织 包含为模糊查询 if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { itemMethod = SearchMethodEnum.Like.getMessage(); } if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { itemMethod = SearchMethodEnum.NotLike.getMessage(); } } else if (AuthorizeConditionEnum.ORGANIZE.getCondition().equals(itemValue)) { //当前组织 String orgId = userInfo.getOrganizeId(); if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) { orgId = userInfo.getDepartmentId(); } if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { itemMethod = SearchMethodEnum.Like.getMessage(); } if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { itemMethod = SearchMethodEnum.NotLike.getMessage(); } value = orgId; } else if (AuthorizeConditionEnum.ORGANIZEANDUNDER.getCondition().equals(itemValue)) { //组织及子组织 String orgId = userInfo.getOrganizeId(); if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) { orgId = userInfo.getDepartmentId(); } List<String> underOrganizations = organizeService.getUnderOrganizations(orgId); underOrganizations.add(orgId); value = underOrganizations; } else if (AuthorizeConditionEnum.USERANDUNDER.getCondition().equals(itemValue)) { //用户及用户下属 List<String> idsList = new ArrayList<>(); if (CollectionUtils.isEmpty(userInfo.getSubordinateIds())) { idsList = userInfo.getSubordinateIds(); } idsList.add(userInfo.getUserId()); value = idsList; } else if (AuthorizeConditionEnum.USER_ACC_AND_UNDER.getCondition().equals(itemValue)) { //用户及用户下属 List<String> accountList = new ArrayList<>(); if (CollectionUtils.isEmpty(userInfo.getSubordinateIds())) { List<String> subordinateIds = userInfo.getSubordinateIds(); List<UserEntity> userEntities = userService.lambdaQuery().in(UserEntity::getId, subordinateIds).list(); List<String> accounts = userEntities.stream().map(UserEntity::getAccount).collect(Collectors.toList()); accountList.addAll(accounts); } accountList.add(userInfo.getUserAccount()); value = accountList; } else if (AuthorizeConditionEnum.USER_NAME_AND_UNDER.getCondition().equals(itemValue)) { //用户及用户下属 List<String> nameList = new ArrayList<>(); if (CollectionUtils.isEmpty(userInfo.getSubordinateIds())) { List<String> subordinateIds = userInfo.getSubordinateIds(); List<UserEntity> userEntities = userService.lambdaQuery().in(UserEntity::getId, subordinateIds).list(); List<String> realNames = userEntities.stream().map(UserEntity::getRealName).collect(Collectors.toList()); nameList.addAll(realNames); } nameList.add(userInfo.getUserName()); value = nameList; } else if (AuthorizeConditionEnum.BRANCHMANAGEORG.getCondition().equals(itemValue)) { //分管组织 List<OrganizeAdministratorEntity> organizeAdministratorEntity = organizeAdminIsTratorService.getListByUserID(userInfo.getUserId()); //子 List<OrganizeAdministratorEntity> organizeAdministratorEntity1 = new ArrayList<>(organizeAdministratorEntity); //父 List<OrganizeAdministratorEntity> organizeAdministratorEntity2 = new ArrayList<>(organizeAdministratorEntity); List<String> allIdList = new ArrayList<>(); //子 List<String> childList = organizeAdministratorEntity1.stream().filter(orgAdmin -> orgAdmin.getSubLayerSelect() == 1).map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); //父 List<String> fathetList = organizeAdministratorEntity2.stream().filter(orgAdmin -> orgAdmin.getThisLayerSelect() == 1).map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); for (String org : childList) { List<String> underOrganizations = organizeService.getUnderOrganizations(org); if (underOrganizations.size() > 0) { allIdList.addAll(underOrganizations); } } if (fathetList.size() > 0) { allIdList.addAll(fathetList); } //空集合处理 if (allIdList.size() == 0) { allIdList.add("jnpfNullList" ); } value = allIdList; } else if (AuthorizeConditionEnum.BRANCHMANAGEORGANIZEUNDER.getCondition().equals(itemValue)) { //分管组织及子组织 List<OrganizeAdministratorEntity> organizeAdministratorEntity = organizeAdminIsTratorService.getListByUserID(userInfo.getUserId()); List<OrganizeAdministratorEntity> organizeAdministratorEntity1 = new ArrayList<>(organizeAdministratorEntity); List<OrganizeAdministratorEntity> organizeAdministratorEntity2 = new ArrayList<>(organizeAdministratorEntity); List<String> allIdList = new ArrayList<>(); //需要子集 List<String> childList = new ArrayList<>(); List<String> thisList = organizeAdministratorEntity1.stream().filter(orgAdmin -> orgAdmin.getThisLayerSelect() == 1) .map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); List<String> subList = organizeAdministratorEntity2.stream().filter(orgAdmin -> orgAdmin.getSubLayerSelect() == 1) .map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); if (thisList.size() > 0) { allIdList.addAll(thisList); childList.addAll(thisList); } if (subList.size() > 0) { childList.addAll(subList); } for (String orgID : childList) { List<String> underOrganizations = organizeService.getUnderOrganizations(orgID); if (underOrganizations.size() > 0) { allIdList.addAll(underOrganizations); } } if (allIdList.size() == 0) { allIdList.add("jnpfNullList" ); } value = allIdList; } else {//任意文本 value = itemValue; if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { itemMethod = SearchMethodEnum.Like.getMessage(); } if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { itemMethod = SearchMethodEnum.NotLike.getMessage(); } } if ("and".equalsIgnoreCase(conditionItem.getLogic())) { if (itemMethod.equals(SearchMethodEnum.Equal.getMessage())) { tw.eq(itemField, value); } else if (itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { tw.ne(itemField, value); } else if (itemMethod.equals(SearchMethodEnum.LessThan.getMessage())) { tw.lt(itemField, value); } else if (itemMethod.equals(SearchMethodEnum.LessThanOrEqual.getMessage())) { tw.le(itemField, value); } else if (itemMethod.equals(SearchMethodEnum.GreaterThan.getMessage())) { tw.gt(itemField, value); } else if (itemMethod.equals(SearchMethodEnum.GreaterThanOrEqual.getMessage())) { tw.ge(itemField, value); } else if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { tw.in(itemField, (List) value); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { tw.notIn(itemField, (List) value); } else if (itemMethod.equals(SearchMethodEnum.Like.getMessage())) { tw.like(itemField, value); } else if (itemMethod.equals(SearchMethodEnum.NotLike.getMessage())) { tw.notLike(itemField, value); } } else { if (itemMethod.equals(SearchMethodEnum.Equal.getMessage())) { tw.or( qw -> qw.eq(itemField, value) ); } else if (itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { tw.or( qw -> qw.ne(itemField, value) ); } else if (itemMethod.equals(SearchMethodEnum.LessThan.getMessage())) { tw.or( qw -> qw.lt(itemField, value) ); } else if (itemMethod.equals(SearchMethodEnum.LessThanOrEqual.getMessage())) { tw.or( qw -> qw.le(itemField, value) ); } else if (itemMethod.equals(SearchMethodEnum.GreaterThan.getMessage())) { tw.or( qw -> qw.gt(itemField, value) ); } else if (itemMethod.equals(SearchMethodEnum.GreaterThanOrEqual.getMessage())) { tw.or( qw -> qw.ge(itemField, value) ); } else if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { tw.or( qw -> qw.in(itemField, (List) value) ); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { tw.or( qw -> qw.notIn(itemField, (List) value) ); } else if (itemMethod.equals(SearchMethodEnum.Like.getMessage())) { tw.or( qw -> qw.like(itemField, value) ); } else if (itemMethod.equals(SearchMethodEnum.NotLike.getMessage())) { tw.or( qw -> qw.notLike(itemField, value) ); } } } } } }); } } return queryWhere; } /** * 获取条件过滤 * * @param userInfo 用户信息 * @param moduleId 功能模块Id * @param tableName 主表名 * @return 是否分配方案 */ @Override @DS("" ) public boolean getConditionSql(UserInfo userInfo, String moduleId, String tableName, QueryExpressionDSL<SelectModel>.QueryExpressionWhereBuilder from, List<OnlineDynamicSqlModel> sqlModelList) { AuthorizeVO model = this.getAuthorize(true); List<ResourceModel> resourceList = model.getResourceList().stream().filter(m -> m.getModuleId().equals(moduleId)).collect(Collectors.toList()); //未分配权限方案 if (resourceList.size() == 0) { return false; } //先遍历一次 查找其中有没有全部方案 long count = resourceList.stream().filter(item -> "jnpf_alldata".equals(item.getEnCode())).count(); if (count > 0) { return true; } //方案 for (ResourceModel item : resourceList) { List<ConditionModel> conditionModelList = JsonUtil.getJsonToList(item.getConditionJson(), ConditionModel.class); //分组 List<AndOrCriteriaGroup> groupList = new ArrayList<>(); SqlColumn<Object> firstColumn = null; VisitableCondition firstCondition = null; for (int i = 0; i < conditionModelList.size(); i++) { ConditionModel conditionItem = conditionModelList.get(i); //条件 for (int k = 0; k < conditionItem.getGroups().size(); k++) { ConditionModel.ConditionItemModel fieldItem = conditionItem.getGroups().get(k); String itemField = fieldItem.getField(); if (tableName != null && !tableName.equals(fieldItem.getBindTable())) { continue; } OnlineDynamicSqlModel onlineDynamicSqlModel = sqlModelList.stream().filter(sql -> sql.getTableName().equals(fieldItem.getBindTable())).findFirst().orElse(null); SqlTable sqlTable = onlineDynamicSqlModel.getSqlTable(); String itemValue = fieldItem.getValue(); String itemMethod = fieldItem.getOp(); SqlColumn<Object> column = sqlTable.column(itemField); VisitableCondition condition = null; //当前用户 if (AuthorizeConditionEnum.USER.getCondition().equals(itemValue)) { if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { condition = SqlBuilder.isNotLike(userInfo.getUserId()); //不过滤空 groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else { condition = SqlBuilder.isLike(userInfo.getUserId()); } } /* 当前用户账号 */ else if (AuthorizeConditionEnum.USER_ACCOUNT.getCondition().equals(itemValue)) { if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { condition = SqlBuilder.isNotLike(userInfo.getUserAccount()); //不过滤空 groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else { condition = SqlBuilder.isLike(userInfo.getUserAccount()); } } /* 当前用户姓名 */ else if (AuthorizeConditionEnum.USER_NAME.getCondition().equals(itemValue)) { if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { condition = SqlBuilder.isNotLike(userInfo.getUserName()); //不过滤空 groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else { condition = SqlBuilder.isLike(userInfo.getUserName()); } } //当前组织 else if (AuthorizeConditionEnum.ORGANIZE.getCondition().equals(itemValue)) { String orgId = userInfo.getOrganizeId(); if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) { orgId = userInfo.getDepartmentId(); } if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else if (itemMethod.equals(SearchMethodEnum.NotEqual.getMessage()) || itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())) { // condition = SqlBuilder.isNotEqualTo(orgId); orgId = "%" + orgId + "%" ; condition = SqlBuilder.isNotLike(orgId); //不过滤空 groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else { // condition = SqlBuilder.isEqualTo(orgId); orgId = "%" + orgId + "%" ; condition = SqlBuilder.isLike(orgId); } } //当前组织及子组织 else if (AuthorizeConditionEnum.ORGANIZEANDUNDER.getCondition().equals(itemValue)) { String orgId = userInfo.getOrganizeId(); if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) { orgId = userInfo.getDepartmentId(); } //获取子组织 List<String> underOrganizations = organizeService.getUnderOrganizations(orgId); underOrganizations.add(orgId); if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { // condition = SqlBuilder.isNotIn(underOrganizations); if (underOrganizations.size() > 1) { condition = SqlBuilder.isNotLike("%" + underOrganizations.get(0) + "%" ); for (int n = 1; n < underOrganizations.size(); n++) { groupList.add(SqlBuilder.and(column, SqlBuilder.isNotLike("%" + underOrganizations.get(n) + "%" ))); } } else { condition =SqlBuilder.isNotLike("%" + underOrganizations.get(0) + "%" ); } //不过滤空 groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else { // condition = SqlBuilder.isIn(underOrganizations); if (underOrganizations.size() > 1) { condition =SqlBuilder.isLike("%" + underOrganizations.get(0) + "%" ); for (int n = 1; n < underOrganizations.size(); n++) { groupList.add(SqlBuilder.or(column, SqlBuilder.isLike("%" + underOrganizations.get(n) + "%" ))); } } else { condition =SqlBuilder.isLike("%" + underOrganizations.get(0) + "%" ); } } } //当前用户及下属 else if (AuthorizeConditionEnum.USERANDUNDER.getCondition().equals(itemValue)) { List<String> subOrganizeIds = new ArrayList<>(); if (CollectionUtils.isEmpty(userInfo.getSubordinateIds())) { subOrganizeIds = userInfo.getSubordinateIds(); } subOrganizeIds.add(userInfo.getUserId()); if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())){ condition = SqlBuilder.isNotIn(subOrganizeIds); groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else{ condition = SqlBuilder.isIn(subOrganizeIds); } } /* 当前用户及分组 */ else if (AuthorizeConditionEnum.USER_ACC_AND_UNDER.getCondition().equals(itemValue)) { List<String> uaauAccounts = new ArrayList<>(); if (CollectionUtils.isEmpty(userInfo.getSubordinateIds())) { List<String> subordinateIds = userInfo.getSubordinateIds(); List<UserEntity> userEntities = userService.lambdaQuery().eq(UserEntity::getId, subordinateIds).list(); List<String> accounts = userEntities.stream().map(UserEntity::getAccount).collect(Collectors.toList()); uaauAccounts.addAll(accounts); } uaauAccounts.add(userInfo.getUserAccount()); if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())){ condition = SqlBuilder.isNotIn(uaauAccounts); groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else{ condition = SqlBuilder.isIn(uaauAccounts); } } /* 当前用户及分组 */ else if (AuthorizeConditionEnum.USER_NAME_AND_UNDER.getCondition().equals(itemValue)) { List<String> uaauNames = new ArrayList<>(); if (CollectionUtils.isEmpty(userInfo.getSubordinateIds())) { List<String> subordinateIds = userInfo.getSubordinateIds(); List<UserEntity> userEntities = userService.lambdaQuery().eq(UserEntity::getId, subordinateIds).list(); List<String> names = userEntities.stream().map(UserEntity::getRealName).collect(Collectors.toList()); uaauNames.addAll(names); } uaauNames.add(userInfo.getUserName()); if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())){ condition = SqlBuilder.isNotIn(uaauNames); groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else{ condition = SqlBuilder.isIn(uaauNames); } } //分管组织 else if (AuthorizeConditionEnum.BRANCHMANAGEORG.getCondition().equals(itemValue)) { List<OrganizeAdministratorEntity> organizeAdministratorEntity = organizeAdminIsTratorService.getListByUserID(userInfo.getUserId()); //子 List<OrganizeAdministratorEntity> organizeAdministratorEntity1 = new ArrayList<>(organizeAdministratorEntity); //父 List<OrganizeAdministratorEntity> organizeAdministratorEntity2 = new ArrayList<>(organizeAdministratorEntity); List<String> allIdList = new ArrayList<>(); //子 List<String> childList = organizeAdministratorEntity1.stream().filter(orgAdmin -> orgAdmin.getSubLayerSelect() == 1).map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); //父 List<String> fathetList = organizeAdministratorEntity2.stream().filter(orgAdmin -> orgAdmin.getThisLayerSelect() == 1).map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); for (String org : childList) { List<String> underOrganizations = organizeService.getUnderOrganizations(org); if (underOrganizations.size() > 0) { allIdList.addAll(underOrganizations); } } if (fathetList.size() > 0) { allIdList.addAll(fathetList); } String ids = allIdList.stream().map(id -> "?" ).collect(Collectors.joining("," )); if(CollectionUtils.sizeIsEmpty(allIdList))return false; if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { // condition = SqlBuilder.isNotIn(allIdList); if (allIdList.size() > 1) { condition = SqlBuilder.isNotLike("%" + allIdList.get(0) + "%" ); for (int n = 1; n < allIdList.size(); n++) { groupList.add(SqlBuilder.and(column, SqlBuilder.isNotLike("%" + allIdList.get(n) + "%" ))); } } else { condition = SqlBuilder.isNotLike("%" + allIdList.get(0) + "%" ); } //不过滤空 groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else { // condition = SqlBuilder.isIn(allIdList); if (allIdList.size() > 1) { condition = SqlBuilder.isLike("%" + allIdList.get(0) + "%" ); for (int n = 1; n < allIdList.size(); n++) { groupList.add(SqlBuilder.or(column, SqlBuilder.isLike("%" + allIdList.get(n) + "%" ))); } } else { condition =SqlBuilder.isLike("%" + allIdList.get(0) + "%" ); } } } //分管组织及子组织 else if (AuthorizeConditionEnum.BRANCHMANAGEORGANIZEUNDER.getCondition().equals(itemValue)) { List<OrganizeAdministratorEntity> organizeAdministratorEntity = organizeAdminIsTratorService.getListByUserID(userInfo.getUserId()); List<OrganizeAdministratorEntity> organizeAdministratorEntity1 = new ArrayList<>(organizeAdministratorEntity); List<OrganizeAdministratorEntity> organizeAdministratorEntity2 = new ArrayList<>(organizeAdministratorEntity); List<String> allIdList = new ArrayList<>(); //需要子集 List<String> childList = new ArrayList<>(); List<String> thisList = organizeAdministratorEntity1.stream().filter(orgAdmin -> orgAdmin.getThisLayerSelect() == 1) .map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); List<String> subList = organizeAdministratorEntity2.stream().filter(orgAdmin -> orgAdmin.getSubLayerSelect() == 1) .map(orgAdmin -> orgAdmin.getOrganizeId()).collect(Collectors.toList()); if (thisList.size() > 0) { allIdList.addAll(thisList); childList.addAll(thisList); } if (subList.size() > 0) { childList.addAll(subList); } for (String orgID : childList) { List<String> underOrganizations = organizeService.getUnderOrganizations(orgID); if (underOrganizations.size() > 0) { allIdList.addAll(underOrganizations); } } if(CollectionUtils.sizeIsEmpty(allIdList))return false; List<String> orgAndSub = allIdList.stream().distinct().collect(Collectors.toList()); if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage()) || itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { // condition = SqlBuilder.isNotIn(orgAndSub); if (orgAndSub.size() > 1) { condition = SqlBuilder.isNotLike("%" + orgAndSub.get(0) + "%" ); for (int n = 1; n < orgAndSub.size(); n++) { groupList.add(SqlBuilder.and(column, SqlBuilder.isNotLike("%" + orgAndSub.get(n) + "%" ))); } } else { condition = SqlBuilder.isNotLike("%" + orgAndSub.get(0) + "%" ); } //不过滤空 groupList.add(SqlBuilder.or(column, SqlBuilder.isNull())); } else { // condition = SqlBuilder.isIn(orgAndSub); if (orgAndSub.size() > 1) { condition = SqlBuilder.isLike("%" + orgAndSub.get(0) + "%" ); for (int n = 1; n < orgAndSub.size(); n++) { groupList.add(SqlBuilder.or(column, SqlBuilder.isLike("%" + orgAndSub.get(n) + "%" ))); } } else { condition = SqlBuilder.isLike("%" + orgAndSub.get(0) + "%" ); } } } //任意文本 else { if (itemMethod.equals(SearchMethodEnum.Equal.getMessage())) { condition= SqlBuilder.isEqualTo(itemValue); } else if (itemMethod.equals(SearchMethodEnum.NotEqual.getMessage())) { condition= SqlBuilder.isNotEqualTo(itemValue); } else if (itemMethod.equals(SearchMethodEnum.LessThan.getMessage())) { condition= SqlBuilder.isLessThan(itemValue); } else if (itemMethod.equals(SearchMethodEnum.LessThanOrEqual.getMessage())) { condition= SqlBuilder.isLessThanOrEqualTo(itemValue); } else if (itemMethod.equals(SearchMethodEnum.GreaterThan.getMessage())) { condition= SqlBuilder.isGreaterThan(itemValue); } else if (itemMethod.equals(SearchMethodEnum.GreaterThanOrEqual.getMessage())) { condition= SqlBuilder.isGreaterThanOrEqualTo(itemValue); } else if (itemMethod.equals(SearchMethodEnum.IsNull.getMessage())) { condition= SqlBuilder.isNull(); } else if (itemMethod.equals(SearchMethodEnum.IsNotNull.getMessage())) { condition= SqlBuilder.isNotNull(); } else { condition = SqlBuilder.isEqualTo(itemValue); } if (itemMethod.equals(SearchMethodEnum.NotIncluded.getMessage())){ itemValue = "%" + itemValue + "%"; condition= SqlBuilder.isNotLike(itemValue); } if (itemMethod.equals(SearchMethodEnum.Included.getMessage())) { itemValue = "%" + itemValue + "%"; condition= SqlBuilder.isLike(itemValue); } } if(firstColumn == null){ firstColumn = column; firstCondition = condition; }else { if (conditionItem.getLogic().toLowerCase().equals("and")){ groupList.add(SqlBuilder.and(column, condition)); }else { groupList.add(SqlBuilder.or(column, condition)); } } } } if (firstColumn != null) { if (groupList.size() > 0) { from.and(firstColumn, firstCondition, groupList); } else { from.and(firstColumn, firstCondition); } } } return true; } @Override public List<SystemBaeModel> findSystem(List<String> roleIds) { if (!userProvider.get().getIsAdministrator()) { StringJoiner joiner = new StringJoiner("," ); if (roleIds.size() < 1) { roleIds.add("" ); } roleIds.forEach(t -> joiner.add("'" + t + "'" )); List<SystemBaeModel> systemBaeModelList = this.baseMapper.findSystem(joiner.toString()); return systemBaeModelList == null ? new ArrayList<>(16) : systemBaeModelList; } return JsonUtil.getJsonToList(systemService.getList(null, true), SystemBaeModel.class); } }