| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.gkhy.assess.common.api.CommonPage; |
| | | import com.gkhy.assess.common.constant.CacheConstant; |
| | | import com.gkhy.assess.common.domain.CustomerUsernamePasswordToken; |
| | | import com.gkhy.assess.common.domain.vo.AccountVO; |
| | | import com.gkhy.assess.common.domain.vo.LoginBody; |
| | | import com.gkhy.assess.common.enums.AttachTypeEnum; |
| | |
| | | |
| | | @Override |
| | | public AccountVO login(LoginBody loginBody) { |
| | | if(loginBody.getIdentity()==null){ |
| | | throw new ApiException("请选择登录用户身份"); |
| | | } |
| | | // 验证码校验 |
| | | validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid()); |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false); |
| | | // UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false); |
| | | CustomerUsernamePasswordToken usernamePasswordToken=new CustomerUsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()),loginBody.getIdentity()); |
| | | Subject subject= SecurityUtils.getSubject(); |
| | | String msg ; |
| | | try { |
| | |
| | | accountVO.setAgentName(agency.getName()); |
| | | accountVO.setAgentId(agency.getId()); |
| | | } |
| | | String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword()); |
| | | String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity()); |
| | | accountVO.setToken(token); |
| | | cacheUserToken(sysUser.getUsername(),token); |
| | | cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token); |
| | | return accountVO; |
| | | }catch (UnknownAccountException | IncorrectCredentialsException uae){ |
| | | throw new ApiException("用户名/密码错误,请重新输入"); |
| | |
| | | |
| | | @Override |
| | | public AccountVO appLogin(LoginBody loginBody) { |
| | | // 验证码校验 |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false); |
| | | // app端只能是专家用户登录 |
| | | loginBody.setIdentity(UserIdentityEnum.EXPERT.getCode()); |
| | | CustomerUsernamePasswordToken usernamePasswordToken = new CustomerUsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), loginBody.getIdentity()); |
| | | Subject subject= SecurityUtils.getSubject(); |
| | | String msg ; |
| | | try { |
| | |
| | | accountVO.setAgentName(agency.getName()); |
| | | accountVO.setAgentId(agency.getId()); |
| | | } |
| | | String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword()); |
| | | String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity()); |
| | | accountVO.setToken(token); |
| | | cacheUserToken(sysUser.getUsername(),token); |
| | | accountVO.setUserFace(userFaceMapper.getFaceByUserId(sysUser.getId())); |
| | | cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token); |
| | | accountVO.setIdPhoto(sysUser.getIdPhoto()); |
| | | return accountVO; |
| | | }catch (UnknownAccountException | IncorrectCredentialsException uae){ |
| | | throw new ApiException("用户名/密码错误,请重新输入"); |
| | |
| | | * 清空旧的登录信息,保证同时只有一个用户再登录,后登录用户会挤掉前一个用户 |
| | | * @param username |
| | | */ |
| | | public void cacheUserToken(String username,String newToken){ |
| | | |
| | | String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username); |
| | | public void cacheUserToken(String username,Integer identity,String newToken){ |
| | | String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username+"_"+identity); |
| | | String oldToken = (String) redisUtils.get(userKey); |
| | | if (StringUtils.isNotBlank(oldToken)) { |
| | | String oldTokenkey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + JwtTokenUtil.md5Encode(oldToken)); |
| | |
| | | redisUtils.set(tokenKey,newToken); |
| | | redisUtils.expire(tokenKey,JwtTokenUtil.EXPIRATION*2/1000); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 校验验证码 |
| | |
| | | String jwtToken = request.getHeader(JwtTokenUtil.USER_LOGIN_TOKEN); |
| | | if(StringUtils.isNotBlank(jwtToken)){ |
| | | String username=JwtTokenUtil.getUsername(jwtToken); |
| | | String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username); |
| | | Integer identity=JwtTokenUtil.getIdentity(jwtToken); |
| | | String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username+"_"+identity); |
| | | String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken)); |
| | | //删除redis缓存 |
| | | redisUtils.del(tokenKey); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public SysUser getUserByUsername(String username) { |
| | | String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); |
| | | public SysUser getUserByUsername(String username,Integer identity) { |
| | | String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME + ":" + username+"_"+identity); |
| | | SysUser sysUser =null; |
| | | if(redisUtils.hasKey(key)){ |
| | | sysUser= (SysUser) redisUtils.get(key); |
| | |
| | | return sysUser; |
| | | } |
| | | |
| | | public void delCacheByUsername(String username){ |
| | | String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); |
| | | @Override |
| | | public void delCacheByUsername(String username,Integer identity){ |
| | | String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username+"_"+identity); |
| | | redisUtils.del(key); |
| | | } |
| | | |
| | | @Override |
| | | public SysUser getUserByUsernamePhone(String username) { |
| | | String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); |
| | | public SysUser getUserByUsernamePhone(String username,Integer identity) { |
| | | String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username+"_"+identity); |
| | | SysUser sysUser =null; |
| | | if(redisUtils.hasKey(key)){ |
| | | sysUser= (SysUser) redisUtils.get(key); |
| | | }else { |
| | | sysUser = baseMapper.getUserByUsernamePhone(username); |
| | | sysUser = baseMapper.getUserByUsernamePhone(username,identity); |
| | | redisUtils.set(key,sysUser,10*60); |
| | | } |
| | | return sysUser; |
| | |
| | | if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ |
| | | throw new ApiException("用户名已存在"); |
| | | } |
| | | if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ |
| | | if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.MONITOR.getCode()))){ |
| | | throw new ApiException("手机号已存在"); |
| | | } |
| | | String originPsword=Base64.decodeStr(user.getPassword()); |
| | |
| | | if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ |
| | | throw new ApiException("用户名已存在"); |
| | | } |
| | | if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ |
| | | if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.AGENCY.getCode()))){ |
| | | throw new ApiException("手机号已存在"); |
| | | } |
| | | String originPsword=Base64.decodeStr(user.getPassword()); |
| | |
| | | if(!agencyService.checkAgencyNameUnique(new SysAgency().setName(agency.getName()))){ |
| | | throw new ApiException("机构名称已存在"); |
| | | } |
| | | agency.setCreateBy(ShiroUtils.getSysUser().getUsername()); |
| | | agency.setCreateBy(ShiroUtils.getSysUser()!=null?ShiroUtils.getSysUser().getUsername():""); |
| | | boolean b=agencyService.save(agency); |
| | | if(!b){ |
| | | throw new ApiException("保存机构信息失败"); |
| | | } |
| | | |
| | | //创建机构用户 |
| | | user.setIdentity(UserIdentityEnum.AGENCY.getCode()); |
| | | user.setAgencyId(agency.getId()); |
| | | user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt())); |
| | | user.setCreateBy(ShiroUtils.getSysUser().getUsername()); |
| | | user.setCreateBy(ShiroUtils.getSysUser()!=null?ShiroUtils.getSysUser().getUsername():""); |
| | | b=save(user); |
| | | if(!b){ |
| | | throw new ApiException("创建机构用户信息失败"); |
| | |
| | | if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ |
| | | throw new ApiException("用户名已存在"); |
| | | } |
| | | if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ |
| | | if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.EXPERT.getCode()))){ |
| | | throw new ApiException("手机号已存在"); |
| | | } |
| | | String major=user.getMajor(); |
| | |
| | | agencyService.updateById(agency); |
| | | } |
| | | } |
| | | delCacheByUsername(user.getUsername()); |
| | | delCacheByUsername(user.getUsername(),user.getIdentity()); |
| | | user=new SysUser().setId(userId); |
| | | user.setUpdateBy(ShiroUtils.getSysUser().getUsername()); |
| | | user.setDelFlag(DeleteFlagEnum.DELETED.getCode()); |
| | |
| | | if(!checkUsernameUnique(user)){ |
| | | throw new ApiException("用户名已存在"); |
| | | } |
| | | if(!checkPhoneUnique(user)){ |
| | | if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.MONITOR.getCode()))){ |
| | | throw new ApiException("手机号已存在"); |
| | | } |
| | | delCacheByUsername(user.getUsername()); |
| | | delCacheByUsername(user.getUsername(),UserIdentityEnum.MONITOR.getCode()); |
| | | user.setPassword(null); |
| | | user.setUpdateBy(ShiroUtils.getSysUser().getUsername()); |
| | | boolean b=updateById(user); |
| | |
| | | if(!checkUsernameUnique(user)){ |
| | | throw new ApiException("用户名已存在"); |
| | | } |
| | | if(!checkPhoneUnique(user)){ |
| | | if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.AGENCY.getCode()))){ |
| | | throw new ApiException("手机号已存在"); |
| | | } |
| | | SysAgency agency=user.getAgency(); |
| | |
| | | throw new ApiException("机构名称已存在"); |
| | | } |
| | | |
| | | delCacheByUsername(user.getUsername()); |
| | | delCacheByUsername(user.getUsername(),UserIdentityEnum.AGENCY.getCode()); |
| | | agency.setUpdateBy(ShiroUtils.getSysUser().getUsername()); |
| | | agencyService.updateById(agency); |
| | | user.setPassword(null); |
| | |
| | | if(!checkUsernameUnique(user)){ |
| | | throw new ApiException("用户名已存在"); |
| | | } |
| | | if(!checkPhoneUnique(user)){ |
| | | if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.EXPERT.getCode()))){ |
| | | throw new ApiException("手机号已存在"); |
| | | } |
| | | String major=user.getMajor(); |
| | |
| | | if(!delIds.isEmpty()){ |
| | | attachService.deleteAttachsByIds(delIds); |
| | | } |
| | | delCacheByUsername(user.getUsername()); |
| | | delCacheByUsername(user.getUsername(),UserIdentityEnum.EXPERT.getCode()); |
| | | return row; |
| | | } |
| | | |
| | |
| | | SysUser oldUser=checkUserDataScope(user.getId()); |
| | | SysUser newUser=new SysUser().setId(user.getId()).setPassword(JwtTokenUtil.encryptPassword(oldUser.getUsername(),originPsword,oldUser.getSalt())); |
| | | newUser.setUpdateBy(ShiroUtils.getSysUser().getUsername()); |
| | | delCacheByUsername(oldUser.getUsername()); |
| | | delCacheByUsername(oldUser.getUsername(),oldUser.getIdentity()); |
| | | return updateById(newUser); |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public boolean checkPhoneUnique(SysUser user) { |
| | | if(user.getIdentity()==null){ |
| | | throw new ApiException("用户身份不能为空"); |
| | | } |
| | | Long userId = user.getId()==null ? -1L : user.getId(); |
| | | SysUser info = baseMapper.checkPhoneUnique(user.getPhone()); |
| | | SysUser info = baseMapper.checkPhoneUnique(user.getPhone(),user.getIdentity()); |
| | | if (info!=null && info.getId().longValue() != userId.longValue()) |
| | | { |
| | | return false; |
| | |
| | | SysUser existUser=checkUserDataScope(user.getId()); |
| | | SysUser su=new SysUser().setId(user.getId()).setStatus(user.getStatus()); |
| | | su.setUpdateBy(ShiroUtils.getSysUser().getUsername()); |
| | | delCacheByUsername(existUser.getUsername()); |
| | | delCacheByUsername(existUser.getUsername(),existUser.getIdentity()); |
| | | return updateById(su); |
| | | } |
| | | |
| | |
| | | SysUser existUser=checkUserDataScope(user.getId()); |
| | | SysUser su=new SysUser().setId(user.getId()).setState(user.getState()); |
| | | su.setUpdateBy(ShiroUtils.getSysUser().getUsername()); |
| | | delCacheByUsername(existUser.getUsername()); |
| | | delCacheByUsername(existUser.getUsername(),existUser.getIdentity()); |
| | | return updateById(su); |
| | | } |
| | | } |