Commit 9fb934f0 authored by alex yao's avatar alex yao

fix: 修复登录无法绑定同一账号问题

parent a52d8ff3
......@@ -5,13 +5,17 @@ import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.user.dto.MemberLoginRequestDto;
import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.poc.user.query.CheckMemberInfoQueryCondition;
import cn.com.poc.user.query.CheckMemberInfoQueryItem;
import cn.com.poc.user.service.BizMemberInfoService;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.BaseModel;
import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Component
public class EmailLoginChannel implements LoginChannelService {
......@@ -30,9 +34,26 @@ public class EmailLoginChannel implements LoginChannelService {
if (!judgeCodeService.judgeCode(memberLoginRequest.getAccount(), memberLoginRequest.getAuthCode())) {
throw new I18nMessageException("exception/verification.code.is.incorrect.please.re-enter");
}
MemberInfoEntity result = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount());
MemberInfoEntity memberEntityByAccount = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount());
if (memberEntityByAccount == null) { //用户没有注册过 需要注册
if (result == null) {
CheckMemberInfoQueryCondition condition = new CheckMemberInfoQueryCondition();
condition.setEmail(memberLoginRequest.getAccount());
List<CheckMemberInfoQueryItem> checkMemberInfoQueryItems = bizMemberInfoService.checkMemberInfoIsExist(condition);
if (CollectionUtils.isEmpty(checkMemberInfoQueryItems)) {//用户没有注册过 需要注册
result = registerByEmail(memberLoginRequest);
} else { //用户已经注册过 直接登录
CheckMemberInfoQueryItem checkMemberInfoQueryItem = checkMemberInfoQueryItems.get(0);
Integer memberId = checkMemberInfoQueryItem.getMemberId();
result = bizMemberInfoService.getById(memberId);
}
}
return result;
}
private MemberInfoEntity registerByEmail(MemberLoginRequestDto memberLoginRequest) {
MemberInfoEntity result;
MemberInfoEntity memberInfoEntity = new MemberInfoEntity();
memberInfoEntity.setAccount(memberLoginRequest.getAccount());
memberInfoEntity.setNickName(memberLoginRequest.getAccount());
......@@ -41,9 +62,7 @@ public class EmailLoginChannel implements LoginChannelService {
if (StringUtils.isNoneBlank(param)) {
memberInfoEntity.setAvatarUrl(param);
}
return bizMemberInfoService.createMemberInfo(memberInfoEntity);
}
return memberEntityByAccount;
result = bizMemberInfoService.createMemberInfo(memberInfoEntity);
return result;
}
}
......@@ -5,12 +5,16 @@ import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.user.dto.MemberLoginRequestDto;
import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.poc.user.query.CheckMemberInfoQueryCondition;
import cn.com.poc.user.query.CheckMemberInfoQueryItem;
import cn.com.poc.user.service.BizMemberInfoService;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @Author:Roger Wu
......@@ -39,8 +43,25 @@ public class SmsLoginChannel implements LoginChannelService {
throw new I18nMessageException("exception/verification.code.is.incorrect.please.re-enter");
}
MemberInfoEntity memberEntityByAccount = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount());
if (memberEntityByAccount == null) { //用户没有注册过 需要注册
MemberInfoEntity result = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount());
if (result == null) { //用户没有注册过 需要注册
CheckMemberInfoQueryCondition condition = new CheckMemberInfoQueryCondition();
condition.setMobilePhone(memberLoginRequest.getAccount());
List<CheckMemberInfoQueryItem> checkMemberInfoQueryItems = bizMemberInfoService.checkMemberInfoIsExist(condition);
if (CollectionUtils.isEmpty(checkMemberInfoQueryItems)) {
result = registerByMobilePhone(memberLoginRequest);
} else { //用户已经注册过 直接登录
CheckMemberInfoQueryItem checkMemberInfoQueryItem = checkMemberInfoQueryItems.get(0);
Integer memberId = checkMemberInfoQueryItem.getMemberId();
result = bizMemberInfoService.getById(memberId);
}
}
return result;
}
private MemberInfoEntity registerByMobilePhone(MemberLoginRequestDto memberLoginRequest) {
MemberInfoEntity result;
MemberInfoEntity memberInfoEntity = new MemberInfoEntity();
memberInfoEntity.setAccount(memberLoginRequest.getAccount());
memberInfoEntity.setNickName(memberLoginRequest.getAccount());
......@@ -49,10 +70,8 @@ public class SmsLoginChannel implements LoginChannelService {
memberInfoEntity.setAvatarUrl(param);
}
memberInfoEntity.setMobilePhone(memberLoginRequest.getAccount());
return bizMemberInfoService.createMemberInfo(memberInfoEntity);
}
return memberEntityByAccount;
result = bizMemberInfoService.createMemberInfo(memberInfoEntity);
return result;
}
......
package cn.com.poc.user.builder;
import cn.com.poc.common.service.JudgeCodeService;
import cn.com.poc.user.dto.MemberLoginRequestDto;
import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration
public class LoginChannelTest {
@Autowired
@InjectMocks
EmailLoginChannel emailLoginChannel;
@Autowired
@InjectMocks
SmsLoginChannel smsLoginChannel;
@Mock
JudgeCodeService judgeCodeService;
@Before
public void setup() {
// 启用 Mockito 注解
MockitoAnnotations.initMocks(this);
}
@Test(expected = I18nMessageException.class)
@Transactional
@Rollback
public void testEmailDoLogin_judgeCodeError() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(false);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("alex.yao@superlinksoft.com");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
emailLoginChannel.doLogin(memberLoginRequest);
}
@Test
@Transactional
@Rollback
public void testEmailDoLogin() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("alex.yao@superlinksoft.com");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) emailLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
assertEquals(memberInfoEntity.getMemberId(), Integer.valueOf(197));
}
@Test
@Transactional
@Rollback
public void testEmailDoLogin_registerNewAccount() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("alex.yao1@superlinksoft.com");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) emailLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
}
@Test
@Transactional
@Rollback
public void testSmsDoLogin() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("13602787613");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) smsLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
assertEquals(memberInfoEntity.getMemberId(), Integer.valueOf(197));
}
@Test
@Transactional
@Rollback
public void testSmsDoLogin_registerNewAccount() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("13602787614");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) smsLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
}
}
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