update 企业管理员登录
This commit is contained in:
+6
-1
@@ -78,7 +78,7 @@ public class LoginUser {
|
||||
* 状态(1:正常 2:冻结 )
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 同步工作流引擎1同步0不同步
|
||||
@@ -133,4 +133,9 @@ public class LoginUser {
|
||||
*/
|
||||
private Boolean isCompanyUser;
|
||||
|
||||
/**
|
||||
* 是否是企业管理员
|
||||
*/
|
||||
private Boolean isCompanyManager;
|
||||
|
||||
}
|
||||
|
||||
+237
@@ -1,10 +1,46 @@
|
||||
package com.jero.company.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.constant.CommonConstant;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.system.api.ISysBaseAPI;
|
||||
import com.jero.common.system.util.JwtUtil;
|
||||
import com.jero.common.system.vo.LoginUser;
|
||||
import com.jero.common.util.CommonUtils;
|
||||
import com.jero.common.util.MD5Util;
|
||||
import com.jero.common.util.PasswordUtil;
|
||||
import com.jero.common.util.RedisUtil;
|
||||
import com.jero.company.entity.PayCompanyManagement;
|
||||
import com.jero.company.entity.PayContactsManagement;
|
||||
import com.jero.company.entity.PayManagerManagement;
|
||||
import com.jero.company.mapper.WxSecretMapper;
|
||||
import com.jero.company.service.IPayCompanyManagementService;
|
||||
import com.jero.company.service.IPayContactsManagementService;
|
||||
import com.jero.company.service.IPayManagerManagementService;
|
||||
import com.jero.data.entity.PayCaseCouncilSubitem;
|
||||
import com.jero.data.service.IPayCaseCouncilSubitemService;
|
||||
import com.jero.modules.base.service.BaseCommonService;
|
||||
import com.jero.modules.system.model.SysLoginModel;
|
||||
import com.jero.modules.system.service.ISysDictService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Description: 企业端管理员登录
|
||||
* @author: Kuang Kaixing
|
||||
@@ -15,5 +51,206 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@Api(tags = "企业端管理员登录")
|
||||
@Slf4j
|
||||
public class CompanyManagerLoginController {
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
@Autowired
|
||||
private ISysBaseAPI sysBaseAPI;
|
||||
@Autowired
|
||||
private IPayManagerManagementService payManagerManagementService;
|
||||
@Autowired
|
||||
private IPayCompanyManagementService payCompanyManagementService;
|
||||
@Autowired
|
||||
private ISysDictService sysDictService;
|
||||
@Resource
|
||||
private BaseCommonService baseCommonService;
|
||||
@Value("${defaultPassword}")
|
||||
private String defaultPassword;
|
||||
/**
|
||||
* 密码登录错误的次数前缀
|
||||
*/
|
||||
public static final String RETRY_LOGIN_PREFIX = "login:retryLoginCount_";
|
||||
/**
|
||||
* 密码登录错误的最大限制次数
|
||||
*/
|
||||
public static final int RETRY_LOGIN_MAX_COUNT = 5;
|
||||
|
||||
@Value("${passwordResetTime}")
|
||||
private int passwordResetTime;
|
||||
|
||||
@ApiOperation("登录接口")
|
||||
@PostMapping(value = "/login")
|
||||
public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) {
|
||||
Result<JSONObject> result = new Result<>();
|
||||
String phone = sysLoginModel.getUsername();
|
||||
String password = sysLoginModel.getPassword();
|
||||
String rsaPublicKey = sysLoginModel.getRsaPublicKey();
|
||||
String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey));
|
||||
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
|
||||
//前端密码加密,后端进行密码解密
|
||||
//password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密
|
||||
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
|
||||
//update-begin-author:taoyan date:20190828 for:校验验证码
|
||||
String captcha = sysLoginModel.getCaptcha();
|
||||
if (captcha == null) {
|
||||
result.error500("验证码无效");
|
||||
return result;
|
||||
}
|
||||
String lowerCaseCaptcha = captcha.toLowerCase();
|
||||
String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8");
|
||||
Object checkCode = redisUtil.get(realKey);
|
||||
//当进入登录页时,有一定几率出现验证码错误 #1714
|
||||
if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) {
|
||||
result.error500("验证码错误");
|
||||
return result;
|
||||
} else {
|
||||
redisUtil.del(realKey);
|
||||
}
|
||||
try {
|
||||
//解密获取密码和用户名
|
||||
password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey);
|
||||
phone = CommonUtils.decryptBtRsaPriKey(phone, rsaPrivateKey);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//1. 校验用户是否有效
|
||||
//update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
|
||||
LambdaQueryWrapper<PayManagerManagement> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(PayManagerManagement::getPhone, PasswordUtil.encrypt(phone));
|
||||
queryWrapper.eq(PayManagerManagement::getDelFlag, 0);
|
||||
PayManagerManagement managerManagement = payManagerManagementService.getOne(queryWrapper);
|
||||
//update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
|
||||
if (Objects.isNull(managerManagement)) {
|
||||
throw new JeroBootException("手机号或密码错误");
|
||||
}else {
|
||||
if (StringUtils.isBlank(managerManagement.getPassword())){
|
||||
throw new JeroBootException("请先用手机验证码登录");
|
||||
}
|
||||
}
|
||||
|
||||
// 若用户名有效,则查询该账号的登陆失败次数是否符合等保要求
|
||||
int retryCount = 0;
|
||||
if (redisUtil.get(RETRY_LOGIN_PREFIX + phone) != null) {
|
||||
retryCount = (int) redisUtil.get(RETRY_LOGIN_PREFIX + phone);
|
||||
}
|
||||
if (retryCount >= RETRY_LOGIN_MAX_COUNT) {
|
||||
result.error500("密码错误次数过多,密码错误次数过多,请"+passwordResetTime+"分钟后重试");
|
||||
return result;
|
||||
}
|
||||
//2. 校验用户名或密码是否正确
|
||||
String userpassword = PasswordUtil.encrypt(phone, password, managerManagement.getSalt());
|
||||
String syspassword = managerManagement.getPassword();
|
||||
if (!syspassword.equals(userpassword)) {
|
||||
// 重试登录次数加一
|
||||
retryCount++;
|
||||
if (retryCount == 1) {
|
||||
redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, 60L * passwordResetTime);
|
||||
} else {
|
||||
redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + phone));
|
||||
}
|
||||
String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请"+passwordResetTime+"分钟后重试" : "手机号或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount);
|
||||
result.error500(msg);
|
||||
return result;
|
||||
}
|
||||
//登录成功,清除错误登录次数
|
||||
redisUtil.del(RETRY_LOGIN_PREFIX + phone);
|
||||
|
||||
//用户登录信息
|
||||
userInfo(managerManagement, result);
|
||||
//update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员
|
||||
LoginUser loginUser = new LoginUser();
|
||||
BeanUtils.copyProperties(managerManagement, loginUser);
|
||||
loginUser.setUsername(managerManagement.getName());
|
||||
loginUser.setRealname(managerManagement.getName());
|
||||
loginUser.setRoleCode("企业用户");
|
||||
loginUser.setIsCompanyManager(true);
|
||||
baseCommonService.addLog("手机号: " + phone + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser);
|
||||
//update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员
|
||||
return result;
|
||||
}
|
||||
|
||||
@ApiOperation("短信登录接口")
|
||||
@PostMapping(value = "/smsLogin")
|
||||
public Result<JSONObject> smsLogin(@RequestBody SysLoginModel sysLoginModel) {
|
||||
Result<JSONObject> result = new Result<>();
|
||||
String phone = sysLoginModel.getUsername();
|
||||
String rsaPublicKey = sysLoginModel.getRsaPublicKey();
|
||||
String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey));
|
||||
try {
|
||||
//解密获取手机号和openId
|
||||
phone = CommonUtils.decryptBtRsaPriKey(phone, rsaPrivateKey);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
String captcha = sysLoginModel.getCaptcha();
|
||||
if (captcha == null) {
|
||||
result.error500("验证码无效");
|
||||
return result;
|
||||
}
|
||||
Object checkCode = redisUtil.get("_verification:_phone:" + phone);
|
||||
if (checkCode == null || !Objects.equals(checkCode,captcha)) {
|
||||
result.error500("验证码错误");
|
||||
return result;
|
||||
} else {
|
||||
redisUtil.del("_verification:_phone:" + phone);
|
||||
}
|
||||
|
||||
//1. 校验用户是否有效
|
||||
//update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
|
||||
LambdaQueryWrapper<PayManagerManagement> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(PayManagerManagement::getPhone, PasswordUtil.encrypt(phone));
|
||||
PayManagerManagement managerManagement = payManagerManagementService.getOne(queryWrapper);
|
||||
//update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
|
||||
if (Objects.isNull(managerManagement)) {
|
||||
throw new JeroBootException("手机号不存在");
|
||||
}
|
||||
|
||||
//用户登录信息
|
||||
userInfo(managerManagement, result);
|
||||
//update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员
|
||||
LoginUser loginUser = new LoginUser();
|
||||
loginUser.setIsCompanyManager(true);
|
||||
BeanUtils.copyProperties(managerManagement, loginUser);
|
||||
baseCommonService.addLog("手机号: " + phone + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser);
|
||||
//update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员
|
||||
|
||||
//如果没有密码,返回
|
||||
if (Objects.isNull(managerManagement.getPassword())){
|
||||
result.setMessage("updatePassword");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户信息
|
||||
*/
|
||||
private void userInfo(PayManagerManagement managerManagement, Result<JSONObject> result) {
|
||||
String syspassword = managerManagement.getPassword();
|
||||
String phone = managerManagement.getPhone();
|
||||
managerManagement.setPhone(PasswordUtil.decrypt(phone));
|
||||
if (Objects.isNull(syspassword)) {
|
||||
syspassword = defaultPassword;
|
||||
}
|
||||
|
||||
//判断企业角色
|
||||
QueryWrapper<PayCompanyManagement> queryWrapper2 = new QueryWrapper<>();
|
||||
queryWrapper2.eq("id",managerManagement.getCompanyId());
|
||||
PayCompanyManagement one = payCompanyManagementService.getOne(queryWrapper2);
|
||||
if(ObjectUtils.isEmpty(one)){
|
||||
throw new JeroBootException("联系人无企业信息");
|
||||
}else {
|
||||
managerManagement.setCompanyRole(one.getRoleCode());
|
||||
}
|
||||
// 生成token
|
||||
String token = JwtUtil.sign(phone, syspassword);
|
||||
// 设置token缓存有效时间
|
||||
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
|
||||
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
|
||||
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("token", token);
|
||||
obj.put("userInfo", managerManagement);
|
||||
obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
|
||||
result.setResult(obj);
|
||||
result.success("登录成功");
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -5,6 +5,7 @@ import java.util.Date;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
@@ -151,4 +152,9 @@ public class PayManagerManagement implements Serializable {
|
||||
@ApiModelProperty(value = "会员企业id")
|
||||
private String memberId;
|
||||
|
||||
/**企业角色1:普通企业、2:会员企业*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "企业角色1:普通企业、2:会员企业")
|
||||
private String companyRole;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user