记得上下班打卡 | git大法好,push需谨慎

Commit ea3bba76 authored by 姜秀龙's avatar 姜秀龙

Merge branch 'refs/heads/jxl-mplogin' into test-ecs

parents 16b2e82e 5ae7707f
...@@ -71,7 +71,8 @@ public interface FeignAdamBaseClient { ...@@ -71,7 +71,8 @@ public interface FeignAdamBaseClient {
@NotBlank(message = "手机号不能为空") @NotBlank(message = "手机号不能为空")
@RequestParam(value = "mobile") String mobile, @RequestParam(value = "mobile") String mobile,
@NotBlank(message = "临时票据不能为空") @NotBlank(message = "临时票据不能为空")
@RequestParam(value = "otp") String otp); @RequestParam(value = "otp") String otp,
@RequestParam(value = "isComplete", required = false) Integer isComplete);
@GetMapping(value = "member/check/depth", headers = {"Inner-Required=1"}) @GetMapping(value = "member/check/depth", headers = {"Inner-Required=1"})
ResponseDto<Boolean> isMember(@NotBlank(message = "用户ID不能为空") @RequestParam(value = "uid") String uid); ResponseDto<Boolean> isMember(@NotBlank(message = "用户ID不能为空") @RequestParam(value = "uid") String uid);
......
...@@ -339,7 +339,8 @@ public class AdamLoginController { ...@@ -339,7 +339,8 @@ public class AdamLoginController {
@NotBlank(message = "手机号不能为空") @NotBlank(message = "手机号不能为空")
@RequestParam String mobile, @RequestParam String mobile,
@NotBlank(message = "临时票据不能为空") @NotBlank(message = "临时票据不能为空")
@RequestParam String otp) { @RequestParam String otp,
@RequestParam(required = false) Integer isComplete) {
log.info("login by silent for mobile:{},{}", mobile, otp); log.info("login by silent for mobile:{},{}", mobile, otp);
long reql = 0, l = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC); long reql = 0, l = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
String otpDecrypt = null; String otpDecrypt = null;
...@@ -352,7 +353,7 @@ public class AdamLoginController { ...@@ -352,7 +353,7 @@ public class AdamLoginController {
log.error("login by silent for mobile:{},{}/{},{}-{}", mobile, otp, otpDecrypt, l, reql); log.error("login by silent for mobile:{},{}/{},{}-{}", mobile, otp, otpDecrypt, l, reql);
return ResponseDto.failure(ErrorMapping.get("10005")); return ResponseDto.failure(ErrorMapping.get("10005"));
} }
return this.silentMobileLoginSuccess(mobile, null); return this.silentMobileLoginSuccess(mobile, null, null == isComplete ? 0 : isComplete);
} }
@ApiOperationSupport(order = 7) @ApiOperationSupport(order = 7)
...@@ -372,15 +373,15 @@ public class AdamLoginController { ...@@ -372,15 +373,15 @@ public class AdamLoginController {
log.error("login by silent v2 otp invalid, mobile:{}", mobile); log.error("login by silent v2 otp invalid, mobile:{}", mobile);
return ResponseDto.failure(ErrorMapping.get("10005")); return ResponseDto.failure(ErrorMapping.get("10005"));
} }
return this.silentMobileLoginSuccess(mobile, AdamConst.REGIST_SOURCE_DOUDOU); return this.silentMobileLoginSuccess(mobile, AdamConst.REGIST_SOURCE_DOUDOU, 0);
} }
private ResponseDto<AdamLoginInfoVo> silentMobileLoginSuccess(String mobile, String registSource) { private ResponseDto<AdamLoginInfoVo> silentMobileLoginSuccess(String mobile, String registSource, int isComplete) {
String uid = adamRdmService.getUidByMobile(mobile); String uid = adamRdmService.getUidByMobile(mobile);
boolean toRegister = StringUtils.isEmpty(uid); boolean toRegister = StringUtils.isEmpty(uid);
AdamUserInfoVo userInfoVo = toRegister AdamUserInfoVo userInfoVo = toRegister
? adamUserService.register(mobile, 0, registSource) ? adamUserService.register(mobile, isComplete, registSource)
: adamRdmService.getUserInfoVoByUid(uid); : adamRdmService.getUserInfoVoByUid(uid);
if (!toRegister && (null == userInfoVo || userInfoVo.getState() == 2)) { if (!toRegister && (null == userInfoVo || userInfoVo.getState() == 2)) {
......
...@@ -2,6 +2,7 @@ package com.liquidnet.service.sweet.controller; ...@@ -2,6 +2,7 @@ package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo; import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.vo.WechatAppletLoginInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo; import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo; import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.service.impl.SweetWechatLoginServiceImpl; import com.liquidnet.service.sweet.service.impl.SweetWechatLoginServiceImpl;
...@@ -26,7 +27,7 @@ public class SweetWechatLoginController { ...@@ -26,7 +27,7 @@ public class SweetWechatLoginController {
private SweetWechatLoginServiceImpl sweetLoginService; private SweetWechatLoginServiceImpl sweetLoginService;
@GetMapping("userInfo") @GetMapping("userInfo")
@ApiOperation("小程序解密手机号") @ApiOperation("小程序授权手机号登录")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "userCode", value = " 获取 uid oid的 code"), @ApiImplicitParam(type = "query", dataType = "String", name = "userCode", value = " 获取 uid oid的 code"),
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "获取手机号的 code", required = true), @ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "获取手机号的 code", required = true),
...@@ -34,7 +35,7 @@ public class SweetWechatLoginController { ...@@ -34,7 +35,7 @@ public class SweetWechatLoginController {
@ApiImplicitParam(type = "query", dataType = "String", name = "iv", value = "iv"), @ApiImplicitParam(type = "query", dataType = "String", name = "iv", value = "iv"),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1草莓 2五百里 3mdsk 4正在 5跳飞船 6小家伙 7摩登 8DouDou 9mootoo 10wenque", required = true), @ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1草莓 2五百里 3mdsk 4正在 5跳飞船 6小家伙 7摩登 8DouDou 9mootoo 10wenque", required = true),
}) })
public ResponseDto userInfo( public ResponseDto<WechatAppletLoginInfoVo> userInfo(
@RequestParam(required = false) String userCode, @RequestParam(required = false) String userCode,
@RequestParam() String code, @RequestParam() String code,
@RequestParam(required = false) String encryptedData, @RequestParam(required = false) String encryptedData,
......
package com.liquidnet.service.sweet.dto.vo;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "WechatAppletLoginInfoVo", description = "小程序登录响应(含旧版兼容字段)")
public class WechatAppletLoginInfoVo extends AdamLoginInfoVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty("兼容旧版,同 userInfo.uid")
private String userId;
@ApiModelProperty("兼容旧版,同 wechatOpenid")
private String openId;
@ApiModelProperty("兼容旧版,同 wechatUnionid")
private String unionId;
@ApiModelProperty("兼容旧版")
private String getPhoneNumber;
@ApiModelProperty("兼容旧版")
private String getPurePhoneNumber;
@ApiModelProperty("兼容旧版")
private String getCountryCode;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
public String getGetPhoneNumber() {
return getPhoneNumber;
}
public void setGetPhoneNumber(String getPhoneNumber) {
this.getPhoneNumber = getPhoneNumber;
}
public String getGetPurePhoneNumber() {
return getPurePhoneNumber;
}
public void setGetPurePhoneNumber(String getPurePhoneNumber) {
this.getPurePhoneNumber = getPurePhoneNumber;
}
public String getGetCountryCode() {
return getCountryCode;
}
public void setGetCountryCode(String getCountryCode) {
this.getCountryCode = getCountryCode;
}
public static WechatAppletLoginInfoVo wrap(AdamLoginInfoVo loginInfo, String phoneNumber,
String purePhoneNumber, String countryCode,
String openId, String unionId) {
WechatAppletLoginInfoVo vo = new WechatAppletLoginInfoVo();
vo.setToken(loginInfo.getToken());
vo.setUserInfo(loginInfo.getUserInfo());
vo.setUserMemberVo(loginInfo.getUserMemberVo());
vo.setWechatOpenid(loginInfo.getWechatOpenid());
vo.setWechatUnionid(loginInfo.getWechatUnionid());
if (null != loginInfo.getUserInfo()) {
vo.setUserId(loginInfo.getUserInfo().getUid());
}
vo.setOpenId(openId);
vo.setUnionId(unionId);
vo.setGetPhoneNumber(phoneNumber);
vo.setGetPurePhoneNumber(purePhoneNumber);
vo.setGetCountryCode(countryCode);
return vo;
}
}
...@@ -6,12 +6,12 @@ import com.liquidnet.commons.lang.util.CollectionUtil; ...@@ -6,12 +6,12 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DESUtils; import com.liquidnet.commons.lang.util.DESUtils;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo; import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.base.ErrorMapping; import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.feign.adam.api.FeignAdamBaseClient; import com.liquidnet.service.feign.adam.api.FeignAdamBaseClient;
import com.liquidnet.service.sweet.dto.vo.WechatAppletLoginInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo; import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo; import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.utils.QueueUtils; import com.liquidnet.service.sweet.utils.QueueUtils;
...@@ -27,7 +27,6 @@ import org.springframework.stereotype.Service; ...@@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Objects; import java.util.Objects;
...@@ -56,7 +55,7 @@ public class SweetWechatLoginServiceImpl { ...@@ -56,7 +55,7 @@ public class SweetWechatLoginServiceImpl {
@Lazy @Lazy
private FeignAdamBaseClient feignAdamBaseClient; private FeignAdamBaseClient feignAdamBaseClient;
public ResponseDto userInfo(String userCode, String code, String encryptedData, String iv, Integer type) { public ResponseDto<WechatAppletLoginInfoVo> userInfo(String userCode, String code, String encryptedData, String iv, Integer type) {
log.info("小程序解密用户信息参数:[code=[{}], encryptedData=[{}], [iv=[{}], type=[{}]", code, encryptedData, iv, type); log.info("小程序解密用户信息参数:[code=[{}], encryptedData=[{}], [iv=[{}], type=[{}]", code, encryptedData, iv, type);
try { try {
WxMaJscode2SessionResult sessionInfo = null; WxMaJscode2SessionResult sessionInfo = null;
...@@ -83,54 +82,19 @@ public class SweetWechatLoginServiceImpl { ...@@ -83,54 +82,19 @@ public class SweetWechatLoginServiceImpl {
String phoneNumber = wxMaPhoneNumberInfo.getPhoneNumber(); String phoneNumber = wxMaPhoneNumberInfo.getPhoneNumber();
String purePhoneNumber = wxMaPhoneNumberInfo.getPurePhoneNumber(); String purePhoneNumber = wxMaPhoneNumberInfo.getPurePhoneNumber();
String countryCode = wxMaPhoneNumberInfo.getCountryCode(); String countryCode = wxMaPhoneNumberInfo.getCountryCode();
// mysql redis boolean needSweetBinding = null == redisUtils.getSweetAppletUsersOfPhone(purePhoneNumber);
SweetAppletUsersVo sweetAppletUsers = redisUtils.getSweetAppletUsersOfPhone(purePhoneNumber); ResponseDto<AdamLoginInfoVo> loginResp = this.loginByPhoneWithWechat(
String userId = ""; purePhoneNumber, openId, unionId, needSweetBinding ? 1 : null);
if (null == sweetAppletUsers) { if (!loginResp.isSuccess() || null == loginResp.getData()) {
// 获取adam用户信息 自动注册 return ResponseDto.failure(loginResp.getCode(), loginResp.getMessage());
ResponseDto<AdamUserInfoVo> userInfoVo = feignAdamBaseClient.registerByMobile(purePhoneNumber); }
AdamUserInfoVo userInfoVoData = userInfoVo.getData(); if (needSweetBinding) {
userId = userInfoVoData.getUid(); this.bindSweetAppletUser(
loginResp.getData().getUserInfo().getUid(),
String appletUserId = IDGenerator.nextSnowId(); openId, unionId, phoneNumber, purePhoneNumber, countryCode, type);
LinkedList<String> sqlsA = CollectionUtil.linkedListString(); }
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr(); return ResponseDto.success(WechatAppletLoginInfoVo.wrap(
sqlsA.add(SqlMapping.get("sweet_applet_users.insert")); loginResp.getData(), phoneNumber, purePhoneNumber, countryCode, openId, unionId));
sqlsDataA.add(new Object[]{
appletUserId, userId, openId, unionId, phoneNumber, purePhoneNumber, countryCode, type
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqlsA, sqlsDataA));
SweetAppletUsersVo sweetAppletUsersVo = SweetAppletUsersVo.getNew();
sweetAppletUsersVo.setAppletUserId(appletUserId);
sweetAppletUsersVo.setUserId(userId);
sweetAppletUsersVo.setOpenId(openId);
sweetAppletUsersVo.setUnionId(unionId);
sweetAppletUsersVo.setPhoneNumber(phoneNumber);
sweetAppletUsersVo.setPurePhoneNumber(purePhoneNumber);
sweetAppletUsersVo.setCountryCode(countryCode);
sweetAppletUsersVo.setType(type);
redisUtils.setSweetAppletUsers(sweetAppletUsersVo);
// 调用关注赠积分任务 这里如果不调用的话
// 1。关注过了也登陆过小程序的可以脚本处理 脚本不处理就需要每个用户点进入小程序登陆
// 2。关注过了 无小程序的 本次登陆才有的 接口也不是前端请求的 就没有地方触发做任务接口
// 3。有小程序未关注的就关注时候适用
/*SweetWechatUsersVo sweetWechatUsersSky = redisUtils.getSweetWechatUsersOfUnionId(unionId, 2);
if (null != sweetWechatUsersSky) {
feignStoneIntegralClient.doTask(4, userId);
}*/
} else {
userId = sweetAppletUsers.getUserId();
}
// 返回给前端数据
HashMap<String, Object> userInfo = CollectionUtil.mapStringObject();
userInfo.put("unionId", unionId);
userInfo.put("openId", openId);
userInfo.put("userId", userId);
userInfo.put("getPhoneNumber", phoneNumber);
userInfo.put("getPurePhoneNumber", purePhoneNumber);
userInfo.put("getCountryCode", countryCode);
return ResponseDto.success(userInfo);
} catch (Exception e) { } catch (Exception e) {
log.error("WechatUserInfoError Exception:{}", e); log.error("WechatUserInfoError Exception:{}", e);
return ResponseDto.failure(); return ResponseDto.failure();
...@@ -186,16 +150,58 @@ public class SweetWechatLoginServiceImpl { ...@@ -186,16 +150,58 @@ public class SweetWechatLoginServiceImpl {
if (null == sweetAppletUsersVo) { if (null == sweetAppletUsersVo) {
return ResponseDto.failure(ErrorMapping.get("90081")); return ResponseDto.failure(ErrorMapping.get("90081"));
} }
String purePhone = sweetAppletUsersVo.getPurePhoneNumber(); return this.loginByPhoneWithWechat(
String otp = DESUtils.DES().encrypt(purePhone + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); sweetAppletUsersVo.getPurePhoneNumber(),
ResponseDto<AdamLoginInfoVo> adamUserInfoVoResponseDto = feignAdamBaseClient.loginBySilentMobile(purePhone, otp); sweetAppletUsersVo.getOpenId(),
AdamLoginInfoVo adamLoginInfoVo = adamUserInfoVoResponseDto.getData(); sweetAppletUsersVo.getUnionId()
adamLoginInfoVo.setWechatOpenid(sweetAppletUsersVo.getOpenId()); );
adamLoginInfoVo.setWechatUnionid(sweetAppletUsersVo.getUnionId());
return ResponseDto.success(adamLoginInfoVo);
} catch (Exception e) { } catch (Exception e) {
log.error("userInfoMaError Exception:{}", e); log.error("userInfoMaError Exception:{}", e);
return ResponseDto.failure("获取用户信息失败~"); return ResponseDto.failure("获取用户信息失败~");
} }
} }
private ResponseDto<AdamLoginInfoVo> loginByPhoneWithWechat(String purePhone, String openId, String unionId) {
return this.loginByPhoneWithWechat(purePhone, openId, unionId, null);
}
private ResponseDto<AdamLoginInfoVo> loginByPhoneWithWechat(String purePhone, String openId, String unionId, Integer isComplete) {
try {
String otp = DESUtils.DES().encrypt(purePhone + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
ResponseDto<AdamLoginInfoVo> loginResp = feignAdamBaseClient.loginBySilentMobile(purePhone, otp, isComplete);
if (!loginResp.isSuccess() || null == loginResp.getData()) {
return ResponseDto.failure(loginResp.getCode(), loginResp.getMessage());
}
AdamLoginInfoVo loginInfoVo = loginResp.getData();
loginInfoVo.setWechatOpenid(openId);
loginInfoVo.setWechatUnionid(unionId);
return ResponseDto.success(loginInfoVo);
} catch (Exception e) {
log.error("loginByPhoneWithWechat error, mobile:{}", purePhone, e);
return ResponseDto.failure("获取用户信息失败~");
}
}
private void bindSweetAppletUser(String userId, String openId, String unionId, String phoneNumber,
String purePhoneNumber, String countryCode, Integer type) {
String appletUserId = IDGenerator.nextSnowId();
LinkedList<String> sqlsA = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqlsA.add(SqlMapping.get("sweet_applet_users.insert"));
sqlsDataA.add(new Object[]{
appletUserId, userId, openId, unionId, phoneNumber, purePhoneNumber, countryCode, type
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqlsA, sqlsDataA));
SweetAppletUsersVo sweetAppletUsersVo = SweetAppletUsersVo.getNew();
sweetAppletUsersVo.setAppletUserId(appletUserId);
sweetAppletUsersVo.setUserId(userId);
sweetAppletUsersVo.setOpenId(openId);
sweetAppletUsersVo.setUnionId(unionId);
sweetAppletUsersVo.setPhoneNumber(phoneNumber);
sweetAppletUsersVo.setPurePhoneNumber(purePhoneNumber);
sweetAppletUsersVo.setCountryCode(countryCode);
sweetAppletUsersVo.setType(type);
redisUtils.setSweetAppletUsers(sweetAppletUsersVo);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment