Bladeren bron

fix : SDK新增一大批功能

bilingfeng 1 jaar geleden
bovenliggende
commit
cc146964a9
20 gewijzigde bestanden met toevoegingen van 356 en 2 verwijderingen
  1. 19 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/rpc/IPayBoxRpc.java
  2. 19 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/rpc/impl/PayBoxRpcImpl.java
  3. 11 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/Game.java
  4. 71 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/ListenCall.java
  5. 5 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/User.java
  6. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/ListenCallMapper.java
  7. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java
  8. 7 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/AppletController.java
  9. 8 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IAliApiService.java
  10. 10 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/ICallBackService.java
  11. 13 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IListenCallService.java
  12. 9 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IPayApplicationService.java
  13. 22 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AliApiServiceImpl.java
  14. 83 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java
  15. 6 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java
  16. 19 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/ListenCallServiceImpl.java
  17. 25 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/PayApplicationServiceImpl.java
  18. 3 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/AliPayService.java
  19. 12 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/PayBaseService.java
  20. 1 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/WxPayService.java

+ 19 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/rpc/IPayBoxRpc.java

@@ -0,0 +1,19 @@
+package com.zanxiang.game.module.base.rpc;
+
+import com.zanxiang.module.util.pojo.ResultVO;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-01-16
+ * @description : 支付盒子
+ */
+public interface IPayBoxRpc {
+
+    /**
+     * 支付盒子封禁
+     *
+     * @param appId : 支付盒子应用appId
+     * @return : 返回结果
+     */
+    ResultVO<Boolean> payBoxBan(String appId);
+}

+ 19 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/rpc/impl/PayBoxRpcImpl.java

@@ -0,0 +1,19 @@
+package com.zanxiang.game.module.manage.rpc.impl;
+
+import com.zanxiang.game.module.base.rpc.IPayBoxRpc;
+import com.zanxiang.module.util.pojo.ResultVO;
+import org.apache.dubbo.config.annotation.DubboService;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-01-16
+ * @description : 支付盒子
+ */
+@DubboService
+public class PayBoxRpcImpl implements IPayBoxRpc {
+
+    @Override
+    public ResultVO<Boolean> payBoxBan(String appId) {
+        return null;
+    }
+}

+ 11 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/Game.java

@@ -121,4 +121,15 @@ public class Game implements Serializable {
      * ios游戏id
      */
     private Long iosGameId;
+
+    /**
+     * 导量游戏id
+     */
+    private String guideGameIds;
+
+    /**
+     * 是否通用包游戏
+     */
+    private Boolean isCommonGame;
+
 }

+ 71 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/ListenCall.java

@@ -0,0 +1,71 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-01-16
+ * @description : 监听呼叫
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_listen_call")
+public class ListenCall implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 人员id
+     */
+    private Long userId;
+
+    /**
+     * 人员名称
+     */
+    private String userName;
+
+    /**
+     * 钉钉号
+     */
+    private String dingTalkNum;
+
+    /**
+     * 手机号
+     */
+    private String phoneNum;
+
+    /**
+     * 状态, 0 : 可用, 1 : 不可用
+     */
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

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

@@ -176,6 +176,11 @@ public class User implements Serializable {
      */
     private Long relationUserId;
 
+    /**
+     * 关联游戏id
+     */
+    private Long relationGameId;
+
     /**
      * 关联建立的时间
      */

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/ListenCallMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.ListenCall;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-01-16
+ * @description : 监听呼叫
+ */
+public interface ListenCallMapper extends BaseMapper<ListenCall> {
+}

+ 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服务启动成功 <兼容ios通用客户端> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <兼容ios通用客户端, 新增创角回传--01> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 7 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/AppletController.java

@@ -71,4 +71,11 @@ public class AppletController {
     public String wxAppletPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
         return payApplicationService.appletStoreNotify(request, response);
     }
+
+    @UnSignCheck
+    @ApiOperation(value = "小程序接口封禁回调")
+    @GetMapping("/applet/pay/application/ban")
+    public ResultVO<Boolean> payApplicationBan(@RequestParam String orderId, @RequestParam String appId) {
+        return ResultVO.ok(payApplicationService.payApplicationBan(orderId, appId));
+    }
 }

+ 8 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IAliApiService.java

