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 +