Forráskód Böngészése

腾讯新增小游戏回传链路

wcc 1 éve
szülő
commit
617844f6f1
42 módosított fájl, 1515 hozzáadás és 433 törlés
  1. 0 22
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/rpc/IOceanEngineDataReportRpc.java
  2. 6 1
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentOrderDTO.java
  3. 5 1
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentUserDTO.java
  4. 2 2
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtAccountRpcDTO.java
  5. 3 3
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtOrderRpcDTO.java
  6. 3 3
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtUserActiveRpcDTO.java
  7. 32 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/enums/OrderStatusEnum.java
  8. 20 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/rpc/ITencentMiniGameBackRpc.java
  9. 20 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/rpc/ITencentUserActionBackRpc.java
  10. 22 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/rpc/ITtMiniGameBackRpc.java
  11. 0 17
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/rpc/IGameBackTencentRpc.java
  12. 59 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/TencentMiniGameLogController.java
  13. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentMiniGameBackLogMapper.java
  14. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentMiniGameOrderMapper.java
  15. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentMiniGameUserMapper.java
  16. 71 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameTencentMiniGameOrderDTO.java
  17. 36 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameTencentMiniGameUserDTO.java
  18. 92 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameBackLog.java
  19. 103 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameOrder.java
  20. 79 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameUser.java
  21. 0 4
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentUser.java
  22. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/enums/BackStatusEnum.java
  23. 106 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniGameOrderVO.java
  24. 76 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniGameUserVO.java
  25. 0 27
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/IGameBackTencentRpcImpl.java
  26. 68 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java
  27. 71 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentUserActionBackRpcImpl.java
  28. 6 6
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java
  29. 0 7
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameBackPolicyService.java
  30. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameBackLogService.java
  31. 18 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameOrderService.java
  32. 18 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameUserService.java
  33. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentOrderService.java
  34. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentUserService.java
  35. 0 200
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java
  36. 7 5
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java
  37. 138 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java
  38. 121 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java
  39. 92 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameUserServiceImpl.java
  40. 101 64
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java
  41. 66 50
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentUserServiceImpl.java
  42. 21 21
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

+ 0 - 22
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/rpc/IOceanEngineDataReportRpc.java

@@ -1,22 +0,0 @@
-package com.zanxiang.game.back.base.oceanengine.rpc;
-
-import com.zanxiang.game.back.base.oceanengine.pojo.dto.OrderReportRpcDTO;
-import com.zanxiang.game.back.base.oceanengine.pojo.dto.UserActiveReportRpcDTO;
-import com.zanxiang.module.util.pojo.ResultVO;
-
-/**
- * 微信小游戏头条上报
- * 参考文档:https://bytedance.feishu.cn/docx/doxcnsCqXkvxoAg36GDzkRRRuAq
- */
-public interface IOceanEngineDataReportRpc {
-
-    /**
-     * 用户激活、注册等上报
-     */
-    ResultVO<Boolean> userActiveReport(UserActiveReportRpcDTO dto);
-
-    /**
-     * 用户下单、支付上报
-     */
-    ResultVO<Boolean> orderReport(OrderReportRpcDTO dto);
-}

+ 6 - 1
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/pojo/dto/TencentOrderDTO.java → game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentOrderDTO.java

@@ -1,4 +1,4 @@
-package com.zanxiang.game.back.base.tencent.pojo.dto;
+package com.zanxiang.game.back.base.pojo.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -82,4 +82,9 @@ public class TencentOrderDTO implements Serializable {
      * 数据源ID
      */
     private Long userActionSetId;
+
+    /**
+     * 小游戏回传的时候要
+     */
+    private String clickId;
 }

+ 5 - 1
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/pojo/dto/TencentUserDTO.java → game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentUserDTO.java

@@ -1,4 +1,4 @@
-package com.zanxiang.game.back.base.tencent.pojo.dto;
+package com.zanxiang.game.back.base.pojo.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -56,4 +56,8 @@ public class TencentUserDTO implements Serializable {
      * 数据源ID
      */
     private Long userActionSetId;
+    /**
+     * 小游戏回传的时候要
+     */
+    private String clickId;
 }

+ 2 - 2
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/pojo/dto/AccountReportRpcDTO.java → game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtAccountRpcDTO.java

