package jnpf.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 jnpf.base.entity.ModuleEntity; import jnpf.base.entity.SystemEntity; import jnpf.base.service.DbLinkService; import jnpf.base.service.ModuleService; import jnpf.base.service.SuperServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jnpf.base.Pagination; import jnpf.base.service.SystemService; import jnpf.config.ConfigValueUtil; import jnpf.constant.JnpfConst; import jnpf.constant.MsgCode; import jnpf.database.model.dto.PrepSqlDTO; import jnpf.database.sql.util.SqlFrameFastUtil; import jnpf.database.util.DataSourceUtil; import jnpf.constant.PermissionConst; import jnpf.database.util.DbTypeUtil; import jnpf.database.util.JdbcUtil; import jnpf.database.util.TenantDataSourceUtil; import jnpf.model.login.UserSystemVO; import jnpf.model.tenant.TenantAuthorizeModel; import jnpf.permission.entity.OrganizeAdministratorEntity; import jnpf.permission.entity.OrganizeEntity; import jnpf.permission.entity.UserEntity; import jnpf.permission.entity.UserRelationEntity; import jnpf.permission.mapper.OrganizeAdminIsTratorMapper; import jnpf.permission.model.organizeadministrator.OrganizeAdministratorListVo; import jnpf.permission.model.organizeadministrator.OrganizeAdministratorModel; import jnpf.permission.service.*; import jnpf.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 JNPF开发平台组 * @version V3.1.0 * @copyright 引迈信息技术有限公司 * @date 2019年9月26日 上午9:18 */ @Service public class OrganizeAdministratorServiceImpl extends SuperServiceImpl 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 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 getOrganizeAdministratorEntity(String userId) { return getOrganizeAdministratorEntity(userId, PermissionConst.ORGANIZE, false); } @Override public List getOrganizeAdministratorEntity(String userId, String type, boolean filterMain) { List list = new ArrayList<>(); UserEntity entity1 = userService.getInfo(userId); List 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 collect = new ArrayList<>(); List moduleAuthorize = new ArrayList<>(); List 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 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 getOrganizeAdministratorEntity(String userId, String type) { // 组织权限 QueryWrapper 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 list = this.list(queryWrapper); return list; } @Override @Transactional public void create(OrganizeAdministratorEntity entity) { // 判断是新建还是删除 QueryWrapper 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 list, String userId) { // QueryWrapper queryWrapper = new QueryWrapper<>(); // queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId,userId); // queryWrapper.lambda().select(OrganizeAdministratorEntity::getCreatorTime); // IPage 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 queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId); Page page = new Page<>(1, 1); IPage 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 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)); } 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 queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId); boolean remove = this.remove(queryWrapper); userService.delCurUser(MsgCode.PS010.get(), ImmutableList.of(userId)); userService.updateStand(ImmutableList.of(userId), 2); return remove; } @Override public List getInfoByUserId(String userId) { QueryWrapper 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 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 queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(OrganizeAdministratorEntity::getUserId, userId); List list = this.list(queryWrapper); return list.size() > 0 ? list.get(0).getManagerGroup() : null; } @Override public OrganizeAdministratorEntity getInfoByOrganizeId(String organizeId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(OrganizeAdministratorEntity::getOrganizeId, organizeId); return this.getOne(queryWrapper); } @Override public List getListByOrganizeId(List organizeIdList) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().in(OrganizeAdministratorEntity::getOrganizeId, organizeIdList); return this.list(queryWrapper); } @Override public List getList(Pagination pagination) { List list = getOrganizeAdministratorEntity(UserProvider.getLoginUserId(), PermissionConst.ORGANIZE, false); Map orgIdNameMaps = organizeService.getInfoList(); List organizeIdList; Map orgMaps = organizeService.getOrgMaps(null, true, null); // 存放所有的有资格管理的组织id if (UserProvider.getUser().getIsAdministrator()) { organizeIdList = new ArrayList<>(orgMaps.keySet()); } else { Set 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 underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), true); orgId.addAll(underOrganizations); } } }); organizeIdList = new ArrayList<>(orgId); } if (organizeIdList.size() < 1) { organizeIdList.add(""); } List jsonToList = new ArrayList<>(); List> organizeList = Lists.partition(organizeIdList, 1000); List userId = new ArrayList<>(); for (List 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 userWrapper = new QueryWrapper<>(); userWrapper.lambda().select(UserEntity::getId, UserEntity::getAccount, UserEntity::getRealName, UserEntity::getGender, UserEntity::getMobilePhone); List> userIdList = Lists.partition(userId, 1000); userWrapper.lambda().and(t -> { for (List id : userIdList) { t.in(UserEntity::getId, id).or(); } }); 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 userList = userService.list(userWrapper); if (userList.isEmpty()) { return jsonToList; } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().isNotNull(OrganizeAdministratorEntity::getManagerGroup); queryWrapper.lambda().select(OrganizeAdministratorEntity::getUserId, OrganizeAdministratorEntity::getCreatorTime, OrganizeAdministratorEntity::getManagerGroup); List> userIds = Lists.partition(userList.stream().map(UserEntity::getId).collect(Collectors.toList()), 1000); queryWrapper.lambda().and(t -> { for (List id : userIds) { t.in(OrganizeAdministratorEntity::getUserId, id).or(); } }); queryWrapper.lambda().orderByDesc(OrganizeAdministratorEntity::getCreatorTime); List entityList = this.list(queryWrapper); List 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 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 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 getOrganizeUserList(String type) { if (UserProvider.getUser().getIsAdministrator()) { return organizeService.getList(true).stream().map(OrganizeEntity::getId).collect(Collectors.toList()); } List list = getOrganizeAdministratorEntity(UserProvider.getLoginUserId()); Set 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 underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), true); orgId.addAll(underOrganizations); } } }); List orgIds = new ArrayList<>(orgId); if (JnpfConst.CURRENT_ORG_SUB.equals(type)) { return orgIds; } List userList = userRelationService.getListByObjectIdAll(orgIds).stream().map(UserRelationEntity::getUserId).collect(Collectors.toList()); return userList; } @Override public List getListByAuthorize() { // 通过权限转树 List listss = getOrganizeAdministratorEntity(UserProvider.getLoginUserId()); Set 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 underOrganizations = organizeService.getUnderOrganizations(t.getOrganizeId(), true); orgIds.addAll(underOrganizations); } } }); List list1 = new ArrayList<>(orgIds); // 得到所有有权限的组织 List organizeName = organizeService.getOrganizeName(list1); return organizeName; } @Override public OrganizeAdministratorModel getOrganizeAdministratorList() { // 通过权限转树 List list = getOrganizeAdministratorEntity(UserProvider.getUser().getUserId()); List addList = new ArrayList<>(); List editList = new ArrayList<>(); List deleteList = new ArrayList<>(); List 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 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; } }