@@ -10,6 +10,14 @@ import reactor.util.function.Tuple2;
  */
 public interface IAliApiService {
 
+    /**
+     * 监听呼叫
+     *
+     * @param gameId : 游戏id
+     * @param param  : 模块参数
+     */
+    void listenCall(Long gameId, String param);
+
     /**
      * 语音呼叫
      *

+ 10 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/ICallBackService.java

@@ -1,7 +1,9 @@
 package com.zanxiang.game.module.sdk.service;
 
+import com.zanxiang.game.module.mybatis.entity.GameUserRole;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
+import com.zanxiang.game.module.sdk.pojo.param.UserData;
 
 import java.util.Map;
 
@@ -20,6 +22,14 @@ public interface ICallBackService {
      */
     void userCallBack(User user, Map<String, String> urlParamMap);
 
+    /**
+     * 创角回传
+     *
+     * @param gameUserRole : 角色信息
+     * @param userData     : 用户信息
+     */
+    void roleCallBack(GameUserRole gameUserRole, UserData userData);
+
     /**
      * 订单回传
      *

+ 13 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IListenCallService.java

@@ -0,0 +1,13 @@
+package com.zanxiang.game.module.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.ListenCall;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-01-16
+ * @description : 监听呼叫
+ */
+public interface IListenCallService extends IService<ListenCall> {
+
+}

+ 9 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IPayApplicationService.java

@@ -19,6 +19,15 @@ import java.util.Map;
  */
 public interface IPayApplicationService extends IService<PayApplication> {
 
+    /**
+     * 支付盒子应用禁用
+     *
+     * @param orderId : 订单id
+     * @param appId   : 应用id
+     * @return : 返回结果
+     */
+    Boolean payApplicationBan(String orderId, String appId);
+
     /**
      * 获得支付应用程序
      *

+ 22 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AliApiServiceImpl.java

@@ -1,15 +1,20 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
 import cn.hutool.http.ContentType;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zanxiang.game.module.base.pojo.enums.StatusEnum;
+import com.zanxiang.game.module.mybatis.entity.ListenCall;
 import com.zanxiang.game.module.sdk.pojo.result.CardCheckResult;
 import com.zanxiang.game.module.sdk.pojo.result.IpCheckResult;
 import com.zanxiang.game.module.sdk.service.IAliApiService;
+import com.zanxiang.game.module.sdk.service.IListenCallService;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.exception.BaseException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.*;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
@@ -17,6 +22,8 @@ import org.springframework.web.util.UriComponentsBuilder;
 import reactor.util.function.Tuple2;
 import reactor.util.function.Tuples;
 
+import java.util.List;
+
 /**
  * @author : lingfeng
  * @time : 2023-12-12
@@ -29,11 +36,26 @@ public class AliApiServiceImpl implements IAliApiService {
     @Autowired
     private RestTemplate restTemplate;
 
+    @Autowired
+    private IListenCallService listenCallService;
+
     /**
      * 云市场应用标识
      */
     private final String APP_CODE = "f395b1587fc04a49a975f908660fb1e9";
 
+    @Override
+    public void listenCall(Long gameId, String param) {
+        List<ListenCall> listenCallList = listenCallService.list(new LambdaQueryWrapper<ListenCall>()
+                .eq(ListenCall::getGameId, gameId)
+                .eq(ListenCall::getStatus, StatusEnum.YES.getCode())
+        );
+        if (CollectionUtils.isEmpty(listenCallList)) {
+            return;
+        }
+        listenCallList.forEach(listenCall -> this.phoneCall(param, listenCall.getPhoneNum()));
+    }
+
     @Override
     public void phoneCall(String param, String mobile) {
         RestTemplate restTemplate = new RestTemplate();

+ 83 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

@@ -11,6 +11,7 @@ import com.zanxiang.game.module.base.pojo.enums.AccountTypeEnum;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.mybatis.entity.*;
 import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
+import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.*;
 import com.zanxiang.module.util.JsonUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -110,6 +111,52 @@ public class CallBackServiceImpl implements ICallBackService {
         }
     }
 
+    @Override
+    public void roleCallBack(GameUserRole gameUserRole, UserData userData) {
+        //判断游戏是否开启广告回传, 未开启, 不回传
+        GameExt gameExt = gameExtService.getByGameId(userData.getGameId());
+        if (!Objects.equals(gameExt.getAdCallBackSwitch(), Boolean.TRUE)) {
+            return;
+        }
+        //用户信息
+        User user = userService.getById(userData.getUserId());
+        //用户渠道信息
+        Agent agent = agentService.getAgentByChannel(user.getChannel());
+        if (agent == null) {
+            return;
+        }
+        //查询小游戏信息或者H5游戏相关公众号信息
+        GameApplet gameApplet = gameAppletService.getOne(new LambdaQueryWrapper<GameApplet>()
+                .eq(GameApplet::getGameId, user.getGameId()));
+        log.error("用户创角回传, userId : {}", user.getId());
+        try {
+            //腾讯H5回传
+            if (Objects.equals(agent.getAccountType(), AccountTypeEnum.TENCENT_H5.getValue())) {
+                TencentRoleRegisterRpcDTO tencentRoleRegisterRpcDTO = this.transform(user, agent, gameApplet, gameUserRole);
+                tencentUserActionBackRpc.backRoleRegister(tencentRoleRegisterRpcDTO);
+                gameBackLogService.addLog(user.getId(), gameUserRole.getRoleId(), "腾讯H5创角回传提交", JsonUtil.toString(tencentRoleRegisterRpcDTO));
+            }
+            //腾讯小游戏回传
+            if (Objects.equals(agent.getAccountType(), AccountTypeEnum.TENCENT_MINI_GAME.getValue())) {
+                TencentRoleRegisterRpcDTO tencentRoleRegisterRpcDTO = this.transform(user, agent, gameApplet, gameUserRole);
+                tencentMiniGameBackRpc.backRoleRegister(tencentRoleRegisterRpcDTO);
+                gameBackLogService.addLog(user.getId(), gameUserRole.getRoleId(), "腾讯小游戏创角回传提交", JsonUtil.toString(tencentRoleRegisterRpcDTO));
+            }
+            //头条回传
+            if (Objects.equals(agent.getAccountType(), AccountTypeEnum.BYTE.getValue())) {
+                Game game = gameService.getById(user.getGameId());
+                //判断是微信小游戏
+                if (Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_WX_APPLET.getId())) {
+                    TtRoleRegisterRpcDTO ttRoleRegisterRpcDTO = this.transform(user, agent, gameUserRole, gameApplet);
+                    ttMiniGameBackRpc.roleRegisterReport(ttRoleRegisterRpcDTO);
+                    gameBackLogService.addLog(user.getId(), gameUserRole.getRoleId(), "头条创角回传提交", JsonUtil.toString(ttRoleRegisterRpcDTO));
+                }
+            }
+        } catch (Exception e) {
+            log.error("创角回传异常, userId : {}, e : {}", user.getId(), e.getMessage());
+        }
+    }
+
     @Override
     public void orderCallBack(PlatformOrderDTO platformOrderDTO) {
         //判断游戏是否开启广告回传, 未开启, 不回传
@@ -160,6 +207,40 @@ public class CallBackServiceImpl implements ICallBackService {
         }
     }
 
+    private TencentRoleRegisterRpcDTO transform(User user, Agent agent, GameApplet gameApplet, GameUserRole gameUserRole) {
+        return TencentRoleRegisterRpcDTO.builder()
+                .backPolicyId(agent.getBackPolicyId())
+                .gameId(gameUserRole.getGameId())
+                .adAccountId(agent.getAccountId())
+                .registerTime(gameUserRole.getCreateTime())
+                .channel(agent.getAgentKey())
+                .wechatOpenid(user.getOpenId())
+                .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
+                .userActionSetId(agent.getUserActionSetId())
+                .roleId(gameUserRole.getRoleId())
+                .roleName(gameUserRole.getRoleName())
+                .build();
+    }
+
+    private TtRoleRegisterRpcDTO transform(User user, Agent agent, GameUserRole gameUserRole, GameApplet gameApplet) {
+        TtAccountRpcDTO ttAccountRpcDTO = TtAccountRpcDTO.builder()
+                .accountId(agent.getAccountId())
+                .reportToken(agent.getReportToken())
+                .reportUrl(agent.getReportUrl())
+                .build();
+        return TtRoleRegisterRpcDTO.builder()
+                .gameId(gameUserRole.getGameId())
+                .backPolicyId(agent.getBackPolicyId())
+                .accountReport(ttAccountRpcDTO)
+                .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
+                .wechatOpenId(user.getOpenId())
+                .agentKey(agent.getAgentKey())
+                .roleId(gameUserRole.getRoleId())
+                .roleName(gameUserRole.getRoleName())
+                .registerTime(gameUserRole.getCreateTime())
+                .build();
+    }
+
     private TencentUserDTO transform(User user, Agent agent, GameApplet gameApplet) {
         return TencentUserDTO.builder()
                 .backPolicyId(agent.getBackPolicyId())
@@ -209,6 +290,7 @@ public class CallBackServiceImpl implements ICallBackService {
                 .orderStatus(platformOrderDTO.getStatus())
                 .payTime(platformOrderDTO.getPayTime())
                 .userActionSetId(agent.getUserActionSetId())
+                .roleId(platformOrderDTO.getRoleId())
                 .roleName(platformOrderDTO.getRoleName())
                 .build();
     }
@@ -232,6 +314,7 @@ public class CallBackServiceImpl implements ICallBackService {
                 .createTime(platformOrderDTO.getCreateTime())
                 .payTime(platformOrderDTO.getPayTime())
                 .regTime(regTime)
+                .roleId(platformOrderDTO.getRoleId())
                 .roleName(platformOrderDTO.getRoleName())
                 .build();
     }

+ 6 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java

@@ -58,6 +58,9 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
     @Autowired
     private IUserTokenService userTokenService;
 
+    @Autowired
+    private ICallBackService callBackService;
+
     @Value("${spring.kafka.game-sdk.gameRoleActiveTopic}")
     private String gameRoleActiveTopic;
 
@@ -113,7 +116,7 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
                     .set(param.getRoleVipLevel() != null, GameUserRole::getRoleVipLevel, param.getRoleVipLevel())
                     .set(param.getRolePower() != null, GameUserRole::getRolePower, param.getRolePower())
                     .set(GameUserRole::getUpdateTime, param.getRoleGradeUpdateTime() == null || param.getRoleGradeUpdateTime() <= 0 ? LocalDateTime.now() : DateUtil.secondToLocalDateTime(param.getRoleGradeUpdateTime()))
-                    .set(param.getExtra() != null, GameUserRole :: getExtra, JsonUtil.toString(param.getExtra()))
+                    .set(param.getExtra() != null, GameUserRole::getExtra, JsonUtil.toString(param.getExtra()))
                     .eq(GameUserRole::getUserId, userData.getUserId())
                     .eq(GameUserRole::getGameId, userData.getGameId())
                     .eq(GameUserRole::getRoleId, param.getRoleId()));
@@ -173,6 +176,8 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
                 .setSql("role_count=role_count+" + 1)
                 .set(User::getUpdateTime, LocalDateTime.now())
                 .eq(User::getId, gameUser.getUserId()));
