package jnpf.permission.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jnpf.base.Pagination; import jnpf.base.SysConfigApi; import jnpf.base.service.SuperServiceImpl; import jnpf.constant.CodeConst; import jnpf.constant.PermissionConst; import jnpf.emnus.SysParamEnum; import jnpf.model.BaseSystemInfo; import jnpf.permission.entity.OrganizeEntity; import jnpf.permission.entity.PositionEntity; import jnpf.permission.entity.UserRelationEntity; import jnpf.permission.mapper.*; import jnpf.permission.model.permission.PermissionModel; import jnpf.permission.model.position.PosConModel; import jnpf.permission.model.position.PositionListVO; import jnpf.permission.model.position.PositionPagination; import jnpf.permission.service.CodeNumService; import jnpf.permission.service.PositionService; import jnpf.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** * 岗位信息 * * @author JNPF开发平台组 * @version V3.1.0 * @copyright 引迈信息技术有限公司 * @date 2019年9月26日 上午9:18 */ @Service public class PositionServiceImpl extends SuperServiceImpl implements PositionService { @Autowired private RedisUtil redisUtil; @Autowired private CacheKeyUtil cacheKeyUtil; @Autowired private SysConfigApi sysconfigApi; @Autowired private CodeNumService codeNumService; @Autowired private AuthorizeMapper authorizeMapper; @Autowired private UserRelationMapper userRelationMapper; @Autowired private RoleRelationMapper roleRelationMapper; @Autowired private OrganizeMapper organizeMapper; @Override public List getList(PositionPagination pagination) { return this.getBaseMapper().getList(pagination); } @Override public boolean isExistByFullName(PositionEntity entity, boolean isFilter) { return this.getBaseMapper().isExistByFullName(entity, isFilter); } @Override public Boolean isExistByEnCode(String enCode, String id) { return this.getBaseMapper().isExistByEnCode(enCode, id); } @Override public void create(PositionEntity entity) { if (StringUtil.isEmpty(entity.getEnCode())) { entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.GW), code -> this.isExistByEnCode(code, null))); } this.baseMapper.create(entity); redisUtil.remove(cacheKeyUtil.getPositionList()); redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_POS); } @Override public boolean update(String id, PositionEntity entity) { if (StringUtil.isEmpty(entity.getEnCode())) { entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.GW), code -> this.isExistByEnCode(code, id))); } if (Objects.equals(entity.getIsCondition(), 0)) { entity.setConditionJson(""); } redisUtil.remove(cacheKeyUtil.getPositionList()); redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_POS); return this.baseMapper.update(id, entity); } @Override public PositionEntity getInfo(String id) { return this.baseMapper.selectById(id); } @Override @DSTransactional public void delete(PositionEntity entity) { this.removeById(entity.getId()); userRelationMapper.deleteAllByObjId(entity.getId()); authorizeMapper.deleteByObjIds(Arrays.asList(entity.getId())); roleRelationMapper.deleteAllByObjId(Arrays.asList(entity.getId())); redisUtil.remove(cacheKeyUtil.getPositionList()); redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_POS); } @Override public void deleteByOrgId(String orgId) { this.baseMapper.deleteByOrgId(orgId); } @Override public boolean checkLevel(PositionEntity entity) { BaseSystemInfo sysInfo = sysconfigApi.getSysInfo(UserProvider.getUser().getTenantId()); Integer positionLevel = sysInfo.getPositionLevel(); PositionEntity pEntity = this.getInfo(entity.getParentId()); Integer thisLevel = 1; if (pEntity != null) { String[] parents = pEntity.getPositionIdTree().split(","); //创建修改不同判断 if (StringUtil.isEmpty(entity.getId())) { thisLevel += parents.length; } else { Integer childMax = 1; List allChild = this.getAllChild(entity.getId()); for (PositionEntity item : allChild) { String[] trees = item.getPositionIdTree().split(entity.getId() + ","); if (trees.length >= 2) { String[] childs = trees[1].split(","); Integer length = childs.length + 1; if (length > childMax) { childMax = length; } } } thisLevel = parents.length + childMax; } } if (thisLevel <= positionLevel) { return true; } return false; } @Override public List getParentList(String parentId) { return this.baseMapper.getParentList(parentId); } @Override public List getByParentId(String parentId) { return this.baseMapper.getByParentId(parentId); } @Override public List getListByOrgIds(List orgIds) { return this.baseMapper.getListByOrgIds(orgIds); } @Override public List getListByOrgIdOneLevel(List orgIds) { return this.baseMapper.getListByOrgIdOneLevel(orgIds); } @Override public List getList(boolean filterEnabledMark) { return this.baseMapper.getList(filterEnabledMark); } @Override public List getAllChild(String id) { return this.baseMapper.getAllChild(id); } @Override public List getPosList(List idList) { return this.baseMapper.getPosList(idList); } @Override public List getListByIds(List idList) { return this.baseMapper.getListByIds(idList); } @Override public List getListByIds(Pagination pagination, List idList) { return this.baseMapper.getListByIds(pagination, idList); } @Override public Map getPosMap() { return this.baseMapper.getPosMap(); } @Override public Map getPosFullNameMap() { if (redisUtil.exists(cacheKeyUtil.getPositionList())) { return new HashMap<>(redisUtil.getMap(cacheKeyUtil.getPositionList())); } else { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().select(PositionEntity::getId, PositionEntity::getFullName, PositionEntity::getOrganizeId); List list = this.list(queryWrapper); Map infoMap = new HashMap<>(list.size()); Map allOrgsTreeName = organizeMapper.getAllOrgsTreeName(); for (PositionEntity t : list) { String fullName = t.getFullName(); if (Objects.nonNull(allOrgsTreeName.get(t.getOrganizeId()))) { fullName = allOrgsTreeName.get(t.getOrganizeId()) + "/" + t.getFullName(); } infoMap.put(t.getId(), fullName); } redisUtil.insert(cacheKeyUtil.getPositionList(), infoMap); return infoMap; } } @Override public Map getPosEncodeAndName() { return getPosEncodeAndName(false); } @Override public Map getPosEncodeAndName(boolean enabledMark) { return this.baseMapper.getPosEncodeAndName(enabledMark); } @Override @DSTransactional public boolean first(String id) { return this.baseMapper.first(id); } @Override @DSTransactional public boolean next(String id) { return this.baseMapper.next(id); } @Override public List getPositionName(List id, boolean filterEnabledMark) { return this.baseMapper.getPositionName(id, filterEnabledMark); } @Override public List getPositionName(List id, String keyword) { return this.baseMapper.getPositionName(id, keyword); } @Override public List getListByOrganizeId(List organizeIds, boolean enabledMark) { return this.baseMapper.getPositionName(organizeIds, enabledMark); } @Override public List getListByOrgIdAndUserId(String organizeId, String userId) { // 用户绑定的所有岗位 List positionIds = userRelationMapper.getListByUserIdAndObjType(userId, PermissionConst.POSITION).stream() .map(UserRelationEntity::getObjectId).collect(Collectors.toList()); if (!positionIds.isEmpty()) { List positionEntities = this.listByIds(positionIds); return positionEntities.stream().filter(p -> p.getOrganizeId().equals(organizeId)).collect(Collectors.toList()); } else { return new ArrayList<>(); } } @Override public PositionEntity getByFullName(String fullName) { return this.baseMapper.getByFullName(fullName); } @Override public List getListByFullName(String fullName, String enCode) { return this.baseMapper.getListByFullName(fullName, enCode); } @Override public List getListByOrganizeIds(List organizeIds, boolean needCode, boolean enabledMark) { List permissionList = new LinkedList<>(); for (String organizeId : organizeIds) { OrganizeEntity info = organizeMapper.getInfo(organizeId); if (info != null) { PermissionModel parentModel = new PermissionModel(); List list = this.getListByOrganizeId(Collections.singletonList(organizeId), enabledMark); list.forEach(t -> { if (needCode) { t.setFullName(t.getFullName() + "/" + t.getEnCode()); } }); List 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; } @Override public List selectedList(List idStrList) { if (CollectionUtil.isEmpty(idStrList)) return Collections.EMPTY_LIST; List idList = new ArrayList<>(); for (String idStr : idStrList) { String[] split = idStr.split("--"); idList.add(split[0]); } Map allOrgsTreeName = organizeMapper.getAllOrgsTreeName(); List listByIds = this.getListByIds(idList); List listVo = new ArrayList<>(); for (String idStr : idStrList) { String[] split = idStr.split("--"); String id = split[0]; String type = split.length > 1 ? split[1] : ""; SysParamEnum sysParamEnum = SysParamEnum.get(type); String suffix = sysParamEnum != null ? sysParamEnum.getSuffix() : ""; PositionEntity positionEntity = listByIds.stream().filter(t -> t.getId().equals(id)).findFirst().orElse(null); if (positionEntity != null) { PositionListVO vo = JsonUtil.getJsonToBean(positionEntity, PositionListVO.class); vo.setId(idStr); vo.setOrgNameTree(allOrgsTreeName.get(positionEntity.getOrganizeId()) + "/" + positionEntity.getFullName() + suffix); listVo.add(vo); } } return listVo; } @Override public List positionCondition(List idStrList) { return this.baseMapper.positionCondition(idStrList); } @Override public List getListByDutyUser(String userId) { return this.baseMapper.getListByDutyUser(userId); } @Override public List getListByParentIds(List idList) { return this.baseMapper.getListByParentIds(idList); } @Override public void linkUpdate(String id, PosConModel posConModel) { this.baseMapper.linkUpdate(id, posConModel); } @Override public String getNameByIdStr(String idStr) { StringJoiner sj = new StringJoiner(","); if (StringUtil.isNotEmpty(idStr)) { try { List ids = JsonUtil.getJsonToList(idStr, String.class); List listByIds = this.getListByIds(ids); for (PositionEntity item : listByIds) { OrganizeEntity orgInfo = organizeMapper.getInfo(item.getOrganizeId()); sj.add(orgInfo.getOrgNameTree() + "/" + item.getFullName()); } } catch (Exception e) { e.printStackTrace(); } } return sj.toString(); } @Override public List getProgeny(List idList, Integer enabledMark) { return this.baseMapper.getProgeny(idList, enabledMark); } }