Kaynağa Gözat

回传策略新增是否首单

wcc 1 yıl önce
ebeveyn
işleme
9ad3bb5e57
17 değiştirilmiş dosya ile 105 ekleme ve 50 silme
  1. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineOrderLog.java
  2. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameOrder.java
  3. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentOrder.java
  4. 3 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineOrderLogVO.java
  5. 3 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniGameOrderVO.java
  6. 3 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentOrderVO.java
  7. 12 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java
  8. 12 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentUserActionBackRpcImpl.java
  9. 11 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java
  10. 4 9
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java
  11. 5 9
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java
  12. 4 9
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java
  13. 7 5
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/utils/BackPolicyUtil.java
  14. 5 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/AccountTypeEnum.java
  15. 7 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/AgentController.java
  16. 1 2
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentAddParam.java
  17. 22 16
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineOrderLog.java

@@ -91,4 +91,6 @@ public class GameOceanengineOrderLog implements Serializable {
 
     private String roleName;
 
+    private Boolean isFirstOrder;
+
 }

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameOrder.java

@@ -104,4 +104,6 @@ public class GameTencentMiniGameOrder implements Serializable {
     private Long roleId;
 
     private String roleName;
+
+    private Boolean isFirstOrder;
 }

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentOrder.java

@@ -116,4 +116,6 @@ public class GameTencentOrder implements Serializable {
     private Long roleId;
 
     private String roleName;
+
+    private Boolean isFirstOrder;
 }

+ 3 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineOrderLogVO.java

@@ -69,4 +69,7 @@ public class GameOceanengineOrderLogVO {
 
     @ApiModelProperty("注册到付费的间隔时间")
     private String regPayIntervalTime;
+
+    @ApiModelProperty("是否是首单")
+    private Boolean isFirstOrder;
 }

+ 3 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniGameOrderVO.java

@@ -109,4 +109,7 @@ public class GameTencentMiniGameOrderVO {
 
     @ApiModelProperty("注册到付费的间隔时间")
     private String regPayIntervalTime;
+
+    @ApiModelProperty("是否是首单")
+    private Boolean isFirstOrder;
 }

+ 3 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentOrderVO.java

@@ -125,4 +125,7 @@ public class GameTencentOrderVO {
 
     @ApiModelProperty("注册到付费的间隔时间")
     private String regPayIntervalTime;
+
+    @ApiModelProperty("是否是首单")
+    private Boolean isFirstOrder;
 }

+ 12 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java

@@ -1,7 +1,9 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
 import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITencentMiniGameBackRpc;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
