UserServiceImpl.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. package com.huaxu.service.impl;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.huaxu.dao.LoginLogMapper;
  4. import com.huaxu.dao.UserMapper;
  5. import com.huaxu.dto.UserDto;
  6. import com.huaxu.entity.LoginLog;
  7. import com.huaxu.entity.Org;
  8. import com.huaxu.entity.User;
  9. import com.huaxu.model.*;
  10. import com.huaxu.security.config.RedisTokenStore;
  11. import com.huaxu.security.exception.SecurityException;
  12. import com.huaxu.security.mobile.MobileLoginAuthenticationToken;
  13. import com.huaxu.security.smsCode.SmsCodeException;
  14. import com.huaxu.service.UserService;
  15. import com.huaxu.util.ByteArrayUtils;
  16. import com.huaxu.util.RedisUtil;
  17. import com.huaxu.util.UserUtil;
  18. import com.huaxu.util.Util;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.data.redis.connection.RedisConnection;
  22. import org.springframework.security.core.GrantedAuthority;
  23. import org.springframework.security.core.authority.SimpleGrantedAuthority;
  24. import org.springframework.security.core.context.SecurityContextHolder;
  25. import org.springframework.security.oauth2.common.OAuth2AccessToken;
  26. import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
  27. import org.springframework.security.oauth2.provider.*;
  28. import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
  29. import org.springframework.security.oauth2.provider.token.ConsumerTokenServices;
  30. import org.springframework.stereotype.Service;
  31. import org.springframework.util.ReflectionUtils;
  32. import javax.servlet.http.HttpServletRequest;
  33. import java.util.*;
  34. import java.util.stream.Collectors;
  35. /**
  36. * 用户(User表)服务实现类
  37. *
  38. * @author makejava
  39. * @since 2020-10-21 15:23:52
  40. */
  41. @Service("userService")
  42. public class UserServiceImpl implements UserService {
  43. @Autowired
  44. private UserMapper userMapper;
  45. @Autowired
  46. private ConsumerTokenServices consumerTokenServices;
  47. @Autowired
  48. private RedisUtil redisUtil;
  49. @Autowired
  50. private HttpServletRequest request;
  51. @Autowired
  52. private ClientDetailsService clientDetailsService;
  53. @Autowired
  54. private AuthorizationServerTokenServices authorizationServerTokenServices;
  55. @Autowired
  56. private LoginLogMapper loginLogMapper;
  57. /**
  58. * 通过ID查询单条数据
  59. *
  60. * @param id 主键
  61. * @return 实例对象
  62. */
  63. @Override
  64. public User selectById(Integer id) {
  65. return this.userMapper.selectById(id);
  66. }
  67. /**
  68. * 查询所有
  69. *
  70. * @return 实例对象的集合
  71. */
  72. @Override
  73. public List<User> selectAll() {
  74. return this.userMapper.selectAll();
  75. }
  76. /**
  77. * 根据条件查询
  78. *
  79. * @return 实例对象的集合
  80. */
  81. @Override
  82. public List<User> selectList(User user) {
  83. return this.userMapper.selectList(user);
  84. }
  85. /**
  86. * 新增数据
  87. *
  88. * @param user 实例对象
  89. * @return 实例对象
  90. */
  91. @Override
  92. public int insert(User user) {
  93. return this.userMapper.insert(user);
  94. }
  95. /**
  96. * 批量新增
  97. *
  98. * @param users 实例对象的集合
  99. * @return 生效的条数
  100. */
  101. @Override
  102. public int batchInsert(List<User> users) {
  103. return this.userMapper.batchInsert(users);
  104. }
  105. /**
  106. * 修改数据
  107. *
  108. * @param user 实例对象
  109. * @return 实例对象
  110. */
  111. @Override
  112. public int update(User user) {
  113. return this.userMapper.update(user);
  114. }
  115. /**
  116. * 通过主键删除数据
  117. *
  118. * @param id 主键
  119. * @return 是否成功
  120. */
  121. @Override
  122. public int deleteById(Integer id) {
  123. return this.userMapper.deleteById(id);
  124. }
  125. /**
  126. * 查询总数据数
  127. *
  128. * @return 数据总数
  129. */
  130. @Override
  131. public int count() {
  132. return this.userMapper.count();
  133. }
  134. /**
  135. * 分页查询
  136. *
  137. * @return 对象列表
  138. */
  139. @Override
  140. public IPage<User> selectPage(User user, IPage<User> page) {
  141. return this.userMapper.selectPage(page, user);
  142. }
  143. @Override
  144. public User findUser(User user) {
  145. List<User> users = userMapper.selectList(user);
  146. if(users!=null&&users.size()>0){
  147. return users.get(0);
  148. }
  149. return null;
  150. }
  151. @Override
  152. public User chooseUser(User user) {
  153. user=findUser(user);
  154. UserDto userDto=new UserDto();
  155. userDto.setPhone(user.getPhone());
  156. Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
  157. OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
  158. LoginUser loginUser = (LoginUser) oAuth2Authentication.getPrincipal();
  159. List<ProgramItem>programItems=new ArrayList<>();
  160. Permission permission= findPermission(user);
  161. if(permission==null||(permission!=null&&permission.getRoleState()==0)){
  162. return null;
  163. }
  164. getDataPermission(permission.getPermissionType(),user,programItems);
  165. //角色必须是ROLE_开头,其余的是用户功能权限
  166. /*
  167. Integer permissionType = permissionList.get(0).getPermissionType();
  168. List<ProgramItem> programItemList = newArrayList();
  169. //获取数据权限
  170. //分配功能权限
  171. if (permissionList.size() > 0) {
  172. for (Permission permission : permissionList) {
  173. if(!StringUtils.equals("",permission.getPermission())){
  174. GrantedAuthority authority1 = new SimpleGrantedAuthority(permission.getPermission());
  175. grantedAuthorities.add(authority1);
  176. }
  177. }
  178. }
  179. loginUser.setProgramItemList(programItemList);
  180. */
  181. loginUser.setName(user.getUsername());
  182. loginUser.setId(user.getId());
  183. loginUser.setUsername(user.getUsername());
  184. loginUser.setCompanyId(user.getCompanyOrgId());
  185. loginUser.setDepartmentId(user.getDeptOrgId());
  186. loginUser.setTenantId(user.getTenantId());
  187. loginUser.setType(user.getUserType());
  188. loginUser.setPhoneNumber(user.getPhone());
  189. loginUser.setAuthorities(grantedAuthorities);
  190. loginUser.setPermissonType(permission.getPermissionType());
  191. loginUser.setRoleId(permission.getRoleId());
  192. MobileLoginAuthenticationToken authenticationTokenReslut = new MobileLoginAuthenticationToken(loginUser,oAuth2Authentication.getCredentials(),loginUser.getAuthorities());
  193. authenticationTokenReslut.setDetails(oAuth2Authentication.getDetails());
  194. OAuth2Authentication oAuth2AuthenticationNew = new OAuth2Authentication(oAuth2Authentication.getOAuth2Request(), authenticationTokenReslut);
  195. OAuth2AccessToken accessToken = authorizationServerTokenServices.createAccessToken(oAuth2AuthenticationNew);
  196. insertLoginLog(loginUser,"登录");
  197. return user;
  198. }
  199. private void getDataPermission(int permissionType,User user, List<ProgramItem> programItemList){
  200. if(permissionType==1){
  201. ProgramItem programItem=new ProgramItem();
  202. programItem.setOrgId(user.getCompanyOrgId());
  203. programItemList.add(programItem);
  204. }else if(permissionType==2){
  205. Map<Integer, List<Org>> allOrgs = getAllOrgs("company",user.getTenantId());
  206. getOrg(user.getCompanyOrgId(),allOrgs,programItemList);
  207. }else if(permissionType==3){
  208. ProgramItem programItem=new ProgramItem();
  209. programItem.setOrgId(user.getDeptOrgId());
  210. programItemList.add(programItem);
  211. }else if(permissionType==4) {
  212. Map<Integer, List<Org>> allOrgs = getAllOrgs("department",user.getTenantId());
  213. getOrg(user.getDeptOrgId(),allOrgs,programItemList);
  214. }else if(permissionType==5){
  215. programItemList= userMapper.findOrgRole(user);
  216. programItemList.forEach(programItem -> {
  217. programItem.setCode(user.getTenantId());
  218. });
  219. }
  220. }
  221. private Map<Integer, List<Org>> getAllOrgs(String orgType,String tenantId){
  222. Org org=new Org();
  223. org.setOrgType(orgType);
  224. org.setTenantId(tenantId);
  225. List<Org> orgs = userMapper.findOrgs(org);
  226. Map<Integer, List<Org>> collect = orgs.stream().
  227. collect(Collectors.groupingBy(d -> d.getParentOrgId()));
  228. return collect;
  229. };
  230. public void getOrg(Integer id, Map<Integer, List<Org>> collect,List<ProgramItem>programItemList){
  231. List<Org> orgs = collect.get(id);
  232. if(orgs!=null){
  233. orgs.forEach(org->{
  234. ProgramItem item=new ProgramItem();
  235. item.setOrgId(org.getId());
  236. item.setCode(org.getTenantId());
  237. programItemList.add(item);
  238. getOrg(org.getId(),collect,programItemList);
  239. });
  240. }
  241. }
  242. private Permission findPermission(User user){
  243. List<Permission> permissionList = userMapper.findPermission(user);
  244. if(permissionList.size()==0){
  245. return null;
  246. }
  247. return permissionList.get(0);
  248. }
  249. @Override
  250. public boolean logOut(String token) {
  251. boolean flag=consumerTokenServices.revokeToken(token);
  252. insertLoginLog(UserUtil.getCurrentUser(),"登出");
  253. return flag;
  254. }
  255. private void insertLoginLog(LoginUser loginUser,String type){
  256. LoginLog loginLog=new LoginLog();
  257. loginLog.setName(loginUser.getName());
  258. loginLog.setPhone(loginUser.getPhoneNumber());
  259. loginLog.setCompanyId(loginUser.getCompanyId());
  260. loginLog.setDepartmentId(loginUser.getDepartmentId());
  261. loginLog.setType(type);
  262. loginLog.setCreateTime(new Date());
  263. loginLog.setLoginIp(Util.getIpAddr(request));
  264. loginLogMapper.insert(loginLog);
  265. }
  266. /**
  267. * 新增注册数据
  268. * @author yjy
  269. * @param user 实例对象
  270. * @return 影响行数
  271. */
  272. @Override
  273. public int insertRegister(User user) {
  274. return this.userMapper.insertRegister(user);
  275. }
  276. }