UserServiceImpl.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package com.fdkankan.manage_jp.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.fdkankan.common.util.Base64Converter;
  7. import com.fdkankan.common.util.JwtUtil;
  8. import com.fdkankan.common.util.PasswordUtils;
  9. import com.fdkankan.common.util.SecurityUtil;
  10. import com.fdkankan.manage_jp.common.PageInfo;
  11. import com.fdkankan.manage_jp.common.ResultCode;
  12. import com.fdkankan.manage_jp.entity.Company;
  13. import com.fdkankan.manage_jp.entity.Role;
  14. import com.fdkankan.manage_jp.entity.User;
  15. import com.fdkankan.manage_jp.entity.UserRole;
  16. import com.fdkankan.manage_jp.exception.BusinessException;
  17. import com.fdkankan.manage_jp.mapper.IUserMapper;
  18. import com.fdkankan.manage_jp.service.ICompanyService;
  19. import com.fdkankan.manage_jp.service.IRoleService;
  20. import com.fdkankan.manage_jp.service.IUserRoleService;
  21. import com.fdkankan.manage_jp.service.IUserService;
  22. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  23. import com.fdkankan.manage_jp.util.PasswordUtil;
  24. import com.fdkankan.manage_jp.vo.request.LoginParam;
  25. import com.fdkankan.manage_jp.vo.request.RequestCompany;
  26. import com.fdkankan.manage_jp.vo.request.UserListParam;
  27. import com.fdkankan.manage_jp.vo.request.UserParam;
  28. import com.fdkankan.manage_jp.vo.response.LoginVo;
  29. import com.fdkankan.manage_jp.vo.response.UserVo;
  30. import com.fdkankan.redis.constant.RedisKey;
  31. import com.fdkankan.redis.util.RedisUtil;
  32. import org.apache.commons.lang3.StringUtils;
  33. import org.springframework.beans.BeanUtils;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.stereotype.Service;
  36. import java.util.ArrayList;
  37. import java.util.List;
  38. import java.util.Set;
  39. import java.util.stream.Collectors;
  40. /**
  41. * <p>
  42. * 用户信息表 服务实现类
  43. * </p>
  44. *
  45. * @author
  46. * @since 2022-12-23
  47. */
  48. @Service
  49. public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements IUserService {
  50. @Autowired
  51. ICompanyService companyService;
  52. @Autowired
  53. private RedisUtil redisUtil;
  54. @Autowired
  55. IUserRoleService userRoleService;
  56. @Autowired
  57. IRoleService roleService;
  58. @Override
  59. public User getByUserName(String managerPhone) {
  60. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  61. wrapper.eq(User::getUserName,managerPhone);
  62. return this.getOne(wrapper);
  63. }
  64. @Override
  65. public PageInfo getPageByCompany(RequestCompany bo) {
  66. Company company = companyService.getById(bo.getId());
  67. if(company == null){
  68. throw new BusinessException(ResultCode.NOT_RECORD);
  69. }
  70. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  71. wrapper.eq(User::getCompanyId,bo.getId());
  72. wrapper.ne(User::getId,company.getManagerId());
  73. if(StringUtils.isNotBlank(bo.getUserName())){
  74. wrapper.like(User::getUserName,bo.getUserName());
  75. }
  76. Page<User> page = this.page(new Page<>(bo.getPageNum(), bo.getPageSize()), wrapper);
  77. for (User record : page.getRecords()) {
  78. record.setPassword(null);
  79. }
  80. return PageInfo.PageInfo(page);
  81. }
  82. @Override
  83. public User findByUserName(String phoneNum) {
  84. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  85. wrapper.eq(User::getUserName,phoneNum);
  86. return this.getOne(wrapper);
  87. }
  88. @Override
  89. public List<User> findByCompanyId(Long id) {
  90. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  91. wrapper.eq(User::getCompanyId,id);
  92. return this.list(wrapper);
  93. }
  94. @Override
  95. public List<User> findByUserNameList(String userName) {
  96. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  97. wrapper.like(User::getUserName,userName);
  98. return this.list(wrapper);
  99. }
  100. public LoginVo login(LoginParam param) {
  101. if (StringUtils.isEmpty(param.getPassword()) || StringUtils.isEmpty(param.getPhoneNum())){
  102. throw new BusinessException(ResultCode.PARAM_ERROR);
  103. }
  104. String password = Base64Converter.decode(Base64Converter.subText(param.getPassword()));
  105. String passwordCode = SecurityUtil.MD5(password);
  106. User user = this.getByUserName(param.getPhoneNum());
  107. if(user == null){
  108. throw new BusinessException(ResultCode.USER_NOT_EXIST);
  109. }
  110. if(!user.getPassword().equals(passwordCode)){
  111. throw new BusinessException(ResultCode.PASSWORD_ERROR);
  112. }
  113. String token = this.redisLogin(user.getUserName(), JSONObject.toJSONString(user),"user");
  114. UserVo userVo = getUserVo(user);
  115. LoginVo vo = new LoginVo();
  116. vo.setToken(token);
  117. vo.setUser(userVo);
  118. return vo;
  119. }
  120. public String redisLogin(String userName,String value,String loginType){
  121. String token = JwtUtil.createJWT(-1,userName,loginType);
  122. String redisKey = String.format(RedisKey.TOKEN_V3,token);
  123. redisUtil.set(redisKey, value,2 * 60 * 60);
  124. return token;
  125. }
  126. @Override
  127. public Object getUserInfo(String username) {
  128. User user = this.getByUserName(username);
  129. return getUserVo(user);
  130. }
  131. private UserVo getUserVo(User user){
  132. UserVo userVo = new UserVo();
  133. BeanUtils.copyProperties(user,userVo);
  134. List<UserRole> userRoles = userRoleService.getByUserId(userVo.getId());
  135. Set<Long> roleIds = userRoles.stream().map(UserRole::getRoleId).collect(Collectors.toSet());
  136. userVo.setRoleIds(roleIds);
  137. return userVo;
  138. }
  139. @Override
  140. public Object pageList(UserListParam param,User user) {
  141. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  142. if(StringUtils.isNotBlank(param.getPhoneNum())){
  143. wrapper.like(User::getUserName,param.getPhoneNum());
  144. }
  145. Set<Long> roleIds = userRoleService.getByUser(user);
  146. if(roleIds.contains(6L)){
  147. wrapper.eq(User::getCompanyId,user.getCompanyId());
  148. }
  149. wrapper.orderByDesc(User::getCreateTime);
  150. Page<User> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  151. List<UserVo> userVos = new ArrayList<>();
  152. for (User record : page.getRecords()) {
  153. UserVo vo = new UserVo();
  154. BeanUtils.copyProperties(record,vo);
  155. List<UserRole> userRoleList = userRoleService.getByUserId(record.getId());
  156. if(userRoleList.size() >0){
  157. Role role = roleService.getById(userRoleList.get(0).getRoleId());
  158. vo.setRoleName(role.getRoleName());
  159. }
  160. if(record.getCompanyId() != null){
  161. Company company = companyService.getById(record.getCompanyId());
  162. if(company != null){
  163. vo.setCompanyName(company.getCompanyName());
  164. }
  165. }
  166. userVos.add(vo);
  167. }
  168. Page<UserVo> pageVo = new Page<>(param.getPageNum(),param.getPageSize());
  169. pageVo.setTotal(page.getTotal());
  170. pageVo.setRecords(userVos);
  171. return PageInfo.PageInfo(pageVo);
  172. }
  173. @Override
  174. public void updatePassword(UserParam param) {
  175. if(param.getId() == null || StringUtils.isBlank(param.getNewPassword())){
  176. throw new BusinessException(ResultCode.PARAM_ERROR);
  177. }
  178. if(StringUtils.isNotBlank(param.getPassword())){
  179. String oldPassword = Base64Converter.decode(Base64Converter.subText(param.getPassword()));
  180. String passwordOldCode = SecurityUtil.MD5(oldPassword);
  181. User user = this.getById(param.getId());
  182. if(!user.getPassword().equals(passwordOldCode)){
  183. throw new BusinessException(ResultCode.OLD_PASSWORD_ERROR);
  184. }
  185. }
  186. String password = Base64Converter.decode(Base64Converter.subText(param.getNewPassword()));
  187. if(!PasswordUtil.checkPasswordFormal(password)){
  188. throw new BusinessException(ResultCode.PASSWORD_TYPE_ERROR);
  189. }
  190. String passwordCode = SecurityUtil.MD5(password);
  191. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  192. wrapper.eq(User::getId,param.getId());
  193. wrapper.set(User::getPassword,passwordCode);
  194. this.update(wrapper);
  195. }
  196. @Override
  197. public void logout(String token) {
  198. redisUtil.del(String.format(RedisKey.TOKEN_V3,token));
  199. }
  200. @Override
  201. public List<User> allList(User param) {
  202. if(StringUtils.isNotBlank(param.getUserName())){
  203. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  204. wrapper.like(User::getUserName,param.getUserName());
  205. return this.list(wrapper);
  206. }
  207. return this.list();
  208. }
  209. }