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