package pack.y2.hibernate.serviceimpl;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import pack.y2.hibernate.daoimpl.MenusDaoImpl;
import pack.y2.hibernate.daoimpl.RolesDaoImpl;
import pack.y2.hibernate.daoimpl.UserDaoImpl;
import pack.y2.hibernate.idao.IMenusDao;
import pack.y2.hibernate.idao.IRolesDao;
import pack.y2.hibernate.idao.IUsersDao;
import pack.y2.hibernate.iservice.IUserService;
import pack.y2.hibernate.pojo.Menus;
import pack.y2.hibernate.pojo.Roles;
import pack.y2.hibernate.pojo.Users;
public class UserServiceImpl implements IUserService{
IUsersDao iuser=new UserDaoImpl();
IMenusDao imeus=new MenusDaoImpl();
IRolesDao irole=new RolesDaoImpl();
/**
* 根据用户名得到权限;
*/
public Set selectByName(String name) {
// TODO Auto-generated method stub
String hql="From Menus as M join fetch M.roleses R join fetch R.userses U where U.username=?";
List list=iuser.pageQuery(hql, null, null,name);
//把list转成set集合;
Set set=new HashSet(list);
return set;
}
//得到所有的用户;
public Map selectAll(Integer page) {
// TODO Auto-generated method stub
String hql="From Users";
List list=iuser.pageQuery(hql,page,8);
Map map=new HashMap();
map.put("UserList", list);
String hql2="select count(*) From Users";
//得到总页数;
List list2=iuser.pageQuery(hql2, null, null);
Object obj=list2.get(0);
int sum=Integer.parseInt(obj.toString());
//添加总记录数;
map.put("Sum",sum);
//添加总页数;
Integer sumPage=sum%8==0?sum/8:sum/8+1;
map.put("SumPage",sumPage);
return map;
}
//查询用户已有的权限;
public List findGrant_UserById(Long userid) {
// TODO Auto-generated method stub
String hql="From Roles r where r.userses.userid=?";
List list=iuser.pageQuery(hql, null, null,userid);
return list;
}
//查询用户没有的权限;
public List findNotGrant_UserById(Long userid) {
// TODO Auto-generated method stub
String hql="From Roles where rolesid not in(select r.rolesid From Roles r where r.userses.userid=?)";
List list=iuser.pageQuery(hql, null, null, userid);
return list;
}
//保存用户角色的方法;
public void saveUserGrant(Long userid, String rolesid) {
//根据用户编号查找出用户对象;
Users users=(Users)iuser.selectById(userid);
System.out.println("roles字符串为:"+rolesid);
if(rolesid==null || rolesid.length()<1){
//清除所有的集合;
users.getRoleses().clear();
}else{
StringBuffer sb=new StringBuffer("From Roles r where r.rolesid in(");
sb.append(rolesid);
sb.setCharAt(sb.toString().length()-1, ')');
String hql=sb.toString();
List list=iuser.pageQuery(hql, null, null);
Set set=new HashSet(list);
System.out.println("list大小:"+list.size());
//把角色重新放入集合中;
users.setRoleses(set);
}
//最后更新用户;
iuser.add(users);
}
//得到所有的菜单项;
public List getMenusAll() {
// TODO Auto-generated method stub
List list=imeus.selectAll();
return list;
}
public static void main(String[] args) {
Set list=new UserServiceImpl().getUsersByRolesId(new Long(1));
for(Object obj:list){
Users u=(Users)obj;
System.out.println(u.getUsername());
}
}
//根据角色编号查找出菜单编号;
public List getRoleAllByRoleId(Long roleid){
String hql="From Menus m where m.roleses.rolesid=?";
List list=imeus.pageQuery(hql, null, null, roleid);
return list;
}
//得到所有的角色;
public List getRolesAll(){
String hql="From Roles";
List list=irole.selectAll();
return list;
}
//根据穿过来的角色编号查找出角色对象;角色对象中有一个菜单对象的集合;
//首先清除所有的菜单权限;然后在判断menusid是否为空;如果不为空,则用StringBuffer sb=new StringBuffer("From Roles where r .menus.memusid in(");
//然后在把menusid传入到in里面;拼成sql语句;执行后返回List结果集;把结果集放入set集合中;
//最后调用更新方法进行更新操作;
public void saveMenusByRolesId(Long rolesId, String menusId) {
String hql="From Roles r where r.rolesid=?";
List list=irole.pageQuery(hql, null, null, rolesId);
//得到一个角色对象;
Roles role=(Roles)list.get(0);
//清除角色对象中的所有菜单;
role.getMenuses().clear();
if(menusId!=null && menusId.length()>0){
//根据menusId查找出所有的菜单出来;
StringBuffer sb=new StringBuffer("From Menus s where s.menusid in(");
sb.append(menusId);
//把菜单编号最后一个,替换成")";
sb.setCharAt(sb.length()-1, ')');
List menus=imeus.pageQuery(sb.toString(), null, null, null);
Set set=new HashSet(menus);
//然后把,菜单集合重新放入到角色对象中;
role.setMenuses(set);
}
//最后,进行更新;
irole.update(role);
System.out.println("菜单更新完成!。");
}
public Set getUsersByRolesId(Long rolesid) {
// TODO Auto-generated method stub
String hql="From Roles r where r.rolesid=?";
List list=imeus.pageQuery(hql, null, null,rolesid);
Set set=new HashSet();
for (Object obj : list) {
Roles role=(Roles)obj;
set=role.getUserses();
}
return set;
}
}
创建角色的数据库脚本,
--创建用户表;
drop table users;
create table users(
--主键,
userid number primary key not null,
username varchar2(50)not null,
userpass varchar2(20)not null,
--外键,所属部门;
deptid number not null,
--生日;
birthday date not null,
sex varchar2(4)not null,
age number not null,
--手机;
combine varchar2(11)null,
email varchar2(50)null,
address varchar2(50)null,
zipcode varchar2(8)null,
remark varchar2(50)null,
--创建users表的所属部门的外键;
foreign key(deptid) references dept(deptid)
)
--创建序列;
drop sequence seq_users;
create sequence seq_users;
insert into users values(seq_users.nextval,'雪见','123456',3,sysdate,'女',23,'13459858985','xuejian@163.com','北京市','0101000','暂无备注');
insert into users values(seq_users.nextval,'李逍遥','123456',1,sysdate,'男',27,'15973556785','huge@126.com','北京市','014502','暂无备注');
insert into users values(seq_users.nextval,'龙葵','123456',2,sysdate,'男',20,'18978985858','longkui@126.com','湖南长沙','314502','暂无备注');
--创建角色表;
drop table roles;
create table roles(
rolesid number primary key not null, --主键角色编号;
rolename varchar2(20)not null --角色名称;
)
drop sequence seq_roles;
create sequence seq_roles;
insert into roles values(seq_roles.nextVal,'管理员');
insert into roles values(seq_roles.nextVal,'程序员');
insert into roles values(seq_roles.nextVal,'项目经理');
insert into roles values(seq_roles.nextVal,'公司总裁');
--用户角色中间表;
drop table user_roles;
create table user_roles(
urId number references users(userid), --<外键>用户编号;
rolesid number references roles(rolesid) --<外键>角色编号;
);
insert into user_roles values(1,1);
insert into user_roles values(2,2);
insert into user_roles values(3,3);
--菜单表;
drop table menus;
create table menus(
menusid number primary key not null, --菜单编号;
menusname varchar2(20)not null, --菜单姓名;
menusparent number not null, --父菜单编号;
menusurl varchar2(150) null, --菜单链接;
isshow number not null --是否显示;
)
drop sequence seq_menus;
create sequence seq_menus;
--'-1'代表根目录 ; --1代表根目录下; 2--代表1的跟目下, --3代表-同级目录;
insert into menus values(seq_menus.nextVal,'功能菜单',-1,'',1);
insert into menus values(seq_menus.nextVal,'系统管理',1,'',1);
insert into menus values(seq_menus.nextVal,'用户管理',2,'',1);
insert into menus values(seq_menus.nextVal,'考勤管理',3,'',1);
insert into menus values(seq_menus.nextVal,'个人设置',3,'',1);
insert into menus values(seq_menus.nextVal,'短信管理',3,'',1);
insert into menus values(seq_menus.nextVal,'通讯录管理',3,'',1);
insert into menus values(seq_menus.nextVal,'权限管理',3,'',1);
insert into menus values(seq_menus.nextVal,'公告管理',3,'',1);
--角色菜单中间表;
drop table rols_menus;
create table rols_menus(
rolesid number references roles(rolesid), --<外键>角色编号;
menusid number references menus(menusid) --<外键>菜单编号;
)
drop sequence seq_rols_menus;
create sequence seq_rols_menus;
insert into rols_menus values(1,1);
insert into rols_menus values(1,2);
insert into rols_menus values(2,1);
insert into rols_menus values(2,2);
insert into rols_menus values(3,1);
insert into rols_menus values(4,2);