+        //用户创角回传
+        callBackService.roleCallBack(userRole, userData);
         //释放锁
         distributedLockComponent.unlock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId());
     }

+ 19 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/ListenCallServiceImpl.java

@@ -0,0 +1,19 @@
+package com.zanxiang.game.module.sdk.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.mybatis.entity.ListenCall;
+import com.zanxiang.game.module.mybatis.mapper.ListenCallMapper;
+import com.zanxiang.game.module.sdk.service.IListenCallService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-01-16
+ * @description : 监听呼叫
+ */
+@Slf4j
+@Service
+public class ListenCallServiceImpl extends ServiceImpl<ListenCallMapper, ListenCall> implements IListenCallService {
+
+}

+ 25 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/PayApplicationServiceImpl.java

@@ -2,7 +2,9 @@ package com.zanxiang.game.module.sdk.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.base.ServerInfo;
 import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
+import com.zanxiang.game.module.base.rpc.IPayBoxRpc;
 import com.zanxiang.game.module.mybatis.entity.PayApplication;
 import com.zanxiang.game.module.mybatis.entity.PayMerchant;
 import com.zanxiang.game.module.mybatis.mapper.PayApplicationMapper;
@@ -11,7 +13,9 @@ import com.zanxiang.game.module.sdk.constant.WxPayConstants;
 import com.zanxiang.game.module.sdk.pojo.dto.PayApplicationDTO;
 import com.zanxiang.game.module.sdk.pojo.dto.PayBoxDTO;
 import com.zanxiang.game.module.sdk.pojo.dto.PayMerchantDTO;
