Procházet zdrojové kódy

Merge branch 'dev' of GameCenter/game-center into master

zhimo před 1 rokem
rodič
revize
cde3935aa8

+ 2 - 0
game-data/game-data-serve/pom.xml

@@ -97,10 +97,12 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-spring-boot-starter</artifactId>
+            <version>3.2.3</version>
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-metadata-definition-protobuf</artifactId>
+            <version>3.2.3</version>
         </dependency>
         <dependency>
             <groupId>io.springfox</groupId>

+ 1 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java

@@ -515,7 +515,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                 	round(if(sum(a.register_num) > 0, sum(a.new_user_total_amount_num) / sum(a.register_num), 0), 4) as today_recharge_rate,
                 	round(if(sum(a.first_new_user_amount_count) > 0, sum(a.first_new_user_amount) / sum(a.first_new_user_amount_count), 0), 4) as avg_first_user_recharge,
                 	round(if(sum(a.new_user_total_amount_count) > 0, sum(a.new_user_total_amount) / sum(a.new_user_total_amount_count), 0), 4) as avg_today_recharge,
-                	round(if(sum(a.amount_count) > 0, sum(a.amount) / sum(a.amount_count), 0), 4) as avg_show_user_recharge,
+                	round(if(sum(b.amount_count) > 0, sum(b.amount) / sum(b.amount_count), 0), 4) as avg_show_user_recharge,
                 	round(if(sum(a.first_new_user_amount_num) > 0, sum(a.cost) / sum(a.first_new_user_amount_num), 0), 4) as first_recharge_cost,
                 	round(if(sum(a.new_user_total_amount_num) > 0, sum(a.cost) / sum(a.new_user_total_amount_num), 0), 4) as today_recharge_cost,
                 	round(if(sum(a.new_user_total_amount_num) > 0, sum(a.reg_order_user_again) / sum(a.new_user_total_amount_num), 0), 4) as today_repeat_recharge_rate,

+ 5 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/User.java

@@ -166,6 +166,11 @@ public class User implements Serializable {
      */
     private LocalDateTime updateTime;
 
+    /**
+     * 分享用户id
+     */
+    private Long shareUserId;
+
     /**
      * 获取用户显示手机号
      *

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功003 ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <被分享人渠道归因修改> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 0 - 6
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/param/LoginVxCodeParam.java

@@ -19,10 +19,4 @@ public class LoginVxCodeParam {
     @ApiModelProperty(notes = "微信授权code")
     @NotBlank(message = "微信授权code不可为空")
     private String code;
-
-    /**
-     * 分享用户id
-     */
-    @ApiModelProperty(notes = "分享用户id")
-    private Long shareUserId;
 }

+ 3 - 3
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IAgentService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.module.mybatis.entity.Agent;
 import com.zanxiang.game.module.mybatis.entity.User;
 import reactor.util.function.Tuple2;
+import reactor.util.function.Tuple3;
 
 import java.util.Map;
 
@@ -23,9 +24,8 @@ public interface IAgentService extends IService<Agent> {
     /**
      * 根据前端参数获取渠道信息
      *
-     * @param channel     通道
-     * @param shareUserId 分享用户id
+     * @param channel 通道
      * @return {@link Tuple2}<{@link Long}, {@link Map}<{@link String}, {@link String}>>
      */
-    Tuple2<Long, Map<String, String>> getUserAgentId(String channel, Long shareUserId);
+    Tuple3<Long, Map<String, String>, String> getUserAgentId(String channel);
 }

+ 3 - 4
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/ICallBackService.java

@@ -2,7 +2,6 @@ package com.zanxiang.game.module.sdk.service;
 
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
-import reactor.util.function.Tuple2;
 
 import java.util.Map;
 
