123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- package com.huaxu.service.impl;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.huaxu.dao.LoginLogMapper;
- import com.huaxu.dao.UserMapper;
- import com.huaxu.dto.UserDto;
- import com.huaxu.entity.LoginLog;
- import com.huaxu.entity.Org;
- import com.huaxu.entity.User;
- import com.huaxu.model.*;
- import com.huaxu.security.config.RedisTokenStore;
- import com.huaxu.security.exception.SecurityException;
- import com.huaxu.security.mobile.MobileLoginAuthenticationToken;
- import com.huaxu.security.smsCode.SmsCodeException;
- import com.huaxu.service.UserService;
- import com.huaxu.util.ByteArrayUtils;
- import com.huaxu.util.RedisUtil;
- import com.huaxu.util.UserUtil;
- import com.huaxu.util.Util;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.connection.RedisConnection;
- import org.springframework.security.core.GrantedAuthority;
- import org.springframework.security.core.authority.SimpleGrantedAuthority;
- import org.springframework.security.core.context.SecurityContextHolder;
- import org.springframework.security.oauth2.common.OAuth2AccessToken;
- import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
- import org.springframework.security.oauth2.provider.*;
- import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
- import org.springframework.security.oauth2.provider.token.ConsumerTokenServices;
- import org.springframework.stereotype.Service;
- import org.springframework.util.ReflectionUtils;
- import javax.servlet.http.HttpServletRequest;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * 用户(User表)服务实现类
- *
- * @author makejava
- * @since 2020-10-21 15:23:52
- */
- @Service("userService")
- public class UserServiceImpl implements UserService {
- @Autowired
- private UserMapper userMapper;
- @Autowired
- private ConsumerTokenServices consumerTokenServices;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private HttpServletRequest request;
- @Autowired
- private ClientDetailsService clientDetailsService;
- @Autowired
- private AuthorizationServerTokenServices authorizationServerTokenServices;
- @Autowired
- private LoginLogMapper loginLogMapper;
- /**
- * 通过ID查询单条数据
- *
- * @param id 主键
- * @return 实例对象
- */
- @Override
- public User selectById(Integer id) {
- return this.userMapper.selectById(id);
- }
- /**
- * 查询所有
- *
- * @return 实例对象的集合
- */
- @Override
- public List<User> selectAll() {
- return this.userMapper.selectAll();
- }
- /**
- * 根据条件查询
- *
- * @return 实例对象的集合
- */
- @Override
- public List<User> selectList(User user) {
- return this.userMapper.selectList(user);
- }
- /**
- * 新增数据
- *
- * @param user 实例对象
- * @return 实例对象
- */
- @Override
- public int insert(User user) {
- return this.userMapper.insert(user);
- }
- /**
- * 批量新增
- *
- * @param users 实例对象的集合
- * @return 生效的条数
- */
- @Override
- public int batchInsert(List<User> users) {
- return this.userMapper.batchInsert(users);
- }
- /**
- * 修改数据
- *
- * @param user 实例对象
- * @return 实例对象
- */
- @Override
- public int update(User user) {
- return this.userMapper.update(user);
- }
- /**
- * 通过主键删除数据
- *
- * @param id 主键
- * @return 是否成功
- */
- @Override
- public int deleteById(Integer id) {
- return this.userMapper.deleteById(id);
- }
- /**
- * 查询总数据数
- *
- * @return 数据总数
- */
- @Override
- public int count() {
- return this.userMapper.count();
- }
- /**
- * 分页查询
- *
- * @return 对象列表
- */
- @Override
- public IPage<User> selectPage(User user, IPage<User> page) {
- return this.userMapper.selectPage(page, user);
- }
- @Override
- public User findUser(User user) {
- List<User> users = userMapper.selectList(user);
- if(users!=null&&users.size()>0){
- return users.get(0);
- }
- return null;
- }
- @Override
- public User chooseUser(User user) {
- user=findUser(user);
- UserDto userDto=new UserDto();
- userDto.setPhone(user.getPhone());
- Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
- OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
- LoginUser loginUser = (LoginUser) oAuth2Authentication.getPrincipal();
- List<ProgramItem>programItems=new ArrayList<>();
- Permission permission= findPermission(user);
- if(permission==null||(permission!=null&&permission.getRoleState()==0)){
- return null;
- }
- getDataPermission(permission.getPermissionType(),user,programItems);
- //角色必须是ROLE_开头,其余的是用户功能权限
- /*
- Integer permissionType = permissionList.get(0).getPermissionType();
- List<ProgramItem> programItemList = newArrayList();
- //获取数据权限
- //分配功能权限
- if (permissionList.size() > 0) {
- for (Permission permission : permissionList) {
- if(!StringUtils.equals("",permission.getPermission())){
- GrantedAuthority authority1 = new SimpleGrantedAuthority(permission.getPermission());
- grantedAuthorities.add(authority1);
- }
- }
- }
- loginUser.setProgramItemList(programItemList);
- */
- loginUser.setName(user.getUsername());
- loginUser.setId(user.getId());
- loginUser.setUsername(user.getUsername());
- loginUser.setCompanyId(user.getCompanyOrgId());
- loginUser.setDepartmentId(user.getDeptOrgId());
- loginUser.setTenantId(user.getTenantId());
- loginUser.setType(user.getUserType());
- loginUser.setPhoneNumber(user.getPhone());
- loginUser.setAuthorities(grantedAuthorities);
- loginUser.setPermissonType(permission.getPermissionType());
- loginUser.setRoleId(permission.getRoleId());
- MobileLoginAuthenticationToken authenticationTokenReslut = new MobileLoginAuthenticationToken(loginUser,oAuth2Authentication.getCredentials(),loginUser.getAuthorities());
- authenticationTokenReslut.setDetails(oAuth2Authentication.getDetails());
- OAuth2Authentication oAuth2AuthenticationNew = new OAuth2Authentication(oAuth2Authentication.getOAuth2Request(), authenticationTokenReslut);
- OAuth2AccessToken accessToken = authorizationServerTokenServices.createAccessToken(oAuth2AuthenticationNew);
- insertLoginLog(loginUser,"登录");
- return user;
- }
- private void getDataPermission(int permissionType,User user, List<ProgramItem> programItemList){
- if(permissionType==1){
- ProgramItem programItem=new ProgramItem();
- programItem.setOrgId(user.getCompanyOrgId());
- programItemList.add(programItem);
- }else if(permissionType==2){
- Map<Integer, List<Org>> allOrgs = getAllOrgs("company",user.getTenantId());
- getOrg(user.getCompanyOrgId(),allOrgs,programItemList);
- }else if(permissionType==3){
- ProgramItem programItem=new ProgramItem();
- programItem.setOrgId(user.getDeptOrgId());
- programItemList.add(programItem);
- }else if(permissionType==4) {
- Map<Integer, List<Org>> allOrgs = getAllOrgs("department",user.getTenantId());
- getOrg(user.getDeptOrgId(),allOrgs,programItemList);
- }else if(permissionType==5){
- programItemList= userMapper.findOrgRole(user);
- programItemList.forEach(programItem -> {
- programItem.setCode(user.getTenantId());
- });
- }
- }
- private Map<Integer, List<Org>> getAllOrgs(String orgType,String tenantId){
- Org org=new Org();
- org.setOrgType(orgType);
- org.setTenantId(tenantId);
- List<Org> orgs = userMapper.findOrgs(org);
- Map<Integer, List<Org>> collect = orgs.stream().
- collect(Collectors.groupingBy(d -> d.getParentOrgId()));
- return collect;
- };
- public void getOrg(Integer id, Map<Integer, List<Org>> collect,List<ProgramItem>programItemList){
- List<Org> orgs = collect.get(id);
- if(orgs!=null){
- orgs.forEach(org->{
- ProgramItem item=new ProgramItem();
- item.setOrgId(org.getId());
- item.setCode(org.getTenantId());
- programItemList.add(item);
- getOrg(org.getId(),collect,programItemList);
- });
- }
- }
- private Permission findPermission(User user){
- List<Permission> permissionList = userMapper.findPermission(user);
- if(permissionList.size()==0){
- return null;
- }
- return permissionList.get(0);
- }
- @Override
- public boolean logOut(String token) {
- boolean flag=consumerTokenServices.revokeToken(token);
- insertLoginLog(UserUtil.getCurrentUser(),"登出");
- return flag;
- }
- private void insertLoginLog(LoginUser loginUser,String type){
- LoginLog loginLog=new LoginLog();
- loginLog.setName(loginUser.getName());
- loginLog.setPhone(loginUser.getPhoneNumber());
- loginLog.setCompanyId(loginUser.getCompanyId());
- loginLog.setDepartmentId(loginUser.getDepartmentId());
- loginLog.setType(type);
- loginLog.setCreateTime(new Date());
- loginLog.setLoginIp(Util.getIpAddr(request));
- loginLogMapper.insert(loginLog);
- }
- /**
- * 新增注册数据
- * @author yjy
- * @param user 实例对象
- * @return 影响行数
- */
- @Override
- public int insertRegister(User user) {
- return this.userMapper.insertRegister(user);
- }
- }
|