package com.gkhy.assess.system.service.impl; import cn.hutool.core.codec.Base64; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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; import com.gkhy.assess.common.enums.DeleteFlagEnum; import com.gkhy.assess.common.enums.UserIdentityEnum; import com.gkhy.assess.common.exception.ApiException; import com.gkhy.assess.common.utils.*; import com.gkhy.assess.system.domain.*; import com.gkhy.assess.system.domain.vo.PersonProjectVO; import com.gkhy.assess.system.mapper.AssProjectMapper; import com.gkhy.assess.system.mapper.SysUserFaceMapper; import com.gkhy.assess.system.mapper.SysUserMapper; import com.gkhy.assess.system.service.SysAgencyService; import com.gkhy.assess.system.service.SysAttachService; import com.gkhy.assess.system.service.SysConfigService; import com.gkhy.assess.system.service.SysUserService; import com.gkhy.assess.system.utils.ShiroUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; import org.apache.shiro.subject.Subject; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.validation.Validator; import java.util.*; import java.util.stream.Collectors; /** *

* 用户表 服务实现类 *

* * @author kzy * @since 2023-10-17 14:26:29 */ @Service public class SysUserServiceImpl extends ServiceImpl implements SysUserService { @Autowired private RedisUtils redisUtils; @Autowired private SysConfigService configService; @Autowired private Validator validator; @Autowired private HttpServletRequest request; @Autowired private SysAgencyService agencyService; @Autowired private SysAttachService attachService; @Autowired private SysUserFaceMapper userFaceMapper; @Autowired private AssProjectMapper projectMapper; @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); CustomerUsernamePasswordToken usernamePasswordToken=new CustomerUsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()),loginBody.getIdentity()); Subject subject= SecurityUtils.getSubject(); String msg ; try { subject.login(usernamePasswordToken); SysUser sysUser = (SysUser) subject.getPrincipal(); AccountVO accountVO = new AccountVO(); BeanUtils.copyProperties(sysUser, accountVO); if(sysUser.getAgencyId()!=null){ SysAgency agency=agencyService.getOne(Wrappers.lambdaQuery() .select(SysAgency::getId,SysAgency::getName) .eq(SysAgency::getId,sysUser.getAgencyId())); accountVO.setAgentName(agency.getName()); accountVO.setAgentId(agency.getId()); } String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity()); accountVO.setToken(token); cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token); return accountVO; }catch (UnknownAccountException | IncorrectCredentialsException uae){ throw new ApiException("用户名/密码错误,请重新输入"); } catch (LockedAccountException lae) { // 账号已被锁定 msg = "账号已被锁定"; throw new ApiException(msg); }catch (AuthenticationException ae) { // 其他身份验证异常 msg = "用户认证失败:"+ae.getMessage(); throw new ApiException(msg); } } @Override public AccountVO appLogin(LoginBody loginBody) { // 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 { subject.login(usernamePasswordToken); SysUser sysUser = (SysUser) subject.getPrincipal(); AccountVO accountVO = new AccountVO(); BeanUtils.copyProperties(sysUser, accountVO); if(sysUser.getAgencyId()!=null){ SysAgency agency=agencyService.getOne(Wrappers.lambdaQuery() .select(SysAgency::getId,SysAgency::getName) .eq(SysAgency::getId,sysUser.getAgencyId())); accountVO.setAgentName(agency.getName()); accountVO.setAgentId(agency.getId()); } String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity()); accountVO.setToken(token); cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token); accountVO.setIdPhoto(sysUser.getIdPhoto()); return accountVO; }catch (UnknownAccountException | IncorrectCredentialsException uae){ throw new ApiException("用户名/密码错误,请重新输入"); } catch (LockedAccountException lae) { // 账号已被锁定 msg = "账号已被锁定"; throw new ApiException(msg); }catch (AuthenticationException ae) { // 其他身份验证异常 msg = "用户认证失败:"+ae.getMessage(); throw new ApiException(msg); } } /** * 清空旧的登录信息,保证同时只有一个用户再登录,后登录用户会挤掉前一个用户 * @param 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.del(oldTokenkey); // redisUtils.del(userKey); // } // redisUtils.set(userKey, newToken,(JwtTokenUtil.EXPIRATION*2/1000)+2); // // // String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(newToken)); // // 设置超时时间 // redisUtils.set(tokenKey,newToken); // redisUtils.expire(tokenKey,JwtTokenUtil.EXPIRATION*2/1000); // } /** * 清空旧的登录信息,保证同时只有一个用户再登录,后登录用户会挤掉前一个用户 * @param 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.del(oldTokenkey); // redisUtils.del(userKey); // } // redisUtils.set(userKey, newToken,(JwtTokenUtil.EXPIRATION*2/1000)+2); String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(newToken)); // 设置超时时间 redisUtils.set(tokenKey,newToken,JwtTokenUtil.EXPIRATION*2/1000); } /** * 校验验证码 * * @param username 用户名 * @param code 验证码 * @param uuid 唯一标识 * @return 结果 */ public void validateCaptcha(String username, String code, String uuid) { if(StringUtils.isBlank(code)||StringUtils.isBlank(uuid)){ throw new ApiException("验证码或验证码标识为空"); } String verifyKey = CacheConstant.CAPTCHA_CODE_KEY +uuid; String captcha = (String) redisUtils.get(verifyKey); redisUtils.del(verifyKey); if (StringUtils.isBlank(captcha)) { throw new ApiException("验证码已失效"); } if (!code.equalsIgnoreCase(captcha)) { throw new ApiException("验证码不正确"); } } @Override public void logout() { String jwtToken = request.getHeader(JwtTokenUtil.USER_LOGIN_TOKEN); if(StringUtils.isNotBlank(jwtToken)){ String username=JwtTokenUtil.getUsername(jwtToken); 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); // redisUtils.del(userKey); } } @Override public CommonPage monitorList(SysUser user) { PageUtil.startPage(); List users=baseMapper.monitorList(user); return CommonPage.restPage(users); } @Override public CommonPage agencyList(SysUser user) { PageUtil.startPage(); List users=baseMapper.agencyList(user); return CommonPage.restPage(users); } @Override public CommonPage expertList(SysUser user) { SysUser currentUser= ShiroUtils.getSysUser(); if(!currentUser.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){ //机构用户只能查看本机构的专家 if(currentUser.getAgencyId()==null){ throw new ApiException("用户机构id为空"); } user.setAgencyId(currentUser.getAgencyId()); } PageUtil.startPage(); List users=baseMapper.expertList(user); if(users.size()>0) { //统计用户参与项目的信息 List userIds = users.stream().map(item -> item.getId()).collect(Collectors.toList()); List personProjectVOList = projectMapper.getProjectByPersonIds(userIds); Map maps = personProjectVOList.stream().collect(Collectors.toMap(PersonProjectVO::getPersonId, a -> a)); for (SysUser sysUser : users) { sysUser.setPersonProjectVO(maps.get(sysUser.getId())); } } return CommonPage.restPage(users); } @Override 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); }else { sysUser = baseMapper.getUserByUsername(username); redisUtils.set(key,sysUser,10*60); } return sysUser; } @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,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,identity); redisUtils.set(key,sysUser,10*60); } return sysUser; } public void validatorPassword(String password){ if(password.length()<5||password.length()>30){ throw new ApiException("密码长度须在5-30之间"); } } @Override public int addMonitor(SysUser user) { //校验用户信息 if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ throw new ApiException("用户名已存在"); } if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.MONITOR.getCode()))){ throw new ApiException("手机号已存在"); } String originPsword=Base64.decodeStr(user.getPassword()); validatorPassword(originPsword); //密码生成规则:md5(username+password+salt) user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt())); user.setIdentity(UserIdentityEnum.MONITOR.getCode()); user.setCreateBy(ShiroUtils.getSysUser().getUsername()); boolean b=save(user); if(!b){ throw new ApiException("创建监管用户信息失败"); } return 1; } @Override @Transactional(rollbackFor = RuntimeException.class) public int addAgency(SysUser user) { //校验用户信息 if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ throw new ApiException("用户名已存在"); } if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.AGENCY.getCode()))){ throw new ApiException("手机号已存在"); } String originPsword=Base64.decodeStr(user.getPassword()); validatorPassword(originPsword); SysAgency agency=user.getAgency(); if(ObjectUtil.isNull(agency)){ throw new ApiException("机构信息不能为空"); } //查询机构信息是否存在 if(!agencyService.checkAgencyNameUnique(new SysAgency().setName(agency.getName()))){ throw new ApiException("机构名称已存在"); } 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()!=null?ShiroUtils.getSysUser().getUsername():""); b=save(user); if(!b){ throw new ApiException("创建机构用户信息失败"); } return 1; } @Override @Transactional(rollbackFor = RuntimeException.class) public int addExpert(SysUser user) { user.setIdentity(UserIdentityEnum.EXPERT.getCode()); checkUserAllowed(user); //校验用户信息 if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ throw new ApiException("用户名已存在"); } if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.EXPERT.getCode()))){ throw new ApiException("手机号已存在"); } List socialAttach=user.getSocialAttach(); List medicalAttach=user.getMedicalAttach(); List salaryAttach=user.getSalaryAttach(); //疆外企业必须上传社保、医保、薪资 SysAgency agency=agencyService.getAgencyById(user.getAgencyId()); if(agency.getAttribute()==0){ if(ObjectUtil.isEmpty(socialAttach)||ObjectUtil.isEmpty(medicalAttach)||ObjectUtil.isEmpty(salaryAttach)){ throw new ApiException("疆内企业必须上传社保、医保、工资照片"); } } String major=user.getMajor(); List majors=new ArrayList<>(); JSONObject jsonObject=JSONObject.parseObject(major); jsonObject.forEach((key,value)-> { majors.add(Integer.valueOf(key)); }); user.setMajor(StringUtils.join(",",majors)); user.setCertificateNo(major); String originPsword=Base64.decodeStr(user.getPassword()); validatorPassword(originPsword); user.setCreateBy(ShiroUtils.getSysUser().getUsername()); user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt())); boolean b=save(user); if(!b){ throw new ApiException("创建专家信息失败"); } List attaches=new ArrayList<>(); if(socialAttach!=null&& !socialAttach.isEmpty()) { for (SysAttach attach : socialAttach) { attach.setType(AttachTypeEnum.SOCIAL.getCode()); attach.setUserId(user.getId()); attaches.add(attach); } } if(medicalAttach!=null&& !medicalAttach.isEmpty()) { for (SysAttach attach : medicalAttach) { attach.setType(AttachTypeEnum.MEDICAL.getCode()); attach.setUserId(user.getId()); attaches.add(attach); } } if(salaryAttach!=null&& !salaryAttach.isEmpty()) { for (SysAttach attach : salaryAttach) { attach.setType(AttachTypeEnum.SALARY.getCode()); attach.setUserId(user.getId()); attaches.add(attach); } } if(!attaches.isEmpty()) { attachService.saveBatch(attaches); } return 1; } @Override public SysUser getUserByPhone(String phone) { return baseMapper.getUserByPhone(phone); } @Override public SysUser getUserById(Long userId) { return baseMapper.getUserById(userId); } @Override public SysUser getUserInfoById(Long userId) { return baseMapper.getUserInfoById(userId); } @Override @Transactional(rollbackFor = RuntimeException.class) public int deleteUserById(Long userId) { SysUser currentUser=ShiroUtils.getSysUser(); SysUser user=checkUserDataScope(userId); if(Objects.equals(ShiroUtils.getUserId(), userId)){ throw new ApiException("不能删除自己账号"); } if(user.getIdentity().equals(UserIdentityEnum.AGENCY.getCode())||user.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){ if(!currentUser.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){ throw new ApiException("没有权限,只有监管用户才能操作"); } //机构用户,将机构信息设置成删除状态 if(user.getIdentity().equals(UserIdentityEnum.AGENCY.getCode())) { if (user.getAgencyId() == null) { throw new ApiException("获取机构id为空"); } SysAgency agency=new SysAgency().setId(user.getAgencyId()); agency.setUpdateBy(ShiroUtils.getSysUser().getUsername()); agency.setDelFlag(DeleteFlagEnum.DELETED.getCode()); agencyService.updateById(agency); } } delCacheByUsername(user.getUsername(),user.getIdentity()); delCacheByUsername(user.getPhone(),user.getIdentity()); user=new SysUser().setId(userId); user.setUpdateBy(ShiroUtils.getSysUser().getUsername()); user.setDelFlag(DeleteFlagEnum.DELETED.getCode()); return baseMapper.updateById(user); } @Override public int editMonitor(SysUser user) { //校验用户信息 if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.MONITOR.getCode()))){ throw new ApiException("手机号已存在"); } delCacheByUsername(user.getUsername(),UserIdentityEnum.MONITOR.getCode()); delCacheByUsername(user.getPhone(),UserIdentityEnum.MONITOR.getCode()); user.setPassword(null); user.setUpdateBy(ShiroUtils.getSysUser().getUsername()); boolean b=updateById(user); if(!b){ throw new ApiException("更新监管用户信息失败"); } return 1; } @Override @Transactional(rollbackFor = RuntimeException.class) public int editAgency(SysUser user) { //校验用户信息 if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.AGENCY.getCode()))){ throw new ApiException("手机号已存在"); } SysAgency agency=user.getAgency(); if(ObjectUtil.isNull(agency)||agency.getId()==null){ throw new ApiException("机构信息或者id不能为空"); } //查询机构信息是否存在 if(!agencyService.checkAgencyNameUnique(agency)){ throw new ApiException("机构名称已存在"); } SysUser currentUser=ShiroUtils.getSysUser(); if(!currentUser.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){ if(!user.getId().equals(currentUser.getId())){ throw new ApiException("只能修改自身数据"); } } delCacheByUsername(user.getUsername(),UserIdentityEnum.AGENCY.getCode()); delCacheByUsername(user.getPhone(),UserIdentityEnum.AGENCY.getCode()); agency.setUpdateBy(currentUser.getUsername()); agencyService.updateById(agency); user.setPassword(null); user.setUpdateBy(currentUser.getUsername()); boolean b=updateById(user); if(!b){ throw new ApiException("更新用户失败"); } return 1; } @Override public int editExpert(SysUser user) { checkUserDataScope(user.getId()); //校验用户信息 if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.EXPERT.getCode()))){ throw new ApiException("手机号已存在"); } List socialAttach=user.getSocialAttach(); List medicalAttach=user.getMedicalAttach(); List salaryAttach=user.getSalaryAttach(); //疆外企业必须上传社保、医保、薪资 SysAgency agency=agencyService.getAgencyById(user.getAgencyId()); if(agency.getAttribute()==0){ if(ObjectUtil.isEmpty(socialAttach)||ObjectUtil.isEmpty(medicalAttach)||ObjectUtil.isEmpty(salaryAttach)){ throw new ApiException("疆内企业必须上传社保、医保、工资照片"); } } String major=user.getMajor(); if(StringUtils.isNotBlank(major)){ List majors=new ArrayList<>(); JSONObject jsonObject=JSONObject.parseObject(major); jsonObject.forEach((key,value)-> { majors.add(Integer.valueOf(key)); }); user.setMajor(StringUtils.join(",",majors)); user.setCertificateNo(major); } user.setPassword(null); user.setUpdateBy(ShiroUtils.getSysUser().getUsername()); int row=baseMapper.updateById(user); List existAttaches=attachService.getAttachsByUserId(user.getId(),null); // 刪除旧数据 // attachService.deleteAttachsByUserId(user.getId(),null); List attaches=new ArrayList<>(); if(socialAttach!=null&& !socialAttach.isEmpty()) { for (SysAttach attach : socialAttach) { attach.setType(AttachTypeEnum.SOCIAL.getCode()); attach.setUserId(user.getId()); attaches.add(attach); } } if(medicalAttach!=null&& !medicalAttach.isEmpty()) { for (SysAttach attach : medicalAttach) { attach.setType(AttachTypeEnum.MEDICAL.getCode()); attach.setUserId(user.getId()); attaches.add(attach); } } if(salaryAttach!=null&& !salaryAttach.isEmpty()) { for (SysAttach attach : salaryAttach) { attach.setType(AttachTypeEnum.SALARY.getCode()); attach.setUserId(user.getId()); attaches.add(attach); } } if(!attaches.isEmpty()) { attachService.saveOrUpdateBatch(attaches); } List newIds = attaches.stream().map(SysAttach::getId).collect(Collectors.toList()); List delIds = new ArrayList<>(); for (SysAttach attach : existAttaches) { if (!newIds.contains(attach.getId())) { delIds.add(attach.getId()); } } if (!delIds.isEmpty()) { attachService.deleteAttachsByIds(delIds); } delCacheByUsername(user.getUsername(),UserIdentityEnum.EXPERT.getCode()); delCacheByUsername(user.getPhone(),UserIdentityEnum.EXPERT.getCode()); return row; } @Override public boolean resetUserPwd(SysUser user) { String originPsword=Base64.decodeStr(user.getPassword()); validatorPassword(originPsword); 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(),oldUser.getIdentity()); delCacheByUsername(oldUser.getPhone(),oldUser.getIdentity()); return updateById(newUser); } @Override public boolean checkUsernameUnique(SysUser user) { Long userId = user.getId()==null? -1L : user.getId(); SysUser info = baseMapper.checkLoginNameUnique(user.getUsername()); if (info!=null && info.getId().longValue() != userId.longValue()) { return false; } return true; } @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(),user.getIdentity()); if (info!=null && info.getId().longValue() != userId.longValue()) { return false; } return true; } @Override public boolean checkEmailUnique(SysUser user) { Long userId = user.getId()==null ? -1L : user.getId(); SysUser info = baseMapper.checkEmailUnique(user.getEmail()); if (info!=null && info.getId().longValue() != userId.longValue()) { return false; } return true; } @Override public void checkUserAllowed(SysUser user) { SysUser currentUser=ShiroUtils.getSysUser(); if(!Objects.equals(currentUser.getIdentity(), UserIdentityEnum.MONITOR.getCode())){ if(Objects.equals(user.getIdentity(), UserIdentityEnum.MONITOR.getCode())){ throw new ApiException("无权操作监管用户"); } if(!Objects.equals(currentUser.getAgencyId(), user.getAgencyId())){ throw new ApiException("无权操作其他机构用户"); } } } @Override public SysUser checkUserDataScope(Long userId) { if(userId==null){ throw new ApiException("用户id为空!"); } SysUser user = getById(userId); if (ObjectUtil.isNull(user)) { throw new ApiException("用户数据不存在!"); } checkUserAllowed(user); return user; } @Override public boolean changeUserStatus(SysUser user) { SysUser existUser=checkUserDataScope(user.getId()); SysUser su=new SysUser().setId(user.getId()).setStatus(user.getStatus()); su.setUpdateBy(ShiroUtils.getSysUser().getUsername()); delCacheByUsername(existUser.getUsername(),existUser.getIdentity()); delCacheByUsername(existUser.getPhone(),existUser.getIdentity()); return updateById(su); } @Override public boolean changeApprove(SysUser user) { SysUser existUser=checkUserDataScope(user.getId()); SysUser su=new SysUser().setId(user.getId()).setState(user.getState()); su.setUpdateBy(ShiroUtils.getSysUser().getUsername()); delCacheByUsername(existUser.getUsername(),existUser.getIdentity()); delCacheByUsername(existUser.getPhone(),existUser.getIdentity()); return updateById(su); } }