feat(auth): 重构微信登录和手机号绑定功能
- 简化微信登录接口参数,移除昵称和头像参数 - 优化手机号绑定流程,直接通过openId获取用户信息 - 完善用户信息查询逻辑,从数据库获取真实用户数据 - 修复门禁系统异常处理,添加设备离线检查 - 更新会员信息服务,支持用户创建和信息完善 - 调整MyBatis映射文件,优化用户数据插入逻辑
This commit is contained in:
@@ -33,6 +33,10 @@ public class PlatformContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Integer getPlatFormValue () {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public static void set(String key,Integer value){
|
||||
PlatformDTO platformDTO = new PlatformDTO();
|
||||
platformDTO.setKey(key);
|
||||
|
||||
@@ -71,15 +71,13 @@ public class LoginOrRegisterController extends BaseApiController {
|
||||
*/
|
||||
@RequestMapping(value = "/member/login/wx" , method = RequestMethod.POST)
|
||||
@Deprecated
|
||||
public ResponseDTO loginWx(@RequestParam("code") String code, @RequestParam("nickname") String nickname,
|
||||
@RequestParam("avatar") String avatar){
|
||||
// String openId = wechatService.getXcxOpenId(code); //查询openId:
|
||||
// MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithXcx(openId,nickname,avatar);
|
||||
//
|
||||
// // memberTokenDTO为null则跳绑定手机页面
|
||||
// return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO)
|
||||
// .addAttribute("information",loginRegisterService.info(avatar,nickname,openId));
|
||||
return null;
|
||||
public ResponseDTO loginWx(@RequestParam("code") String code){
|
||||
String openId = wechatService.getXcxOpenId(code); //查询openId:
|
||||
MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithXcx(openId);
|
||||
|
||||
// memberTokenDTO为null则跳绑定手机页面
|
||||
return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO)
|
||||
.addAttribute("information",loginRegisterService.info(openId));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -89,9 +87,11 @@ public class LoginOrRegisterController extends BaseApiController {
|
||||
*/
|
||||
@RequestMapping(value = "/member/login/wx/phone" , method = RequestMethod.POST)
|
||||
public ResponseDTO phone(BindMobileDTO bindMobileDTO){
|
||||
MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithPhoneCode(bindMobileDTO);
|
||||
String openId = wechatService.getXcxOpenId(bindMobileDTO.getLoginCode()); //查询openId:
|
||||
MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithPhoneCode(bindMobileDTO,openId);
|
||||
return ResponseDTO.ok()
|
||||
.addAttribute("authorization",memberTokenDTO);
|
||||
.addAttribute("authorization",memberTokenDTO)
|
||||
.addAttribute("information",loginRegisterService.info(openId));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,6 +115,6 @@ public class LoginOrRegisterController extends BaseApiController {
|
||||
|
||||
// memberTokenDTO为null则跳绑定手机页面
|
||||
return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO)
|
||||
.addAttribute("information",loginRegisterService.info(avatar,nickname,openId));
|
||||
.addAttribute("information",loginRegisterService.info(openId));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import com.sv.dto.api.wechat.WechatLoginResult;
|
||||
import com.sv.entity.Member;
|
||||
import com.sv.entity.MemberAuth;
|
||||
import com.sv.exception.api.ExceptionCodeTemplate;
|
||||
import com.sv.api.util.OSSHelper;
|
||||
import com.sv.api.service.impl.wechat.WechatService;
|
||||
import com.sv.service.api.MemberAuthService;
|
||||
import com.sv.service.api.MemberService;
|
||||
@@ -135,23 +134,23 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
/**
|
||||
* 微信快捷登录
|
||||
*/
|
||||
// @Deprecated
|
||||
// public MemberTokenDTO loginWithXcx(String openId,String nickname, String avatar){
|
||||
//
|
||||
// MemberTokenDTO memberTokenDTO = null;
|
||||
// synchronized (openId){
|
||||
// // 判断用户是否注册过,用微信登录过
|
||||
// MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
// // 登录过,则直接登录成功
|
||||
// if (memberAuth != null){
|
||||
// // 查询访问凭证,并强制更新
|
||||
// memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
|
||||
// // 修改用户图像
|
||||
// updateInformation(memberAuth.getMemberId(),nickname,avatar);
|
||||
// }
|
||||
// }
|
||||
// return memberTokenDTO;
|
||||
// }
|
||||
public MemberTokenDTO loginWithXcx(String openId){
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
Integer platformId = PlatformContext.getPlatFormValue();
|
||||
synchronized (openId.intern()){
|
||||
// 判断用户是否注册过,用微信登录过
|
||||
MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
// 登录过,则直接登录成功
|
||||
if (memberAuth == null){
|
||||
// 先创建用户
|
||||
Member member = memberService.createUser(platformId);
|
||||
// 创建用户登录认证
|
||||
memberAuth = memberAuthService.createByOpenId( member.getId(), platformId, openId);
|
||||
}
|
||||
memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
|
||||
}
|
||||
return memberTokenDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 已用手机号登录,支付,再跳转微信登录
|
||||
@@ -166,7 +165,6 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
if (memberId == null){
|
||||
throw new ServiceException("token过期");
|
||||
}
|
||||
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
synchronized (openId){
|
||||
// 1.根据openId,查找登录表,是否有记录,无,直接登录,插入信息到登录表
|
||||
@@ -213,11 +211,18 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
*
|
||||
* 返回openId
|
||||
*/
|
||||
public MemberInformationDTO info(String avatar,String nickname,String openId){
|
||||
public MemberInformationDTO info(String openId){
|
||||
MemberInformationDTO informationDTO = new MemberInformationDTO();
|
||||
informationDTO.setAvatar(avatar);
|
||||
informationDTO.setNickname(nickname);
|
||||
informationDTO.setOpenId(openId);
|
||||
MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
if (memberAuth != null) {
|
||||
Member byId = memberService.findById(memberAuth.getMemberId());
|
||||
if (byId != null) {
|
||||
informationDTO.setAvatar(byId.getAvatar());
|
||||
informationDTO.setNickname(byId.getNickname());
|
||||
informationDTO.setMobile(byId.getMobile());
|
||||
informationDTO.setOpenId(openId);
|
||||
}
|
||||
}
|
||||
return informationDTO;
|
||||
}
|
||||
|
||||
@@ -345,31 +350,33 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
* 通过loginCode获取openId,通过phoneCode获取手机号,直接完成登录
|
||||
*/
|
||||
@Transactional
|
||||
public MemberTokenDTO loginWithPhoneCode(BindMobileDTO bindMobileDTO){
|
||||
String loginCode = bindMobileDTO.getLoginCode();
|
||||
public MemberTokenDTO loginWithPhoneCode(BindMobileDTO bindMobileDTO,String openId){
|
||||
String phoneCode = bindMobileDTO.getPhoneCode();
|
||||
|
||||
if (StringUtils.isBlank(loginCode)) {
|
||||
if (StringUtils.isBlank(openId)) {
|
||||
throw new ServiceException("loginCode不能为空");
|
||||
}
|
||||
if (StringUtils.isBlank(phoneCode)) {
|
||||
throw new ServiceException("phoneCode不能为空");
|
||||
}
|
||||
Integer value = PlatformContext.getValue();
|
||||
WechatLoginResult wechatResult = wechatService.getXcxOpenIdAndPhone(loginCode, phoneCode);
|
||||
String openId = wechatResult.getOpenId();
|
||||
Integer value = PlatformContext.getPlatFormValue();
|
||||
WechatLoginResult wechatResult = wechatService.getXcxOpenIdAndPhone(openId, phoneCode);
|
||||
String mobile = wechatResult.getPhoneNumber();
|
||||
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
synchronized (openId.intern()){
|
||||
Member member = memberService.findByMobile(mobile);
|
||||
if (member == null) {
|
||||
member = memberService.createByMobile(mobile, value);
|
||||
MemberAuth memberAuth = memberAuthService.findByMobile(mobile);
|
||||
MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
if (memberAuth == null) {
|
||||
memberAuth = memberAuthService.createByMobileByOpenId(member.getId(), member.getPlatformId(), mobile, openId);
|
||||
member = memberService.createByMobile(mobile, value);
|
||||
}
|
||||
memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
|
||||
MemberAuth memberAuthMobile = memberAuthService.findByMobile(mobile);
|
||||
if (memberAuthMobile == null) {
|
||||
memberAuthMobile = memberAuthService.createByMobileByOpenId(memberAuth.getMemberId(), value, mobile, openId);
|
||||
}
|
||||
bindMobile(memberAuth.getMemberId(),mobile);
|
||||
memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuthMobile.getMemberId(), Boolean.TRUE);
|
||||
} else {
|
||||
if (DeletedEnum.YES.value.equals(member.getDeleted())) {
|
||||
throw new ServiceException(ExceptionCodeTemplate.NONE_MEMBER_INFORMATION);
|
||||
@@ -392,6 +399,14 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
return memberTokenDTO;
|
||||
}
|
||||
|
||||
|
||||
private void bindMobile(Integer memberId,String mobile) {
|
||||
Member member = memberService.findById(memberId);
|
||||
memberService.verify(member);
|
||||
member.setMobile( mobile);
|
||||
memberService.update(member);
|
||||
}
|
||||
|
||||
/***
|
||||
* 修改用户图像
|
||||
*/
|
||||
@@ -404,13 +419,13 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
if (nickname != null){
|
||||
member.setNickname(nickname);
|
||||
}
|
||||
|
||||
|
||||
// 如果更新了头像,增加修改次数
|
||||
if (avatar != null && !avatar.equals(member.getAvatar())) {
|
||||
int currentYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
|
||||
Integer modifyCount = member.getAvatarModifyCount();
|
||||
Integer modifyYear = member.getAvatarModifyYear();
|
||||
|
||||
|
||||
if (modifyYear == null || modifyYear != currentYear) {
|
||||
member.setAvatarModifyCount(1);
|
||||
member.setAvatarModifyYear(currentYear);
|
||||
@@ -418,7 +433,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
member.setAvatarModifyCount((modifyCount == null ? 0 : modifyCount) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
member.setAvatar(avatar);
|
||||
memberService.update(member);
|
||||
}
|
||||
|
||||
@@ -50,14 +50,13 @@ public class WechatService extends BaseServiceImpl {
|
||||
return response.getOpenid();
|
||||
}
|
||||
|
||||
public WechatLoginResult getXcxOpenIdAndPhone(String loginCode, String phoneCode) {
|
||||
public WechatLoginResult getXcxOpenIdAndPhone(String openId, String phoneCode) {
|
||||
Platform platform = platformServiceImpl.findById(PLATFORM_ID);
|
||||
if (platform == null) {
|
||||
logger.error("平台信息不存在,platformId: " + PLATFORM_ID);
|
||||
throw new ServiceException(ExceptionCodeTemplate.SERVICE_EXCEPTION);
|
||||
}
|
||||
|
||||
String openId = getXcxOpenId(loginCode);
|
||||
String accessToken = getAccessToken(platform);
|
||||
String phoneNumber = getPhoneNumber(phoneCode, accessToken);
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
logger.info("=========" + JsonUtils.encode(heartBeat) + clientId);
|
||||
String deviceName = heartBeat.getDeviceName();
|
||||
Integer venueId = heartBeat.getVenueId();
|
||||
|
||||
|
||||
Channel oldChannel = getCurrentChannel(deviceName, venueId);
|
||||
if (oldChannel == null) {
|
||||
Venue thisVenue = venueService.findById(venueId);
|
||||
@@ -196,6 +196,10 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
throw new ServiceException("二维码已经使用");
|
||||
}
|
||||
Channel channel = getCurrentChannel(doorSn,venueBarCode.getVenueId());
|
||||
if (channel == null) {
|
||||
logger.error("门禁异常");
|
||||
throw new ServiceException("门禁异常离线中");
|
||||
}
|
||||
Member member = memberService.findByMember(venueBarCode.getMemberId());
|
||||
if (member != null) {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueBarCode.getVenueId());
|
||||
@@ -240,6 +244,10 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
throw new ServiceException("二维码已经使用");
|
||||
}
|
||||
Channel channel = getCurrentChannel(doorSn, venueBarCode.getVenueId());
|
||||
if (channel == null) {
|
||||
logger.error("门禁异常");
|
||||
throw new ServiceException("门禁异常离线中");
|
||||
}
|
||||
Member member = memberService.findByMember(venueBarCode.getMemberId());
|
||||
if (member != null) {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueBarCode.getVenueId());
|
||||
|
||||
Reference in New Issue
Block a user