+import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
 import com.zanxiang.game.module.sdk.pojo.param.MiniAppPayParam;
+import com.zanxiang.game.module.sdk.service.IOrderService;
 import com.zanxiang.game.module.sdk.service.IPayApplicationService;
 import com.zanxiang.game.module.sdk.service.IPayBoxService;
 import com.zanxiang.game.module.sdk.service.IPayMerchantService;
@@ -29,6 +33,7 @@ import com.zanxiang.module.web.util.IpUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -55,9 +60,15 @@ import java.util.Objects;
 @Service
 public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper, PayApplication> implements IPayApplicationService {
 
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IPayBoxRpc payBoxRpc;
+
     @Autowired
     private WxApiService wxApiService;
 
+    @Autowired
+    private IOrderService orderService;
+
     @Autowired
     private IPayMerchantService payMerchantService;
 
@@ -76,6 +87,20 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
     @Value("${payConfig.wxPay.appletNotifyUrl}")
     private String notifyUrl;
 
+    @Override
+    public Boolean payApplicationBan(String orderId, String appId) {
+        PlatformOrderDTO platformOrderDTO = orderService.getByOrderId(orderId);
+        if (platformOrderDTO == null) {
+            return Boolean.FALSE;
+        }
+        try {
+            payBoxRpc.payBoxBan(appId);
+        } catch (Exception e) {
+            log.error("调用后台支付盒子应用禁用异常, appId : {}, e : {}", appId, e.getMessage());
+        }
+        return Boolean.TRUE;
+    }
+
     @Override
     public PayApplicationDTO getPayApplicationByAppId(String appId) {
         PayApplication payApplication = super.getOne(new LambdaQueryWrapper<PayApplication>()

+ 3 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/AliPayService.java

@@ -203,6 +203,7 @@ public class AliPayService extends PayBaseService {
                     .pay(product.getSubject(), product.getOutTradeNo(), product.getTotalFee(), "", "");
         } catch (Exception e) {
             log.error("支付宝H5支付异常, product : {}, e:{}", JsonUtil.toString(product), e.getMessage());
+            this.listenCall(product.getGameId(), "支付宝H5支付");
             throw new BaseException("支付宝H5支付异常");
         }
         //请求失败
@@ -306,6 +307,7 @@ public class AliPayService extends PayBaseService {
                     .pay(product.getSubject(), product.getOutTradeNo(), product.getTotalFee(), "");
         } catch (Exception e) {
             log.error("支付宝pc端支付异常, product : {}, e:{}", JsonUtil.toString(product), e.getMessage());
+            this.listenCall(product.getGameId(), "支付宝pc端支付");
             throw new BaseException("支付宝pc端支付异常");
         }
         if (!ResponseChecker.success(response)) {
@@ -327,6 +329,7 @@ public class AliPayService extends PayBaseService {
                     .pay(product.getSubject(), product.getOutTradeNo(), product.getTotalFee());
         } catch (Exception e) {
             log.error("支付宝app端支付异常, product : {}, e:{}", JsonUtil.toString(product), e.getMessage());
+            this.listenCall(product.getGameId(), "支付宝app端支付");
             throw new BaseException("支付宝app端支付异常");
         }
         if (!ResponseChecker.success(response)) {

+ 12 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/PayBaseService.java

@@ -9,6 +9,7 @@ import com.zanxiang.game.module.sdk.listener.OrderPaySuccessEvent;
 import com.zanxiang.game.module.sdk.pojo.dto.GamePayWayDTO;
 import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
 import com.zanxiang.game.module.sdk.pojo.dto.ProductPayParamDTO;
+import com.zanxiang.game.module.sdk.service.IAliApiService;
 import com.zanxiang.game.module.sdk.service.IGamePayWayService;
 import com.zanxiang.game.module.sdk.service.IOrderService;
 import com.zanxiang.game.module.sdk.util.RedisUtil;
@@ -51,6 +52,9 @@ public abstract class PayBaseService {
     @Autowired
     private RedisUtil<String> redisUtil;
 
+    @Lazy
+    @Autowired
+    private IAliApiService aliApiService;
 
     /**
      * 创建订单支付参数
@@ -124,6 +128,14 @@ public abstract class PayBaseService {
         log.error("订单添加过期缓存, orderId : {}, expire : {}", orderId, expire);
     }
 
+    public void listenCall(Long gameId, String param) {
+        try {
+            aliApiService.listenCall(gameId, param);
+        } catch (Exception e) {
+            log.error("监听呼叫调用异常, gameId : {}, param : {}", gameId.toString(), param);
+        }
+    }
+
     /**
      * 支付调起
      *

+ 1 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/WxPayService.java

@@ -351,6 +351,7 @@ public class WxPayService extends PayBaseService {
             throw new BaseException("微信小程序支付下单失败");
         } catch (Exception e) {
             log.error("微信支付通信异常, 订单号:{}, e : {}", product.getOutTradeNo(), e.getMessage());
+            this.listenCall(product.getGameId(), "微信支付通道");
             throw new BaseException("微信小程序支付下单异常");
         }
     }