瀏覽代碼

fix 分销新旧用户id兼容

zoujiajian 3 年之前
父節點
當前提交
9d8402bfb4

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/dto/AuthRedirect.java

@@ -24,9 +24,9 @@ public class AuthRedirect {
     private Long sharedId;
 
     /**
-     * 分销16进制码
+     * 分销用户16进制id
      */
-    private String sCode;
+    private String sid;
 
     /**
      * corpId

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/dto/UserWhoami.java

@@ -31,5 +31,5 @@ public class UserWhoami implements Serializable {
     /**
      * 分销16进制码
      */
-    private String sCode;
+    private String sid;
 }

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/request/LoginPhoneReq.java

@@ -30,9 +30,9 @@ public class LoginPhoneReq {
 	private Long sharedId;
 
 	/**
-	 * 分销16进制code
+	 * 分销分用户16进制id
 	 */
-	private String sCode;
+	private String sid;
 
 	/**
 	 * 1短信登录、2邮箱登录

+ 17 - 0
netflix-service/src/main/java/com/cyksj/service/user/UserHexService.java

@@ -0,0 +1,17 @@
+package com.cyksj.service.user;
+
+/*
+ *项目名: netflix
+ *文件名: UserHexService
+ *创建者: JavaZou
+ *创建时间:2023/4/13 18:02
+ */
+public interface UserHexService {
+	/**
+	 *
+	 * @param sharedId 旧的分销用户id
+	 * @param sid 新的分销用户id
+	 * @return
+	 */
+	Long handleUserPopularizeId(Long sharedId, String sid);
+}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/user/UserService.java

@@ -12,7 +12,7 @@ import com.cyksj.model.entity.WxSyncLog;
  */
 public interface UserService extends IService<User> {
 
-    User saveAuth(GzhOAuth2UserInfo userinfo, Long sharedId, String sCode, Integer dsType, Long pid);
+    User saveAuth(GzhOAuth2UserInfo userinfo, Long sharedId, String sid, Integer dsType, Long pid);
 
     UserWhoami whoami(long userId);
 

+ 29 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserHexServiceImpl.java

@@ -0,0 +1,29 @@
+package com.cyksj.service.user.impl;
+
+import cn.hutool.core.util.HexUtil;
+import cn.hutool.core.util.StrUtil;
+import com.cyksj.common.constant.Constant;
+import com.cyksj.service.user.UserHexService;
+import org.springframework.stereotype.Service;
+
+/*
+ *项目名: netflix
+ *文件名: UserHexServiceImpl
+ *创建者: JavaZou
+ *创建时间:2023/4/13 18:02
+ */
+@Service
+public class UserHexServiceImpl implements UserHexService {
+
+	@Override
+	public Long handleUserPopularizeId(Long sharedId, String sid) {
+		if (sharedId == null && StrUtil.isNotBlank(sid)) {
+			try {
+				sharedId = Long.parseLong(sid, 16) - Constant.HEX_NUMBER;
+			} catch (NumberFormatException e) {
+				return null;
+			}
+		}
+		return sharedId;
+	}
+}

+ 7 - 10
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -22,6 +22,7 @@ import com.cyksj.service.distribute.DistributeService;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.sys.SysConfigService;
+import com.cyksj.service.user.UserHexService;
 import com.cyksj.service.user.UserService;
 import com.ejlchina.searcher.BeanSearcher;
 import lombok.RequiredArgsConstructor;
@@ -60,10 +61,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	private final SysConfigService sysConfigService;
 
+	private final UserHexService userHexService;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
 	@Override
-	public User saveAuth(GzhOAuth2UserInfo info, Long sharedId, String sCode, Integer dsType, Long pid) {
+	public User saveAuth(GzhOAuth2UserInfo info, Long sharedId, String sid, Integer dsType, Long pid) {
         final String unionid = info.getUnionid();
         if (StrUtil.isEmpty(unionid)) {
             throw BusinessRuntimeException.getInstance("授权操作异常,请刷新页面");
@@ -110,13 +113,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		} else {
 			this.updateById(user);
 		}
-		if (sharedId == null && StrUtil.isNotBlank(sCode)) {
-			try {
-				sharedId = Long.parseLong(sCode, 16) - Constant.HEX_NUMBER;
-			} catch (NumberFormatException e) {
-				log.error("用户userId:{},进制sCode:{}转化错误", user.getId(), sCode);
-			}
-		}
+		sharedId = userHexService.handleUserPopularizeId(sharedId, sid);
 		if (sharedId != null && isNewUser) {
 			if (dsType == null || dsType == 1) {
 				distributeService.saveDistributionInvitation(sharedId, user.getId());
@@ -142,8 +139,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         UserWhoami userWhoami = new UserWhoami();
 
         BeanUtil.copyProperties(user, userWhoami);
-	    String sCode = Long.toHexString(user.getId() + Constant.HEX_NUMBER);
-	    userWhoami.setSCode(sCode);
+	    String sharedId = Long.toHexString(user.getId() + Constant.HEX_NUMBER);
+	    userWhoami.setSid(sharedId);
         return userWhoami;
     }
 

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/wechat/WeChatService.java

@@ -77,7 +77,7 @@ public interface WeChatService {
      * 获取公众号带参数的临时二维码
      * @return
      */
-    WxGzhQrCodeTicketRep getWxGzhQrCode(Long sharedId, String sCode, Integer dsType, Long popularizeId) throws Exception;
+    WxGzhQrCodeTicketRep getWxGzhQrCode(Long sharedId, String sid, Integer dsType, Long popularizeId) throws Exception;
 
     /**
      * 获取公众号带参数的永久二维码

+ 5 - 2
netflix-service/src/main/java/com/cyksj/service/wechat/impl/WeChatServiceImpl.java

@@ -21,6 +21,7 @@ import com.cyksj.model.entity.ShopConfig;
 import com.cyksj.model.entity.WxApp;
 import com.cyksj.model.response.WxGzhQrCodeTicketRep;
 import com.cyksj.redis.RedisService;
+import com.cyksj.service.user.UserHexService;
 import com.cyksj.service.wechat.WeChatService;
 import com.cyksj.service.wechat.WxMpAccountOps;
 import lombok.RequiredArgsConstructor;
@@ -64,6 +65,8 @@ public class WeChatServiceImpl implements WeChatService {
 
     private final RedisService redisService;
 
+    private final UserHexService userHexService;
+
     @Override
     public String createUrl(String state, String redirectUrl) {
         return createUrl(state,redirectUrl,weChatConfig.getAppid(), WeChatAuthRedirectUrl.BASE.getScope());
@@ -476,7 +479,7 @@ public class WeChatServiceImpl implements WeChatService {
     }
 
     @Override
-    public WxGzhQrCodeTicketRep getWxGzhQrCode(Long sharedId, String sCode, Integer dsType, Long popularizeId) throws Exception {
+    public WxGzhQrCodeTicketRep getWxGzhQrCode(Long sharedId, String sid, Integer dsType, Long popularizeId) throws Exception {
         String gzhQrCodeUrl = String.format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=%s", this.getAccessToken());
         //scene_str:场景值ID(字符串形式的ID),字符串类型,长度限制为1到64
         String scene_str = RandomUtil.randomString(16);
@@ -493,10 +496,10 @@ public class WeChatServiceImpl implements WeChatService {
         if (200 != response.statusCode()) {
             throw BusinessRuntimeException.getInstance("获取微信登录二维码失败: " + response.body());
         }
+        sharedId = userHexService.handleUserPopularizeId(sharedId, sid);
         if (sharedId != null || popularizeId != null) {
             GzhBodyDto gzhBodyDto = new GzhBodyDto()
                     .setSharedId(sharedId)
-                    .setSCode(sCode)
                     .setPopularizeId(popularizeId)
                     .setDsType(dsType);
             String state = Codec.DoBase64.custom().setData(Jsons.toJson(gzhBodyDto)).encodeAsText();

+ 5 - 0
netflix-web/src/main/java/com/cyksj/web/controller/distribute/EquipmentDistributeController.java

@@ -26,6 +26,7 @@ import com.cyksj.redis.RedisService;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeFrontService;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeService;
 import com.cyksj.service.sys.SysConfigService;
+import com.cyksj.service.user.UserHexService;
 import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -73,6 +74,8 @@ public class EquipmentDistributeController {
 
 	private final EquipmentUserDistributeInviteRecordMapper inviteRecordMapper;
 
+	private final UserHexService userHexService;
+
 	/**
 	 * 个人实物分销详情
 	 */
@@ -208,6 +211,8 @@ public class EquipmentDistributeController {
 				.between(User::getCreatedTime, DateUtil.beginOfDay(now), DateUtil.endOfDay(now)).last("limit 1"));
 		Boolean isNewUser = user != null ? true : false;
 		Long sharedId = req.getSharedId();
+		String sid = req.getSid();
+		sharedId = userHexService.handleUserPopularizeId(sharedId, sid);
 		Integer dsType = req.getDsType();
 		//新旧用户都可实物分销
 		if (sharedId != null && dsType != null && dsType == 2) {

+ 10 - 12
netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java

@@ -34,11 +34,11 @@ import com.cyksj.model.response.WxGzhQrCodeTicketRep;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.authorization.AuthorizationService;
 import com.cyksj.service.distribute.DistributeService;
-import com.cyksj.service.distribute.equipment.EquipmentDistributeService;
+import com.cyksj.service.mail.MailService;
 import com.cyksj.service.template.TemplateCommonService;
+import com.cyksj.service.user.UserHexService;
 import com.cyksj.service.user.UserService;
 import com.cyksj.service.wechat.WeChatService;
-import com.cyksj.service.mail.MailService;
 import com.cyksj.web.util.StpUserUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -91,11 +91,10 @@ public class AuthorizationController {
 
     private final DistributeService distributeService;
 
-    private final EquipmentDistributeService equipDistributeService;
+    private final UserHexService userHexService;
 
     @GetMapping(value = "/weChat")
-    public void base(String url, Long sharedId, String sCode, Integer dsType, Long popularizeId, String authType, HttpServletResponse response) throws Exception {
-
+    public void base(String url, Long sharedId, String sid, Integer dsType, Long popularizeId, String authType, HttpServletResponse response) throws Exception {
         log.info("微信授权转跳. url: {},authType:{}",url,authType);
 
         // 无论是否为老用户 均转跳到授权页面
@@ -104,7 +103,7 @@ public class AuthorizationController {
 
         Long mappingId = SEQUENCE.nextId();
         redisService.set(mappingId.toString(),url,60*60*24L);
-        AuthRedirect redirect = new AuthRedirect().setMappingId(mappingId).setSharedId(sharedId).setSCode(sCode).setDsType(dsType).setPid(popularizeId);
+        AuthRedirect redirect = new AuthRedirect().setMappingId(mappingId).setSharedId(sharedId).setSid(sid).setDsType(dsType).setPid(popularizeId);
         String state = Codec.DoBase64.custom().setData(Jsons.toJson(redirect)).encodeAsText();
 
         response.sendRedirect(authorizationService.createUrl(state,authType));
@@ -130,7 +129,7 @@ public class AuthorizationController {
         GzhOAuth2UserInfo userinfo = weChatService.getUserInfo(token.getAccessToken(), token.getOpenid());
 
         //保存用户信息
-        User user = userService.saveAuth(userinfo, re.getSharedId(), re.getSCode(), re.getDsType(), re.getPid());
+        User user = userService.saveAuth(userinfo, re.getSharedId(), re.getSid(), re.getDsType(), re.getPid());
         if (user == null) {
             throw BusinessRuntimeException.getInstance("系统错误,请重新授权");
         }
@@ -253,9 +252,9 @@ public class AuthorizationController {
      * 网页扫描微信公众号二维码 临时凭证ticket  关注后登录
      */
     @GetMapping("/wx/gzh/login/qrCode")
-    public Result<WxGzhQrCodeTicketRep> getWxGzhQrCode(Long sharedId, String sCode, Integer dsType, Long popularizeId) throws Exception {
+    public Result<WxGzhQrCodeTicketRep> getWxGzhQrCode(Long sharedId, String sid, Integer dsType, Long popularizeId) throws Exception {
         //获取gzh带参数的二维码
-        WxGzhQrCodeTicketRep result = weChatService.getWxGzhQrCode(sharedId, sCode, dsType, popularizeId);
+        WxGzhQrCodeTicketRep result = weChatService.getWxGzhQrCode(sharedId, sid, dsType, popularizeId);
         return GatewayResponse.SUCCESS.newBuilder().toResult(result);
     }
 
@@ -406,9 +405,8 @@ public class AuthorizationController {
             //默认头像
             user.setHeadimgurl(Constant.DEFAULT_HEAD_IMG);
             userService.save(user);
-            if (sharedId == null && StrUtil.isNotBlank(loginPhoneReq.getSCode())) {
-                sharedId = Long.parseLong(loginPhoneReq.getSCode(), 16) - Constant.HEX_NUMBER;
-            }
+            String sid = loginPhoneReq.getSid();
+            sharedId = userHexService.handleUserPopularizeId(sharedId, sid);
             //新用户分销
             if (sharedId != null) {
                 distributeService.saveDistributionInvitation(sharedId, user.getId());