From 0bf868d3cdf9226e178c076d3b588ed5207409a0 Mon Sep 17 00:00:00 2001 From: kongzy <kongzy> Date: 星期五, 24 十一月 2023 17:51:40 +0800 Subject: [PATCH] merge --- assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java | 374 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 374 insertions(+), 0 deletions(-) diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..9bfc0cd --- /dev/null +++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,374 @@ +package com.gkhy.assess.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +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.vo.AccountVO; +import com.gkhy.assess.common.domain.vo.LoginBody; +import com.gkhy.assess.common.enums.UserIdentityEnum; +import com.gkhy.assess.common.enums.UserTypeEnum; +import com.gkhy.assess.common.exception.ApiException; +import com.gkhy.assess.common.utils.BeanValidators; +import com.gkhy.assess.common.utils.JwtTokenUtil; +import com.gkhy.assess.common.utils.PageUtil; +import com.gkhy.assess.common.utils.RedisUtils; +import com.gkhy.assess.system.domain.*; +import com.gkhy.assess.system.mapper.SysAgencyMapper; +import com.gkhy.assess.system.mapper.SysUserMapper; +import com.gkhy.assess.system.service.SysConfigService; +import com.gkhy.assess.system.utils.ShiroUtils; +import com.gkhy.assess.system.service.SysUserService; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.subject.Subject; +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.List; + + +/** + * <p> + * 用户表 服务实现类 + * </p> + * + * @author kzy + * @since 2023-10-17 14:26:29 + */ +@Service +public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService { + @Autowired + private RedisUtils redisUtils; + @Autowired + private SysConfigService configService; + @Autowired + private Validator validator; + + @Autowired + private HttpServletRequest request; + @Autowired + private SysAgencyMapper agencyMapper; + + + @Override + public AccountVO login(LoginBody loginBody) { + UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), loginBody.getPassword(), false); + Subject subject= SecurityUtils.getSubject(); + String msg ; + try { + subject.login(usernamePasswordToken); + SysUser sysUser = (SysUser) subject.getPrincipal(); + AccountVO accountVO = new AccountVO(); + BeanUtils.copyProperties(sysUser, accountVO); + + String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword()); + accountVO.setToken(token); + String key= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(token)); + // 设置超时时间 + redisUtils.set(key,token); + redisUtils.expire(key,JwtTokenUtil.EXPIRATION*2/1000); + return accountVO; + }catch (UnknownAccountException | IncorrectCredentialsException uae){ + throw new ApiException("用户名/密码错误,请重新输入"); + } catch (LockedAccountException lae) { // 账号已被锁定 + msg = "账号已被锁定"; + throw new ApiException(msg); + } catch (AuthenticationException ae) { // 其他身份验证异常 + msg = "用户认证失败"; + throw new ApiException(msg); + } + } + + @Override + public void logout() { + String jwtToken = request.getHeader(JwtTokenUtil.USER_LOGIN_TOKEN); + String key= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken)); + //删除redis缓存 + redisUtils.del(key); + } + + @Override + public CommonPage<SysUser> monitorList(SysUser user) { + PageUtil.startPage(); + List<SysUser> users=baseMapper.monitorList(user); + return CommonPage.restPage(users); + } + + @Override + public CommonPage<SysUser> agencyList(SysUser user) { + PageUtil.startPage(); + List<SysUser> users=baseMapper.agencyList(user); + return CommonPage.restPage(users); + } + + @Override + public CommonPage<SysUser> expertList(SysUser user) { + PageUtil.startPage(); + List<SysUser> users=baseMapper.expertList(user); + return CommonPage.restPage(users); + } + + @Override + public SysUser getUserByUsername(String username) { + String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); + 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 SysUser getUserByUsernamePhone(String username) { + String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); + SysUser sysUser =null; + if(redisUtils.hasKey(key)){ + sysUser= (SysUser) redisUtils.get(key); + }else { + sysUser = baseMapper.getUserByUsernamePhone(username); + redisUtils.set(key,sysUser,10*60); + } + return sysUser; + } + + @Override + @Transactional(rollbackFor = RuntimeException.class) + public int agencyRegister(SysUser user) { + //校验用户信息 + if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ + throw new ApiException("用户名已存在"); + } + if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ + throw new ApiException("手机号已存在"); + } + SysAgency agency=user.getAgency(); + if(ObjectUtil.isNull(agency)){ + throw new ApiException("机构信息不能为空"); + } + //查询机构信息是否存在 + if(ObjectUtil.isNotNull(agencyMapper.checkAgencyNameUnique(agency.getName()))){ + throw new ApiException("机构名称已存在"); + } + + int i=agencyMapper.insert(agency); + if(i<1){ + throw new ApiException("保存机构信息失败"); + } + + user.setAgencyId(agency.getId()); + user.setUserType(UserIdentityEnum.AGENCY.getCode()); + boolean b=save(user); + if(!b){ + throw new ApiException("创建机构用户信息失败"); + } + return 1; + } + + @Override + public int addExpert(SysUser user) { + //校验用户信息 + if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ + throw new ApiException("用户名已存在"); + } + if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ + throw new ApiException("手机号已存在"); + } + user.setUserType(UserIdentityEnum.EXPERT.getCode()); + user.setCreateBy(ShiroUtils.getSysUser().getUsername()); + boolean b=save(user); + if(!b){ + throw new ApiException("创建专家信息失败"); + } + return 1; + } + + + @Override + public SysUser getUserByPhone(String phone) { + return baseMapper.getUserByPhone(phone); + } + + @Override + public SysUser getUserById(Long userId) { + return baseMapper.getUserById(userId); + } + + @Override + @Transactional(rollbackFor = RuntimeException.class) + public int deleteUserById(Long userId) { + SysUser user=getUserById(userId); + //机构用户,将机构信息设置成删除状态 + if(user.getUserType().equals(UserIdentityEnum.AGENCY.getCode())){ + agencyMapper.deleteAgencyById(user.getAgencyId()); + } + return baseMapper.deleteUserById(userId); + } + + + @Override + @Transactional(rollbackFor = RuntimeException.class) + public int editAgency(SysUser user) { + //校验用户信息 + if(!checkUsernameUnique(user)){ + throw new ApiException("用户名已存在"); + } + if(!checkPhoneUnique(user)){ + throw new ApiException("手机号已存在"); + } + SysAgency agency=user.getAgency(); + if(ObjectUtil.isNull(agency)){ + throw new ApiException("机构信息不能为空"); + } + //查询机构信息是否存在 + if(ObjectUtil.isNotNull(agency)){ + throw new ApiException("机构名称已存在"); + } + agencyMapper.updateById(agency); + boolean b=updateById(user); + if(!b){ + throw new ApiException("更新用户失败"); + } + return 1; + } + + @Override + public int editExpert(SysUser user) { + //校验用户信息 + if(!checkUsernameUnique(user)){ + throw new ApiException("用户名已存在"); + } + if(!checkPhoneUnique(user)){ + throw new ApiException("手机号已存在"); + } + boolean b=updateById(user); + if(!b){ + throw new ApiException("更新专家信息失败"); + } + return 1; + } + + + @Override + public boolean resetUserPwd(SysUser user) { + return updateById(user); + } + + @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) { + Long userId = user.getId()==null ? -1L : user.getId(); + SysUser info = baseMapper.checkPhoneUnique(user.getPhone()); + 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) { + + } + + @Override + public void checkUserDataScope(Long userId) { + SysUser user = baseMapper.getUserById(userId); + if (ObjectUtil.isNull(user)) + { + throw new ApiException("用户数据不存在!"); + } + } + + @Override + public String importUser(List<SysUser> userList,Boolean isUpdateSupport) { + if(ObjectUtil.isEmpty(userList)||userList.size()==0){ + throw new ApiException("导入用户数据不能为空"); + } + int successNum=0; + int failureNum=0; + StringBuilder successMsg=new StringBuilder(); + StringBuilder failureMsg=new StringBuilder(); + String password=configService.getConfigByKey("sys.user.initPassword"); + for(SysUser user:userList){ + try { + SysUser u = baseMapper.getUserByUsername(user.getUsername()); + if (ObjectUtil.isNull(u)) { + BeanValidators.validateWithException(validator, user); + user.setPassword(JwtTokenUtil.md5Encode(user.getUsername() + password)); + user.setCreateBy(""); + save(user); + successNum++; + successMsg.append("<br/>" + successNum + "、账号 " + user.getUsername() + " 导入成功"); + } else if (isUpdateSupport) { + BeanValidators.validateWithException(validator, user); + checkUserAllowed(u); + checkUserDataScope(u.getId()); + user.setId(u.getId()); + user.setUpdateBy(""); + updateById(user); + successNum++; + successMsg.append("<br/>" + successNum + "、账号 " + user.getUsername() + " 更新成功"); + } else { + failureNum++; + failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUsername() + " 已存在"); + } + }catch (Exception e){ + failureNum++; + String msg = "<br/>" + failureNum + "、账号 " + user.getUsername() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0){ + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ApiException(failureMsg.toString()); + }else{ + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + + return successMsg.toString(); + } + + @Override + public boolean changeUserStatus(SysUser user) { + checkUserAllowed(user); + checkUserDataScope(user.getId()); + return updateById(user); + } + + @Override + public boolean changeApprove(SysUser user) { + checkUserAllowed(user); + checkUserDataScope(user.getId()); + return updateById(user); + } +} -- Gitblit v1.9.2