@@ -1,4 +1,4 @@
-package com.zanxiang.game.back.base.oceanengine.pojo.dto;
+package com.zanxiang.game.back.base.pojo.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -14,7 +14,7 @@ import java.io.Serializable;
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
-public class AccountReportRpcDTO implements Serializable {
+public class TtAccountRpcDTO implements Serializable {
     private static final long serialVersionUID = 1L;
     /**
      * 广告账号 ID

+ 3 - 3
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/pojo/dto/OrderReportRpcDTO.java → game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtOrderRpcDTO.java

@@ -1,4 +1,4 @@
-package com.zanxiang.game.back.base.oceanengine.pojo.dto;
+package com.zanxiang.game.back.base.pojo.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -12,7 +12,7 @@ import java.time.LocalDateTime;
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-public class OrderReportRpcDTO implements Serializable {
+public class TtOrderRpcDTO implements Serializable {
     private static final long serialVersionUID = 1L;
     /**
      * 游戏 id
@@ -21,7 +21,7 @@ public class OrderReportRpcDTO implements Serializable {
     /**
      * 微信小游戏上报组件
      */
-    private AccountReportRpcDTO accountReport;
+    private TtAccountRpcDTO accountReport;
     /**
      * 小游戏 appId
      */

+ 3 - 3
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/pojo/dto/UserActiveReportRpcDTO.java → game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtUserActiveRpcDTO.java

@@ -1,4 +1,4 @@
-package com.zanxiang.game.back.base.oceanengine.pojo.dto;
+package com.zanxiang.game.back.base.pojo.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -12,7 +12,7 @@ import java.time.LocalDateTime;
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-public class UserActiveReportRpcDTO implements Serializable {
+public class TtUserActiveRpcDTO implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
@@ -34,7 +34,7 @@ public class UserActiveReportRpcDTO implements Serializable {
     /**
      * 微信小游戏上报组件
      */
-    private AccountReportRpcDTO accountReport;
+    private TtAccountRpcDTO accountReport;
     /**
      * 渠道标识
      */

+ 32 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/enums/OrderStatusEnum.java

@@ -0,0 +1,32 @@
+package com.zanxiang.game.back.base.pojo.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum OrderStatusEnum {
+    /**
+     * 预下单
+     */
+    READY_PAY(0),
+
+    /**
+     * 待支付
+     */
+    WAIT_PAY(1),
+
+    /**
+     * 支付成功
+     */
+    SUCCESS_PAY(2),
+
+    /**
+     * 订单关闭
+     */
+    CANCEL_PAY(-1);
+
+    private final Integer value;
+
+    OrderStatusEnum(Integer value) {
+        this.value = value;
+    }
+}

+ 20 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/rpc/ITencentMiniGameBackRpc.java

@@ -0,0 +1,20 @@
+package com.zanxiang.game.back.base.rpc;
+
+import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
+import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
+import com.zanxiang.module.util.pojo.ResultVO;
+
+/**
+ * 腾讯小游戏回传
+ */
+public interface ITencentMiniGameBackRpc {
+    /**
+     * 订单回传
+     */
+    ResultVO<Boolean> backOrder(TencentOrderDTO dto);
+
+    /**
+     * 用户回传
+     */
+    ResultVO<Boolean> backUser(TencentUserDTO dto);
+}

+ 20 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/rpc/ITencentUserActionBackRpc.java

@@ -0,0 +1,20 @@
+package com.zanxiang.game.back.base.rpc;
+
+import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
+import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
+import com.zanxiang.module.util.pojo.ResultVO;
+
+/**
+ * 腾讯数据源回传
+ */
+public interface ITencentUserActionBackRpc {
+    /**
+     * 订单回传
+     */
+    ResultVO<Boolean> backOrder(TencentOrderDTO dto);
+
+    /**
+     * 用户回传
+     */
+    ResultVO<Boolean> backUser(TencentUserDTO dto);
+}

+ 22 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/rpc/ITtMiniGameBackRpc.java

@@ -0,0 +1,22 @@
+package com.zanxiang.game.back.base.rpc;
+
+import com.zanxiang.game.back.base.pojo.dto.TtOrderRpcDTO;
+import com.zanxiang.game.back.base.pojo.dto.TtUserActiveRpcDTO;
+import com.zanxiang.module.util.pojo.ResultVO;
+
+/**
+ * 微信小游戏头条上报
+ * 参考文档:https://bytedance.feishu.cn/docx/doxcnsCqXkvxoAg36GDzkRRRuAq
+ */
+public interface ITtMiniGameBackRpc {
+
+    /**
+     * 用户激活、注册等上报
+     */
+    ResultVO<Boolean> userActiveReport(TtUserActiveRpcDTO dto);
+
+    /**
+     * 用户下单、支付上报
+     */
+    ResultVO<Boolean> orderReport(TtOrderRpcDTO dto);
+}

+ 0 - 17
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/rpc/IGameBackTencentRpc.java

@@ -1,17 +0,0 @@
-package com.zanxiang.game.back.base.tencent.rpc;
-
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentOrderDTO;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentUserDTO;
-import com.zanxiang.module.util.pojo.ResultVO;
-
-public interface IGameBackTencentRpc {
-    /**
-     * 订单回传
-     */
-    ResultVO<Boolean> backOrder(TencentOrderDTO dto);
-
-    /**
-     * 用户回传
-     */
-    ResultVO<Boolean> backUser(TencentUserDTO dto);
-}

+ 59 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/TencentMiniGameLogController.java

@@ -0,0 +1,59 @@
+package com.zanxiang.game.back.serve.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameOrderDTO;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameUserDTO;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameOrderVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameUserVO;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameOrderService;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/tencentMiniGame")
+@Api("腾讯小游戏回传")
+public class TencentMiniGameLogController {
+    @Autowired
+    private IGameTencentMiniGameUserService gameTencentMiniGameUserService;
+    @Autowired
+    private IGameTencentMiniGameOrderService gameTencentMiniGameOrderService;
+
+    @PreAuthorize(permissionKey = "gameBack:tencentMiniGame:orderLogs")
+    @PostMapping("/orderLogs")
+    @ApiOperation(value = "腾讯订单回传日志列表")
+    public ResultVO<IPage<GameTencentMiniGameOrderVO>> tencentOrderLogList(@RequestBody GameTencentMiniGameOrderDTO dto) {
+        return ResultVO.ok(gameTencentMiniGameOrderService.listOfPage(dto));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencentMiniGame:orderReport")
+    @PostMapping("/orderReport/{ids}")
+    @ApiOperation(value = "腾讯订单手动上报")
+    public ResultVO<Boolean> tencentOrderReport(@PathVariable("ids") List<Long> ids) {
+        return ResultVO.ok(gameTencentMiniGameOrderService.doReport(ids));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencentMiniGame:userLogs")
+    @PostMapping("/userLogs")
+    @ApiOperation(value = "腾讯用户回传日志列表")
+    public ResultVO<IPage<GameTencentMiniGameUserVO>> tencentUserLogList(@RequestBody GameTencentMiniGameUserDTO dto) {
+        return ResultVO.ok(gameTencentMiniGameUserService.listOfPage(dto));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencentMiniGame:userReport")
+    @PostMapping("/userReport/{ids}")
+    @ApiOperation(value = "腾讯用户手动上报")
+    public ResultVO<Boolean> tencentUserReport(@PathVariable("ids") List<Long> ids) {
+        return ResultVO.ok(gameTencentMiniGameUserService.doReport(ids));
+    }
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentMiniGameBackLogMapper.java

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog;
+
+public interface GameTencentMiniGameBackLogMapper extends BaseMapper<GameTencentMiniGameBackLog> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentMiniGameOrderMapper.java

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
+
+public interface GameTencentMiniGameOrderMapper extends BaseMapper<GameTencentMiniGameOrder> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentMiniGameUserMapper.java

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
+
+public interface GameTencentMiniGameUserMapper extends BaseMapper<GameTencentMiniGameUser> {
+}

+ 71 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameTencentMiniGameOrderDTO.java

@@ -0,0 +1,71 @@
+package com.zanxiang.game.back.serve.pojo.dto;
+
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 游戏腾讯订单表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-06-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameTencentMiniGameOrderDTO extends BaseListDTO<GameTencentMiniGameOrder> {
+    /**
+     * 渠道号
+     */
+    @ApiModelProperty("渠道号")
+    private String agentKey;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    @ApiModelProperty("广告账号ID")
+    private Long adAccountId;
+
+    /**
+     * 订单ID
+     */
+    @ApiModelProperty("订单ID")
+    private String orderId;
+
+    /**
+     * openid
+     */
+    @ApiModelProperty("openid")
+    private String wechatOpenid;
+
+    /**
+     * appid
+     */
+    @ApiModelProperty("appid")
+    private String wechatAppId;
+
+    /**
+     * 0:未回传;1:回传
+     */
+    @ApiModelProperty("-1:回传失败;0:未回传;1:回传")
+    private Integer backStatus;
+
+    /**
+     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
+     */
+    @ApiModelProperty("支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消")
+    private Integer orderStatus;
+}

+ 36 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameTencentMiniGameUserDTO.java

@@ -0,0 +1,36 @@
+package com.zanxiang.game.back.serve.pojo.dto;
+
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 游戏腾讯用户表
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameTencentMiniGameUserDTO extends BaseListDTO<GameTencentMiniGameUser> {
+    @ApiModelProperty("渠道号")
+    private String agentKey;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long adAccountId;
+
+    @ApiModelProperty("openid")
+    private String wechatOpenid;
+
+    @ApiModelProperty("appid")
+    private String wechatAppId;
+
+    @ApiModelProperty("回传状态")
+    private Integer backStatus;
+}

+ 92 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameBackLog.java

@@ -0,0 +1,92 @@
+package com.zanxiang.game.back.serve.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 回传日志表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-06-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName("t_game_tencent_mini_game_back_log")
+public class GameTencentMiniGameBackLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    private Long adAccountId;
+
+    /**
+     * 数据源ID
+     */
+    private String clickId;
+
+    /**
+     * 行为发生时,客户端的时间点
+     */
+    private LocalDateTime actionTime;
+
+    /**
+     * openid
+     */
+    private String wechatOpenid;
+
+    /**
+     * appid
+     */
+    private String wechatAppId;
+
+    /**
+     * 行为类型:(REGISTER/PURCHASE/COMPLETE_ORDER)
+     */
+    private String actionType;
+
+    /**
+     * 金额
+     */
+    private Long amount;
+
+    /**
+     * 订单ID
+     */
+    private String orderId;
+
+    /**
+     * 回传时间
+     */
+    private LocalDateTime createTime;
+    /**
+     * 回传状态
+     */
+    private Integer backStatus;
+    /**
+     * 回传失败的错误日志
+     */
+    private String errMsg;
+
+
+}

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

@@ -0,0 +1,103 @@
+package com.zanxiang.game.back.serve.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 游戏腾讯订单表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-06-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName("t_game_tencent_mini_game_order")
+public class GameTencentMiniGameOrder implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 渠道号
+     */
+    private String agentKey;
+
+    /**
+     * 游戏ID
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime registerTime;
+
+    /**
+     * 关注时间
+     */
+    private LocalDateTime subscribeTime;
+
+    /**
+     * 充值金额(分)
+     */
+    private Long rechargeMoney;
+
+    /**
+     * 充值时间
+     */
+    private LocalDateTime rechargeTime;
+
+    /**
+     * 订单ID
+     */
+    private String orderId;
+
+    /**
+     * openid
+     */
+    private String wechatOpenid;
+
+    /**
+     * appid
+     */
+    private String wechatAppId;
+
+    /**
+     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
+     */
+    private Integer orderStatus;
+
+    /**
+     * 支付时间
+     */
+    private LocalDateTime payTime;
+
+    private String clickId;
+    /**
+     * 回传策略ID
+     */
+    private Long backPolicyId;
+    /**
+     * 回传状态
+     */
+    private Integer backStatus;
+
+    private LocalDateTime createTime;
+}

+ 79 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameUser.java

@@ -0,0 +1,79 @@
+package com.zanxiang.game.back.serve.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 游戏腾讯用户表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-06-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName("t_game_tencent_mini_game_user")
+public class GameTencentMiniGameUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 渠道号
+     */
+    private String agentKey;
+
+    /**
+     * 游戏ID
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime registerTime;
+
+    /**
+     * 关注时间
+     */
+    private LocalDateTime subscribeTime;
+
+    /**
+     * openid
+     */
+    private String wechatOpenid;
+
+    /**
+     * appid
+     */
+    private String wechatAppId;
+
+    /**
+     * 点击 id
+     */
+    private String clickId;
+    /**
+     * 回传状态
+     */
+    private Integer backStatus;
+
+    private LocalDateTime createTime;
+}

+ 0 - 4
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentUser.java

@@ -28,10 +28,6 @@ public class GameTencentUser implements Serializable {
 
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
-    /**
-     * 回传策略ID
-     */
-    private Long backPolicyId;
 
     /**
      * 渠道号

+ 14 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/enums/BackStatusEnum.java

@@ -2,6 +2,8 @@ package com.zanxiang.game.back.serve.pojo.enums;
 
 import lombok.Getter;
 
+import java.util.Objects;
+
 @Getter
 public enum BackStatusEnum {
     /**
@@ -22,4 +24,16 @@ public enum BackStatusEnum {
     BackStatusEnum(Integer backStatus) {
         this.backStatus = backStatus;
     }
+
+    public static BackStatusEnum getByValue(Integer value) {
+        if (value == null) {
+            return null;
+        }
+        for (BackStatusEnum backStatus : BackStatusEnum.values()) {
+            if (Objects.equals(backStatus.getBackStatus(), value)) {
+                return backStatus;
+            }
+        }
+        return null;
+    }
 }

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

@@ -0,0 +1,106 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 游戏腾讯订单表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-06-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameTencentMiniGameOrderVO {
+    private Long id;
+
+    /**
+     * 渠道号
+     */
+    @ApiModelProperty("渠道号")
+    private String agentKey;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    @ApiModelProperty("广告账号ID")
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    @ApiModelProperty("注册时间")
+    private LocalDateTime registerTime;
+
+    /**
+     * 关注时间
+     */
+    @ApiModelProperty("关注时间")
+    private LocalDateTime subscribeTime;
+
+    /**
+     * 充值金额(分)
+     */
+    @ApiModelProperty("充值金额(分)")
+    private Long rechargeMoney;
+
+    /**
+     * 充值时间
+     */
+    @ApiModelProperty("充值时间")
+    private LocalDateTime rechargeTime;
+
+    /**
+     * 订单ID
+     */
+    @ApiModelProperty("订单ID")
+    private String orderId;
+
+    /**
+     * openid
+     */
+    @ApiModelProperty("openid")
+    private String wechatOpenid;
+
+    /**
+     * appid
+     */
+    @ApiModelProperty("appid")
+    private String wechatAppId;
+
+    /**
+     * 0:未回传;1:回传
+     */
+    @ApiModelProperty("回传状态 -1:回传失败;0:未回传;1:已回传")
+    private Integer backStatus;
+
+    /**
+     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
+     */
+    @ApiModelProperty("支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消")
+    private Integer orderStatus;
+
+    /**
+     * 支付时间
+     */
+    @ApiModelProperty("支付时间")
+    private LocalDateTime payTime;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+}

+ 76 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniGameUserVO.java

@@ -0,0 +1,76 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 游戏腾讯用户表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-06-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameTencentMiniGameUserVO {
+    private Long id;
+
+    /**
+     * 渠道号
+     */
+    @ApiModelProperty("渠道号")
+    private String agentKey;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    @ApiModelProperty("广告账号ID")
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    @ApiModelProperty("注册时间")
+    private LocalDateTime registerTime;
+
+    /**
+     * 关注时间
+     */
+    @ApiModelProperty("关注时间")
+    private LocalDateTime subscribeTime;
+
+    /**
+     * openid
+     */
+    @ApiModelProperty("openid")
+    private String wechatOpenid;
+
+    /**
+     * appid
+     */
+    @ApiModelProperty("appid")
+    private String wechatAppId;
+
+    /**
+     * 0:未回传;1:回传
+     */
+    @ApiModelProperty("回传状态:-1:回传失败;0:未回传;1:已回传")
+    private Integer backStatus;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+}

+ 0 - 27
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/IGameBackTencentRpcImpl.java

@@ -1,27 +0,0 @@
-package com.zanxiang.game.back.serve.rpc.impl;
-
-
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentOrderDTO;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentUserDTO;
-import com.zanxiang.game.back.base.tencent.rpc.IGameBackTencentRpc;
-import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
-import com.zanxiang.module.util.pojo.ResultVO;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.beans.factory.annotation.Autowired;
-
-@Slf4j
-@DubboService
-public class IGameBackTencentRpcImpl implements IGameBackTencentRpc {
-    @Autowired
-    private IGameBackPolicyService gameBackPolicyService;
-    @Override
-    public ResultVO<Boolean> backOrder(TencentOrderDTO dto) {
-        return ResultVO.ok(gameBackPolicyService.tencentOrderBack(dto));
-    }
-
-    @Override
-    public ResultVO<Boolean> backUser(TencentUserDTO dto) {
-        return ResultVO.ok(gameBackPolicyService.tencentUserBack(dto));
-    }
-}

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

@@ -0,0 +1,68 @@
+package com.zanxiang.game.back.serve.rpc.impl;
+
+import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
+import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
+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;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameOrderService;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+@DubboService
+public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
+
+    @Autowired
+    private IGameTencentMiniGameOrderService gameTencentMiniGameOrderService;
+    @Autowired
+    private IGameTencentMiniGameUserService gameTencentMiniGameUserService;
+
+    @Override
+    public ResultVO<Boolean> backOrder(TencentOrderDTO dto) {
+        GameTencentMiniGameOrder orderLog = GameTencentMiniGameOrder.builder()
+                .adAccountId(dto.getAdAccountId())
+                .gameId(dto.getGameId())
+                .orderId(dto.getOrderId())
+                .agentKey(dto.getChannel())
+                .rechargeMoney(dto.getRechargeMoney())
+                .rechargeTime(dto.getRechargeTime())
+                .subscribeTime(dto.getSubscribeTime())
+                .registerTime(dto.getRegisterTime())
+                .wechatAppId(dto.getWechatAppId())
+                .wechatOpenid(dto.getWechatOpenid())
+                .orderStatus(dto.getOrderStatus())
+                .payTime(dto.getPayTime())
+                .createTime(LocalDateTime.now())
+                .backStatus(BackStatusEnum.NO.getBackStatus())
+                .backPolicyId(dto.getBackPolicyId())
+                .clickId(dto.getClickId())
+                .build();
+        gameTencentMiniGameOrderService.save(orderLog);
+        return ResultVO.ok(gameTencentMiniGameOrderService.orderBack(orderLog, false));
+    }
+
+    @Override
+    public ResultVO<Boolean> backUser(TencentUserDTO dto) {
+        GameTencentMiniGameUser userLog = GameTencentMiniGameUser.builder()
+                .adAccountId(dto.getAdAccountId())
+                .gameId(dto.getGameId())
+                .agentKey(dto.getChannel())
+                .subscribeTime(dto.getSubscribeTime())
+                .registerTime(dto.getRegisterTime())
+                .wechatAppId(dto.getWechatAppId())
+                .wechatOpenid(dto.getWechatOpenid())
+                .backStatus(BackStatusEnum.NO.getBackStatus())
+                .clickId(dto.getClickId())
+                .createTime(LocalDateTime.now())
+                .build();
+        gameTencentMiniGameUserService.save(userLog);
+        return ResultVO.ok(gameTencentMiniGameUserService.userBack(userLog, false));
+    }
+}

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

@@ -0,0 +1,71 @@
+package com.zanxiang.game.back.serve.rpc.impl;
+
+
+import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
+import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
+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;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
+import com.zanxiang.game.back.serve.service.IGameTencentOrderService;
+import com.zanxiang.game.back.serve.service.IGameTencentUserService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+@DubboService
+public class TencentUserActionBackRpcImpl implements ITencentUserActionBackRpc {
+
+    @Autowired
+    private IGameTencentOrderService gameTencentOrderService;
+    @Autowired
+    private IGameTencentUserService gameTencentUserService;
+
+    @Override
+    public ResultVO<Boolean> backOrder(TencentOrderDTO dto) {
+        //订单保存
+        GameTencentOrder gameTencentOrder = GameTencentOrder.builder()
+                .adAccountId(dto.getAdAccountId())
+                .gameId(dto.getGameId())
+                .orderId(dto.getOrderId())
+                .channel(dto.getChannel())
+                .rechargeMoney(dto.getRechargeMoney())
+                .rechargeTime(dto.getRechargeTime())
+                .subscribeTime(dto.getSubscribeTime())
+                .registerTime(dto.getRegisterTime())
+                .wechatAppId(dto.getWechatAppId())
+                .wechatOpenid(dto.getWechatOpenid())
+                .orderStatus(dto.getOrderStatus())
+                .payTime(dto.getPayTime())
+                .createTime(LocalDateTime.now())
+                .isBack(BackStatusEnum.NO.getBackStatus())
+                .backPolicyId(dto.getBackPolicyId())
+                .userActionSetId(dto.getUserActionSetId())
+                .build();
+        gameTencentOrderService.save(gameTencentOrder);
+        return ResultVO.ok(gameTencentOrderService.orderBack(gameTencentOrder, false));
+    }
+
+    @Override
+    public ResultVO<Boolean> backUser(TencentUserDTO dto) {
+        GameTencentUser gameTencentUser = GameTencentUser.builder()
+                .adAccountId(dto.getAdAccountId())
+                .gameId(dto.getGameId())
+                .channel(dto.getChannel())
+                .subscribeTime(dto.getSubscribeTime())
+                .registerTime(dto.getRegisterTime())
+                .wechatAppId(dto.getWechatAppId())
+                .wechatOpenid(dto.getWechatOpenid())
+                .isBack(BackStatusEnum.NO.getBackStatus())
+                .userActionSetId(dto.getUserActionSetId())
+                .createTime(LocalDateTime.now())
+                .build();
+        gameTencentUserService.save(gameTencentUser);
+        return ResultVO.ok(gameTencentUserService.userBack(gameTencentUser, false));
+    }
+}

+ 6 - 6
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/OceanEngineDataReportRpcImpl.java → game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java

@@ -1,8 +1,8 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
-import com.zanxiang.game.back.base.oceanengine.pojo.dto.OrderReportRpcDTO;
-import com.zanxiang.game.back.base.oceanengine.pojo.dto.UserActiveReportRpcDTO;
-import com.zanxiang.game.back.base.oceanengine.rpc.IOceanEngineDataReportRpc;
+import com.zanxiang.game.back.base.pojo.dto.TtOrderRpcDTO;
+import com.zanxiang.game.back.base.pojo.dto.TtUserActiveRpcDTO;
+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;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
@@ -16,7 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 @Slf4j
 @DubboService
-public class OceanEngineDataReportRpcImpl implements IOceanEngineDataReportRpc {
+public class TtMiniGameBackRpcImpl implements ITtMiniGameBackRpc {
     @Autowired
     private IGameOceanengineUserLogService gameOceanengineUserLogService;
     @Autowired
@@ -24,7 +24,7 @@ public class OceanEngineDataReportRpcImpl implements IOceanEngineDataReportRpc {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public ResultVO<Boolean> userActiveReport(UserActiveReportRpcDTO dto) {
+    public ResultVO<Boolean> userActiveReport(TtUserActiveRpcDTO dto) {
         GameOceanengineUserLog userLog = GameOceanengineUserLog.builder()
                 .appId(dto.getWechatAppId())
                 .openId(dto.getWechatOpenId())
@@ -47,7 +47,7 @@ public class OceanEngineDataReportRpcImpl implements IOceanEngineDataReportRpc {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public ResultVO<Boolean> orderReport(OrderReportRpcDTO dto) {
+    public ResultVO<Boolean> orderReport(TtOrderRpcDTO dto) {
         GameOceanengineOrderLog orderLog = GameOceanengineOrderLog.builder()
                 .appId(dto.getWechatAppId())
                 .openId(dto.getWechatOpenId())

+ 0 - 7
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameBackPolicyService.java

@@ -1,14 +1,11 @@
 package com.zanxiang.game.back.serve.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentOrderDTO;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentUserDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.back.serve.pojo.vo.GameBackPolicyVO;
-import com.zanxiang.game.back.serve.pojo.vo.GameTencentOrderVO;
 
 import java.util.List;
 
@@ -22,10 +19,6 @@ import java.util.List;
  */
 public interface IGameBackPolicyService extends IService<GameBackPolicy> {
 
-    boolean tencentOrderBack(TencentOrderDTO dto);
-
-    boolean tencentUserBack(TencentUserDTO dto);
-
     boolean createPolicy(GameBackPolicyDTO dto);
 
     boolean updatePolicy(Long policyId, GameBackPolicyDTO dto);

+ 14 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameBackLogService.java

@@ -0,0 +1,14 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+
+public interface IGameTencentMiniGameBackLogService extends IService<GameTencentMiniGameBackLog> {
+
+    BackStatusEnum userBack(GameTencentMiniGameUser userLog);
+
+    BackStatusEnum orderBack(GameTencentMiniGameOrder orderLog);
+}

+ 18 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameOrderService.java

@@ -0,0 +1,18 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameOrderDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameOrderVO;
+
+import java.util.List;
+
+public interface IGameTencentMiniGameOrderService extends IService<GameTencentMiniGameOrder> {
+
+    boolean orderBack(GameTencentMiniGameOrder orderLog, boolean mustBack);
+
+    IPage<GameTencentMiniGameOrderVO> listOfPage(GameTencentMiniGameOrderDTO dto);
+
+    boolean doReport(List<Long> orderLogIds);
+}

+ 18 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameUserService.java

@@ -0,0 +1,18 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameUserDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameUserVO;
+
+import java.util.List;
+
+public interface IGameTencentMiniGameUserService extends IService<GameTencentMiniGameUser> {
+
+    boolean userBack(GameTencentMiniGameUser userLog, boolean mustBack);
+
+    IPage<GameTencentMiniGameUserVO> listOfPage(GameTencentMiniGameUserDTO dto);
+
+    boolean doReport(List<Long> userLogIds);
+}

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentOrderService.java

@@ -19,6 +19,8 @@ import java.util.List;
  */
 public interface IGameTencentOrderService extends IService<GameTencentOrder> {
 
+    boolean orderBack(GameTencentOrder tencentOrder, boolean mustBack);
+
     IPage<GameTencentOrderVO> tencentOrderLogList(GameTencentOrderDTO dto);
 
     boolean tencentOrderReport(List<Long> ids);

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentUserService.java

@@ -18,6 +18,8 @@ import java.util.List;
  */
 public interface IGameTencentUserService extends IService<GameTencentUser> {
 
+    boolean userBack(GameTencentUser userLog, boolean mustBack);
+
     IPage<GameTencentUserVO> tencentUserLogList(GameTencentUserDTO dto);
 
     boolean tencentUserReport(List<Long> ids);

+ 0 - 200
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java

@@ -1,47 +1,34 @@
 package com.zanxiang.game.back.serve.service.impl;
 
-import cn.hutool.http.HttpStatus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
-import com.zanxiang.advertising.tencent.base.pojo.dto.DataReportOfAppIdRpcDTO;
-import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
 import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
 import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
 import com.zanxiang.erp.security.util.SecurityUtil;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentOrderDTO;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentUserDTO;
 import com.zanxiang.game.back.serve.dao.mapper.GameBackPolicyMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
 import com.zanxiang.game.back.serve.pojo.entity.*;
-import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
-import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameBackPolicyVO;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentOrderService;
 import com.zanxiang.game.back.serve.service.IGameTencentUserService;
-import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
-import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.NumberUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.module.util.exception.BaseException;
-import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -67,193 +54,6 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
     private IUserActionSetRpc userActionSetRpc;
     @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
     private ISysUserRpc sysUserRpc;
-    /**
-     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
-     */
-    private static final Integer COMPLETE_ORDER = 0;
-    private static final Integer PURCHASE = 2;
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean tencentOrderBack(TencentOrderDTO dto) {
-        log.error("回传腾讯订单开始,dto:{}", JsonUtil.toString(dto));
-        //订单保存
-        GameTencentOrder gameTencentOrder = GameTencentOrder.builder()
-                .adAccountId(dto.getAdAccountId())
-                .gameId(dto.getGameId())
-                .orderId(dto.getOrderId())
-                .channel(dto.getChannel())
-                .rechargeMoney(dto.getRechargeMoney())
-                .rechargeTime(dto.getRechargeTime())
-                .subscribeTime(dto.getSubscribeTime())
-                .registerTime(dto.getRegisterTime())
-                .wechatAppId(dto.getWechatAppId())
-                .wechatOpenid(dto.getWechatOpenid())
-                .orderStatus(dto.getOrderStatus())
-                .payTime(dto.getPayTime())
-                .createTime(LocalDateTime.now())
-                .isBack(BackStatusEnum.NO.getBackStatus())
-                .backPolicyId(dto.getBackPolicyId())
-                .userActionSetId(dto.getUserActionSetId())
-                .build();
-        gameTencentOrderService.save(gameTencentOrder);
-        if (!dto.getOrderStatus().equals(COMPLETE_ORDER) && !dto.getOrderStatus().equals(PURCHASE)) {
-            return true;
-        }
-
-        String actionType = gameTencentOrder.getOrderStatus().equals(PURCHASE) ?
-                ActionTypeEnum.PURCHASE.getActionType() : ActionTypeEnum.COMPLETE_ORDER.getActionType();
-        Map<String, Object> actionParam = new HashMap<>(2);
-        actionParam.put("claim_type", 0);
-        actionParam.put("value", dto.getRechargeMoney());
-        DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
-                .appId(dto.getWechatAppId())
-                .userActionSetId(dto.getUserActionSetId())
-                .action(UserActionRpcDTO.builder()
-                        .actionTime(dto.getOrderStatus().equals(PURCHASE) ? dto.getPayTime() : dto.getRechargeTime())
-                        .actionType(actionType)
-                        .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
-                                .wechatAppId(dto.getWechatAppId())
-                                .wechatOpenid(dto.getWechatOpenid())
-                                .build())
-                        .actionParam(actionParam)
-                        .build())
-                .build();
-
-        GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
-                .gameId(dto.getGameId())
-                .adAccountId(dto.getAdAccountId())
-                .actionTime(dto.getOrderStatus().equals(PURCHASE) ? dto.getPayTime() : dto.getRechargeTime())
-                .createTime(LocalDateTime.now())
-                .actionType(actionType)
-                .orderId(dto.getOrderId())
-                .wechatAppId(dto.getWechatAppId())
-                .wechatOpenid(dto.getWechatOpenid())
-                .userActionSetId(dto.getUserActionSetId())
-                .actionParam(actionParam.toString())
-                .build();
-
-        boolean doBack;
-        if (null == dto.getBackPolicyId()) {
-            doBack = true;
-        } else {
-            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(dto.getBackPolicyId());
-
-            doBack = BackPolicyUtil.backOrder(gameBackPolicy, dto.getRechargeMoney(),
-                    () -> gameTencentOrderService.count(new LambdaQueryWrapper<GameTencentOrder>()
-                            .eq(GameTencentOrder::getGameId, dto.getGameId())
-                            .eq(GameTencentOrder::getWechatAppId, dto.getWechatAppId())
-                            .eq(GameTencentOrder::getAdAccountId, dto.getAdAccountId())
-                            .eq(GameTencentOrder::getOrderStatus, 2)
-                            .eq(GameTencentOrder::getWechatOpenid, dto.getWechatOpenid())
-                            .last("limit 1")
-                    ) < 1, backUnit -> Long.valueOf(gameTencentOrderService.count(new LambdaQueryWrapper<GameTencentOrder>()
-                            .eq(GameTencentOrder::getGameId, dto.getGameId())
-                            .eq(GameTencentOrder::getWechatAppId, dto.getWechatAppId())
-                            .eq(GameTencentOrder::getAdAccountId, dto.getAdAccountId())
-                            .eq(GameTencentOrder::getOrderStatus, 2)
-                            .orderByDesc(GameTencentOrder::getCreateTime)
-                            .last("limit " + backUnit)
-                    )).intValue());
-        }
-        if (dto.getOrderStatus().equals(COMPLETE_ORDER) || doBack) {
-            ResultVO<Boolean> result = userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-            if (result.getCode() == HttpStatus.HTTP_OK) {
-                gameTencentOrder.setIsBack(BackStatusEnum.SUCCESS.getBackStatus());
-                gameTencentOrder.setBackLog("回传成功");
-                gameTencentOrderService.updateById(gameTencentOrder);
-
-                gameTencentBackLog.setBackLog("回传成功");
-                gameTencentBackLogService.save(gameTencentBackLog);
-            } else {
-                log.error("回传腾讯订单失败,失败原因:{}", result.getMsg());
-                gameTencentOrder.setBackLog(result.getMsg());
-                gameTencentOrder.setIsBack(BackStatusEnum.FAILED.getBackStatus());
-                gameTencentOrderService.updateById(gameTencentOrder);
-
-                gameTencentBackLog.setBackLog(result.getMsg());
-                gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean tencentUserBack(TencentUserDTO dto) {
-        log.error("回传腾讯用户开始,dto:{}", JsonUtil.toString(dto));
-        GameTencentUser gameTencentUser = gameTencentUserService.getOne(new LambdaQueryWrapper<GameTencentUser>()
-                .eq(GameTencentUser::getWechatOpenid, dto.getWechatOpenid())
-                .eq(GameTencentUser::getGameId, dto.getGameId())
-                .eq(GameTencentUser::getWechatAppId, dto.getWechatAppId())
-                .eq(GameTencentUser::getAdAccountId, dto.getAdAccountId())
-                .eq(GameTencentUser::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
-        );
-        if (null == gameTencentUser) {
-            //用户保存
-            gameTencentUser = GameTencentUser.builder()
-                    .adAccountId(dto.getAdAccountId())
-                    .gameId(dto.getGameId())
-                    .channel(dto.getChannel())
-                    .subscribeTime(dto.getSubscribeTime())
-                    .registerTime(dto.getRegisterTime())
-                    .wechatAppId(dto.getWechatAppId())
-                    .wechatOpenid(dto.getWechatOpenid())
-                    .isBack(BackStatusEnum.NO.getBackStatus())
-                    .userActionSetId(dto.getUserActionSetId())
-                    .createTime(LocalDateTime.now())
-                    .build();
-            gameTencentUserService.save(gameTencentUser);
-        }
-        Map<String, Object> actionParam = new HashMap<>(2);
-        actionParam.put("claim_type", 0);
-
-        DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
-                .appId(dto.getWechatAppId())
-                .userActionSetId(dto.getUserActionSetId())
-                .action(UserActionRpcDTO.builder()
-                        .actionTime(dto.getRegisterTime())
-                        .actionType(ActionTypeEnum.REGISTER.getActionType())
-                        .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
-                                .wechatAppId(dto.getWechatAppId())
-                                .wechatOpenid(dto.getWechatOpenid())
-                                .build())
-                        .actionParam(actionParam)
-                        .build())
-                .build();
-
-        GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
-                .gameId(dto.getGameId())
-                .adAccountId(dto.getAdAccountId())
-                .actionTime(dto.getRegisterTime())
-                .createTime(LocalDateTime.now())
-                .actionType(ActionTypeEnum.REGISTER.getActionType())
-                .wechatAppId(dto.getWechatAppId())
-                .wechatOpenid(dto.getWechatOpenid())
-                .userActionSetId(dto.getUserActionSetId())
-                .actionParam(actionParam.toString())
-                .build();
-        ResultVO<Boolean> result = userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-        if (result.getCode() == HttpStatus.HTTP_OK) {
-            gameTencentUser.setIsBack(BackStatusEnum.SUCCESS.getBackStatus());
-            gameTencentUser.setBackLog("回传成功");
-            gameTencentUserService.updateById(gameTencentUser);
-
-            gameTencentBackLog.setBackLog("回传成功");
-            gameTencentBackLogService.save(gameTencentBackLog);
-        } else {
-            log.error("回传腾讯用户失败,失败原因:{}", result.getMsg());
-            gameTencentUser.setBackLog(result.getMsg());
-            gameTencentUser.setIsBack(BackStatusEnum.FAILED.getBackStatus());
-            gameTencentUserService.updateById(gameTencentUser);
-
-            gameTencentBackLog.setBackLog(result.getMsg());
-            gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
-        }
-        return true;
-
-    }
 
     @Override
     public IPage<GameBackPolicyVO> policyList(GameBackPolicyListDTO dto) {

+ 7 - 5
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineOrderLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
 import com.zanxiang.game.back.serve.oceanengine.OceanengineCallbackException;
@@ -28,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Objects;
 
 @Slf4j
 @Service
@@ -51,7 +53,7 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
         if (mustBack) {
             doBack = true;
         } else {
-            if (orderLog.getOrderStatus() != 2) {
+            if (!Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue())) {
                 // 头条只要回传支付订单
                 return false;
             }
@@ -66,7 +68,7 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
                                     .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
                                     .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
                                     .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
-                                    .eq(GameOceanengineOrderLog::getOrderStatus, 2)
+                                    .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
                                     .eq(GameOceanengineOrderLog::getOpenId, orderLog.getOpenId())
                                     .last("limit 1")
                             ) < 1;
@@ -76,7 +78,7 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
                                             .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
                                             .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
                                             .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
-                                            .eq(GameOceanengineOrderLog::getOrderStatus, 2)
+                                            .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
                                             .orderByDesc(GameOceanengineOrderLog::getCreateTime)
                                             .last("limit " + backUnit)
                                     ).stream().filter(log -> log.getOrderStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()
@@ -113,9 +115,9 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
 
     @Override
     public boolean oceanengineOrderReport(List<Long> ids) {
-        baseMapper.selectBatchIds(ids).stream()
+        listByIds(ids).stream()
                 .filter(item -> !item.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(oceanengineOrderLog -> callback(oceanengineOrderLog, true));
+                .forEach(orderLog -> callback(orderLog, true));
         return true;
     }
 

+ 138 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java

@@ -0,0 +1,138 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
+import com.zanxiang.game.back.serve.dao.mapper.GameTencentMiniGameBackLogMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
+import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
+import com.zanxiang.module.util.DateUtil;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTencentMiniGameBackLogMapper, GameTencentMiniGameBackLog>
+        implements IGameTencentMiniGameBackLogService {
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public BackStatusEnum userBack(GameTencentMiniGameUser userLog) {
+        GameTencentMiniGameBackLog backLog = GameTencentMiniGameBackLog.builder()
+                .gameId(userLog.getGameId())
+                .adAccountId(userLog.getAdAccountId())
+                .clickId(userLog.getClickId())
+                .actionTime(userLog.getRegisterTime())
+                .wechatOpenid(userLog.getWechatOpenid())
+                .wechatAppId(userLog.getWechatAppId())
+                .actionType(ActionTypeEnum.REGISTER.getActionType())
+                .createTime(LocalDateTime.now())
+                .build();
+        callback(backLog);
+        save(backLog);
+        return BackStatusEnum.getByValue(backLog.getBackStatus());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public BackStatusEnum orderBack(GameTencentMiniGameOrder orderLog) {
+        String actionType = orderLog.getOrderStatus().equals(OrderStatusEnum.SUCCESS_PAY.getValue()) ?
+                ActionTypeEnum.PURCHASE.getActionType() : ActionTypeEnum.COMPLETE_ORDER.getActionType();
+        GameTencentMiniGameBackLog backLog = GameTencentMiniGameBackLog.builder()
+                .gameId(orderLog.getGameId())
+                .adAccountId(orderLog.getAdAccountId())
+                .clickId(orderLog.getClickId())
+                .actionTime(orderLog.getOrderStatus().equals(OrderStatusEnum.SUCCESS_PAY.getValue()) ? orderLog.getPayTime() : orderLog.getRechargeTime())
+                .wechatOpenid(orderLog.getWechatOpenid())
+                .wechatAppId(orderLog.getWechatAppId())
+                .actionType(actionType)
+                .amount(orderLog.getRechargeMoney())
+                .orderId(orderLog.getOrderId())
+                .createTime(LocalDateTime.now())
+                .build();
+        callback(backLog);
+        save(backLog);
+        return BackStatusEnum.getByValue(backLog.getBackStatus());
+    }
+
+    private void callback(GameTencentMiniGameBackLog backLog) {
+        Map<String, Object> actionParam = null;
+        if (backLog.getAmount() != null) {
+            actionParam = new HashMap<>(2);
+            actionParam.put("value", backLog.getAmount());
+        }
+        TencentMiniGameBackRequest request = TencentMiniGameBackRequest.builder()
+                .actions(Collections.singletonList(TencentMiniGameBackRequest.Action.builder()
+                        .action_time(DateUtil.localDateTimeToSecond(backLog.getActionTime()))
+                        .user_id(UserActionRpcDTO.UserIdRpcDTO.builder().wechatAppId(backLog.getWechatAppId()).wechatOpenid(backLog.getWechatOpenid()).build())
+                        .trace(UserActionRpcDTO.TraceRpcDTO.builder().clickId(backLog.getClickId()).build())
+                        .account_id(backLog.getAdAccountId())
+                        .action_set_id(null)
+                        .action_type(backLog.getActionType())
+                        .action_param(actionParam)
+                        .build()))
+                .build();
+        try {
+            ResponseEntity<String> response = restTemplate.postForEntity("http://tracking.e.qq.com/conv", request, String.class);
+            if (response.getStatusCode().is2xxSuccessful()) {
+                backLog.setBackStatus(BackStatusEnum.SUCCESS.getBackStatus());
+                return;
+            }
+            backLog.setBackStatus(BackStatusEnum.FAILED.getBackStatus());
+            backLog.setErrMsg(response.getBody());
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            backLog.setBackStatus(BackStatusEnum.FAILED.getBackStatus());
+            backLog.setErrMsg(e.getMessage());
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @Builder
+    public static class TencentMiniGameBackRequest {
+
+        private List<Action> actions;
+
+        @Data
+        @NoArgsConstructor
+        @AllArgsConstructor
+        @Builder
+        public static class Action {
+
+            private Long action_time;
+
+            private UserActionRpcDTO.UserIdRpcDTO user_id;
+            private UserActionRpcDTO.TraceRpcDTO trace;
+
+            private Long account_id;
+
+            private Long action_set_id;
+
+            private String action_type;
+
+            private Map<String, Object> action_param;
+        }
+    }
+}

+ 121 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java

@@ -0,0 +1,121 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
+import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
+import com.zanxiang.game.back.serve.dao.mapper.GameTencentMiniGameOrderMapper;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameOrderDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameOrderVO;
+import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameOrderService;
+import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
+import com.zanxiang.module.util.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencentMiniGameOrderMapper, GameTencentMiniGameOrder>
+        implements IGameTencentMiniGameOrderService {
+
+    @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
+    private IUserActionSetRpc userActionSetRpc;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+    @Autowired
+    private IGameTencentMiniGameBackLogService gameTencentMiniGameBackLogService;
+    @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean orderBack(GameTencentMiniGameOrder orderLog, boolean mustBack) {
+        boolean doBack = false;
+        if (mustBack) {
+            doBack = true;
+        } else {
+            if (!Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue()) &&
+                    !Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue())) {
+                // 只要回传 下单、支付行为
+                return false;
+            }
+        }
+        if (orderLog.getBackPolicyId() == null) {
+            // 没有回传策略,则直接全量回传
+            doBack = true;
+        } else {
+            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
+            doBack = BackPolicyUtil.backOrder(gameBackPolicy, orderLog.getRechargeMoney(),
+                    () -> count(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")
+                    ) < 1, backUnit -> Long.valueOf(count(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())
+                            .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
+                            .last("limit " + backUnit)
+                    )).intValue());
+            orderLog.setRechargeMoney(BackPolicyUtil.lowRechargeLevel(orderLog.getRechargeMoney(), gameBackPolicy.getLevelDown()));
+        }
+        if (doBack) {
+            BackStatusEnum backStatus = gameTencentMiniGameBackLogService.orderBack(orderLog);
+            update(new LambdaUpdateWrapper<GameTencentMiniGameOrder>()
+                    .set(GameTencentMiniGameOrder::getBackStatus, backStatus.getBackStatus())
+                    .eq(GameTencentMiniGameOrder::getId, orderLog.getId())
+            );
+            return true;
+        }
+        return false;
+    }
+
+
+    @Override
+    public IPage<GameTencentMiniGameOrderVO> listOfPage(GameTencentMiniGameOrderDTO dto) {
+        return page(dto.toPage(), new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                .eq(StringUtils.isNotBlank(dto.getAgentKey()), GameTencentMiniGameOrder::getAgentKey, dto.getAgentKey())
+                .eq(null != dto.getGameId(), GameTencentMiniGameOrder::getGameId, dto.getGameId())
+                .eq(null != dto.getAdAccountId(), GameTencentMiniGameOrder::getAdAccountId, dto.getAdAccountId())
+                .eq(StringUtils.isNotBlank(dto.getWechatAppId()), GameTencentMiniGameOrder::getWechatAppId, dto.getWechatAppId())
+                .eq(StringUtils.isNotBlank(dto.getWechatOpenid()), GameTencentMiniGameOrder::getWechatOpenid, dto.getWechatOpenid())
+                .eq(StringUtils.isNotBlank(dto.getOrderId()), GameTencentMiniGameOrder::getOrderId, dto.getOrderId())
+                .eq(null != dto.getBackStatus(), GameTencentMiniGameOrder::getBackStatus, dto.getBackStatus())
+                .eq(null != dto.getOrderStatus(), GameTencentMiniGameOrder::getOrderStatus, dto.getOrderStatus())
+                .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
+        ).convert(this::toVOSimple);
+    }
+
+    @Override
+    public boolean doReport(List<Long> orderLogIds) {
+        listByIds(orderLogIds).stream()
+                .filter(item -> !item.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus()))
+                .forEach(orderLog -> gameTencentMiniGameBackLogService.orderBack(orderLog));
+        return true;
+    }
+
+    private GameTencentMiniGameOrderVO toVOSimple(GameTencentMiniGameOrder orderLog) {
+        return BeanUtil.copy(orderLog, GameTencentMiniGameOrderVO.class);
+    }
+}

+ 92 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameUserServiceImpl.java

@@ -0,0 +1,92 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
+import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.game.back.serve.dao.mapper.GameTencentMiniGameUserMapper;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameUserDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameUserVO;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService;
+import com.zanxiang.module.util.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class GameTencentMiniGameUserServiceImpl extends ServiceImpl<GameTencentMiniGameUserMapper, GameTencentMiniGameUser>
+        implements IGameTencentMiniGameUserService {
+
+    @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
+    private IUserActionSetRpc userActionSetRpc;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+    @Autowired
+    private IGameTencentMiniGameBackLogService gameTencentMiniGameBackLogService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean userBack(GameTencentMiniGameUser userLog, boolean mustBack) {
+        BackStatusEnum backStatus = doCallback(userLog, mustBack);
+        return update(new LambdaUpdateWrapper<GameTencentMiniGameUser>()
+                .set(GameTencentMiniGameUser::getBackStatus, backStatus.getBackStatus())
+                .eq(GameTencentMiniGameUser::getId, userLog.getId())
+        );
+    }
+
+
+    @Override
+    public IPage<GameTencentMiniGameUserVO> listOfPage(GameTencentMiniGameUserDTO dto) {
+        return page(dto.toPage(), new LambdaQueryWrapper<GameTencentMiniGameUser>()
+                .eq(StringUtils.isNotBlank(dto.getAgentKey()), GameTencentMiniGameUser::getAgentKey, dto.getAgentKey())
+                .eq(null != dto.getGameId(), GameTencentMiniGameUser::getGameId, dto.getGameId())
+                .eq(null != dto.getAdAccountId(), GameTencentMiniGameUser::getAdAccountId, dto.getAdAccountId())
+                .eq(StringUtils.isNotBlank(dto.getWechatAppId()), GameTencentMiniGameUser::getWechatAppId, dto.getWechatAppId())
+                .eq(StringUtils.isNotBlank(dto.getWechatOpenid()), GameTencentMiniGameUser::getWechatOpenid, dto.getWechatOpenid())
+                .eq(null != dto.getBackStatus(), GameTencentMiniGameUser::getBackStatus, dto.getBackStatus())
+                .orderByDesc(GameTencentMiniGameUser::getCreateTime)
+        ).convert(this::toVOSimple);
+    }
+
+    @Override
+    public boolean doReport(List<Long> userLogIds) {
+        listByIds(userLogIds).forEach(userLog -> doCallback(userLog, true));
+        return true;
+    }
+
+
+    private BackStatusEnum doCallback(GameTencentMiniGameUser userLog, boolean mustBack) {
+        boolean isBack = mustBack ? false : gameTencentMiniGameBackLogService.count(new LambdaQueryWrapper<GameTencentMiniGameBackLog>()
+                .eq(GameTencentMiniGameBackLog::getGameId, userLog.getGameId())
+                .eq(GameTencentMiniGameBackLog::getWechatAppId, userLog.getWechatAppId())
+                .eq(GameTencentMiniGameBackLog::getWechatOpenid, userLog.getWechatOpenid())
+                .eq(GameTencentMiniGameBackLog::getAdAccountId, userLog.getAdAccountId())
+                .eq(GameTencentMiniGameBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+        ) > 0;
+        if (isBack) {
+            return BackStatusEnum.NO;
+        }
+        return gameTencentMiniGameBackLogService.userBack(userLog);
+    }
+
+    private GameTencentMiniGameUserVO toVOSimple(GameTencentMiniGameUser userLog) {
+        if (userLog == null) {
+            return null;
+        }
+        return BeanUtil.copy(userLog, GameTencentMiniGameUserVO.class);
+    }
+}

+ 101 - 64
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java

@@ -1,7 +1,7 @@
 package com.zanxiang.game.back.serve.service.impl;
 
-import cn.hutool.http.HttpStatus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
 import com.zanxiang.advertising.tencent.base.pojo.dto.DataReportOfAppIdRpcDTO;
@@ -9,9 +9,9 @@ import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
 import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
 import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
-import com.zanxiang.erp.security.util.SecurityUtil;
-import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentOrderDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentOrderMapper;
@@ -22,6 +22,7 @@ import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
@@ -29,14 +30,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
-
-import static com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum.PURCHASE;
+import java.util.Objects;
 
 /**
  * <p>
@@ -55,11 +55,55 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
     private ISysUserRpc sysUserRpc;
     @Autowired
     private IGameTencentBackLogService gameTencentBackLogService;
-    /**
-     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
-     */
-    private static final Integer COMPLETE_ORDER = 0;
-    private static final Integer PURCHASE = 2;
+    @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean orderBack(GameTencentOrder orderLog, boolean mustBack) {
+        boolean doBack = false;
+        if (mustBack) {
+            doBack = true;
+        } else {
+            if (!Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue()) &&
+                    !Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue())) {
+                // 只要回传 下单、支付行为
+                return false;
+            }
+        }
+        if (orderLog.getBackPolicyId() == null) {
+            // 没有回传策略,则直接全量回传
+            doBack = true;
+        } else {
+            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
+            doBack = BackPolicyUtil.backOrder(gameBackPolicy, orderLog.getRechargeMoney(),
+                    () -> count(new LambdaQueryWrapper<GameTencentOrder>()
+                            .eq(GameTencentOrder::getGameId, orderLog.getGameId())
+                            .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
+                            .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
+                            .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                            .eq(GameTencentOrder::getWechatOpenid, orderLog.getWechatOpenid())
+                            .last("limit 1")
+                    ) < 1, backUnit -> Long.valueOf(count(new LambdaQueryWrapper<GameTencentOrder>()
+                            .eq(GameTencentOrder::getGameId, orderLog.getGameId())
+                            .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
+                            .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
+                            .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                            .orderByDesc(GameTencentOrder::getCreateTime)
+                            .last("limit " + backUnit)
+                    )).intValue());
+            orderLog.setRechargeMoney(BackPolicyUtil.lowRechargeLevel(orderLog.getRechargeMoney(), gameBackPolicy.getLevelDown()));
+        }
+        if (doBack) {
+            BackStatusEnum backStatus = doCallback(orderLog);
+            update(new LambdaUpdateWrapper<GameTencentOrder>()
+                    .set(GameTencentOrder::getIsBack, backStatus.getBackStatus())
+                    .eq(GameTencentOrder::getId, orderLog.getId())
+            );
+            return true;
+        }
+        return false;
+    }
 
 
     @Override
@@ -83,61 +127,54 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
 
     @Override
     public boolean tencentOrderReport(List<Long> ids) {
-        baseMapper.selectBatchIds(ids).stream()
+        listByIds(ids).stream()
                 .filter(item -> !item.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(gameTencentOrder -> {
-                    String actionType = gameTencentOrder.getOrderStatus().equals(PURCHASE) ?
-                            ActionTypeEnum.PURCHASE.getActionType() : ActionTypeEnum.COMPLETE_ORDER.getActionType();
-                    Map<String, Object> actionParam = new HashMap<>(2);
-                    actionParam.put("claim_type", 0);
-                    actionParam.put("value", gameTencentOrder.getRechargeMoney());
-                    DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
-                            .appId(gameTencentOrder.getWechatAppId())
-                            .userActionSetId(gameTencentOrder.getUserActionSetId())
-                            .action(UserActionRpcDTO.builder()
-                                    .actionTime(gameTencentOrder.getOrderStatus().equals(PURCHASE) ? gameTencentOrder.getPayTime() : gameTencentOrder.getRechargeTime())
-                                    .actionType(actionType)
-                                    .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
-                                            .wechatAppId(gameTencentOrder.getWechatAppId())
-                                            .wechatOpenid(gameTencentOrder.getWechatOpenid())
-                                            .build())
-                                    .actionParam(actionParam)
-                                    .build())
-                            .build();
-
-                    GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
-                            .gameId(gameTencentOrder.getGameId())
-                            .adAccountId(gameTencentOrder.getAdAccountId())
-                            .actionTime(gameTencentOrder.getOrderStatus().equals(PURCHASE) ? gameTencentOrder.getPayTime() : gameTencentOrder.getRechargeTime())
-                            .createTime(LocalDateTime.now())
-                            .actionType(actionType)
-                            .orderId(gameTencentOrder.getOrderId())
-                            .wechatAppId(gameTencentOrder.getWechatAppId())
-                            .wechatOpenid(gameTencentOrder.getWechatOpenid())
-                            .userActionSetId(gameTencentOrder.getUserActionSetId())
-                            .actionParam(actionParam.toString())
-                            .build();
-                    gameTencentOrder.setUpdateTime(LocalDateTime.now());
-                    gameTencentOrder.setUpdateBy(SecurityUtil.getUserId());
-
-                    ResultVO<Boolean> result = userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-                    if (result.getCode() == HttpStatus.HTTP_OK) {
-                        gameTencentOrder.setIsBack(BackStatusEnum.SUCCESS.getBackStatus());
-                        gameTencentOrder.setBackLog("回传成功");
-                        updateById(gameTencentOrder);
+                .forEach(this::doCallback);
+        return true;
+    }
 
-                        gameTencentBackLog.setBackLog("回传成功");
-                        gameTencentBackLogService.save(gameTencentBackLog);
-                    } else {
-                        log.error("回传腾讯订单失败,失败原因:{}", result.getMsg());
-                        gameTencentOrder.setBackLog(result.getMsg());
-                        gameTencentOrder.setIsBack(BackStatusEnum.FAILED.getBackStatus());
-                        updateById(gameTencentOrder);
+    private BackStatusEnum doCallback(GameTencentOrder orderLog) {
+        String actionType = orderLog.getOrderStatus().equals(OrderStatusEnum.SUCCESS_PAY.getValue()) ?
+                ActionTypeEnum.PURCHASE.getActionType() : ActionTypeEnum.COMPLETE_ORDER.getActionType();
+        Map<String, Object> actionParam = new HashMap<>(2);
+        actionParam.put("claim_type", 0);
+        actionParam.put("value", orderLog.getRechargeMoney());
+        DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
+                .appId(orderLog.getWechatAppId())
+                .userActionSetId(orderLog.getUserActionSetId())
+                .action(UserActionRpcDTO.builder()
+                        .actionTime(orderLog.getOrderStatus().equals(OrderStatusEnum.SUCCESS_PAY.getValue()) ? orderLog.getPayTime() : orderLog.getRechargeTime())
+                        .actionType(actionType)
+                        .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
+                                .wechatAppId(orderLog.getWechatAppId())
+                                .wechatOpenid(orderLog.getWechatOpenid())
+                                .build())
+                        .actionParam(actionParam)
+                        .build())
+                .build();
 
-                        gameTencentBackLog.setBackLog(result.getMsg());
-                        gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
-                    }
-                });
-        return true;
+        GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
+                .gameId(orderLog.getGameId())
+                .adAccountId(orderLog.getAdAccountId())
+                .actionTime(orderLog.getOrderStatus().equals(OrderStatusEnum.SUCCESS_PAY.getValue()) ? orderLog.getPayTime() : orderLog.getRechargeTime())
+                .createTime(LocalDateTime.now())
+                .actionType(actionType)
+                .orderId(orderLog.getOrderId())
+                .wechatAppId(orderLog.getWechatAppId())
+                .wechatOpenid(orderLog.getWechatOpenid())
+                .userActionSetId(orderLog.getUserActionSetId())
+                .actionParam(actionParam.toString())
+                .build();
+        ResultVO<Boolean> result = userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
+        BackStatusEnum backStatus = BackStatusEnum.FAILED;
+        if (result.isSuccess()) {
+            backStatus = BackStatusEnum.SUCCESS;
+            gameTencentBackLog.setBackLog("回传成功");
+        } else {
+            log.error("回传腾讯订单失败,失败原因:{}", result.getMsg());
+            gameTencentBackLog.setBackLog(result.getMsg());
+        }
+        gameTencentBackLogService.save(gameTencentBackLog);
+        return backStatus;
     }
 }

+ 66 - 50
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentUserServiceImpl.java

@@ -1,7 +1,7 @@
 package com.zanxiang.game.back.serve.service.impl;
 
-import cn.hutool.http.HttpStatus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
@@ -10,7 +10,6 @@ import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
 import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
 import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
-import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentUserMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentUserDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
@@ -27,6 +26,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.HashMap;
@@ -44,12 +44,25 @@ import java.util.Map;
 @Slf4j
 @Service
 public class GameTencentUserServiceImpl extends ServiceImpl<GameTencentUserMapper, GameTencentUser> implements IGameTencentUserService {
+
     @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
     private IUserActionSetRpc userActionSetRpc;
     @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
     private ISysUserRpc sysUserRpc;
     @Autowired
     private IGameTencentBackLogService gameTencentBackLogService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean userBack(GameTencentUser userLog, boolean mustBack) {
+        BackStatusEnum backStatus = doCallback(userLog, mustBack);
+        return update(new LambdaUpdateWrapper<GameTencentUser>()
+                .set(GameTencentUser::getIsBack, backStatus.getBackStatus())
+                .eq(GameTencentUser::getId, userLog.getId())
+        );
+    }
+
+
     @Override
     public IPage<GameTencentUserVO> tencentUserLogList(GameTencentUserDTO dto) {
         return page(dto.toPage(), new LambdaQueryWrapper<GameTencentUser>()
@@ -69,58 +82,61 @@ public class GameTencentUserServiceImpl extends ServiceImpl<GameTencentUserMappe
 
     @Override
     public boolean tencentUserReport(List<Long> ids) {
-        baseMapper.selectBatchIds(ids).stream()
+        listByIds(ids).stream()
                 .filter(item -> !item.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(gameTencentUser -> {
-                    String actionType = ActionTypeEnum.REGISTER.getActionType();
-                    Map<String, Object> actionParam = new HashMap<>(2);
-                    actionParam.put("claim_type", 0);
-                    DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
-                            .appId(gameTencentUser.getWechatAppId())
-                            .userActionSetId(gameTencentUser.getUserActionSetId())
-                            .action(UserActionRpcDTO.builder()
-                                    .actionTime(gameTencentUser.getRegisterTime())
-                                    .actionType(actionType)
-                                    .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
-                                            .wechatAppId(gameTencentUser.getWechatAppId())
-                                            .wechatOpenid(gameTencentUser.getWechatOpenid())
-                                            .build())
-                                    .actionParam(actionParam)
-                                    .build())
-                            .build();
+                .forEach(gameTencentUser -> doCallback(gameTencentUser, true));
+        return true;
+    }
 
-                    GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
-                            .gameId(gameTencentUser.getGameId())
-                            .adAccountId(gameTencentUser.getAdAccountId())
-                            .actionTime(gameTencentUser.getRegisterTime())
-                            .createTime(LocalDateTime.now())
-                            .actionType(actionType)
-                            .wechatAppId(gameTencentUser.getWechatAppId())
-                            .wechatOpenid(gameTencentUser.getWechatOpenid())
-                            .userActionSetId(gameTencentUser.getUserActionSetId())
-                            .actionParam(actionParam.toString())
-                            .build();
-                    gameTencentUser.setUpdateTime(LocalDateTime.now());
-                    gameTencentUser.setUpdateBy(SecurityUtil.getUserId());
-                    ResultVO<Boolean> result = userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-                    if (result.getCode() == HttpStatus.HTTP_OK) {
-                        gameTencentUser.setIsBack(BackStatusEnum.SUCCESS.getBackStatus());
-                        gameTencentUser.setBackLog("回传成功");
-                        updateById(gameTencentUser);
 
-                        gameTencentBackLog.setBackLog("回传成功");
-                        gameTencentBackLogService.save(gameTencentBackLog);
-                    } else {
-                        log.error("回传腾讯用户失败,失败原因:{}", result.getMsg());
-                        gameTencentUser.setBackLog(result.getMsg());
-                        gameTencentUser.setIsBack(BackStatusEnum.FAILED.getBackStatus());
-                        updateById(gameTencentUser);
+    private BackStatusEnum doCallback(GameTencentUser userLog, boolean mustBack) {
+        boolean isBack = mustBack ? false : gameTencentBackLogService.count(new LambdaQueryWrapper<GameTencentBackLog>()
+                .eq(GameTencentBackLog::getGameId, userLog.getGameId())
+                .eq(GameTencentBackLog::getWechatAppId, userLog.getWechatAppId())
+                .eq(GameTencentBackLog::getWechatOpenid, userLog.getWechatOpenid())
+                .eq(GameTencentBackLog::getAdAccountId, userLog.getAdAccountId())
+                .eq(GameTencentBackLog::getBackLog, "回传成功")
+        ) > 0;
+        if (isBack) {
+            return BackStatusEnum.NO;
+        }
 
-                        gameTencentBackLog.setBackLog(result.getMsg());
-                        gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
-                    }
+        Map<String, Object> actionParam = new HashMap<>(2);
+        actionParam.put("claim_type", 0);
+        DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
+                .appId(userLog.getWechatAppId())
+                .userActionSetId(userLog.getUserActionSetId())
+                .action(UserActionRpcDTO.builder()
+                        .actionTime(userLog.getRegisterTime())
+                        .actionType(ActionTypeEnum.REGISTER.getActionType())
+                        .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
+                                .wechatAppId(userLog.getWechatAppId())
+                                .wechatOpenid(userLog.getWechatOpenid())
+                                .build())
+                        .actionParam(actionParam)
+                        .build())
+                .build();
 
-                });
-        return true;
+        GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
+                .gameId(userLog.getGameId())
+                .adAccountId(userLog.getAdAccountId())
+                .actionTime(userLog.getRegisterTime())
+                .createTime(LocalDateTime.now())
+                .actionType(ActionTypeEnum.REGISTER.getActionType())
+                .wechatAppId(userLog.getWechatAppId())
+                .wechatOpenid(userLog.getWechatOpenid())
+                .userActionSetId(userLog.getUserActionSetId())
+                .actionParam(actionParam.toString())
+                .build();
+        ResultVO<Boolean> result = userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
+        BackStatusEnum backStatus = BackStatusEnum.FAILED;
+        if (result.isSuccess()) {
+            backStatus = BackStatusEnum.SUCCESS;
+            gameTencentBackLog.setBackLog("回传成功");
+        } else {
+            gameTencentBackLog.setBackLog(result.getMsg());
+        }
+        gameTencentBackLogService.save(gameTencentBackLog);
+        return backStatus;
     }
 }

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

@@ -3,13 +3,13 @@ package com.zanxiang.game.module.sdk.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zanxiang.game.back.base.ServerInfo;
-import com.zanxiang.game.back.base.oceanengine.pojo.dto.AccountReportRpcDTO;
-import com.zanxiang.game.back.base.oceanengine.pojo.dto.OrderReportRpcDTO;
-import com.zanxiang.game.back.base.oceanengine.pojo.dto.UserActiveReportRpcDTO;
-import com.zanxiang.game.back.base.oceanengine.rpc.IOceanEngineDataReportRpc;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentOrderDTO;
-import com.zanxiang.game.back.base.tencent.pojo.dto.TencentUserDTO;
-import com.zanxiang.game.back.base.tencent.rpc.IGameBackTencentRpc;
+import com.zanxiang.game.back.base.pojo.dto.TtAccountRpcDTO;
+import com.zanxiang.game.back.base.pojo.dto.TtOrderRpcDTO;
+import com.zanxiang.game.back.base.pojo.dto.TtUserActiveRpcDTO;
+import com.zanxiang.game.back.base.rpc.ITtMiniGameBackRpc;
+import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
+import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
+import com.zanxiang.game.back.base.rpc.ITencentUserActionBackRpc;
 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;
@@ -33,10 +33,10 @@ import java.util.Objects;
 public class CallBackServiceImpl implements ICallBackService {
 
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
-    private IGameBackTencentRpc gameBackTencentRpc;
+    private ITencentUserActionBackRpc gameBackTencentRpc;
 
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
-    private IOceanEngineDataReportRpc wechatMiniGameDataReportRpc;
+    private ITtMiniGameBackRpc wechatMiniGameDataReportRpc;
 
     @Autowired
     private IAgentService agentService;
@@ -86,7 +86,7 @@ public class CallBackServiceImpl implements ICallBackService {
                 Game game = gameService.getById(user.getGameId());
                 //判断是微信小游戏
                 if (Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_WX_APPLET.getId())) {
-                    UserActiveReportRpcDTO activeReportRpcDTO = this.transform(user, agent, gameApplet, urlParamMap);
+                    TtUserActiveRpcDTO activeReportRpcDTO = this.transform(user, agent, gameApplet, urlParamMap);
                     log.error("用户注册 --> 头条回传提交, activeReportRpcDTO : {}", JsonUtil.toString(activeReportRpcDTO));
                     wechatMiniGameDataReportRpc.userActiveReport(activeReportRpcDTO);
                 }
@@ -126,9 +126,9 @@ public class CallBackServiceImpl implements ICallBackService {
                 //判断游戏类型
                 Game game = gameService.getById(platformOrderDTO.getGameId());
                 if (Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_WX_APPLET.getId())) {
-                    OrderReportRpcDTO orderReportRpcDTO = this.transform(platformOrderDTO, user.getOpenId(), agent, gameApplet);
-                    log.error("用户下单 --> 头条回传提交, orderReportRpcDTO : {}", JsonUtil.toString(orderReportRpcDTO));
-                    wechatMiniGameDataReportRpc.orderReport(orderReportRpcDTO);
+                    TtOrderRpcDTO ttOrderRpcDTO = this.transform(platformOrderDTO, user.getOpenId(), agent, gameApplet);
+                    log.error("用户下单 --> 头条回传提交, orderReportRpcDTO : {}", JsonUtil.toString(ttOrderRpcDTO));
+                    wechatMiniGameDataReportRpc.orderReport(ttOrderRpcDTO);
                 }
             }
         } catch (Exception e) {
@@ -148,17 +148,17 @@ public class CallBackServiceImpl implements ICallBackService {
                 .build();
     }
 
-    private UserActiveReportRpcDTO transform(User user, Agent agent, GameApplet gameApplet, Map<String, String> urlParamMap) {
-        AccountReportRpcDTO accountReportRpcDTO = AccountReportRpcDTO.builder()
+    private TtUserActiveRpcDTO transform(User user, Agent agent, GameApplet gameApplet, Map<String, String> urlParamMap) {
+        TtAccountRpcDTO ttAccountRpcDTO = TtAccountRpcDTO.builder()
                 .accountId(agent.getAccountId())
                 .reportToken(agent.getReportToken())
                 .reportUrl(agent.getReportUrl())
                 .build();
-        return UserActiveReportRpcDTO.builder()
+        return TtUserActiveRpcDTO.builder()
                 .gameId(user.getGameId())
                 .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
                 .wechatOpenId(user.getOpenId())
-                .accountReport(accountReportRpcDTO)
+                .accountReport(ttAccountRpcDTO)
                 .agentKey(agent.getAgentKey())
                 .activeTime(user.getCreateTime())
                 .clueToken(urlParamMap.get("clue_token"))
@@ -187,15 +187,15 @@ public class CallBackServiceImpl implements ICallBackService {
                 .build();
     }
 
-    private OrderReportRpcDTO transform(PlatformOrderDTO platformOrderDTO, String openId, Agent agent, GameApplet gameApplet) {
-        AccountReportRpcDTO accountReportRpcDTO = AccountReportRpcDTO.builder()
+    private TtOrderRpcDTO transform(PlatformOrderDTO platformOrderDTO, String openId, Agent agent, GameApplet gameApplet) {
+        TtAccountRpcDTO ttAccountRpcDTO = TtAccountRpcDTO.builder()
                 .accountId(agent.getAccountId())
                 .reportToken(agent.getReportToken())
                 .reportUrl(agent.getReportUrl())
                 .build();
-        return OrderReportRpcDTO.builder()
+        return TtOrderRpcDTO.builder()
                 .gameId(platformOrderDTO.getGameId())
-                .accountReport(accountReportRpcDTO)
+                .accountReport(ttAccountRpcDTO)
                 .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
                 .wechatOpenId(openId)
                 .orderId(platformOrderDTO.getOrderId())