package com.casic.missiles.server; import cn.hutool.core.convert.Convert; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.system.model.Dept; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @RequiredArgsConstructor @Service public class CommonServer { private final AbstractDeptService abstractDeptService; private final AbstractPermissionContext permissionContext; @Cacheable(value = "deptNameCache", key = "#deptId") public String getDeptNamesByDeptId(Long deptId) { List<Long> deptIds = this.getParentListById(deptId); deptIds.add(deptId); QueryWrapper<Dept> queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", deptIds); queryWrapper.orderByAsc("pids"); List<Dept> deptList = abstractDeptService.list(queryWrapper); List<String> nameList = deptList.stream().filter(dept -> ObjectUtil.isNotEmpty(dept.getTips())).map(Dept::getFullName).collect(Collectors.toList()); String deptName = String.join("/", nameList); return deptName.indexOf("北京燃气集团/") == 0 ? deptName.replace("北京燃气集团/", "") : deptName; } // @Cacheable(value = "deptIdsCache") public String getDeptIds() { return getDeptIds(permissionContext.getAuthService().getLoginUser()); } public List<Long> getDeptIds(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 List<Long> deptIds = abstractDeptService.getIdsRecursionByPid(deptId, ""); deptIds.add(deptId); return deptIds; } return null; } public String getDeptIdStrs(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 List<Long> deptIds = abstractDeptService.getIdsRecursionByPid(deptId, ""); deptIds.add(deptId); return deptIds.stream().map(id -> Convert.toStr(id)).collect(Collectors.joining(",")); } return ""; } @Cacheable(value = "deptScopeIdsCache", key = "#authUser.getId()") public String getDeptIds(AuthUser authUser) { String scopeType = authUser.getScopeType(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scopeType)) { return authUser.getDataScope() .stream().map(id -> Convert.toStr(id)).collect(Collectors.joining(",")); } return ""; } //todo:账户加缓存 public String getDeptScopeIds(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 List<Long> deptIds = abstractDeptService.getIdsRecursionByPid(deptId, ""); deptIds.add(deptId); return deptIds.stream().map(id -> Convert.toStr(id)).collect(Collectors.joining(",")); } else { //获取登录权限 return getDeptIds(permissionContext.getAuthService().getLoginUser()); } } public List<Long> getParentListById(Serializable deptId) { if ((new Long(0L)).equals(deptId)) { return new ArrayList(); } else { Dept dept = (Dept) this.abstractDeptService.getById(deptId); if (null == dept) return new ArrayList(); return (List) CharSequenceUtil.split(dept.getPids(), ",").stream().filter(CharSequenceUtil::isNotEmpty).map((s) -> { return new Long(CharSequenceUtil.removeSuffix(CharSequenceUtil.removePrefix(s, "["), "]")); }).collect(Collectors.toList()); } } public Long getLoginUserId() { AuthUser user = permissionContext.getAuthService().getLoginUser(); return null != user ? user.getId() : null; } public AuthUser getLoginUser() { return permissionContext.getAuthService().getLoginUser(); } }