修复支付 导出最新sql

This commit is contained in:
hupeng
2023-10-11 11:39:10 +08:00
parent 85b0868dde
commit 441dad9ef6
30 changed files with 838 additions and 122 deletions

View File

@ -19,6 +19,7 @@ public interface ErrorCodeConstants {
ErrorCode AUTH_TOKEN_EXPIRED = new ErrorCode(1004003004, "Token 已经过期");
ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1004003005, "未绑定账号,需要进行绑定");
ErrorCode AUTH_WEIXIN_MINI_APP_PHONE_CODE_ERROR = new ErrorCode(1004003006, "获得手机号失败");
ErrorCode MINI_AUTH_LOGIN_BAD = new ErrorCode(1004004002, "登录失败,请联系管理员");
// ========== 用户收件地址 1004004000 ==========
ErrorCode USER_ADDRESS_NOT_EXISTS = new ErrorCode(1004004000, "用户收件地址不存在");

View File

@ -43,7 +43,7 @@ public class AppUserAddressQueryVo implements Serializable {
private String detail;
@Schema(description = "邮编", required = true, example = "24169")
private Integer postCode;
private String postCode;
@Schema(description = "经度", required = true, example = "24169")
private String longitude;

View File

@ -170,9 +170,16 @@ public class MemberUserDO extends TenantBaseDO {
*/
private String loginType;
//公众号openid
private String openid;
//小程序openid
private String routineOpenid;
/** 微信用户json信息 */
@TableField(typeHandler = FastjsonTypeHandler.class)
@Deprecated
private WechatUserDto wxProfile;
}

View File

@ -1,9 +1,11 @@
package co.yixiang.yshop.module.member.service.auth;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.enums.CommonStatusEnum;
import co.yixiang.yshop.framework.common.enums.UserTypeEnum;
import co.yixiang.yshop.framework.common.util.monitor.TracerUtils;
@ -29,6 +31,7 @@ import co.yixiang.yshop.module.system.enums.sms.SmsSceneEnum;
import co.yixiang.yshop.module.system.enums.social.SocialTypeEnum;
import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -39,6 +42,7 @@ import java.util.Objects;
import static co.yixiang.yshop.framework.common.exception.util.ServiceExceptionUtil.exception;
import static co.yixiang.yshop.framework.common.util.servlet.ServletUtils.getClientIP;
import static co.yixiang.yshop.module.member.enums.ErrorCodeConstants.*;
import static co.yixiang.yshop.module.member.enums.ErrorCodeConstants.MINI_AUTH_LOGIN_BAD;
/**
* 会员的认证 Service 接口
@ -130,19 +134,34 @@ public class MemberAuthServiceImpl implements MemberAuthService {
try {
phoneNumberInfo = wxMaService.getUserService().getNewPhoneNoInfo(reqVO.getPhoneCode());
} catch (Exception exception) {
log.error(exception.getMessage());
throw exception(AUTH_WEIXIN_MINI_APP_PHONE_CODE_ERROR);
}
// 获得获得注册用户
MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(), getClientIP(),
LoginTypeEnum.WXAPP.getValue());
Assert.notNull(user, "获取用户失败,结果为空");
// 用户已经存在
MemberUserDO memberUserDO = userMapper.selectByMobile(phoneNumberInfo.getPhoneNumber());
if (memberUserDO == null || StrUtil.isBlank(memberUserDO.getRoutineOpenid())) {
// 绑定社交用户
socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(),
SocialTypeEnum.WECHAT_MINI_APP.getType(), reqVO.getLoginCode(), ""));
WxMaJscode2SessionResult session = null;
try {
session = wxMaService.getUserService().getSessionInfo(reqVO.getLoginCode());
} catch (WxErrorException e) {
log.error(e.getMessage());
throw exception(MINI_AUTH_LOGIN_BAD);
}
if(memberUserDO == null){
// 获得获得注册用户
memberUserDO = userService.createUserIfAbsent(phoneNumberInfo.getPhoneNumber(), getClientIP(),
LoginTypeEnum.WXAPP.getValue());
memberUserDO.setNickname("yshop用户_" + memberUserDO.getId());
}
memberUserDO.setRoutineOpenid(session.getOpenid());
userMapper.updateById(memberUserDO);
}
// 创建 Token 令牌,记录登录日志
return createTokenAfterLoginSuccess(user, user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL);
return createTokenAfterLoginSuccess(memberUserDO, memberUserDO.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL);
}
private AppAuthLoginRespVO createTokenAfterLoginSuccess(MemberUserDO user, String mobile, LoginLogTypeEnum logType) {