package com.usky.service.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.vo.SysUserVO; import com.usky.utils.Page; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.crypto.hash.Md5Hash; import org.hibernate.query.NativeQuery; import org.hibernate.transform.Transformers; import org.springframework.stereotype.Service; 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 public void addUser(SysUserDTO user) { String password = user.getPassword(); String salt = RandomStringUtils.randomNumeric(6, 8); user.setSalt(salt); Md5Hash md5Hash = new Md5Hash(password, salt); //模拟md5加密一次 user.setPassword(md5Hash.toString()); user.setStatus("0"); user.setCreateTime(new Timestamp(System.currentTimeMillis())); getSession().save(user); } @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; } }