|
@@ -1,8 +1,12 @@
|
|
package cn.cslg.permission.service;
|
|
package cn.cslg.permission.service;
|
|
|
|
|
|
import cn.cslg.permission.common.core.base.RedisConf;
|
|
import cn.cslg.permission.common.core.base.RedisConf;
|
|
|
|
+import cn.cslg.permission.common.core.business.LoginCacheKeyUtil;
|
|
|
|
+import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
|
|
import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
|
|
import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
|
|
import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
|
|
import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
|
|
|
|
+import cn.cslg.permission.common.model.vo.LoginRecordVO;
|
|
|
|
+import cn.cslg.permission.common.model.vo.LoginVO;
|
|
import cn.cslg.permission.common.model.vo.PersonnelVO;
|
|
import cn.cslg.permission.common.model.vo.PersonnelVO;
|
|
import cn.cslg.permission.common.model.vo.RoleVO;
|
|
import cn.cslg.permission.common.model.vo.RoleVO;
|
|
import cn.cslg.permission.common.utils.*;
|
|
import cn.cslg.permission.common.utils.*;
|
|
@@ -14,6 +18,8 @@ import cn.cslg.permission.domain.associate.AssoDepartPos;
|
|
import cn.cslg.permission.domain.associate.AssoPerDp;
|
|
import cn.cslg.permission.domain.associate.AssoPerDp;
|
|
import cn.cslg.permission.domain.associate.AssoPersonRole;
|
|
import cn.cslg.permission.domain.associate.AssoPersonRole;
|
|
import cn.cslg.permission.domain.sys.SysDictItem;
|
|
import cn.cslg.permission.domain.sys.SysDictItem;
|
|
|
|
+import cn.cslg.permission.exception.ExceptionEnum;
|
|
|
|
+import cn.cslg.permission.exception.XiaoShiException;
|
|
import cn.cslg.permission.mapper.PersonnelMapper;
|
|
import cn.cslg.permission.mapper.PersonnelMapper;
|
|
import cn.cslg.permission.mapper.SysDictItemMapper;
|
|
import cn.cslg.permission.mapper.SysDictItemMapper;
|
|
import cn.cslg.permission.service.associate.DepartPosiService;
|
|
import cn.cslg.permission.service.associate.DepartPosiService;
|
|
@@ -55,6 +61,9 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
private final RedisUtil redisUtil;
|
|
private final RedisUtil redisUtil;
|
|
private final SysDictItemMapper sysDictItemMapper;
|
|
private final SysDictItemMapper sysDictItemMapper;
|
|
private final MessageUtils messageUtils;
|
|
private final MessageUtils messageUtils;
|
|
|
|
+ private final LoginRecordService loginRecordService;
|
|
|
|
+ private final LoginService loginService;
|
|
|
|
+ private final SystemService systemService;
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public Personnel addPersonnel(PersonnelVO personnelVO) {
|
|
public Personnel addPersonnel(PersonnelVO personnelVO) {
|
|
@@ -579,4 +588,212 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
qiaoBiPersonSignUpDTO.setId(personnel.getId());
|
|
qiaoBiPersonSignUpDTO.setId(personnel.getId());
|
|
return qiaoBiPersonSignUpDTO;
|
|
return qiaoBiPersonSignUpDTO;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 校验登录账号密码
|
|
|
|
+ *
|
|
|
|
+ * @param loginVO
|
|
|
|
+ */
|
|
|
|
+ public Personnel checkLoginPersonAccount(LoginVO loginVO, Integer systemId) {
|
|
|
|
+ String userName = loginVO.getUsername();
|
|
|
|
+ String password = loginVO.getPassword();
|
|
|
|
+
|
|
|
|
+ LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper.eq(Personnel::getPersonnelUserName, userName);
|
|
|
|
+ //获取一条
|
|
|
|
+ Personnel personnel = this.getOne(queryWrapper);
|
|
|
|
+
|
|
|
|
+ LoginRecordVO loginRecordVO = new LoginRecordVO();
|
|
|
|
+ loginService.addLoginRecord(personnel, loginRecordVO);
|
|
|
|
+ loginRecordVO.setLoginSystem(systemId);
|
|
|
|
+ //如果查不到 报错 用户名不存在
|
|
|
|
+ if (personnel == null) {
|
|
|
|
+ loginRecordVO.setLoginResult("用户名不存在");
|
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_NOT_EXIST);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ boolean isPassword = personnel.getPersonnelPassword().equals(SecureUtil.md5(password));
|
|
|
|
+ if (!isPassword) {
|
|
|
|
+ //登录日志记录登录是否成功
|
|
|
|
+ loginRecordVO.setLoginResult("密码错误");
|
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_PASSWORD_MISTAKE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return personnel;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 检查登录人信息
|
|
|
|
+ *
|
|
|
|
+ * @param personnel
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public Personnel loginCheckPerson(Personnel personnel, Integer systemId) {
|
|
|
|
+ LoginRecordVO loginRecordVO = new LoginRecordVO();
|
|
|
|
+ loginService.addLoginRecord(personnel, loginRecordVO);
|
|
|
|
+ loginRecordVO.setLoginSystem(systemId);
|
|
|
|
+ if (personnel.getPersonnelStatus() != 1) {
|
|
|
|
+ //登录日志记录登录是否成功
|
|
|
|
+ loginRecordVO.setLoginResult("登录人账号本身未启用");
|
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_PASSWORD_MISTAKE);
|
|
|
|
+ }
|
|
|
|
+ return personnel;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 检查租户信息
|
|
|
|
+ *
|
|
|
|
+ * @param personnel
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public Tenant loginCheckTenant(Personnel personnel, Integer systemId) {
|
|
|
|
+ LoginRecordVO loginRecordVO = new LoginRecordVO();
|
|
|
|
+ loginService.addLoginRecord(personnel, loginRecordVO);
|
|
|
|
+ loginRecordVO.setLoginSystem(systemId);
|
|
|
|
+ Tenant tenant = tenantService.getById(personnel.getTenantId());
|
|
|
|
+ if (tenant.getTenantStatus() != 1) {
|
|
|
|
+ //登录日志记录登录是否成功
|
|
|
|
+ loginRecordVO.setLoginResult("登录人所属的租户未启用");
|
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_ERROR, loginRecordVO.getLoginResult());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ //判断登陆人所属的租户是否过期(截止日期与当前时间比较)
|
|
|
|
+ if (tenant.getDeadLine() != null && tenant.getDeadLine().compareTo(new Date()) < 0) {
|
|
|
|
+ //登录日志记录登录是否成功
|
|
|
|
+ loginRecordVO.setLoginResult("登陆人所属的租户过期");
|
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_ERROR, loginRecordVO.getLoginResult());
|
|
|
|
+ }
|
|
|
|
+ return tenant;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 填充人员数据
|
|
|
|
+ *
|
|
|
|
+ * @author 沈永艺
|
|
|
|
+ */
|
|
|
|
+ public PersonnelVO pushData(Personnel personnel) {
|
|
|
|
+ //获取租户信息
|
|
|
|
+ Tenant tenant = tenantService.getById(personnel.getTenantId());
|
|
|
|
+ //用人员ID获取该人员拥有的角色信息List
|
|
|
|
+ List<RoleVO> roleVOList = personRoleService.getRoleListByPersonnelId(personnel.getId());
|
|
|
|
+ List<PersonnelVO.PerRole> roleList = new ArrayList<>();
|
|
|
|
+ //设置标记 存储对登录人类型的判别状态
|
|
|
|
+ int flag = 0;
|
|
|
|
+ if (roleVOList.size() > 0) {
|
|
|
|
+ for (RoleVO roleVO : roleVOList) {
|
|
|
|
+ PersonnelVO.PerRole perRole = new PersonnelVO.PerRole();
|
|
|
|
+ perRole
|
|
|
|
+ .setRoleId(roleVO.getId())
|
|
|
|
+ .setRoleName(roleVO.getName());
|
|
|
|
+ //如果登录人的类型为 系统管理员1 租户管理员2
|
|
|
|
+ if (flag == 0 && roleVO.getRoleType().equals(1)) {
|
|
|
|
+ flag = 1;
|
|
|
|
+ } else if (flag == 0 && roleVO.getRoleType().equals(2)) {
|
|
|
|
+ flag = 2;
|
|
|
|
+ } else if (flag == 2 && roleVO.getRoleType().equals(1)) {
|
|
|
|
+ flag = 1;
|
|
|
|
+ }
|
|
|
|
+ roleList.add(perRole);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //部门职位绑定信息
|
|
|
|
+ List<PersonnelVO.DP> dpList = perDpService.getDPBaseMessageByPersonnelId(personnel.getId());
|
|
|
|
+ List<Integer> dutyDeparts = systemService.getDutyDeparts(personnel.getId());
|
|
|
|
+ //填充数据
|
|
|
|
+ PersonnelVO personnelVO = new PersonnelVO();
|
|
|
|
+ personnelVO
|
|
|
|
+ .setId(personnel.getId().toString())
|
|
|
|
+ .setEmail(personnel.getPersonnelEmail())
|
|
|
|
+ .setQqNumber(personnel.getPersonnelQQ())
|
|
|
|
+ .setNail(personnel.getPersonnelDing())
|
|
|
|
+ .setWechat(personnel.getPersonnelWechat())
|
|
|
|
+ .setGender(personnel.getPersonnelUserSex())
|
|
|
|
+ .setRemark(personnel.getPersonnelDescription())
|
|
|
|
+ .setState(personnel.getPersonnelStatus())
|
|
|
|
+ .setName(personnel.getPersonnelName())
|
|
|
|
+ .setUsername(personnel.getPersonnelUserName())
|
|
|
|
+ .setTenantName(tenant.getTenantName())
|
|
|
|
+ .setTenantId(tenant.getId())
|
|
|
|
+ .setTenantType(tenant.getTenantType())
|
|
|
|
+ .setToken(StpUtil.getTokenValue())
|
|
|
|
+ .setRList(roleList)
|
|
|
|
+ .setDpList(dpList)
|
|
|
|
+ .setDutyDeparts(dutyDeparts);
|
|
|
|
+
|
|
|
|
+ if (flag == 1) {
|
|
|
|
+ personnelVO.setRoleType(1);
|
|
|
|
+ } else if (flag == 2) {
|
|
|
|
+ personnelVO.setRoleType(2);
|
|
|
|
+ } else {
|
|
|
|
+ personnelVO.setRoleType(0);
|
|
|
|
+ }
|
|
|
|
+ return personnelVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 人员登录成功返回
|
|
|
|
+ *
|
|
|
|
+ * @param personnel
|
|
|
|
+ * @param systemId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public PersonnelVO commonPersonLoginSuccess(Personnel personnel, Integer systemId) {
|
|
|
|
+ //Sa-token 登录方法 登录后 生成Token 如果集成了Redis的话 会自动存入Redis
|
|
|
|
+ StpUtil.login(personnel.getId());
|
|
|
|
+ //填充数据
|
|
|
|
+ PersonnelVO personnelVO = this.pushData(personnel);
|
|
|
|
+ //将用户信息数据存入Redis
|
|
|
|
+ cacheUtils.setLoginUser(personnelVO);
|
|
|
|
+ LoginRecordVO loginRecordVO = new LoginRecordVO();
|
|
|
|
+ loginService.addLoginRecord(personnel, loginRecordVO);
|
|
|
|
+ loginRecordVO.setLoginSystem(systemId);
|
|
|
|
+ loginRecordVO.setLoginResult("成功");
|
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
|
+
|
|
|
|
+ return personnelVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 手机号登录检查
|
|
|
|
+ *
|
|
|
|
+ * @param phoneLoginDTO
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public Personnel loginPhoneCheck(PhoneLoginDTO phoneLoginDTO,Integer systemId) {
|
|
|
|
+ //查询用户
|
|
|
|
+ LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isNotEmpty(phoneLoginDTO.getPhoneNum())) {
|
|
|
|
+ queryWrapper.eq(Personnel::getPersonnelPhone, phoneLoginDTO.getPhoneNum());
|
|
|
|
+ }
|
|
|
|
+ Personnel person = this.getOne(queryWrapper, false);
|
|
|
|
+ if (org.apache.commons.lang3.ObjectUtils.isEmpty(person)) {
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_ERROR, "用户不存在");
|
|
|
|
+ }
|
|
|
|
+ String code = redisUtil.get(LoginCacheKeyUtil.getLoginCaptcha(phoneLoginDTO.getPhoneNum()));
|
|
|
|
+ if (Boolean.TRUE.equals(StringUtils.isEmpty(code))) {
|
|
|
|
+
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_ERROR, "验证码不存在");
|
|
|
|
+ }
|
|
|
|
+ //校验验证码
|
|
|
|
+ if (Boolean.TRUE.equals(StringUtils.isEmpty(phoneLoginDTO.getPhoneCode()))) {
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_ERROR, "验证码不可为空");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!org.apache.commons.lang3.StringUtils.equals(code, phoneLoginDTO.getPhoneCode())) {
|
|
|
|
+
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.LOGIN_ERROR, "验证码错误");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //校验验证码成功后使其失效
|
|
|
|
+ redisUtil.delete(LoginCacheKeyUtil.getLoginCaptcha(phoneLoginDTO.getPhoneNum()));
|
|
|
|
+ return person;
|
|
|
|
+ }
|
|
}
|
|
}
|