package com.usky.service.sys.user; import com.usky.annotion.DataScope; import com.usky.dao.impl.BaseDaoImpl; import com.usky.entity.sys.SysRoleDTO; import com.usky.entity.sys.SysUserDTO; import com.usky.entity.sys.SysUserRoleDTO; import com.usky.entity.sys.vo.SysUserVO; import com.usky.utils.BeanHelp; import com.usky.utils.Page; import com.usky.utils.ShiroUtils; import com.usky.utils.StringUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.shiro.crypto.hash.Md5Hash; import org.hibernate.query.NativeQuery; import org.hibernate.transform.Transformers; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; import java.util.*; /** * @author laowo * @version v1.0 * @date 2021/8/20 15:08 * @description TODO **/ @Service public class UserServiceImpl extends BaseDaoImpl implements UserService { @Override @Transactional public void addUser(SysUserVO user) { SysUserDTO sysUserDTO = BeanHelp.copyProperties(user, SysUserDTO.class); String password = sysUserDTO.getPassword(); String salt = RandomStringUtils.randomNumeric(6, 8); sysUserDTO.setSalt(salt); Md5Hash md5Hash = new Md5Hash(password, salt); //模拟md5加密一次 sysUserDTO.setPassword(md5Hash.toString()); sysUserDTO.setStatus("0"); //用户类型 sysUserDTO.setUserType("01"); sysUserDTO.setDelFlag("0"); sysUserDTO.setCreateBy(ShiroUtils.getLoginName()); sysUserDTO.setCreateTime(new Timestamp(System.currentTimeMillis())); getSession().save(sysUserDTO); insertUserRole(sysUserDTO.getUserId(), user.getRoleIds()); } /** * @param userId * @param roleIds */ public void insertUserRole(Integer userId, String roleIds) { if (StringUtils.isNotNull(roleIds)) { // 新增用户与角色管理 String[] split = roleIds.split(","); for (String roleId : split) { SysUserRoleDTO ur = new SysUserRoleDTO(); ur.setUserId(userId); ur.setRoleId(Integer.valueOf(roleId)); getSession().save(ur); getSession().flush(); getSession().clear(); } } } @Override @SuppressWarnings("all") public Set queryRoleKeys(long userId) { String sql = "SELECT DISTINCT\n" + "\tr.role_id AS roleId,\n" + "\tr.role_name AS roleName,\n" + "\tr.role_key AS roleKey,\n" + "\tr.role_sort AS roleSort,\n" + "\tr.data_scope AS dataScope,\n" + "\tr.STATUS AS `status`,\n" + "\tr.del_flag AS delFlag,\n" + "\tr.create_time AS createTime,\n" + "\tr.remark \n" + "FROM\n" + "\tsys_role r\n" + "\tLEFT JOIN sys_user_role ur ON ur.role_id = r.role_id\n" + "\tLEFT JOIN sys_user u ON u.user_id = ur.user_id\n" + "\tLEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = " + userId + ""; List perms = getSession().createSQLQuery(sql) .setResultTransformer(Transformers.aliasToBean(SysRoleDTO.class)).list(); Set permsSet = new HashSet<>(); for (SysRoleDTO perm : perms) { if (perm != null) { permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); } } return permsSet; } @Override @DataScope(deptAlias = "d", userAlias = "u") public Page list(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId, Integer pageSize, Integer pageNo) { Map params = sysUserVO.getParams(); String dataScope = (String) params.get("dataScope"); StringBuilder sb = new StringBuilder(); sb.append("select u.user_id as userId, u.dept_id as deptId, u.login_name as loginName, u.user_name as userName, u.user_type as userType, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag as delFlag, u.login_ip as loginIp, u.login_date as loginDate, u.create_by as createBy, u.create_time as createTime, u.remark, d.dept_name as deptName, d.leader from sys_user u left join sys_dept d on u.dept_id = d.dept_id where u.del_flag = '0'"); if (null != status && status != 0) { sb.append(" AND u.status = " + status + ""); } if (StringUtils.isNotBlank(loginName)) { sb.append("AND u.login_name like '%" + loginName + "%'"); } if (StringUtils.isNotBlank(phonenumber)) { sb.append(" AND u.phonenumber like '%" + phonenumber + "%'"); } if (StringUtils.isNotBlank(startTime)) { sb.append(" AND u.create_time >= " + startTime + ""); } if (StringUtils.isNotBlank(endTime)) { sb.append(" AND u.create_time <= " + endTime + ""); } if (null != deptId && deptId != 0) { sb.append("AND (u.dept_id = " + deptId + " OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (" + deptId + ",ancestors) ))"); } if (StringUtils.isNotBlank(dataScope)) { sb.append(" ").append(dataScope); } List list = getSession().createSQLQuery(sb.toString()).list(); Page result = new Page<>(list.size(), pageSize); NativeQuery sqlQuery = getSession().createSQLQuery(sb.toString()); sqlQuery.setFirstResult((pageNo - 1) * pageSize); sqlQuery.setMaxResults(pageSize); List sysUserVOList = sqlQuery.setResultTransformer(Transformers.aliasToBean(SysUserVO.class)).list(); result.setPageList(sysUserVOList); result.setPageNo(pageNo); return result; } @Override @DataScope(deptAlias = "d", userAlias = "u") public List listAll(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId) { Map params = sysUserVO.getParams(); String dataScope = (String) params.get("dataScope"); StringBuilder sb = new StringBuilder(); sb.append("select u.user_id as userId, u.dept_id as deptId, u.login_name as loginName, u.user_name as userName, u.user_type as userType, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag as delFlag, u.login_ip as loginIp, u.login_date as loginDate, u.create_by as createBy, u.create_time as createTime, u.remark, d.dept_name as deptName, d.leader from sys_user u left join sys_dept d on u.dept_id = d.dept_id where u.del_flag = '0'"); if (null != status && status != 0) { sb.append(" AND u.status = " + status + ""); } if (StringUtils.isNotBlank(loginName)) { sb.append("AND u.login_name like '%" + loginName + "%'"); } if (StringUtils.isNotBlank(phonenumber)) { sb.append(" AND u.phonenumber like '%" + phonenumber + "%'"); } if (StringUtils.isNotBlank(startTime)) { sb.append(" AND u.create_time >= " + startTime + ""); } if (StringUtils.isNotBlank(endTime)) { sb.append(" AND u.create_time <= " + endTime + ""); } if (null != deptId && deptId != 0) { sb.append("AND (u.dept_id = " + deptId + " OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (" + deptId + ",ancestors) ))"); } if (StringUtils.isNotBlank(dataScope)) { sb.append(" ").append(dataScope); } List list = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysUserVO.class)).list(); return list; } @Override public List queryUserByPhone(String phonenumber) { List list = getSession().createQuery("from SysUserDTO t where t.delFlag='0' and t.phonenumber='" + phonenumber + "'").list(); return list; } @Override @Transactional public void updateUser(SysUserVO user) { //删除角色关联 delUserRolerByUserId(user.getUserId()); //新增用户角色关联 insertUserRole(user.getUserId(), user.getRoleIds()); SysUserDTO o = (SysUserDTO) getSession().createQuery("from SysUserDTO t where t.userId=" + user.getUserId() + "").uniqueResult(); if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getStatus())) { o.setStatus(user.getStatus()); } if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getDelFlag())) { o.setDelFlag(user.getDelFlag()); } if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getPhonenumber())) { o.setPhonenumber(user.getPhonenumber()); } if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getUserName())) { o.setUserName(user.getUserName()); } if (0 != user.getDeptId()) { o.setDeptId(user.getDeptId()); } if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getRemark())) { o.setRemark(user.getRemark()); } getSession().update(o); } @Override public List queryUserByRoleId(Integer roleId) { return (List) getSession().createQuery("from SysUserRoleDTO t where t.roleId=" + roleId + "").list(); } /** * 角色删除 * * @param roleId */ @Override public void remove(Integer roleId) { getSession().createSQLQuery("delete from sys_role where role_id=" + roleId + "").executeUpdate(); } @Override public List queryuserByDepID(Integer deptId) { return (List) getSession().createQuery("from SysUserDTO t where t.deptId=" + deptId + " and delFlag='0'").list(); } @Override public void reSetPW(String password, Integer userId) { SysUserDTO user = (SysUserDTO) getSession().createQuery("from SysUserDTO t where t.userId=" + userId + "").uniqueResult(); String salt = RandomStringUtils.randomNumeric(6, 8); user.setSalt(salt); user.setPassword(new Md5Hash(password, salt).toString()); user.setUpdateBy(ShiroUtils.getLoginName()); user.setUpdateTime(new Timestamp(System.currentTimeMillis())); getSession().saveOrUpdate(user); } @Override public SysUserVO queryuserByLoginName(String loginName) { SysUserDTO user = (SysUserDTO) getSession().createQuery("from SysUserDTO t where t.loginName='" + loginName + "' and t.delFlag='0'").uniqueResult(); return BeanHelp.copyProperties(user, SysUserVO.class); } public void delUserRolerByUserId(Integer userId) { getSession().createSQLQuery("delete from sys_user_role where user_id=" + userId + "").executeUpdate(); } }