|
@@ -2,11 +2,13 @@ package cn.com.ty.lift.system.user.service.impl;
|
|
|
|
|
|
import cn.com.ty.lift.common.aliservice.constants.AliConstants;
|
|
|
import cn.com.ty.lift.common.constants.ApiConstants;
|
|
|
-import cn.com.ty.lift.system.user.dao.entity.*;
|
|
|
+import cn.com.ty.lift.system.user.dao.entity.Menu;
|
|
|
+import cn.com.ty.lift.system.user.dao.entity.Role;
|
|
|
+import cn.com.ty.lift.system.user.dao.entity.UserAccount;
|
|
|
+import cn.com.ty.lift.system.user.dao.entity.UserRole;
|
|
|
import cn.com.ty.lift.system.user.dao.entity.model.UserRequest;
|
|
|
import cn.com.ty.lift.system.user.dao.entity.model.UserResponse;
|
|
|
import cn.com.ty.lift.system.user.service.*;
|
|
|
-import cn.com.ty.lift.system.utils.CommonUtil;
|
|
|
import cn.com.ty.lift.system.utils.PasswordUtils;
|
|
|
import cn.com.xwy.boot.web.dto.RestResponse;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
@@ -52,31 +54,28 @@ public class LoginService implements ILoginService {
|
|
|
@Override
|
|
|
public RestResponse register(HttpServletRequest request, UserRequest userRequest) {
|
|
|
//判断手机号是否为空
|
|
|
- if(StringUtils.isBlank(userRequest.getMobile())){
|
|
|
+ if (StringUtils.isBlank(userRequest.getMobile())) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空");
|
|
|
}
|
|
|
//判断密码是否为空
|
|
|
- if(StringUtils.isBlank(userRequest.getPassword())){
|
|
|
+ if (StringUtils.isBlank(userRequest.getPassword())) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "密码为空");
|
|
|
}
|
|
|
- //获取session中的短信验证码
|
|
|
- Object smsCode = redisTemplate.opsForValue().get(userRequest.getMobile() + AliConstants.SmsConstants.SMS_CODE_NAME);
|
|
|
- if(smsCode != null){
|
|
|
- if(!(smsCode.equals(userRequest.getInputSmsCode()))){
|
|
|
- return RestResponse.fail(ApiConstants.RESULT_ERROR, "短信验证码输入有误");
|
|
|
- }
|
|
|
- } else {
|
|
|
- return RestResponse.fail(ApiConstants.RESULT_ERROR, "验证码过期,无法注册,请重新获取验证码");
|
|
|
+ //校验短信验证码
|
|
|
+ RestResponse verifyResult = verifySmsCode(userRequest.getMobile(), userRequest.getInputSmsCode());
|
|
|
+ //如果结果不为空说明校验未通过
|
|
|
+ if(verifyResult != null){
|
|
|
+ return verifyResult;
|
|
|
}
|
|
|
//判断手机号是否注册过
|
|
|
UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
|
|
|
- if(userAccount != null){
|
|
|
+ if (userAccount != null) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "用户手机号已经注册过了");
|
|
|
}
|
|
|
|
|
|
//保存用户信息,并返回用户账户信息
|
|
|
userAccount = userService.saveUserInfo(userRequest);
|
|
|
- if(userAccount != null){
|
|
|
+ if (userAccount != null) {
|
|
|
return RestResponse.success(null, ApiConstants.RESULT_SUCCESS, "注册成功");
|
|
|
}
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "注册失败");
|
|
@@ -85,45 +84,40 @@ public class LoginService implements ILoginService {
|
|
|
@Override
|
|
|
public RestResponse login(HttpServletRequest request, UserRequest userRequest) {
|
|
|
String password = userRequest.getPassword();
|
|
|
- if(StringUtils.isBlank(userRequest.getMobile())){
|
|
|
+ if (StringUtils.isBlank(userRequest.getMobile())) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空无法注册");
|
|
|
}
|
|
|
- if(StringUtils.isBlank(password)){
|
|
|
+ if (StringUtils.isBlank(password)) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "用户密码为空无法注册");
|
|
|
}
|
|
|
//通过手机号获取用户账户信息
|
|
|
UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
|
|
|
//验证手机号是否存在
|
|
|
- if(userAccount == null){
|
|
|
+ if (userAccount == null) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号尚未注册");
|
|
|
}
|
|
|
//校验密码是否正确
|
|
|
String inputPassword = PasswordUtils.generatePassword(password, userAccount.getSalt());
|
|
|
- if(!inputPassword.equals(userAccount.getPassword())){
|
|
|
+ if (!inputPassword.equals(userAccount.getPassword())) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "密码输入有误");
|
|
|
}
|
|
|
- UserResponse userResponse = userService.getLoginUserInfo(userAccount.getUserId());
|
|
|
-
|
|
|
- //将当前公司id放入session中
|
|
|
- if(userResponse.getMaintenanceCompany() != null){
|
|
|
- request.getSession().setAttribute(ApiConstants.CURRENT_COMPANY_ID, userResponse.getMaintenanceCompany().getId());
|
|
|
- }
|
|
|
- //将用户信息放入session中
|
|
|
- request.getSession().setAttribute(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
|
|
|
- //将用户登录的信息放入redis中,作为缓存处理
|
|
|
- redisTemplate.opsForValue().set(userResponse.getToken(), JSONUtil.toJsonPrettyStr(userResponse));
|
|
|
- UserLogin userLogin = new UserLogin();
|
|
|
- userLogin.setUserId(userAccount.getUserId());
|
|
|
- userLogin.setIp(CommonUtil.getIpAddress(request));
|
|
|
+ //登录成功后初始化登录信息
|
|
|
+ UserResponse userResponse = initLoginInfo(request, userAccount.getUserId());
|
|
|
//添加登录记录
|
|
|
- userLoginService.save(userLogin);
|
|
|
- return RestResponse.success(userResponse,ApiConstants.RESULT_SUCCESS, "登录成功");
|
|
|
+ userLoginService.saveLoginInfo(request, userAccount.getUserId());
|
|
|
+ return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "登录成功");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public RestResponse resetPassword(UserRequest userRequest) {
|
|
|
+ RestResponse verifyResult = verifySmsCode(userRequest.getMobile(), userRequest.getInputSmsCode());
|
|
|
+ //如果结果不为空说明校验未通过
|
|
|
+ if(verifyResult != null){
|
|
|
+ return verifyResult;
|
|
|
+ }
|
|
|
+ //获取用户信息
|
|
|
UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
|
|
|
- if(userAccount == null) {
|
|
|
+ if (userAccount == null) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号尚未注册");
|
|
|
}
|
|
|
String salt = userAccount.getSalt();
|
|
@@ -139,14 +133,14 @@ public class LoginService implements ILoginService {
|
|
|
Long companyId = userRequest.getCompanyId();
|
|
|
UserResponse userResponse = new UserResponse();
|
|
|
UserRole userRole = userRoleService.getOne(new QueryWrapper<UserRole>()
|
|
|
- .eq("company_id", companyId)
|
|
|
- .eq("user_id", userRequest.getUserId())
|
|
|
+ .eq("company_id", companyId)
|
|
|
+ .eq("user_id", userRequest.getUserId())
|
|
|
);
|
|
|
- if(userRole != null){
|
|
|
+ if (userRole != null) {
|
|
|
Role role = roleService.getById(userRole.getRoleId());
|
|
|
userResponse.setRole(role);
|
|
|
//获取菜单信息
|
|
|
- if(role != null){
|
|
|
+ if (role != null) {
|
|
|
//设置菜单树
|
|
|
List<Menu> menuTree = roleMenuService.getMenuTree(role.getId());
|
|
|
userResponse.setMenus(menuTree);
|
|
@@ -154,4 +148,60 @@ public class LoginService implements ILoginService {
|
|
|
}
|
|
|
return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "切换团队成功");
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RestResponse wxLogin(HttpServletRequest request, UserRequest userRequest) {
|
|
|
+ //通过授权码获取用户openId
|
|
|
+ String openId = userRequest.getAuthCode();
|
|
|
+ UserAccount userAccount = userAccountService.getOne(new QueryWrapper<UserAccount>()
|
|
|
+ .eq("wechat_open_id", openId)
|
|
|
+ );
|
|
|
+ if (userAccount == null) {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "微信号尚未绑定用户信息");
|
|
|
+ }
|
|
|
+ //用户存在,关联登录成功
|
|
|
+ //登录成功初始化登录信息
|
|
|
+ UserResponse userResponse = initLoginInfo(request, userAccount.getUserId());
|
|
|
+ //保存登录记录
|
|
|
+ userLoginService.saveLoginInfo(request, userAccount.getUserId());
|
|
|
+ return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "用户登录成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ * @description 初始化登录信息
|
|
|
+ * @date 2019-12-30 11:22
|
|
|
+ */
|
|
|
+ private UserResponse initLoginInfo(HttpServletRequest request, Long userId) {
|
|
|
+ //获取用户信息
|
|
|
+ UserResponse userResponse = userService.getLoginUserInfo(userId);
|
|
|
+ //将当前公司id放入session中
|
|
|
+ if (userResponse.getMaintenanceCompany() != null) {
|
|
|
+ request.getSession().setAttribute(ApiConstants.CURRENT_COMPANY_ID, userResponse.getMaintenanceCompany().getId());
|
|
|
+ }
|
|
|
+ //将用户信息放入session中
|
|
|
+ request.getSession().setAttribute(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
|
|
|
+ //将用户登录的信息放入redis中,作为缓存处理
|
|
|
+ redisTemplate.opsForValue().set(userResponse.getToken(), JSONUtil.toJsonPrettyStr(userResponse));
|
|
|
+ return userResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ * @description 校验短信验证码
|
|
|
+ * @date 2019-12-30 17:46
|
|
|
+ */
|
|
|
+ private RestResponse verifySmsCode(String mobile, String inputSmsCode) {
|
|
|
+ Object smsCode = redisTemplate.opsForValue().get(mobile + AliConstants.SmsConstants.SMS_CODE_NAME);
|
|
|
+ if (smsCode != null) {
|
|
|
+ if (!(smsCode.equals(inputSmsCode))) {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "短信验证码输入有误");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "验证码过期,请重新获取验证码");
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|