From 81120e17946d321fb14687c3913dfb7794d01bfd Mon Sep 17 00:00:00 2001
From: limqhz <540344226@qq.com>
Date: Sat, 18 Apr 2026 18:36:56 +0800
Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E9=87=8D=E6=9E=84=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E7=99=BB=E5=BD=95=E5=92=8C=E6=89=8B=E6=9C=BA=E5=8F=B7?=
=?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=8A=9F=E8=83=BD=20-=20=E7=AE=80=E5=8C=96?=
=?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3=E5=8F=82?=
=?UTF-8?q?=E6=95=B0=EF=BC=8C=E7=A7=BB=E9=99=A4=E6=98=B5=E7=A7=B0=E5=92=8C?=
=?UTF-8?q?=E5=A4=B4=E5=83=8F=E5=8F=82=E6=95=B0=20-=20=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=BB=91=E5=AE=9A=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=EF=BC=8C=E7=9B=B4=E6=8E=A5=E9=80=9A=E8=BF=87openId=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=20-=20=E5=AE=8C?=
=?UTF-8?q?=E5=96=84=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BB=8E=E6=95=B0=E6=8D=AE=E5=BA=93?=
=?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=9C=9F=E5=AE=9E=E7=94=A8=E6=88=B7=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=20-=20=E4=BF=AE=E5=A4=8D=E9=97=A8=E7=A6=81=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=EF=BC=8C=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E8=AE=BE=E5=A4=87=E7=A6=BB=E7=BA=BF=E6=A3=80=E6=9F=A5?=
=?UTF-8?q?=20-=20=E6=9B=B4=E6=96=B0=E4=BC=9A=E5=91=98=E4=BF=A1=E6=81=AF?=
=?UTF-8?q?=E6=9C=8D=E5=8A=A1=EF=BC=8C=E6=94=AF=E6=8C=81=E7=94=A8=E6=88=B7?=
=?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=92=8C=E4=BF=A1=E6=81=AF=E5=AE=8C=E5=96=84?=
=?UTF-8?q?=20-=20=E8=B0=83=E6=95=B4MyBatis=E6=98=A0=E5=B0=84=E6=96=87?=
=?UTF-8?q?=E4=BB=B6=EF=BC=8C=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E6=8F=92=E5=85=A5=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/sv/api/context/PlatformContext.java | 4 +
.../controller/LoginOrRegisterController.java | 24 ++---
.../impl/LoginRegisterServiceImpl.java | 87 +++++++++++--------
.../service/impl/wechat/WechatService.java | 3 +-
.../impl/ServerMessageHandlerAdapter.java | 10 ++-
.../com/sv/dto/api/MemberInformationDTO.java | 11 ++-
.../com/sv/service/api/MemberAuthService.java | 17 +++-
.../com/sv/service/api/MemberService.java | 22 +++++
.../mybatis/mapper/sv/MemberMapper.xml | 20 ++---
9 files changed, 132 insertions(+), 66 deletions(-)
diff --git a/api/src/main/java/com/sv/api/context/PlatformContext.java b/api/src/main/java/com/sv/api/context/PlatformContext.java
index 85bb743..411c68c 100644
--- a/api/src/main/java/com/sv/api/context/PlatformContext.java
+++ b/api/src/main/java/com/sv/api/context/PlatformContext.java
@@ -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);
diff --git a/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java b/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java
index 093b147..84739d7 100644
--- a/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java
+++ b/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java
@@ -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));
}
}
diff --git a/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java b/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java
index 5771d7d..5473d94 100644
--- a/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java
+++ b/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java
@@ -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);
}
diff --git a/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java b/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java
index 1afb309..861ffca 100644
--- a/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java
+++ b/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java
@@ -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);
diff --git a/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java b/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java
index 3b7c99a..e5f5d1f 100644
--- a/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java
+++ b/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java
@@ -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());
diff --git a/entity/src/main/java/com/sv/dto/api/MemberInformationDTO.java b/entity/src/main/java/com/sv/dto/api/MemberInformationDTO.java
index cddcb44..fb74f2c 100644
--- a/entity/src/main/java/com/sv/dto/api/MemberInformationDTO.java
+++ b/entity/src/main/java/com/sv/dto/api/MemberInformationDTO.java
@@ -13,6 +13,8 @@ public class MemberInformationDTO implements Serializable {
private String avatar;
+ private String mobile;
+
public String getOpenId() {
return openId;
}
@@ -36,4 +38,11 @@ public class MemberInformationDTO implements Serializable {
public void setAvatar(String avatar) {
this.avatar = avatar;
}
-}
\ No newline at end of file
+
+ public String getMobile() {
+ return mobile;
+ }
+ public void setMobile(String mobile) {
+ this.mobile = mobile;
+ }
+}
diff --git a/service/src/main/java/com/sv/service/api/MemberAuthService.java b/service/src/main/java/com/sv/service/api/MemberAuthService.java
index 7f4bdab..443372d 100644
--- a/service/src/main/java/com/sv/service/api/MemberAuthService.java
+++ b/service/src/main/java/com/sv/service/api/MemberAuthService.java
@@ -147,7 +147,7 @@ public class MemberAuthService extends BaseServiceImpl {
* 创建登录认证,存在openId
*/
@Transactional
- public MemberAuth createByMobileByOpenId(Integer memberId,Integer platformId, String mobile, String openId) {
+ public MemberAuth createByOpenId(Integer memberId,Integer platformId, String openId) {
MemberAuth memberAuth = new MemberAuth();
memberAuth.setMemberId(memberId);
// memberAuth.setMobile(mobile);
@@ -155,6 +155,21 @@ public class MemberAuthService extends BaseServiceImpl {
memberAuth.setAuthId(openId);
memberAuth.setPlatformId(platformId);
memberAuthMapper.insert(memberAuth);
+ return memberAuth;
+ }
+
+ /**
+ * 创建登录认证,存在openId
+ */
+ @Transactional
+ public MemberAuth createByMobileByOpenId(Integer memberId,Integer platformId, String mobile, String openId) {
+ MemberAuth memberAuth = new MemberAuth();
+ memberAuth.setMemberId(memberId);
+// memberAuth.setMobile(mobile);
+ memberAuth.setType(MemberAuthTypeEnum.WEIXIN.value);
+ memberAuth.setAuthId(openId);
+ memberAuth.setPlatformId(platformId);
+// memberAuthMapper.insert(memberAuth);
// 判断是否有用手机号登陆过
MemberAuth auth = memberAuthMapper.findByType(memberId);
diff --git a/service/src/main/java/com/sv/service/api/MemberService.java b/service/src/main/java/com/sv/service/api/MemberService.java
index db0e8bc..dfe1b7f 100644
--- a/service/src/main/java/com/sv/service/api/MemberService.java
+++ b/service/src/main/java/com/sv/service/api/MemberService.java
@@ -240,6 +240,28 @@ public class MemberService extends BaseServiceImpl {
return member;
}
+ @Transactional
+ public Member createUser(Integer platformId) {
+ // 创建用户
+ Member member = new Member();
+ member.setNickname("用户" + RandomStringUtils.randomNumeric(8));
+ String inviteCode = "";
+ Integer count = 1;
+ while (count == 1) {
+ inviteCode = RandomStringUtils.randomNumeric(10);
+ count = memberMapper.checkInviteCode(inviteCode);
+ }
+ member.setInviteCode(inviteCode);
+ member.setPlatformId(platformId);
+
+ // 初始化头像修改次数
+ member.setAvatarModifyCount(0);
+ member.setAvatarModifyYear(java.util.Calendar.getInstance().get(java.util.Calendar.YEAR));
+
+ memberMapper.insert(member);
+ return member;
+ }
+
/**
* 断言手机号码未使用
*
diff --git a/service/src/main/resources/mybatis/mapper/sv/MemberMapper.xml b/service/src/main/resources/mybatis/mapper/sv/MemberMapper.xml
index f229859..e9e8cb4 100644
--- a/service/src/main/resources/mybatis/mapper/sv/MemberMapper.xml
+++ b/service/src/main/resources/mybatis/mapper/sv/MemberMapper.xml
@@ -63,7 +63,7 @@
sv_member
-
+
id,
@@ -87,7 +87,7 @@
avatar_modify_count,
avatar_modify_year
-
+
#{id, jdbcType=INTEGER},
@@ -140,15 +140,12 @@
WHERE
sm.deleted = 0
-
+
INSERT INTO
-
- id,
-
nickname,
@@ -205,9 +202,6 @@
-
- #{id},
-
#{nickname},
@@ -264,7 +258,7 @@
-
+
UPDATE
@@ -287,7 +281,7 @@
#{item}
-
+
UPDATE
@@ -381,7 +375,7 @@
LEFT JOIN sv_member_face_info AS smfi ON sm.id = smfi.member_id
WHERE sm.id = #{id}
-
+
-
\ No newline at end of file
+