From 5d2cfd4562f74496a5263db3451c1e78ff53aead Mon Sep 17 00:00:00 2001 From: heheng <475597332@qq.com> Date: 星期四, 27 三月 2025 08:44:16 +0800 Subject: [PATCH] 单据增加查询返回字段 --- assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java | 546 +++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 431 insertions(+), 115 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 index 6ceaac1..f77f75f 100644 --- 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 @@ -1,28 +1,34 @@ package com.gkhy.assess.system.service.impl; +import cn.hutool.core.codec.Base64; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; +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.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.common.utils.*; import com.gkhy.assess.system.domain.*; -import com.gkhy.assess.system.mapper.SysAgencyMapper; +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.utils.ShiroUtils; 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; @@ -30,7 +36,8 @@ import javax.servlet.http.HttpServletRequest; import javax.validation.Validator; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** @@ -52,15 +59,25 @@ @Autowired private HttpServletRequest request; - @Autowired - private SysAgencyMapper agencyMapper; + @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(), 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 { @@ -68,23 +85,104 @@ SysUser sysUser = (SysUser) subject.getPrincipal(); AccountVO accountVO = new AccountVO(); BeanUtils.copyProperties(sysUser, accountVO); - - String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword()); + if(sysUser.getAgencyId()!=null){ + SysAgency agency=agencyService.getOne(Wrappers.<SysAgency>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); - String key= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(token)); - // 设置超时时间 - redisUtils.set(key,token); - redisUtils.expire(key,JwtTokenUtil.EXPIRATION*2/1000); + 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 = "用户认证失败"; + }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.<SysAgency>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); } /** @@ -97,13 +195,13 @@ */ public void validateCaptcha(String username, String code, String uuid) { - if(StrUtil.isBlank(code)||StrUtil.isBlank(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 (StrUtil.isBlank(captcha)) + if (StringUtils.isBlank(captcha)) { throw new ApiException("验证码已失效"); } @@ -116,9 +214,15 @@ @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); + 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 @@ -137,14 +241,31 @@ @Override public CommonPage<SysUser> 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<SysUser> users=baseMapper.expertList(user); + if(users.size()>0) { + //统计用户参与项目的信息 + List<Long> userIds = users.stream().map(item -> item.getId()).collect(Collectors.toList()); + List<PersonProjectVO> personProjectVOList = projectMapper.getProjectByPersonIds(userIds); + Map<Long, PersonProjectVO> 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) { - 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); @@ -156,45 +277,85 @@ } @Override - public SysUser getUserByUsernamePhone(String username) { - String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); + 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); + 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 - @Transactional(rollbackFor = RuntimeException.class) - public int agencyRegister(SysUser user) { + public int addMonitor(SysUser user) { //校验用户信息 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()); + 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(ObjectUtil.isNotNull(agencyMapper.checkAgencyNameUnique(agency.getName()))){ + if(!agencyService.checkAgencyNameUnique(new SysAgency().setName(agency.getName()))){ throw new ApiException("机构名称已存在"); } - - int i=agencyMapper.insert(agency); - if(i<1){ + 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.setUserType(UserIdentityEnum.AGENCY.getCode()); - boolean b=save(user); + 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("创建机构用户信息失败"); } @@ -202,19 +363,70 @@ } @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()))){ + if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.EXPERT.getCode()))){ throw new ApiException("手机号已存在"); } - user.setUserType(UserIdentityEnum.EXPERT.getCode()); + List<SysAttach> socialAttach=user.getSocialAttach(); + List<SysAttach> medicalAttach=user.getMedicalAttach(); + List<SysAttach> 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<Integer> 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<SysAttach> 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; } @@ -231,14 +443,59 @@ } @Override + public SysUser getUserInfoById(Long userId) { + return baseMapper.getUserInfoById(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()); + SysUser currentUser=ShiroUtils.getSysUser(); + SysUser user=checkUserDataScope(userId); + if(Objects.equals(ShiroUtils.getUserId(), userId)){ + throw new ApiException("不能删除自己账号"); } - return baseMapper.deleteUserById(userId); + 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; } @@ -249,18 +506,31 @@ if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(user)){ + if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.AGENCY.getCode()))){ throw new ApiException("手机号已存在"); } SysAgency agency=user.getAgency(); - if(ObjectUtil.isNull(agency)){ - throw new ApiException("机构信息不能为空"); + if(ObjectUtil.isNull(agency)||agency.getId()==null){ + throw new ApiException("机构信息或者id不能为空"); } + //查询机构信息是否存在 - if(ObjectUtil.isNotNull(agency)){ + if(!agencyService.checkAgencyNameUnique(agency)){ throw new ApiException("机构名称已存在"); } - agencyMapper.updateById(agency); + 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("更新用户失败"); @@ -270,24 +540,96 @@ @Override public int editExpert(SysUser user) { + checkUserDataScope(user.getId()); //校验用户信息 if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(user)){ + if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.EXPERT.getCode()))){ throw new ApiException("手机号已存在"); } - boolean b=updateById(user); - if(!b){ - throw new ApiException("更新专家信息失败"); + List<SysAttach> socialAttach=user.getSocialAttach(); + List<SysAttach> medicalAttach=user.getMedicalAttach(); + List<SysAttach> 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("疆内企业必须上传社保、医保、工资照片"); + } } - return 1; + + String major=user.getMajor(); + if(StringUtils.isNotBlank(major)){ + List<Integer> 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<SysAttach> existAttaches=attachService.getAttachsByUserId(user.getId(),null); + // 刪除旧数据 + // attachService.deleteAttachsByUserId(user.getId(),null); + + List<SysAttach> 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<Long> newIds = attaches.stream().map(SysAttach::getId).collect(Collectors.toList()); + List<Long> 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) { - return updateById(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 @@ -303,8 +645,11 @@ @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; @@ -325,79 +670,50 @@ @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 void checkUserDataScope(Long userId) { - SysUser user = baseMapper.getUserById(userId); + 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 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); + 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) { - checkUserAllowed(user); - checkUserDataScope(user.getId()); - return updateById(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); } } -- Gitblit v1.9.2