记得上下班打卡 | 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 {
@NotBlank(message = "手机号不能为空")
@RequestParam(value = "mobile") String mobile,
@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"})
ResponseDto<Boolean> isMember(@NotBlank(message = "用户ID不能为空") @RequestParam(value = "uid") String uid);
......
......@@ -339,7 +339,8 @@ public class AdamLoginController {
@NotBlank(message = "手机号不能为空")
@RequestParam String mobile,
@NotBlank(message = "临时票据不能为空")
@RequestParam String otp) {
@RequestParam String otp,
@RequestParam(required = false) Integer isComplete) {
log.info("login by silent for mobile:{},{}", mobile, otp);
long reql = 0, l = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
String otpDecrypt = null;
......@@ -352,7 +353,7 @@ public class AdamLoginController {
log.error("login by silent for mobile:{},{}/{},{}-{}", mobile, otp, otpDecrypt, l, reql);
return ResponseDto.failure(ErrorMapping.get("10005"));
}
return this.silentMobileLoginSuccess(mobile, null);
return this.silentMobileLoginSuccess(mobile, null, null == isComplete ? 0 : isComplete);
}
@ApiOperationSupport(order = 7)
......@@ -372,15 +373,15 @@ public class AdamLoginController {
log.error("login by silent v2 otp invalid, mobile:{}", mobile);
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);
boolean toRegister = StringUtils.isEmpty(uid);
AdamUserInfoVo userInfoVo = toRegister
? adamUserService.register(mobile, 0, registSource)
? adamUserService.register(mobile, isComplete, registSource)
: adamRdmService.getUserInfoVoByUid(uid);
if (!toRegister && (null == userInfoVo || userInfoVo.getState() == 2)) {
......
......@@ -2,6 +2,7 @@ package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
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.WechatUserInfoVo;
import com.liquidnet.service.sweet.service.impl.SweetWechatLoginServiceImpl;
......@@ -26,7 +27,7 @@ public class SweetWechatLoginController {
private SweetWechatLoginServiceImpl sweetLoginService;
@GetMapping("userInfo")
@ApiOperation("小程序解密手机号")
@ApiOperation("小程序授权手机号登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "userCode", value = " 获取 uid oid的 code"),
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "获取手机号的 code", required = true),
......@@ -34,7 +35,7 @@ public class SweetWechatLoginController {
@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),
})
public ResponseDto userInfo(
public ResponseDto<WechatAppletLoginInfoVo> userInfo(
@RequestParam(required = false) String userCode,
@RequestParam() String code,
@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;
import com.liquidnet.commons.lang.util.DESUtils;
import com.liquidnet.commons.lang.util.IDGenerator;
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.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
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.WechatUserInfoVo;
import com.liquidnet.service.sweet.utils.QueueUtils;
......@@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Objects;
......@@ -56,7 +55,7 @@ public class SweetWechatLoginServiceImpl {
@Lazy
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);
try {
WxMaJscode2SessionResult sessionInfo = null;
......@@ -83,54 +82,19 @@ public class SweetWechatLoginServiceImpl {
String phoneNumber = wxMaPhoneNumberInfo.getPhoneNumber();
String purePhoneNumber = wxMaPhoneNumberInfo.getPurePhoneNumber();
String countryCode = wxMaPhoneNumberInfo.getCountryCode();
// mysql redis
SweetAppletUsersVo sweetAppletUsers = redisUtils.getSweetAppletUsersOfPhone(purePhoneNumber);
String userId = "";
if (null == sweetAppletUsers) {
// 获取adam用户信息 自动注册
ResponseDto<AdamUserInfoVo> userInfoVo = feignAdamBaseClient.registerByMobile(purePhoneNumber);
AdamUserInfoVo userInfoVoData = userInfoVo.getData();
userId = userInfoVoData.getUid();
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);
// 调用关注赠积分任务 这里如果不调用的话
// 1。关注过了也登陆过小程序的可以脚本处理 脚本不处理就需要每个用户点进入小程序登陆
// 2。关注过了 无小程序的 本次登陆才有的 接口也不是前端请求的 就没有地方触发做任务接口
// 3。有小程序未关注的就关注时候适用
/*SweetWechatUsersVo sweetWechatUsersSky = redisUtils.getSweetWechatUsersOfUnionId(unionId, 2);
if (null != sweetWechatUsersSky) {
feignStoneIntegralClient.doTask(4, userId);
}*/
} else {
userId = sweetAppletUsers.getUserId();
boolean needSweetBinding = null == redisUtils.getSweetAppletUsersOfPhone(purePhoneNumber);
ResponseDto<AdamLoginInfoVo> loginResp = this.loginByPhoneWithWechat(
purePhoneNumber, openId, unionId, needSweetBinding ? 1 : null);
if (!loginResp.isSuccess() || null == loginResp.getData()) {
return ResponseDto.failure(loginResp.getCode(), loginResp.getMessage());
}
if (needSweetBinding) {
this.bindSweetAppletUser(
loginResp.getData().getUserInfo().getUid(),
openId, unionId, phoneNumber, purePhoneNumber, countryCode, type);
}
// 返回给前端数据
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);
return ResponseDto.success(WechatAppletLoginInfoVo.wrap(
loginResp.getData(), phoneNumber, purePhoneNumber, countryCode, openId, unionId));
} catch (Exception e) {
log.error("WechatUserInfoError Exception:{}", e);
return ResponseDto.failure();
......@@ -186,16 +150,58 @@ public class SweetWechatLoginServiceImpl {
if (null == sweetAppletUsersVo) {
return ResponseDto.failure(ErrorMapping.get("90081"));
}
String purePhone = sweetAppletUsersVo.getPurePhoneNumber();
String otp = DESUtils.DES().encrypt(purePhone + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
ResponseDto<AdamLoginInfoVo> adamUserInfoVoResponseDto = feignAdamBaseClient.loginBySilentMobile(purePhone, otp);
AdamLoginInfoVo adamLoginInfoVo = adamUserInfoVoResponseDto.getData();
adamLoginInfoVo.setWechatOpenid(sweetAppletUsersVo.getOpenId());
adamLoginInfoVo.setWechatUnionid(sweetAppletUsersVo.getUnionId());
return ResponseDto.success(adamLoginInfoVo);
return this.loginByPhoneWithWechat(
sweetAppletUsersVo.getPurePhoneNumber(),
sweetAppletUsersVo.getOpenId(),
sweetAppletUsersVo.getUnionId()
);
} catch (Exception e) {
log.error("userInfoMaError Exception:{}", e);
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