|
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpSession;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -204,6 +205,50 @@ public class LoginService implements ILoginService {
|
|
|
return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "用户登录成功");
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public RestResponse appletLogin(HttpServletRequest request, UserRequest userRequest) {
|
|
|
+ //通过授权码获取用户openId
|
|
|
+ String openId = userRequest.getAuthCode();
|
|
|
+ UserAccount userAccount = userAccountService.getOne(new QueryWrapper<UserAccount>()
|
|
|
+ .eq("applet_open_id", openId)
|
|
|
+ );
|
|
|
+ if (userAccount == null) {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "用户尚未绑定用户信息");
|
|
|
+ }
|
|
|
+ userRequest.setMobile(userAccount.getMobile());
|
|
|
+ UserResponse userResponse = userService.getAppletUserInfo(userAccount.getUserId());
|
|
|
+ if (userResponse == null) {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "访问权限不足");
|
|
|
+ }
|
|
|
+ request.getSession().setAttribute("openId", openId);
|
|
|
+ appletLoginHandle(request, userRequest, userAccount, userResponse);
|
|
|
+ return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "登录成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RestResponse bindMobile(HttpServletRequest request, UserRequest userRequest) {
|
|
|
+ if (StringUtils.isBlank(userRequest.getMobile())) {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空无法绑定");
|
|
|
+ }
|
|
|
+ RestResponse restResponse = verifySmsCode(userRequest.getMobile(), userRequest.getInputSmsCode());
|
|
|
+ if (restResponse != null) {
|
|
|
+ return restResponse;
|
|
|
+ }
|
|
|
+ UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
|
|
|
+ if (userAccount == null) {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "用户信息为空无法登录");
|
|
|
+ }
|
|
|
+ //获取openId
|
|
|
+ String openId = (String) request.getSession().getAttribute("openId");
|
|
|
+ userAccount.setAppletOpenId(openId);
|
|
|
+ UserResponse userResponse = userService.getAppletUserInfo(userAccount.getUserId());
|
|
|
+ if (userResponse == null) {
|
|
|
+ return RestResponse.fail(ApiConstants.RESULT_ERROR, "访问权限不足");
|
|
|
+ }
|
|
|
+ appletLoginHandle(request, userRequest, userAccount, userResponse);
|
|
|
+ return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "绑定成功");
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public RestResponse verifySmsCode(String mobile, String inputSmsCode) {
|
|
|
Object smsCode = redisTemplate.opsForValue().get(mobile + AliConstants.SmsConstants.SMS_CODE_FIELD);
|
|
@@ -236,6 +281,7 @@ public class LoginService implements ILoginService {
|
|
|
private UserResponse initLoginInfo(HttpServletRequest request, UserRequest userRequest) {
|
|
|
//获取用户信息
|
|
|
UserResponse userResponse = userService.getLoginUserInfo(userRequest.getUserId());
|
|
|
+ userRequest.setMobile(userResponse.getMobile());
|
|
|
//将当前用户id放入session中
|
|
|
request.getSession().setAttribute(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
|
|
|
//将当前公司id放入session中
|
|
@@ -380,4 +426,38 @@ public class LoginService implements ILoginService {
|
|
|
private String getUserInfoKeyInRedis(UserRequest userRequest) {
|
|
|
return userRequest.getMobile() + ApiConstants.UserConstants.USER_INFO_MOBILE + userRequest.getMobileType();
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @description 小程序登录成功后处理
|
|
|
+ * @date 2020/4/27 3:10 下午
|
|
|
+ */
|
|
|
+ private void appletLoginHandle(HttpServletRequest request, UserRequest userRequest,
|
|
|
+ UserAccount userAccount, UserResponse userResponse) {
|
|
|
+ //封装登录用户信息
|
|
|
+ Map<String, Object> currentUserInfoMap = getUserInfoMap(userResponse);
|
|
|
+ String mobileUserInfo = getUserInfoKeyInRedis(userRequest);
|
|
|
+ //将用户信息放入redis中
|
|
|
+ putUserInfoToRedis(userRequest, userResponse, currentUserInfoMap, mobileUserInfo);
|
|
|
+ setUserInfoToSession(request, userResponse);
|
|
|
+ //添加登录记录
|
|
|
+ userLoginService.saveLoginInfo(request, userAccount.getUserId());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param request 请求
|
|
|
+ * @description 将用户信息放入session
|
|
|
+ * @date 2020/4/27 3:08 下午
|
|
|
+ */
|
|
|
+ private void setUserInfoToSession(HttpServletRequest request, UserResponse userResponse) {
|
|
|
+ //将用户信息放入session中
|
|
|
+ HttpSession session = request.getSession();
|
|
|
+ session.setAttribute(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
|
|
|
+ if (userResponse.getMaintenanceCompany() != null) {
|
|
|
+ session.setAttribute(ApiConstants.CURRENT_COMPANY_ID, userResponse.getMaintenanceCompany().getId());
|
|
|
+ }
|
|
|
+ if (userResponse.getRole() != null) {
|
|
|
+ session.setAttribute(ApiConstants.CURRENT_ROLE_ID, userResponse.getRole().getId());
|
|
|
+ session.setAttribute(ApiConstants.CURRENT_ROLE_CODE, userResponse.getRole().getCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|