@@ -28,6 +30,15 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
     @Override
     public ResultVO<Boolean> backOrder(TencentOrderDTO dto) {
         log.error("腾讯小游戏订单回传收到:{}", JsonUtil.toString(dto));
+        boolean isFirstOrder = gameTencentMiniGameOrderService.getOne(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                .select(GameTencentMiniGameOrder::getOrderId)
+                .eq(GameTencentMiniGameOrder::getGameId, dto.getGameId())
+                .eq(GameTencentMiniGameOrder::getWechatAppId, dto.getWechatAppId())
+                .eq(GameTencentMiniGameOrder::getAdAccountId, dto.getAdAccountId())
+                .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                .eq(GameTencentMiniGameOrder::getWechatOpenid, dto.getWechatOpenid())
+                .last("limit 1")
+        ) == null;
         GameTencentMiniGameOrder orderLog = GameTencentMiniGameOrder.builder()
                 .adAccountId(dto.getAdAccountId())
                 .gameId(dto.getGameId())
@@ -47,6 +58,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .clickId(dto.getClickId())
                 .roleId(dto.getRoleId())
                 .roleName(dto.getRoleName())
+                .isFirstOrder(isFirstOrder)
                 .build();
         gameTencentMiniGameOrderService.save(orderLog);
         return ResultVO.ok(gameTencentMiniGameOrderService.orderBack(orderLog, false));

+ 12 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentUserActionBackRpcImpl.java

@@ -1,8 +1,10 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
 import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITencentUserActionBackRpc;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
@@ -30,6 +32,15 @@ public class TencentUserActionBackRpcImpl implements ITencentUserActionBackRpc {
     @Override
     public ResultVO<Boolean> backOrder(TencentOrderDTO dto) {
         log.error("腾讯H5订单回传收到:{}", JsonUtil.toString(dto));
+        boolean isFirstOrder = gameTencentOrderService.getOne(new LambdaQueryWrapper<GameTencentOrder>()
+                .select(GameTencentOrder::getOrderId)
+                .eq(GameTencentOrder::getGameId, dto.getGameId())
+                .eq(GameTencentOrder::getAdAccountId, dto.getAdAccountId())
+                .eq(GameTencentOrder::getWechatAppId, dto.getWechatAppId())
+                .eq(GameTencentOrder::getWechatOpenid, dto.getWechatOpenid())
+                .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                .last("limit 1")
+        ) == null;
         //订单保存
         GameTencentOrder gameTencentOrder = GameTencentOrder.builder()
                 .adAccountId(dto.getAdAccountId())
@@ -50,6 +61,7 @@ public class TencentUserActionBackRpcImpl implements ITencentUserActionBackRpc {
                 .userActionSetId(dto.getUserActionSetId())
                 .roleId(dto.getRoleId())
                 .roleName(dto.getRoleName())
+                .isFirstOrder(isFirstOrder)
                 .build();
         gameTencentOrderService.save(gameTencentOrder);
         return ResultVO.ok(gameTencentOrderService.orderBack(gameTencentOrder, false));

+ 11 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java

@@ -1,7 +1,9 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.game.back.base.pojo.dto.TtOrderRpcDTO;
 import com.zanxiang.game.back.base.pojo.dto.TtUserActiveRpcDTO;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITtMiniGameBackRpc;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
@@ -71,6 +73,15 @@ public class TtMiniGameBackRpcImpl implements ITtMiniGameBackRpc {
                 .roleId(dto.getRoleId())
                 .roleName(dto.getRoleName())
                 .build();
+        boolean isFirstOrder = gameOceanengineOrderLogService.getOne(new LambdaQueryWrapper<GameOceanengineOrderLog>()
+                .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
+                .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
+                .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
+                .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                .eq(GameOceanengineOrderLog::getOpenId, orderLog.getOpenId())
+                .last("limit 1")
+        ) == null;
+        orderLog.setIsFirstOrder(isFirstOrder);
         gameOceanengineOrderLogService.save(orderLog);
         return ResultVO.ok(gameOceanengineOrderLogService.callback(orderLog, false));
     }

+ 4 - 9
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java

@@ -73,21 +73,16 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
             } else {
                 GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
                 doBack = BackPolicyUtil.backOrder(orderLog.getOrderNo(), gameBackPolicy, orderLog.getAmount(),
+                        orderLog.getIsFirstOrder(),
                         orderLog.getPayTime(), orderLog.getRegTime(),
-                        () -> getOne(new LambdaQueryWrapper<GameOceanengineOrderLog>()
-                                .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
-                                .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
-                                .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
-                                .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                                .eq(GameOceanengineOrderLog::getOpenId, orderLog.getOpenId())
-                                .last("limit 1")
-                        ) == null,
-                        backUnit -> Long.valueOf(list(new LambdaQueryWrapper<GameOceanengineOrderLog>()
+                        (backUnit, isFirstOrder) -> Long.valueOf(list(new LambdaQueryWrapper<GameOceanengineOrderLog>()
                                         .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
                                         .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
                                         .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
                                         .eq(GameOceanengineOrderLog::getBackPolicyId, gameBackPolicy.getId())
                                         .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .eq(GameOceanengineOrderLog::getIsFirstOrder, isFirstOrder)
+                                        .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
                                         .orderByDesc(GameOceanengineOrderLog::getCreateTime)
                                         .last("limit " + backUnit)
                                 ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()

+ 5 - 9
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java

@@ -78,21 +78,17 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                 doBack = true;
             } else {
                 GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
+                // 此处是否是首单用 limit 2。因为在执行判断之前订单已入库,所以库里只有一笔才是首单
                 doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
-                        orderLog.getPayTime(), orderLog.getRegisterTime(),
-                        () -> getOne(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
-                                .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
-                                .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
-                                .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
-                                .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                                .eq(GameTencentMiniGameOrder::getWechatOpenid, orderLog.getWechatOpenid())
-                                .last("limit 1")
-                        ) == null, backUnit -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                        orderLog.getIsFirstOrder(), orderLog.getPayTime(), orderLog.getRegisterTime(),
+                        (backUnit, isFirstOrder) -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
                                         .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
                                         .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
                                         .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
                                         .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
                                         .eq(GameTencentMiniGameOrder::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameTencentMiniGameOrder::getIsFirstOrder, isFirstOrder)
+                                        .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
                                         .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
                                         .last("limit " + backUnit)
                                 ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()

+ 4 - 9
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java

@@ -90,20 +90,15 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
             } else {
                 GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
                 doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
-                        orderLog.getPayTime(), orderLog.getRegisterTime(),
-                        () -> getOne(new LambdaQueryWrapper<GameTencentOrder>()
-                                .eq(GameTencentOrder::getGameId, orderLog.getGameId())
-                                .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
-                                .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
-                                .eq(GameTencentOrder::getWechatOpenid, orderLog.getWechatOpenid())
-                                .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                                .last("limit 1")
-                        ) == null, backUnit -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentOrder>()
+                        orderLog.getIsFirstOrder(), orderLog.getPayTime(), orderLog.getRegisterTime(),
+                        (backUnit, isFirstOrder) -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentOrder>()
                                         .eq(GameTencentOrder::getGameId, orderLog.getGameId())
                                         .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
                                         .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
                                         .eq(GameTencentOrder::getBackPolicyId, gameBackPolicy.getId())
                                         .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .eq(GameTencentOrder::getIsFirstOrder, isFirstOrder)
+                                        .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
                                         .orderByDesc(GameTencentOrder::getCreateTime)
                                         .last("limit " + backUnit)
                                 ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()

+ 7 - 5
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/utils/BackPolicyUtil.java

@@ -31,7 +31,7 @@ public class BackPolicyUtil {
      * @param lastBackFunction 在指定最近订单数量内是否有订单回传过
      * @return <是否回传, 回传金额>
      */
-    public static boolean backOrder(String orderId, GameBackPolicy gameBackPolicy, long rechargeMoney, LocalDateTime payTime, LocalDateTime regTime, FirstOrder firstOrder, Function<Integer, Integer> lastBackFunction) {
+    public static boolean backOrder(String orderId, GameBackPolicy gameBackPolicy, long rechargeMoney, boolean isFirstOrder, LocalDateTime payTime, LocalDateTime regTime, LastBackFunction lastBackFunction) {
         if (null == gameBackPolicy) {
             log.error("订单 id[{}]通过回传策略[null]判断后,是否回传:{}.", orderId, true);
             return true;
@@ -69,6 +69,7 @@ public class BackPolicyUtil {
             rechargeType = gameBackPolicy.getRechargeOtherMoneyType();
             rechargeRate = gameBackPolicy.getRechargeOtherMoneyRate();
         }
+        boolean firstPolicy = false;
         Integer backType;
         String backRate;
         if (firstType.equals(rechargeType) && firstRate.equalsIgnoreCase(rechargeRate)) {
@@ -76,10 +77,11 @@ public class BackPolicyUtil {
             backType = firstType;
             backRate = firstRate;
         } else {
-            if (firstOrder.isFirstOrder()) {
+            if (isFirstOrder) {
                 log.error("订单{}是首单", orderId);
                 backType = firstType;
                 backRate = firstRate;
+                firstPolicy = true;
             } else {
                 log.error("订单{}不是首单", orderId);
                 backType = rechargeType;
@@ -99,7 +101,7 @@ public class BackPolicyUtil {
                 log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), true);
                 return true;
             }
-            int isBackCount = lastBackFunction.apply(backCount + ignoreCount - 1);
+            int isBackCount = lastBackFunction.getLastBackCount(backCount + ignoreCount - 1, firstPolicy);
             log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), (isBackCount < backCount));
             return isBackCount < backCount;
         } else if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_RANDOM_RATE)) {
@@ -148,7 +150,7 @@ public class BackPolicyUtil {
         return RECHARGE_LEVEL[level];
     }
 
-    public interface FirstOrder {
-        boolean isFirstOrder();
+    public interface LastBackFunction {
+        int getLastBackCount(int backUnit, boolean isFirstOrder);
     }
 }

+ 5 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/AccountTypeEnum.java

@@ -4,8 +4,13 @@ import lombok.Getter;
 
 @Getter
 public enum AccountTypeEnum {
+    // 不投放
+    UN_PUT(0),
+    // 腾讯 H5
     TENCENT_H5(1),
+    // 头条小游戏
     BYTE(2),
+    // 腾讯小游戏
     TENCENT_MINI_GAME(3);
 
     private final Integer value;

+ 7 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/AgentController.java

@@ -40,6 +40,13 @@ public class AgentController {
         if (accountType == null) {
             throw new BaseException("错误的账号类型:" + dto.getAccountType());
         }
+        if (accountType == AccountTypeEnum.UN_PUT) {
+            dto.setAccountId(null);
+        } else {
+            if (dto.getAccountId() == null) {
+                throw new BaseException("广告账号不能为空!");
+            }
+        }
         if (accountType == AccountTypeEnum.TENCENT_H5) {
             if (dto.getUserActionSetId() == null) {
                 throw new BaseException("腾讯广告账号必须选回传的数据源");

+ 1 - 2
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentAddParam.java

@@ -24,7 +24,7 @@ public class AgentAddParam {
     /**
      * 推广账号类型(1:腾讯、2:头条)
      */
-    @ApiModelProperty(notes = "推广账号类型(1:腾讯H5、2:头条、3:腾讯小游戏)")
+    @ApiModelProperty(notes = "推广账号类型(0:不投、1:腾讯H5、2:头条、3:腾讯小游戏)")
     @NotNull(message = "渠道类型不能为空")
     private Integer accountType;
 
@@ -32,7 +32,6 @@ public class AgentAddParam {
      * 账号类型
      */
     @ApiModelProperty(notes = "账号Id")
-    @NotNull(message = "账号不能为空")
     private Long accountId;
 
     /**

+ 22 - 16
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java

@@ -98,27 +98,31 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean add(AgentAddParam param) {
-        if (count(new LambdaQueryWrapper<Agent>()
-                .eq(Agent::getAccountType, param.getAccountType())
-                .eq(Agent::getAccountId, param.getAccountId())
-        ) > 0) {
-            throw new BaseException("一个账号只能建一个渠道,投一个游戏!!!");
+    public boolean add(AgentAddParam dto) {
+        AccountTypeEnum accountType = AccountTypeEnum.getByValue(dto.getAccountType());
+        if (accountType != AccountTypeEnum.UN_PUT) {
+            if (count(new LambdaQueryWrapper<Agent>()
+                    .eq(Agent::getAccountType, dto.getAccountType())
+                    .eq(Agent::getAccountId, dto.getAccountId())
+            ) > 0) {
+                throw new BaseException("一个账号只能建一个渠道,投一个游戏!!!");
+            }
         }
         return save(Agent.builder()
-                .agentName(param.getAgentName())
+                .agentName(dto.getAgentName())
                 .agentKey(UUID.randomUUID().toString().replaceAll("-", ""))
-                .accountType(param.getAccountType())
-                .accountId(param.getAccountId())
-                .gameId(param.getGameId())
-                .userActionSetId(param.getUserActionSetId())
-                .reportToken(param.getReportToken())
-                .reportUrl(param.getReportUrl())
-                .backPolicyId(param.getBackPolicyId())
-                .putStatus(param.getPutStatus())
+                .accountType(dto.getAccountType())
+                .accountId(dto.getAccountId())
+                .gameId(dto.getGameId())
+                .userActionSetId(dto.getUserActionSetId())
+                .reportToken(dto.getReportToken())
+                .reportUrl(dto.getReportUrl())
+                .backPolicyId(dto.getBackPolicyId())
+                .putStatus(dto.getPutStatus())
                 .createTime(LocalDateTime.now())
                 .createBy(SecurityUtil.getUserId())
-                .build());
+                .build()
+        );
     }
 
     @Override
@@ -200,6 +204,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
             vo.setAgentKey("?agentKey=" + agent.getAgentKey());
         } else if (accountType == AccountTypeEnum.TENCENT_H5 || accountType == AccountTypeEnum.TENCENT_MINI_GAME) {
             vo.setAgentKey("?state=" + agent.getAgentKey());
+        } else {
+            vo.setAgentKey("?agentKey=" + agent.getAgentKey());
         }
         return vo;
     }