fourcal/src/main/java/cn/palmte/work/service/SysRoleService.java

333 lines
12 KiB
Java
Raw Normal View History

2021-10-28 08:09:50 +00:00
package cn.palmte.work.service;
import cn.palmte.work.model.*;
import cn.palmte.work.pojo.PermissionNode;
import cn.palmte.work.pojo.PermissionTree;
import cn.palmte.work.utils.InterfaceUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.jfunc.common.db.QueryHelper;
import top.jfunc.common.db.bean.Page;
import top.jfunc.common.db.utils.Pagination;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Service
public class SysRoleService {
@Autowired
private SysRoleRepository sysRoleRepository;
@Autowired
private SysPermissionRepository sysPermissionRepository;
@Autowired
private SysRolePermissionRepository sysRolePermissionRepository;
@Autowired
private SysRoleRepositoryImpl sysRoleRepositoryImpl;
@Autowired
private SysRolePermissionService sysRolePermissionService;
@Autowired
private SysUserRoleRepository sysUserRoleRepository;
@Autowired
Pagination pagination;
private static final Logger logger = LoggerFactory.getLogger(SysRoleService.class);
private static final String SELECTED_PERMISSION_PREFIX = "rptList$ctl$cblActionType$";
/**
*
*/
public Page<SysRole> getAllRoleListByPage(ConcurrentHashMap<String, String> searchInfo, String pageNumber, int roleType){
return sysRoleRepositoryImpl.getAllRoleListByPage(searchInfo,pageNumber,roleType);
}
public Page<SysRole> list(ConcurrentHashMap<String, String> searchInfo, int pageNumber, int pageSize){
QueryHelper queryHelper = new QueryHelper("*", " FROM sys_role");
queryHelper.addCondition("is_deleted=0");
queryHelper.addCondition(searchInfo.containsKey("name"), "name like ?", "%" +
searchInfo.get("name") + "%");
queryHelper.addOrderProperty("created_time",false);
return pagination.paginate(queryHelper.getSql(), SysRole.class, pageNumber, pageSize);
}
public List<SysRole> getAllRole(){
return sysRoleRepository.findAll();
}
public List<SysRole> getAllEnableSysRole(){
return sysRoleRepository.getAllEnableSysRole();
}
/**
*
*/
public List<SysRole> geBelowRoleTypes(int roleType){
return sysRoleRepositoryImpl.geBelowRoleTypes(roleType);
}
public List<SysRole> getBelowOneRoleTypes(int roleType){
return sysRoleRepositoryImpl.getBelowTypes(roleType);
}
public SysRole fingSysRoleById(int id){
return sysRoleRepository.findSysRoleById(id);
}
/**
* ()
* @param roleId id
* @return
*/
public PermissionNode getPermissionNodeTree(int roleId){
//获取当前登录人角色所拥有的权限列表
List<SysPermission> permList=sysPermissionRepository.findPermissionByRoleId(roleId);
List<Integer> selectedPermIdList = new ArrayList<Integer>();
PermissionNode root = PermissionTree.parsePermsNodeTree(permList, selectedPermIdList);
return root;
}
/**
* ()
* @param adminRoleId id
* @param roleId id
* @return
*/
public PermissionNode getPermissionNodeTreeForEdit(int adminRoleId, int roleId){
List<SysPermission> permList=sysPermissionRepository.findPermissionByRoleId(adminRoleId);
//已分配的权限id
List<Integer> selectedPermIdList =sysRolePermissionService.getPermissionIds(roleId);
PermissionNode root = PermissionTree.parsePermsNodeTree(permList, selectedPermIdList);
return root;
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void addOrUpdatePermission(Map<String, Object> reqMap,int roleId){
int updateRoleId=0;
if(-1 == roleId){
// 新增角色
updateRoleId=addToRoleTable(reqMap);
} else{
// 修改角色
updateRoleId=updateToRoleTable(reqMap, roleId);
// 删除原"角色-权限"映射关系
sysRolePermissionRepository.deleteSysRolePermissionByRoleId(roleId);
}
// 获取权限选中PermissionID写入tcm_sys_role_permission
saveRolePermission(reqMap,updateRoleId);
}
private int addToRoleTable(Map<String, Object> reqMap){
SysRole role=new SysRole();
role.setName(reqMap.get("roleName")!=null?reqMap.get("roleName").toString():null);
//role.setLevel(reqMap.containsKey("roleLevel")?Integer.parseInt(reqMap.get("roleLevel").toString()):1);//第一个版本 默认都是省级
role.setIsEnable(Integer.parseInt(reqMap.get("isActive").toString()));
//role.setType(Integer.parseInt(reqMap.get("roleType").toString()));
role.setCreatedBy(InterfaceUtil.getAdminId());//当前登录人
role.setCreatedTime(new Date());
role.setLastUpdatedBy(InterfaceUtil.getAdminId());
role.setLastUpdatedTime(new Date());
role.setType(1);
role=sysRoleRepository.saveAndFlush(role);
return role.getId();
}
/**
* tcm_sys_role_permission
*/
private void saveRolePermission(Map<String, Object> reqMap,int roleId){
/* 从数据库获取所有权限ID-ParentID映射集合 */
Map<String, String> allPermissionMap = getAllPermissionMap();
/* 从参数中获取选中权限ID列表 */
List<String> selectPermissinoIdList = getSelectPermissionIdFromParams(reqMap, allPermissionMap);
/* 保存选中权限ID---->sys_role_permission表 */
saveSelectedPermissionIdList(roleId, selectPermissinoIdList);
}
/**
* @Title: ID-ParentID
* @return Map<String,String>
*/
private Map<String, String> getAllPermissionMap(){
List<SysPermission> allPermission = sysPermissionRepository.findAllPermission();
Map<String, String> permIdMaps = new HashMap<String, String>();
for(SysPermission perm : allPermission){
permIdMaps.put(String.valueOf(perm.getId()), String.valueOf(perm.getParentId()));
}
return permIdMaps;
}
/**
* @Title: permission
* @param allPermissionIDMap DBID
* @return Map<String,String> PermissionID
*/
private List<String> getSelectPermissionIdFromParams(Map<String, Object> paraMap,
Map<String, String> allPermissionIDMap){
List<String> selectPermissinoIDList = new ArrayList<String>();
for(Map.Entry<String, Object> entry : paraMap.entrySet()){
if(entry.getKey().startsWith(SELECTED_PERMISSION_PREFIX)){
Object value = entry.getValue();
putParentPermissionIntoMap(allPermissionIDMap, selectPermissinoIDList, value.toString());
}
}
return selectPermissinoIDList;
}
/**
* @Title: ID---->tcm_sys_role_permission
* @param roleId ID
* @param selectPermissinoIdList ID
*
*/
private void saveSelectedPermissionIdList(int roleId, List<String> selectPermissinoIdList){
for(String pId : selectPermissinoIdList){
save2RolePermission(roleId, pId);
}
}
private void save2RolePermission(int roleId, String permissionId){
SysRolePermission rolePerm = new SysRolePermission();
rolePerm.setRoleId(roleId);
rolePerm.setPermissionId(Integer.parseInt(permissionId));
rolePerm.setCreatedBy(InterfaceUtil.getAdminId());
rolePerm.setCreatedTime(new Date());
rolePerm.setLastUpdatedBy(InterfaceUtil.getAdminId());
rolePerm.setLastUpdatedTime(new Date());
sysRolePermissionRepository.saveAndFlush(rolePerm);
}
/**
* @Title: Map
*
* @param allPermissionMap Map
* @param selectPermissinoIDList Map
* @param permID ID void
*
*/
private void putParentPermissionIntoMap(Map<String, String> allPermissionMap, List<String> selectPermissinoIDList,
String permID){
/* 找出父节点添加到待插入PermissionMaps中 */
String pid = permID;
while(true){
String parentID = allPermissionMap.get(pid);
if(pid.equals("0")){
break;
} else{
logger.info("pid=" + pid + ",parentID=" + parentID);
if(!selectPermissinoIDList.contains(pid)){
selectPermissinoIDList.add(pid);
}
pid = parentID;
}
}
}
private int updateToRoleTable(Map<String, Object> reqMap, int roleId){
SysRole role =sysRoleRepository.findSysRoleById(roleId);
role.setName(reqMap.get("roleName").toString());
//role.setLevel(Integer.parseInt(reqMap.get("roleLevel").toString()));
//role.setType(Integer.parseInt(reqMap.get("roleType").toString()));
role.setIsEnable(Integer.parseInt(reqMap.get("isActive").toString()));
role.setLastUpdatedBy(InterfaceUtil.getAdminId());
role.setLastUpdatedTime(new Date());
role=sysRoleRepository.saveAndFlush(role);
return role.getId();
}
/**
*
*/
public int cheakRoleName(int id,String name){
return sysRoleRepository.cheakRoleName(id, name);
}
@Transactional()
public String deleteSelectedPermission(String[] ids){
StringBuffer success=new StringBuffer();
StringBuffer fail=new StringBuffer();
int successCount=0;
int failCount=0;
for(String id : ids){
List<SysUserRole> userRoleList = sysUserRoleRepository.findRoleByRoleId(Integer.parseInt(id));
SysRole role = sysRoleRepository.findSysRoleById(Integer.parseInt(id));
if(userRoleList != null && userRoleList.size() > 0){
failCount++;
logger.info("角色[" + role.getName() + "]下存在用户,删除失败!");
fail.append("[" + role.getName() + "]");
}else {
role.setDeleted(1);
role.setLastUpdatedTime(new Date());
role.setLastUpdatedBy(InterfaceUtil.getAdminId());
sysRoleRepository.saveAndFlush(role);
deleteRolePermissionMap(id);
successCount++;
logger.info("角色[" + role.getName() + "],删除成功!");
success.append("[" + role.getName() + "]");
}
}
String allMsg="";
if (successCount==0&&failCount!=0){
allMsg=failCount+"个删除失败:"+fail.toString()+"下存在用户,删除失败!";
}else if (failCount==0&&successCount!=0) {
allMsg=successCount+"个删除成功:"+success.toString()+"。";
}else if (failCount!=0&&successCount!=0){
allMsg=successCount+"个删除成功:"+success.toString()+"。 "+failCount+"个删除失败:"+fail.toString()+"下存在用户,删除失败!";
}
return allMsg;
}
/**
*
*/
private void deleteRolePermissionMap(String roleId){
sysRolePermissionRepository.deleteSysRolePermissionByRoleId(Integer.parseInt(roleId));
}
/**
*
* @param status
* @param id
* @return
*/
public boolean enableOrDisable(int status, int id){
SysRole one = sysRoleRepository.findOne(id);
one.setIsEnable(status);
SysRole sysRole = sysRoleRepository.saveAndFlush(one);
if(null != sysRole){
return true;
}
return false;
}
}