UserServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package com.usky.service.sys.user;
  2. import com.usky.annotion.DataScope;
  3. import com.usky.dao.impl.BaseDaoImpl;
  4. import com.usky.entity.sys.SysRoleDTO;
  5. import com.usky.entity.sys.SysUserDTO;
  6. import com.usky.entity.sys.SysUserRoleDTO;
  7. import com.usky.entity.sys.vo.SysUserVO;
  8. import com.usky.utils.BeanHelp;
  9. import com.usky.utils.Page;
  10. import com.usky.utils.ShiroUtils;
  11. import com.usky.utils.StringUtils;
  12. import org.apache.commons.lang3.RandomStringUtils;
  13. import org.apache.shiro.crypto.hash.Md5Hash;
  14. import org.hibernate.query.NativeQuery;
  15. import org.hibernate.transform.Transformers;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.sql.Timestamp;
  19. import java.util.*;
  20. /**
  21. * @author laowo
  22. * @version v1.0
  23. * @date 2021/8/20 15:08
  24. * @description TODO
  25. **/
  26. @Service
  27. public class UserServiceImpl extends BaseDaoImpl implements UserService {
  28. @Override
  29. @Transactional
  30. public void addUser(SysUserVO user) {
  31. SysUserDTO sysUserDTO = BeanHelp.copyProperties(user, SysUserDTO.class);
  32. String password = sysUserDTO.getPassword();
  33. String salt = RandomStringUtils.randomNumeric(6, 8);
  34. sysUserDTO.setSalt(salt);
  35. Md5Hash md5Hash = new Md5Hash(password, salt); //模拟md5加密一次
  36. sysUserDTO.setPassword(md5Hash.toString());
  37. sysUserDTO.setStatus("0");
  38. //用户类型
  39. sysUserDTO.setUserType("01");
  40. sysUserDTO.setDelFlag("0");
  41. sysUserDTO.setCreateBy(ShiroUtils.getLoginName());
  42. sysUserDTO.setCreateTime(new Timestamp(System.currentTimeMillis()));
  43. getSession().save(sysUserDTO);
  44. insertUserRole(sysUserDTO.getUserId(), user.getRoleIds());
  45. }
  46. /**
  47. * @param userId
  48. * @param roleIds
  49. */
  50. public void insertUserRole(Integer userId, String roleIds) {
  51. if (StringUtils.isNotNull(roleIds)) {
  52. // 新增用户与角色管理
  53. String[] split = roleIds.split(",");
  54. for (String roleId : split) {
  55. SysUserRoleDTO ur = new SysUserRoleDTO();
  56. ur.setUserId(userId);
  57. ur.setRoleId(Integer.valueOf(roleId));
  58. getSession().save(ur);
  59. getSession().flush();
  60. getSession().clear();
  61. }
  62. }
  63. }
  64. @Override
  65. @SuppressWarnings("all")
  66. public Set<String> queryRoleKeys(long userId) {
  67. String sql = "SELECT DISTINCT\n" +
  68. "\tr.role_id AS roleId,\n" +
  69. "\tr.role_name AS roleName,\n" +
  70. "\tr.role_key AS roleKey,\n" +
  71. "\tr.role_sort AS roleSort,\n" +
  72. "\tr.data_scope AS dataScope,\n" +
  73. "\tr.STATUS AS `status`,\n" +
  74. "\tr.del_flag AS delFlag,\n" +
  75. "\tr.create_time AS createTime,\n" +
  76. "\tr.remark \n" +
  77. "FROM\n" +
  78. "\tsys_role r\n" +
  79. "\tLEFT JOIN sys_user_role ur ON ur.role_id = r.role_id\n" +
  80. "\tLEFT JOIN sys_user u ON u.user_id = ur.user_id\n" +
  81. "\tLEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = " + userId + "";
  82. List<SysRoleDTO> perms = getSession().createSQLQuery(sql)
  83. .setResultTransformer(Transformers.aliasToBean(SysRoleDTO.class)).list();
  84. Set<String> permsSet = new HashSet<>();
  85. for (SysRoleDTO perm : perms) {
  86. if (perm != null) {
  87. permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
  88. }
  89. }
  90. return permsSet;
  91. }
  92. @Override
  93. @DataScope(deptAlias = "d", userAlias = "u")
  94. public Page<SysUserVO> list(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId, Integer pageSize, Integer pageNo) {
  95. Map<String, Object> params = sysUserVO.getParams();
  96. String dataScope = (String) params.get("dataScope");
  97. StringBuilder sb = new StringBuilder();
  98. 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'");
  99. if (null != status && status != 0) {
  100. sb.append(" AND u.status = " + status + "");
  101. }
  102. if (StringUtils.isNotBlank(loginName)) {
  103. sb.append("AND u.login_name like '%" + loginName + "%'");
  104. }
  105. if (StringUtils.isNotBlank(phonenumber)) {
  106. sb.append(" AND u.phonenumber like '%" + phonenumber + "%'");
  107. }
  108. if (StringUtils.isNotBlank(startTime)) {
  109. sb.append(" AND u.create_time >= " + startTime + "");
  110. }
  111. if (StringUtils.isNotBlank(endTime)) {
  112. sb.append(" AND u.create_time <= " + endTime + "");
  113. }
  114. if (null != deptId && deptId != 0) {
  115. 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) ))");
  116. }
  117. if (StringUtils.isNotBlank(dataScope)) {
  118. sb.append(" ").append(dataScope);
  119. }
  120. List list = getSession().createSQLQuery(sb.toString()).list();
  121. Page<SysUserVO> result = new Page<>(list.size(), pageSize);
  122. NativeQuery sqlQuery = getSession().createSQLQuery(sb.toString());
  123. sqlQuery.setFirstResult((pageNo - 1) * pageSize);
  124. sqlQuery.setMaxResults(pageSize);
  125. List<SysUserVO> sysUserVOList = sqlQuery.setResultTransformer(Transformers.aliasToBean(SysUserVO.class)).list();
  126. result.setPageList(sysUserVOList);
  127. result.setPageNo(pageNo);
  128. return result;
  129. }
  130. @Override
  131. @DataScope(deptAlias = "d", userAlias = "u")
  132. public List<SysUserVO> listAll(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId) {
  133. Map<String, Object> params = sysUserVO.getParams();
  134. String dataScope = (String) params.get("dataScope");
  135. StringBuilder sb = new StringBuilder();
  136. 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'");
  137. if (null != status && status != 0) {
  138. sb.append(" AND u.status = " + status + "");
  139. }
  140. if (StringUtils.isNotBlank(loginName)) {
  141. sb.append("AND u.login_name like '%" + loginName + "%'");
  142. }
  143. if (StringUtils.isNotBlank(phonenumber)) {
  144. sb.append(" AND u.phonenumber like '%" + phonenumber + "%'");
  145. }
  146. if (StringUtils.isNotBlank(startTime)) {
  147. sb.append(" AND u.create_time >= " + startTime + "");
  148. }
  149. if (StringUtils.isNotBlank(endTime)) {
  150. sb.append(" AND u.create_time <= " + endTime + "");
  151. }
  152. if (null != deptId && deptId != 0) {
  153. 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) ))");
  154. }
  155. if (StringUtils.isNotBlank(dataScope)) {
  156. sb.append(" ").append(dataScope);
  157. }
  158. List<SysUserVO> list = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysUserVO.class)).list();
  159. return list;
  160. }
  161. @Override
  162. public List<SysUserDTO> queryUserByPhone(String phonenumber) {
  163. List<SysUserDTO> list = getSession().createQuery("from SysUserDTO t where t.delFlag='0' and t.phonenumber='" + phonenumber + "'").list();
  164. return list;
  165. }
  166. @Override
  167. @Transactional
  168. public void updateUser(SysUserVO user) {
  169. //删除角色关联
  170. delUserRolerByUserId(user.getUserId());
  171. //新增用户角色关联
  172. insertUserRole(user.getUserId(), user.getRoleIds());
  173. SysUserDTO o = (SysUserDTO) getSession().createQuery("from SysUserDTO t where t.userId=" + user.getUserId() + "").uniqueResult();
  174. if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getStatus())) {
  175. o.setStatus(user.getStatus());
  176. }
  177. if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getDelFlag())) {
  178. o.setDelFlag(user.getDelFlag());
  179. }
  180. if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getPhonenumber())) {
  181. o.setPhonenumber(user.getPhonenumber());
  182. }
  183. if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getUserName())) {
  184. o.setUserName(user.getUserName());
  185. }
  186. if (0 != user.getDeptId()) {
  187. o.setDeptId(user.getDeptId());
  188. }
  189. if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getRemark())) {
  190. o.setRemark(user.getRemark());
  191. }
  192. getSession().update(o);
  193. }
  194. @Override
  195. public List<SysUserRoleDTO> queryUserByRoleId(Integer roleId) {
  196. return (List<SysUserRoleDTO>) getSession().createQuery("from SysUserRoleDTO t where t.roleId=" + roleId + "").list();
  197. }
  198. /**
  199. * 角色删除
  200. *
  201. * @param roleId
  202. */
  203. @Override
  204. public void remove(Integer roleId) {
  205. getSession().createSQLQuery("delete from sys_role where role_id=" + roleId + "").executeUpdate();
  206. }
  207. @Override
  208. public List<SysUserDTO> queryuserByDepID(Integer deptId) {
  209. return (List<SysUserDTO>) getSession().createQuery("from SysUserDTO t where t.deptId=" + deptId + " and delFlag='0'").list();
  210. }
  211. @Override
  212. public void reSetPW(String password, Integer userId) {
  213. SysUserDTO user = (SysUserDTO) getSession().createQuery("from SysUserDTO t where t.userId=" + userId + "").uniqueResult();
  214. String salt = RandomStringUtils.randomNumeric(6, 8);
  215. user.setSalt(salt);
  216. user.setPassword(new Md5Hash(password, salt).toString());
  217. user.setUpdateBy(ShiroUtils.getLoginName());
  218. user.setUpdateTime(new Timestamp(System.currentTimeMillis()));
  219. getSession().saveOrUpdate(user);
  220. }
  221. @Override
  222. public SysUserVO queryuserByLoginName(String loginName) {
  223. SysUserDTO user = (SysUserDTO) getSession().createQuery("from SysUserDTO t where t.loginName='" + loginName + "' and t.delFlag='0'").uniqueResult();
  224. return BeanHelp.copyProperties(user, SysUserVO.class);
  225. }
  226. public void delUserRolerByUserId(Integer userId) {
  227. getSession().createSQLQuery("delete from sys_user_role where user_id=" + userId + "").executeUpdate();
  228. }
  229. }