You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1106 lines
56 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.manage.service.ipml;
import com.manage.dao.*;
import com.manage.entity.*;
import com.manage.service.PowerService;
import com.manage.vo.PowerTree;
import com.manage.vo.Power_Sys_DictVo;
import com.manage.vo.Power_UserAndRoleTree;
import com.manage.vo.Power_UserVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @ProjectName: power
* @Package: com.manage.service.ipml
* @ClassName: Power_Sys_DictServiceImpl
* @Description: java类作用描述
* @Author: 曾文和
* @CreateDate: 2019/4/16 15:11
* @UpdateUser: 更新者
* @UpdateDate: 2019/4/16 15:11
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Service
@Transactional
public class PowerServiceImpl implements PowerService {
@Autowired
private Power_Sys_DictMapper sysDictMapper;
@Autowired
private Power_UserMapper userMapper;
@Autowired
private Power_MenuMapper menuMapper;
@Autowired
private Power_Role_MenuMapper roleMenuMapper;
@Autowired
private Power_User_MenuMapper userMenuMapper;
@Autowired
private PowerMapper powerMapper;
@Override
public List<Power_Sys_DictVo> selectAllSys() {
return sysDictMapper.selectAllSys();
}
@Override
public List<Power_Menu> getMethodByMenuIdPowerTree(Integer menuId) {
return menuMapper.selectMethodByMenuIdPowerTree(menuId);
}
/**
* @ProjectName: getRolePowerTree
* @Description: 角色树1.医院2.系统3.角色
* @Param 无
* @Return PowerTree
* @Author: 曾文和
* @CreateDate: 2019/4/21 10:02
* @UpdateUser: 更新者
* @UpdateDate: 2019/4/21 10:02
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Override
public List<Power_UserAndRoleTree> getRolePowerTree(String key) {
//roleId为0为系统管理员系统管理员全查其余按医院查
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
List<Power_UserAndRoleTree> treeList = new ArrayList<>();
List<Power_UserAndRoleTree> userTree = new ArrayList<>();
if(user.getRoleId().equals(0)){
userTree = powerMapper.getRoleTree(null,null,key);
}else{
userTree = powerMapper.getRoleTree(user.getUserId(),user.getRoleId(),key);
}
//1级医院
List<Power_UserAndRoleTree> hosList = new ArrayList<>();
//2级权限系统
List<Power_UserAndRoleTree> powerList = new ArrayList<>();
//3级科室
List<Power_UserAndRoleTree> deptList = new ArrayList<>();
//4级系统
List<Power_UserAndRoleTree> sysList = new ArrayList<>();
//5级用户
List<Power_UserAndRoleTree> roleList = new ArrayList<>();
if(null != userTree && !userTree.isEmpty()){
for(Power_UserAndRoleTree tree:userTree){
if(tree.getLevel().equals(1)){
hosList.add(tree);
}
if(tree.getLevel().equals(2)){
powerList.add(tree);
}
if(tree.getLevel().equals(3)){
deptList.add(tree);
}
if(tree.getLevel().equals(4)){
sysList.add(tree);
}
if(tree.getLevel().equals(5)){
roleList.add(tree);
}
}
}
if(null != hosList && !hosList.isEmpty()){
//组织树
int id = 1;
int oneLevelId = 0;
int twoLevelId = 0;
for(Power_UserAndRoleTree hos : hosList){
//第一级医院
Power_UserAndRoleTree tree1 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(hos,tree1);
tree1.setId(id);
oneLevelId = id;
tree1.setSelfId(null);
treeList.add(tree1);
id++;
//获取该医院不重复角色
Map<Integer,Power_UserAndRoleTree> roleListByHosId = new HashMap<>();
if(null != roleList && !roleList.isEmpty()) {
//属于该医院的权限系统下有有该角色
for (Power_UserAndRoleTree powerRole : roleList) {
if (null != powerRole.getParentId() && powerRole.getParentId().equals(hos.getSelfId())) {
roleListByHosId.put(powerRole.getSelfId(),powerRole);
}
}
}
//第二级权限系统
if(null != powerList && !powerList.isEmpty()){
for(Power_UserAndRoleTree powerSys : powerList){
if(powerSys.getParentId().equals(hos.getSelfId())){
Power_UserAndRoleTree tree2 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(powerSys,tree2);
tree2.setId(id);
twoLevelId = id;
tree2.setParentId(oneLevelId);
tree2.setSelfId(null);
treeList.add(tree2);
id++;
//第三级角色
if(null != roleListByHosId && !roleListByHosId.isEmpty()){
//属于该医院的权限系统下有有该角色
for (Map.Entry<Integer, Power_UserAndRoleTree> entry : roleListByHosId.entrySet()) {
if(entry.getValue().getParentId().equals(hos.getSelfId())){
Power_UserAndRoleTree tree3 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(entry.getValue(),tree3);
tree3.setId(id);
tree3.setParentId(twoLevelId);
tree3.setSysFlag("power");
treeList.add(tree3);
id++;
}
}
}
}
}
}
//取系统和角色
Map<String,Power_UserAndRoleTree> sysListByHosDeptId = new HashMap<>();
List<Power_UserAndRoleTree> tempRoleList = new ArrayList<>();
if(null != deptList && !deptList.isEmpty()) {
for (Power_UserAndRoleTree dept : deptList) {
if (dept.getParentId().equals(hos.getSelfId())) {
Set<String> sysFlagSet = new TreeSet<>();
//获取该科室不重复系统
if (null != sysList && !sysList.isEmpty()) {
for (Power_UserAndRoleTree sys : sysList) {
if (null != sys.getParentId() && sys.getDeptId().equals(dept.getDeptId())) {
sysListByHosDeptId.put(sys.getSysFlag(),sys);
sysFlagSet.add(sys.getSysFlag());
}
}
}
//给角色设置系统权限
if (null != roleList && !roleList.isEmpty()) {
for (Power_UserAndRoleTree role : roleList) {
String sysFlagStr = "";
String deptId = role.getDeptId();
if(StringUtils.isNotBlank(deptId)){
//单一科室
if (!deptId.contains(",")) {
if (deptId.equals(dept.getDeptId())) {
if(null != sysFlagSet && !sysFlagSet.isEmpty()){
for(String sysFlag:sysFlagSet){
sysFlagStr += sysFlag + ",";
}
}
if(StringUtils.isNotBlank(sysFlagStr)){
Power_UserAndRoleTree tempRole = new Power_UserAndRoleTree();
BeanUtils.copyProperties(role,tempRole);
tempRole.setSysFlag(sysFlagStr);
tempRoleList.add(tempRole);
}
}
} else {
//逗号隔开多科室
String[] deptIds = deptId.split(",");
for (String deptStr : deptIds) {
if (StringUtils.isNotBlank(deptStr) && deptStr.equals(dept.getDeptId())) {
if(null != sysFlagSet && !sysFlagSet.isEmpty()){
for(String sysFlag:sysFlagSet){
sysFlagStr += sysFlag + ",";
}
}
if(StringUtils.isNotBlank(sysFlagStr)){
Power_UserAndRoleTree tempRole = new Power_UserAndRoleTree();
BeanUtils.copyProperties(role,tempRole);
tempRole.setSysFlag(sysFlagStr);
tempRoleList.add(tempRole);
}
}
}
}
}
}
}
}
}
//第三级系统
if (null != sysListByHosDeptId && !sysListByHosDeptId.isEmpty()) {
for (Map.Entry<String,Power_UserAndRoleTree> sys : sysListByHosDeptId.entrySet()) {
if(sys.getValue().getParentId().equals(hos.getSelfId())){
Power_UserAndRoleTree tree5 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(sys.getValue(), tree5);
tree5.setId(id);
tree5.setParentId(oneLevelId);
tree5.setSelfId(null);
treeList.add(tree5);
twoLevelId = id;
id++;
//第四级角色
Map<Integer,Power_UserAndRoleTree> roleListBySys = new HashMap<>();
if (null != roleList && !roleList.isEmpty()) {
for (Power_UserAndRoleTree role : tempRoleList) {
String sysFlag = role.getSysFlag();
if(StringUtils.isNotBlank(sysFlag)){
//逗号隔开多系统
String[] sysFlags = sysFlag.split(",");
for (String sysFlagStr : sysFlags) {
if (StringUtils.isNotBlank(sysFlagStr) && sysFlagStr.equals(sys.getValue().getSysFlag())) {
roleListBySys.put(role.getSelfId(),role);
continue;
}
}
}
}
}
if(null != roleListBySys && !roleListBySys.isEmpty()){
for (Map.Entry<Integer,Power_UserAndRoleTree> roleBySys:roleListBySys.entrySet()) {
Power_UserAndRoleTree tree6 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(roleBySys.getValue(), tree6);
tree6.setId(id);
tree6.setParentId(twoLevelId);
tree6.setSysFlag(sys.getValue().getSysFlag());
treeList.add(tree6);
id++;
}
}
}
}
}
}
}
}
return treeList;
}
/**
* @ProjectName: getMenuBySysIdAndRoleIdPowerTree
* @Description: 通过系统id和角色id获取该系统菜单权限树
* @Param Integer dictId系统id,Integer roleId:角色id
* @Return List<Power_Menu>
* @Author: 曾文和
* @CreateDate: 2019/4/22 15:11
* @UpdateUser: 更新者
* @UpdateDate: 2019/4/22 15:11
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Override
public List<Power_Menu> getMenuBySysIdAndRoleIdPowerTree(String sysFlag,Integer roleId) {
List<Power_Menu> menus = menuMapper.selectAll(sysFlag, 1,roleId);
//roleId为-100医院管理员菜单功能全选中
if(null != roleId && roleId == -100){
if(null != menus && !menus.isEmpty()){
for (int i = 0; i < menus.size(); i++) {
menus.get(i).setChecked("true");
}
}
}else{
//否则按角色菜单表该角色的权限选中
List<Power_Role_Menu> roleMenus = roleMenuMapper.selectRoleMenuByRoleId(roleId);
if(null != menus && !menus.isEmpty() && null != roleMenus && !roleMenus.isEmpty()){
for (int i = 0; i < menus.size(); i++) {
for (int j = 0; j < roleMenus.size(); j++) {
if(menus.get(i).getMenuId().equals(roleMenus.get(j).getMenuId())){
menus.get(i).setChecked("true");
break;
}
}
}
}
}
return menus;
}
/**
* @ProjectName: addRoleMenu
* @Description: 保存角色菜单表
* @Param roleId角色id,dictId:系统id,menus:菜单id集合
* @Return 无
* @Author: 曾文和
* @CreateDate: 2019/4/22 9:54
* @UpdateUser: 更新者
* @UpdateDate: 2019/4/22 9:54
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Override
public void addRoleMenu(Integer roleId,String sysFlag,String menus) {
//查询该角色对应系统已有的权限,先删除后新增
roleMenuMapper.deleteRoleMenuByRoleAndSysFlag(sysFlag,roleId);
if(StringUtils.isNotBlank(menus)){
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String userName = user.getUserName();
String[] menu = menus.split(",");
List<Power_Role_Menu> list = new ArrayList<>();
for(String m : menu){
if(StringUtils.isNotBlank(m)){
Power_Role_Menu roleMenu = new Power_Role_Menu();
roleMenu.setCreater(userName);
roleMenu.setUpdater(userName);
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
roleMenu.setCreateDate(fmt.format(new Date()));
roleMenu.setUpdateDate(fmt.format(new Date()));
roleMenu.setRoleId(roleId);
roleMenu.setMenuId(Integer.valueOf(m));
list.add(roleMenu);
}
}
roleMenuMapper.simpleInsertRoleMenu(list);
}
}
/**********************************************用户菜单权限操作********************************************************/
/**
* @ProjectName: getUserPowerTree
* @Description: 用户树1.医院2.科室3.科室4用户
* @Param List<PowerTree>
* @Return 返回
* @Author: 曾文和
* @CreateDate: 2019/4/22 15:12
* @UpdateUser: 更新者
* @UpdateDate: 2019/4/22 15:12
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Override
public List<Power_UserAndRoleTree> getUserPowerTree(String key) {
//roleId为0为系统管理员系统管理员全查其余按医院查
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
List<Power_UserAndRoleTree> treeList = new ArrayList<>();
List<Power_UserAndRoleTree> userTree = new ArrayList<>();
if(user.getRoleId().equals(0)){
userTree = powerMapper.getUserTree(null,key);
}else{
userTree = powerMapper.getUserTree(user.getUserId(),key);
}
//1级医院
List<Power_UserAndRoleTree> hosList = new ArrayList<>();
//2级权限系统
List<Power_UserAndRoleTree> powerList = new ArrayList<>();
//3级科室
List<Power_UserAndRoleTree> deptList = new ArrayList<>();
//4级系统
List<Power_UserAndRoleTree> sysList = new ArrayList<>();
//5级用户
List<Power_UserAndRoleTree> userList = new ArrayList<>();
if(null != userTree && !userTree.isEmpty()){
for(Power_UserAndRoleTree tree:userTree){
if(tree.getLevel().equals(1)){
hosList.add(tree);
}
if(tree.getLevel().equals(2)){
powerList.add(tree);
}
if(tree.getLevel().equals(3)){
deptList.add(tree);
}
if(tree.getLevel().equals(4)){
sysList.add(tree);
}
if(tree.getLevel().equals(5)){
userList.add(tree);
}
}
}
if(null != hosList && !hosList.isEmpty()){
//组织树
int id = 1;
int oneLevelId = 0;
int twoLevelId = 0;
int threeLevelId = 0;
for(Power_UserAndRoleTree hos : hosList){
//第一级医院
Power_UserAndRoleTree tree1 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(hos,tree1);
tree1.setId(id);
tree1.setSelfId(hos.getSelfId());
oneLevelId = id;
treeList.add(tree1);
id++;
//第二级权限系统
if(null != powerList && !powerList.isEmpty()){
for(Power_UserAndRoleTree powerSys : powerList){
if(powerSys.getParentId().equals(hos.getSelfId())){
Power_UserAndRoleTree tree2 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(powerSys,tree2);
tree2.setId(id);
twoLevelId = id;
tree2.setParentId(oneLevelId);
tree2.setSysFlag(powerSys.getSysFlag());
Boolean isParent = false;
id++;
//第三级用户
if(null != userList && !userList.isEmpty()){
//属于该医院的权限系统下有有该用户
for(Power_UserAndRoleTree powerUser : userList){
if(null != powerUser.getParentId() && powerUser.getParentId().equals(hos.getSelfId())){
if(StringUtils.isNotBlank(key)){
Power_UserAndRoleTree tree3 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(powerUser,tree3);
tree3.setId(id);
tree3.setParentId(twoLevelId);
if(StringUtils.isNotBlank(powerUser.getRealName())){
tree3.setName(powerUser.getName()+"-"+powerUser.getRealName());
tree3.setNewName(powerUser.getName()+"-"+powerUser.getRealName());
}else{
tree3.setName(powerUser.getName());
tree3.setNewName(powerUser.getName());
}
tree3.setSysFlag("power");
treeList.add(tree3);
id++;
}
isParent = true;
}
}
}
tree2.setIsParent(isParent);
treeList.add(tree2);
}
}
}
//第二级科室
if(null != deptList && !deptList.isEmpty()){
for(Power_UserAndRoleTree dept : deptList){
if(dept.getParentId().equals(hos.getSelfId())){
Power_UserAndRoleTree tree4 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(dept,tree4);
tree4.setId(id);
twoLevelId = id;
tree4.setParentId(oneLevelId);
tree4.setSelfId(Integer.valueOf(dept.getDeptId()));
treeList.add(tree4);
id++;
}
//第三级系统
if(null != sysList && !sysList.isEmpty()){
for(Power_UserAndRoleTree sys : sysList) {
if (null != sys.getParentId() && sys.getDeptId().equals(dept.getDeptId()) && sys.getParentId().equals(hos.getSelfId())) {
Power_UserAndRoleTree tree5 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(sys,tree5);
tree5.setId(id);
tree5.setParentId(twoLevelId);
tree5.setSysFlag(sys.getSysFlag());
threeLevelId = id;
id++;
Boolean isParent = false;
//第四级用户
if(null != userList && !userList.isEmpty()) {
for (Power_UserAndRoleTree users : userList) {
String deptId = users.getDeptId();
if(StringUtils.isNotBlank(deptId)){
//单一科室
if(!deptId.contains(",")){
if(deptId.equals(dept.getDeptId())){
isParent = true;
if(StringUtils.isNotBlank(key)){
id++;
Power_UserAndRoleTree tree6 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(users,tree6);
tree6.setId(id);
tree6.setParentId(threeLevelId);
if(StringUtils.isNotBlank(users.getRealName())){
tree6.setName(users.getName()+"-"+users.getRealName());
tree6.setNewName(users.getName()+"-"+users.getRealName());
}else{
tree6.setName(users.getName());
tree6.setNewName(users.getName());
}
tree6.setSysFlag(sys.getSysFlag());
treeList.add(tree6);
id++;
}
}
}else{
//逗号隔开多科室
String[] deptIds = deptId.split(",");
for (String deptStr : deptIds) {
if(StringUtils.isNotBlank(deptStr) && deptStr.equals(dept.getDeptId())){
if(StringUtils.isNotBlank(key)){
Power_UserAndRoleTree tree7 = new Power_UserAndRoleTree();
BeanUtils.copyProperties(users,tree7);
tree7.setId(id);
tree7.setParentId(threeLevelId);
if(StringUtils.isNotBlank(users.getRealName())){
tree7.setName(users.getName()+"-"+users.getRealName());
tree7.setNewName(users.getName()+"-"+users.getRealName());
}else{
tree7.setName(users.getName());
tree7.setNewName(users.getName());
}
tree7.setSysFlag(sys.getSysFlag());
treeList.add(tree7);
id++;
}
isParent = true;
}
}
}
}
}
}
tree5.setIsParent(isParent);
treeList.add(tree5);
}
}
}
}
}
}
}
return treeList;
}
@Override
public List<Power_UserAndRoleTree> getUserTreeByHospitalId(Integer hospitalId) {
List<Power_User> userList = userMapper.getUserTreeByHospitalId(hospitalId);
List<Power_UserAndRoleTree> treeList = new ArrayList<>();
if(null != userList && !userList.isEmpty()){
for (Power_User users : userList) {
Power_UserAndRoleTree tree6 = new Power_UserAndRoleTree();
if(StringUtils.isNotBlank(users.getName())){
tree6.setName(users.getUserName()+"-"+users.getName());
tree6.setNewName(users.getUserName()+"-"+users.getName());
}else{
tree6.setName(users.getUserName());
tree6.setNewName(users.getUserName());
}
tree6.setSelfId(users.getUserId());
treeList.add(tree6);
}
}
return treeList;
}
@Override
public List<Power_UserAndRoleTree> getUserTreeByDeptId(Integer deptId) {
List<Power_User> userList = userMapper.getUserTreeByDeptId(deptId);
List<Power_UserAndRoleTree> treeList = new ArrayList<>();
if(null != userList && !userList.isEmpty()){
for (Power_User users : userList) {
Power_UserAndRoleTree tree6 = new Power_UserAndRoleTree();
if(StringUtils.isNotBlank(users.getName())){
tree6.setName(users.getUserName()+"-"+users.getName());
tree6.setNewName(users.getUserName()+"-"+users.getName());
}else{
tree6.setName(users.getUserName());
tree6.setNewName(users.getUserName());
}
tree6.setSelfId(users.getUserId());
treeList.add(tree6);
}
}
return treeList;
}
//根据用户
/**
* @ProjectName: getMenuBySysIdAndUerIdPowerTree
* @Description: 通过系统id和用户id获取该系统的菜单权限
* @Param Integer dictId:系统id, Integer userId:用户id
* @Return 返回
* @Author: 曾文和
* @CreateDate: 2019/4/22 15:07
* @UpdateUser: 更新者
* @UpdateDate: 2019/4/22 15:07
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Override
public List<Power_Menu> getMenuBySysIdAndUerIdPowerTree(String sysFlag, Integer userId) {
//查询对应系统的且状态为可用的菜单集合
//系统标识查
Power_User user = userMapper.selectByPrimaryKey(userId);
List<Power_Menu> menus = menuMapper.selectAll(sysFlag, 1,user.getRoleId());
//roleId为-100医院管理员菜单功能全选中
if(null != user.getRoleId() && user.getRoleId() == -100){
if(null != menus && !menus.isEmpty()){
for (int i = 0; i < menus.size(); i++) {
menus.get(i).setChecked("true");
}
}
}else{
//否则查询对应系统的用户权限菜单id集合
List<Power_User_Menu> userMenus = userMenuMapper.selectUserAndRoleMenuPower(sysFlag, userId);
if(null != menus && !menus.isEmpty() && null != userMenus && !userMenus.isEmpty()){
//有符合权限则checked设为true
for (int i = 0; i < menus.size(); i++) {
for (int j = 0; j < userMenus.size(); j++) {
if(menus.get(i).getMenuId().equals(userMenus.get(j).getMenuId())){
menus.get(i).setChecked("true");
break;
}
}
}
}
}
return menus;
}
/**
* @ProjectName: addUserMenu
* @Description: 保存用户菜单表
* @Param Integer userId用户id, Integer dictId系统id, String menus:菜单id集合
* @Return 返回
* @Author: 曾文和
* @CreateDate: 2019/4/22 15:08
* @UpdateUser: 更新者
* @UpdateDate: 2019/4/22 15:08
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Override
public void addUserMenu(Integer userId, String sysFlag, String menus) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String userName = user.getUserName();
//查询该用户对应系统在用户菜单表中已有的权限,先删除后新增
userMenuMapper.deleteUserMenuByUserIdAndSysFlag(sysFlag, userId);
/* List<Power_User_Menu> userPowers = userMenuMapper.selectUserMenuPower(sysFlag,userId);
if(null != userPowers && !userPowers.isEmpty()){
for (int i = 0; i < userPowers.size(); i++) {
userMenuMapper.deleteByPrimaryKey(userPowers.get(i).getUserMenuId());
}
}*/
Power_User power_user = userMapper.selectByPrimaryKey(userId);
//查询该用户对应的角色菜单权限
List<Power_Role_Menu> rolePowers = roleMenuMapper.selectRoleMenuPower(sysFlag, power_user.getRoleId());
if(null != rolePowers && !rolePowers.isEmpty()){
if(StringUtils.isBlank(menus)){
//全取消
List<Power_User_Menu> list = new ArrayList<>();
for (int i = 0; i < rolePowers.size(); i++) {
list.add(addUserFunction(userName, userId, rolePowers.get(i).getMenuId().toString(), 0));
}
userMenuMapper.simpleInsertUserMenu(list);
}else{
//计算新增和删除
List<String> roles = new ArrayList<>();
List<String> users = new ArrayList<>();
for (int i = 0; i < rolePowers.size(); i++) {
roles.add(rolePowers.get(i).getMenuId().toString());
}
String[] menu = menus.split(",");
users = Arrays.asList(menu);
//新增部分
Collection<String> inserts=new ArrayList<String>(users);
inserts.removeAll(roles);
if(null != inserts && !inserts.isEmpty()){
//新增flag为1
List<Power_User_Menu> list = new ArrayList<>();
for (String insertMenu : inserts) {
if(StringUtils.isNotBlank(insertMenu)){
list.add(addUserFunction(userName,userId,insertMenu,1));
}
}
userMenuMapper.simpleInsertUserMenu(list);
}
//删除部分
Collection<String> deletes=new ArrayList<String>(roles);
deletes.removeAll(users);
if(null != deletes && !deletes.isEmpty()){
List<Power_User_Menu> list = new ArrayList<>();
for(String deleteMenu : deletes){
if(StringUtils.isNotBlank(deleteMenu)){
list.add(addUserFunction(userName,userId,deleteMenu,0));
}
}
userMenuMapper.simpleInsertUserMenu(list);
}
}
}else{
//未设置角色权限,全部添加到用户权限
if(StringUtils.isNotBlank(menus)) {
String[] menu = menus.split(",");
//新增flag为1
List<Power_User_Menu> list = new ArrayList<>();
for (String insertMenu : menu) {
if (StringUtils.isNotBlank(insertMenu)) {
list.add(addUserFunction(userName, userId, insertMenu, 1));
}
}
userMenuMapper.simpleInsertUserMenu(list);
}
}
}
//封装新增用户菜单权限表公共部分
private Power_User_Menu addUserFunction(String userName,Integer userId,String menu,Integer flag){
Power_User_Menu userMenu = new Power_User_Menu();
userMenu.setCreater(userName);
userMenu.setUpdater(userName);
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
userMenu.setCreateDate(fmt.format(new Date()));
userMenu.setUpdateDate(fmt.format(new Date()));
userMenu.setUserId(userId);
userMenu.setMenuId(Integer.valueOf(menu));
userMenu.setFlag(flag);
return userMenu;
}
/**
* @ProjectName: getRolePowerTreeBySysFlag
* @Description: 病案管理系统接口 根据系统标识组织角色树
* @Param 无
* @Return PowerTree
* @Author: 曾文和
* @CreateDate: 2019/7/9 10:02
* @UpdateUser: 更新者
* @UpdateDate: 2019/09/04 10:02
* @UpdateRemark: 重新查询
* @Version: 1.0
*/
@Override
public List<PowerTree> getRolePowerTreeBySysFlag(String sysFlag,Power_User user) {
//根据系统标识查询科室id
List<Power_Sys_DictVo> dicts = new ArrayList<>();
if(user.getRoleId() == 0){
dicts = sysDictMapper.selectAllByAdmin();
}/*else if(user.getRoleId() == -100){
dicts = sysDictMapper.selectAllByHosRoleId(user.getUserId());
}*/else{
dicts = sysDictMapper.selectAllByHosRoleId(user.getUserId(),user.getRoleId(),null);
//dicts = sysDictMapper.selectAllByUserId(user.getUserId());
}
//获取用户集合
List<Power_Sys_DictVo> userList = new ArrayList<>();
List<PowerTree> treeList = new ArrayList<>();
int id = 0;
int oneLevel = 0;
int twoLevel = 0;
Map<Integer,String> hospitalNameSet = new HashMap<>();
if(null != dicts && !dicts.isEmpty()){
for (int i = 0; i < dicts.size(); i++) {
if(StringUtils.isNotBlank(dicts.get(i).getHospitalName())){
hospitalNameSet.put(dicts.get(i).getDictId(),dicts.get(i).getHospitalName());
}
//用户集合
if(null == dicts.get(i).getDictId()){
userList.add(dicts.get(i));
}
}
}
if(null != hospitalNameSet && !hospitalNameSet.isEmpty()){
for(Integer hosKey : hospitalNameSet.keySet()){
Map<String,String> deptNameSet = new HashMap<>();
Map<Integer,Power_Sys_DictVo> poweSysNameSet = new HashMap<>();
Set<Integer> deptIds = new TreeSet<>();
//医院层
id++;
oneLevel = id;
PowerTree tree1 = new PowerTree();
tree1.setId(id);
tree1.setName(hospitalNameSet.get(hosKey));
treeList.add(tree1);
for (int i = 0; i < dicts.size(); i++) {
//查询病案系统的科室
if(StringUtils.isNotBlank(dicts.get(i).getSysFlag()) && dicts.get(i).getSysFlag().equals(sysFlag) && dicts.get(i).getParentId().equals(hosKey) && null != dicts.get(i).getDictDeptId()){
deptIds.add(dicts.get(i).getDictDeptId());
}
}
if(null != deptIds && !deptIds.isEmpty()){
for(Integer deptId : deptIds){
for (int i = 0; i < dicts.size(); i++) {
if(StringUtils.isNotBlank(dicts.get(i).getDeptIds()) && dicts.get(i).getDeptIds().equals(deptId.toString()) && StringUtils.isNotBlank(dicts.get(i).getDeptName())){
deptNameSet.put(dicts.get(i).getDeptIds(),dicts.get(i).getDeptName());
}
}
}
if(null != deptNameSet && !deptNameSet.isEmpty()){
for (String key : deptNameSet.keySet()) {
Map<Integer,Power_Sys_DictVo> sysNameSet = new HashMap<>();
//科室层
id++;
twoLevel = id;
PowerTree tree2 = new PowerTree();
tree2.setId(id);
tree2.setParentId(oneLevel);
tree2.setName(deptNameSet.get(key));
treeList.add(tree2);
Map<Integer,String> roleMap = new HashMap<>();
if (null != userList && !userList.isEmpty()) {
for (int j = 0; j < userList.size(); j++) {
if(StringUtils.isNoneBlank(userList.get(j).getSysType())){
String deptIdss = userList.get(j).getDeptIds();
if(StringUtils.isNotBlank(deptIdss)){
if(!deptIdss.contains(",")){
if(deptIdss.equals(key)){
roleMap.put(userList.get(j).getParentId(),userList.get(j).getSysType());
}
}else{
String[] deptIdsss = deptIdss.split(",");
for(String deptId:deptIdsss){
if(StringUtils.isNotBlank(deptId) && deptId.equals(key)){
roleMap.put(userList.get(j).getParentId(),userList.get(j).getSysType());
}
}
}
}
}
}
for(Integer roleId:roleMap.keySet()){
//角色层
id++;
PowerTree tree3 = new PowerTree();
tree3.setId(id);
tree3.setParentId(twoLevel);
tree3.setName(roleMap.get(roleId));
tree3.setSelfId(roleId);
treeList.add(tree3);
}
}
}
}
}
}
}
return treeList;
}
/**
* @ProjectName: getUserPowerTreeBySysFlag
* @Description: 病案管理系统接口 根据系统标识组织用户树
* @Param 无
* @Return PowerTree
* @Author: 曾文和
* @CreateDate: 2019/7/9 10:02
* @UpdateUser: 更新者
* @UpdateDate: 2019/9/4 10:02
* @UpdateRemark: 重新查询
* @Version: 1.0
*/
@Override
public List<PowerTree> getUserPowerTreeBySysFlag(String sysFlag,Power_User user) {
//根据系统标识查询科室id
List<Power_Sys_DictVo> dicts = new ArrayList<>();
if(user.getRoleId() == 0){
dicts = sysDictMapper.selectAllByAdmin();
}/*else if(user.getRoleId() == -100){
dicts = sysDictMapper.selectAllByHosRoleId(user.getUserId());
}*/else{
dicts = sysDictMapper.selectAllByHosRoleId(user.getUserId(),null,null);
//dicts = sysDictMapper.selectAllByUserId(user.getUserId());
}
List<Power_Sys_DictVo> userList = new ArrayList<>();
List<PowerTree> treeList = new ArrayList<>();
int id = 0;
int oneLevel = 0;
int twoLevel = 0;
Map<Integer,String> hospitalNameSet = new HashMap<>();
if(null != dicts && !dicts.isEmpty()){
for (int i = 0; i < dicts.size(); i++) {
if(StringUtils.isNotBlank(dicts.get(i).getHospitalName())){
hospitalNameSet.put(dicts.get(i).getDictId(),dicts.get(i).getHospitalName());
}
//用户集合
if(null == dicts.get(i).getDictId()){
userList.add(dicts.get(i));
}
}
}
if(null != hospitalNameSet && !hospitalNameSet.isEmpty()){
for(Integer hosKey : hospitalNameSet.keySet()){
Map<String,String> deptNameSet = new HashMap<>();
Map<Integer,Power_Sys_DictVo> poweSysNameSet = new HashMap<>();
Set<Integer> deptIds = new TreeSet<>();
//医院层
id++;
oneLevel = id;
PowerTree tree1 = new PowerTree();
tree1.setId(id);
tree1.setName(hospitalNameSet.get(hosKey));
treeList.add(tree1);
for (int i = 0; i < dicts.size(); i++) {
//查询病案系统的科室
if(StringUtils.isNotBlank(dicts.get(i).getSysFlag()) && dicts.get(i).getSysFlag().equals(sysFlag) && dicts.get(i).getParentId().equals(hosKey)){
deptIds.add(dicts.get(i).getDictDeptId());
}
}
if(null != deptIds && !deptIds.isEmpty()){
for(Integer deptId : deptIds){
for (int i = 0; i < dicts.size(); i++) {
if(StringUtils.isNotBlank(dicts.get(i).getDeptIds()) && dicts.get(i).getDeptIds().equals(deptId.toString()) && StringUtils.isNotBlank(dicts.get(i).getDeptName())){
deptNameSet.put(dicts.get(i).getDeptIds(),dicts.get(i).getDeptName());
}
}
}
if(null != deptNameSet && !deptNameSet.isEmpty()){
for (String key : deptNameSet.keySet()) {
//科室层
id++;
twoLevel = id;
PowerTree tree2 = new PowerTree();
tree2.setId(id);
tree2.setParentId(oneLevel);
tree2.setName(deptNameSet.get(key));
treeList.add(tree2);
Map<Integer,Power_Sys_DictVo> roleMap = new HashMap<>();
//sysName 用户idhospitalTel 手机号,dictArea用户名parentId角色idsysType角色名
if (null != userList && !userList.isEmpty()) {
for (int j = 0; j < userList.size(); j++) {
if(StringUtils.isNoneBlank(userList.get(j).getDictArea())){
String deptIdss = userList.get(j).getDeptIds();
if(StringUtils.isNotBlank(deptIdss)){
if(!deptIdss.contains(",")){
if(deptIdss.equals(key)){
roleMap.put(Integer.valueOf(userList.get(j).getSysName()),userList.get(j));
}
}else{
String[] deptIdsss = deptIdss.split(",");
for(String deptId:deptIdsss){
if(StringUtils.isNotBlank(deptId) && deptId.equals(key)){
roleMap.put(Integer.valueOf(userList.get(j).getSysName()),userList.get(j));
}
}
}
}
}
}
for (Map.Entry<Integer,Power_Sys_DictVo> map : roleMap.entrySet()) {
//用户层
id++;
PowerTree tree4 = new PowerTree();
tree4.setId(id);
tree4.setParentId(twoLevel);
if(StringUtils.isNotBlank(map.getValue().getHospitalTel())){
tree4.setName(map.getValue().getSysName()+"-"+map.getValue().getDictArea()+"("+map.getValue().getHospitalTel()+")");
}else{
tree4.setName(map.getValue().getSysName()+"-"+map.getValue().getDictArea());
}
tree4.setSelfId(map.getKey());
tree4.setRoleId(map.getValue().getParentId());
treeList.add(tree4);
}
}
}
}
}
}
}
return treeList;
}
//归属管理的树
@Override
public List<PowerTree> getDictPowerTree(String content) {
//roleId为0为系统管理员系统管理员全查其余按医院查
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
List<Power_Sys_DictVo> dicts = new ArrayList<>();
if(user.getRoleId() == 0){
dicts = sysDictMapper.selectAll(content);
}else if(user.getRoleId() == -100){
dicts = sysDictMapper.selectAllByHosRoleId(user.getUserId(),null,content);
}else{
dicts = sysDictMapper.selectAllByUserId(user.getUserId(),content);
}
List<PowerTree> treeList = new ArrayList<>();
PowerTree tree = new PowerTree();
tree.setId(1);
tree.setSelfId(0);
tree.setName("医院列表");
treeList.add(tree);
int id = 1;
int oneLevel = 0;
int twoLevel = 0;
Map<Integer,String> hospitalNameSet = new HashMap<>();
if(null != dicts && !dicts.isEmpty()){
for (int i = 0; i < dicts.size(); i++) {
if(StringUtils.isNotBlank(dicts.get(i).getHospitalName())){
hospitalNameSet.put(dicts.get(i).getDictId(),dicts.get(i).getHospitalName());
}
}
}
if(null != hospitalNameSet && !hospitalNameSet.isEmpty()){
for(Integer hosKey : hospitalNameSet.keySet()){
Map<Integer,String> deptNameSet = new HashMap<>();
Map<Integer,Power_Sys_DictVo> poweSysNameSet = new HashMap<>();
//医院层
id++;
oneLevel = id;
PowerTree tree1 = new PowerTree();
tree1.setId(id);
tree1.setParentId(1);
tree1.setSelfId(hosKey);
tree1.setName(hospitalNameSet.get(hosKey));
treeList.add(tree1);
for (int i = 0; i < dicts.size(); i++) {
if(user.getRoleId() == 0){
if(dicts.get(i).getDictId().equals(hosKey)){
String deptName = dicts.get(i).getDeptName();
if(StringUtils.isNoneBlank(deptName)){
deptNameSet.put(dicts.get(i).getDeptId(),dicts.get(i).getDeptName());
}
}
}else{
if(dicts.get(i).getParentId().equals(hosKey)){
String deptName = dicts.get(i).getDeptName();
if(StringUtils.isNoneBlank(deptName)){
deptNameSet.put(dicts.get(i).getDeptId(),dicts.get(i).getDeptName());
}
}
}
//添加权限系统
if(dicts.get(i).getParentId() != null && StringUtils.isNotBlank(dicts.get(i).getSysFlag())
&& dicts.get(i).getParentId().equals(hosKey) && "权限系统".equals(dicts.get(i).getSysType())){
poweSysNameSet.put(dicts.get(i).getDictId(),dicts.get(i));
}
}
//添加权限系统
if(null != poweSysNameSet && !poweSysNameSet.isEmpty()){
for (Integer key : poweSysNameSet.keySet()) {
id++;
twoLevel = id;
PowerTree tree20 = new PowerTree();
tree20.setId(id);
tree20.setParentId(oneLevel);
tree20.setSelfId(key);
tree20.setSysType(poweSysNameSet.get(key).getSysType());
tree20.setName(poweSysNameSet.get(key).getSysName());
tree20.setNewName(poweSysNameSet.get(key).getSysName());
treeList.add(tree20);
}
}
if(null != deptNameSet && !deptNameSet.isEmpty()){
for (Integer key : deptNameSet.keySet()) {
Map<Integer,String> sysNameSet = new HashMap<>();
//科室层
id++;
twoLevel = id;
PowerTree tree2 = new PowerTree();
tree2.setId(id);
tree2.setParentId(oneLevel);
tree2.setName(deptNameSet.get(key));
tree2.setSelfId(0-key);
treeList.add(tree2);
for (int i = 0; i < dicts.size(); i++) {
if(dicts.get(i).getDictDeptId() != null && dicts.get(i).getDictDeptId().equals(key)
&& dicts.get(i).getParentId() != null && dicts.get(i).getParentId().equals(hosKey)){
String sysName = dicts.get(i).getSysName();
if(StringUtils.isNoneBlank(sysName)){
sysNameSet.put(dicts.get(i).getDictId(),sysName);
}
}
}
if(null != sysNameSet && !sysNameSet.isEmpty()){
for (Integer dictId : sysNameSet.keySet()) {
//系统层
id++;
PowerTree tree3 = new PowerTree();
tree3.setId(id);
tree3.setParentId(twoLevel);
tree3.setName(sysNameSet.get(dictId));
tree3.setSelfId(dictId);
treeList.add(tree3);
}
}
}
}
}
}
return treeList;
}
}