@@ -16,10 +15,10 @@ public interface ICallBackService {
     /**
      * 用户回传
      *
-     * @param user   用户
-     * @param tuple2 tuple2
+     * @param user        用户
+     * @param urlParamMap url参数映射
      */
-    void userCallBack(User user, Tuple2<Long, Map<String, String>> tuple2);
+    void userCallBack(User user, Map<String, String> urlParamMap);
 
     /**
      * 订单回传

+ 20 - 17
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AgentServiceImpl.java

@@ -2,7 +2,6 @@ package com.zanxiang.game.module.sdk.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.module.mybatis.entity.Agent;
@@ -18,7 +17,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import reactor.util.function.Tuple2;
+import reactor.util.function.Tuple3;
 import reactor.util.function.Tuples;
 
 import java.time.LocalDateTime;
@@ -72,33 +71,37 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
             return;
         }
         //更新用户信息
-        userService.update(new LambdaUpdateWrapper<User>()
-                .set(User::getAgentId, agent.getId())
-                .set(User::getChannel, channel)
-                .set(User::getUpdateTime, LocalDateTime.now())
-                .eq(User::getId, user.getId()));
+        user.setAgentId(agent.getId());
+        user.setChannel(channel);
+        user.setUpdateTime(LocalDateTime.now());
+        userService.updateById(user);
         //回传用户信息
-        callBackService.userCallBack(user, Tuples.of(agent.getId(), urlParamMap));
+        callBackService.userCallBack(user, urlParamMap);
     }
 
     @Override
-    public Tuple2<Long, Map<String, String>> getUserAgentId(String channel, Long shareUserId) {
+    public Tuple3<Long, Map<String, String>, String> getUserAgentId(String channel) {
         log.error("用户注册接收到的渠道参数 channel : {}", channel);
-        if (Strings.isBlank(channel) && shareUserId != null) {
-            User user = userService.getById(shareUserId);
-            return Tuples.of(user.getAgentId(), Collections.emptyMap());
-        }
         if (Strings.isBlank(channel)) {
-            return Tuples.of(0L, Collections.emptyMap());
+            return Tuples.of(0L, Collections.emptyMap(), Strings.EMPTY);
         }
         //数据解析
         Map<String, String> urlParamMap = this.channelTransform(channel);
+        String shareUserId = urlParamMap.get("shareUserId");
         //查询渠道
-        Agent agent = this.getAgentByKey(urlParamMap);
+        Agent agent = null;
+        if (Strings.isNotBlank(shareUserId)) {
+            User user = userService.getById(Long.valueOf(shareUserId));
+            if (user != null) {
+                agent = super.getById(user.getAgentId());
+            }
+        } else {
+            agent = this.getAgentByKey(urlParamMap);
+        }
         if (agent == null) {
-            return Tuples.of(0L, Collections.emptyMap());
+            return Tuples.of(0L, Collections.emptyMap(), Strings.isBlank(shareUserId) ? Strings.EMPTY : shareUserId);
         }
-        return Tuples.of(agent.getId(), urlParamMap);
+        return Tuples.of(agent.getId(), urlParamMap, shareUserId);
     }
 
     private Agent getAgentByKey(Map<String, String> urlParamMap) {

+ 2 - 5
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

@@ -19,7 +19,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import reactor.util.function.Tuple2;
 
 import java.util.Map;
 import java.util.Objects;
@@ -55,16 +54,14 @@ public class CallBackServiceImpl implements ICallBackService {
     private IGameExtService gameExtService;
 
     @Override
-    public void userCallBack(User user, Tuple2<Long, Map<String, String>> tuple2) {
+    public void userCallBack(User user, Map<String, String> urlParamMap) {
         //判断游戏是否开启广告回传, 未开启, 不回传
         GameExt gameExt = gameExtService.getByGameId(user.getGameId());
         if (!Objects.equals(gameExt.getAdCallBackSwitch(), Boolean.TRUE)) {
             return;
         }
-        Long agentId = tuple2.getT1();
-        Map<String, String> urlParamMap = tuple2.getT2();
         //自然量, 或者跳转链接参数不存在, 不做回传处理
-        if (agentId == 0L || CollectionUtils.isEmpty(urlParamMap)) {
+        if (user.getAgentId() == 0L || CollectionUtils.isEmpty(urlParamMap)) {
             return;
         }
         //查询用户渠道信息

+ 24 - 19
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/LoginServiceImpl.java

@@ -27,7 +27,7 @@ import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import reactor.util.function.Tuple2;
+import reactor.util.function.Tuple3;
 
 import java.time.LocalDateTime;
 import java.util.Map;
@@ -128,7 +128,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
             return ResultVO.ok(userLoginVO);
         }
         //用户注册
-        user = userCreateSave(userData, openId, null, null, openId, sessionKey, param.getShareUserId());
+        user = userCreateSave(userData, openId, null, null, openId, sessionKey);
         //返回登录信息
         UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
         userLoginVO.setAppletShellSwitch(gameAppletShellService.getUserShellSwitch(user, Boolean.TRUE));
@@ -184,8 +184,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
             return ResultVO.fail(checkRegisterEnum.getMsg());
         }
         //用户注册
-        user = userCreateSave(userData, username, RegisterUtil.cmfPassword(password), null, null,
-                null, null);
+        user = userCreateSave(userData, username, RegisterUtil.cmfPassword(password), null, null, null);
         //返回登录信息
         return ResultVO.ok(this.createUserLoginVO(user, userData));
     }
@@ -219,33 +218,39 @@ public class LoginServiceImpl implements IRegisterLoginService {
             return ResultVO.ok(this.createUserLoginVO(user, userData));
         }
         //用户注册
-        user = userCreateSave(userData, mobile, null, mobile, null, null, null);
+        user = userCreateSave(userData, mobile, null, mobile, null, null);
         //返回登录信息
         return ResultVO.ok(this.createUserLoginVO(user, userData));
     }
 
-    private User userCreateSave(UserData userData, String userName, String password, String mobile, String openId,
-                                String sessionKey, Long shareUserId) {
-        Tuple2<Long, Map<String, String>> tuple2 = agentService.getUserAgentId(userData.getChannel(), shareUserId);
-        User user = transform(userData, tuple2.getT1(), userName);
+    private User userCreateSave(UserData userData, String userName, String password, String mobile, String openId, String sessionKey) {
+        //渠道id, 链接参数, 分享人id
+        Tuple3<Long, Map<String, String>, String> tuple3 = agentService.getUserAgentId(userData.getChannel());
+        //分享人id
+        Long shareUserId = Strings.isBlank(tuple3.getT3()) ? null : Long.valueOf(tuple3.getT3());
+        //用户参数补充
+        User user = transform(userData, tuple3.getT1(), userName);
         user.setPassword(password);
         user.setMobile(mobile);
         user.setOpenId(openId);
         user.setSessionKey(sessionKey);
         user.setChannel(userData.getChannel());
+        user.setShareUserId(shareUserId);
         userService.save(user);
         gameUserService.createGameUser(user);
-        callBackService.userCallBack(user, tuple2);
-        //记录分享信息
-        if (shareUserId != null) {
-            userShareService.save(UserShare.builder()
-                    .gameId(userData.getGameId())
-                    .fromUserId(shareUserId)
-                    .toUserId(user.getId())
-                    .createTime(LocalDateTime.now())
-                    .updateTime(LocalDateTime.now())
-                    .build());
+        //非分享用户, 回传注册
+        if (shareUserId == null) {
+            callBackService.userCallBack(user, tuple3.getT2());
+            return user;
         }
+        //记录分享信息, 用户不回传
+        userShareService.save(UserShare.builder()
+                .gameId(userData.getGameId())
+                .fromUserId(shareUserId)
+                .toUserId(user.getId())
+                .createTime(LocalDateTime.now())
+                .updateTime(LocalDateTime.now())
+                .build());
         return user;
     }