Explorar o código

Merge remote-tracking branch 'origin/package' into package-lingfeng

bilingfeng hai 9 meses
pai
achega
302ac5e7e5
Modificáronse 41 ficheiros con 2329 adicións e 20 borrados
  1. 4 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/api/OceanengineCallbackApi.java
  2. 8 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/api/TencentCallbackApi.java
  3. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppBackLogMapper.java
  4. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppOrderLogMapper.java
  5. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppRoleRegisterLogMapper.java
  6. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppUserLogMapper.java
  7. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppBackLogMapper.java
  8. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppOrderMapper.java
  9. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppOrderSplitLogMapper.java
  10. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppRoleRegisterMapper.java
  11. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppUserMapper.java
  12. 88 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppBackLog.java
  13. 132 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppOrderLog.java
  14. 98 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppRoleRegisterLog.java
  15. 88 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppUserLog.java
  16. 109 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppBackLog.java
  17. 159 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppOrder.java
  18. 82 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppOrderSplitLog.java
  19. 115 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppRoleRegister.java
  20. 115 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppUser.java
  21. 186 13
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentAppBackRpcImpl.java
  22. 179 5
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtAppBackRpcImpl.java
  23. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppBackLogService.java
  24. 15 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppOrderLogService.java
  25. 9 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppRoleRegisterLogService.java
  26. 9 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppUserLogService.java
  27. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentAppBackLogService.java
  28. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentAppOrderService.java
  29. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentAppOrderSplitLogService.java
  30. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentAppRoleRegisterService.java
  31. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentAppUserService.java
  32. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppBackLogServiceImpl.java
  33. 374 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppOrderLogServiceImpl.java
  34. 108 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppRoleRegisterLogServiceImpl.java
  35. 77 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppUserLogServiceImpl.java
  36. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppBackLogServiceImpl.java
  37. 21 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppCallbackServiceImpl.java
  38. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppOrderServiceImpl.java
  39. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppOrderSplitLogServiceImpl.java
  40. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppRoleRegisterServiceImpl.java
  41. 178 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppUserServiceImpl.java

+ 4 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/api/OceanengineCallbackApi.java

@@ -21,7 +21,10 @@ public class OceanengineCallbackApi {
     @Autowired
     private IGameOceanengineAppCallbackService gameOceanengineAppCallbackService;
 
-    // https://xxxx.xxx.com?promotionid=__PROMOTION_ID__&mid1=__MID1__&idfa=__IDFA__&mac=__MAC__&os=__OS__&TIMESTAMP=__TS__&callback=__CALLBACK_PARAM__
+    // https://api.zanxiangwl.com/gameBack/api/oceanengineCallback/callback?promotionid=__PROMOTION_ID__&projectId=__PROJECT_ID__&mid1=__MID1__&mid2=__MID2__&mid3=__MID3__&mid4=__MID4__&mid5=__MID5__&mid6=__MID6__
+    // &aid=__AID__&cid=__CID__&campaignId=__CAMPAIGN_ID__&ctype=__CTYPE__&advertiserId=__ADVERTISER_ID__&csite=__CSITE__&convertId=__CONVERT_ID__&requestId=__REQUEST_ID__&trackId=__TRACK_ID__&sl=__SL__
+    // &imei=__imei__&idfa=__IDFA__&idfaMd5=__IDFA_MD5__&androidid=__ANDROIDID__&oaid=__OAID__&oaidMd5=__OAID_MD5__&os=__OS__&mac=__MAC__&mac1=MAC1&ipv4=__IPV4__&ipv6=__ipv6__&ip=__IP__
+    // &ua=__UA__&geo=__GEO__&ts=__TS__&callbackParam=__CALLBACK_PARAM__&callbackUrl=__CALLBACK_URL__&model=__MODEL__&unionSite=__UNION_SITE__&caid=__CAID__&productid=__PRODUCTID__&outerid=__OUTERID__
     @GetMapping("/callback")
     public ResultVO<Boolean> callback(GameOceanengineAppCallbackDTO dto) {
         log.info("头条监测链接:{}", JsonUtil.toString(dto));

+ 8 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/api/TencentCallbackApi.java

@@ -20,7 +20,14 @@ public class TencentCallbackApi {
     @Autowired
     private IGameTencentAppCallbackService gameTencentAppCallbackService;
 
-    // https://www.example.com/click/?click_id=__CLICK_ID__&click_time=__CLICK_TIME__&adgroup_id=__ADGROUP_ID__&ad_platform_type=__AD_PLATFORM_TYPE__&ad_type=__AD_TYPE__&account_id=__ACCOUNT_ID__&agency_id=__AGENCY_ID__&click_sku_id=__CLICK_SKU_ID__&billing_event=__BILLING_EVENT__&device_os_type=__DEVICE_OS_TYPE__&process_time=__PROCESS_TIME__&promoted_object_type=__PROMOTED_OBJECT_TYPE__&request_id=__REQUEST_ID__&callback=__CALLBACK__&adgroup_name=__ADGROUP_NAME__&dynamic_creative_id=__DYNAMIC_CREATIVE_ID__&dynamic_creative_name=__DYNAMIC_CREATIVE_NAME__&creative_components_info=__CREATIVE_COMPONENTS_INFO__&element_info=__ELEMENT_INFO__&marketing_goal=__MARKETING_GOAL__&marketing_sub_goal=__MARKETING_SUB_GOAL__&marketing_target_id=__MARKETING_TARGET_ID__&marketing_carrier_id=__MARKETING_CARRIER_ID__&marketing_sub_carrier_id=__MARKETING_SUB_CARRIER_ID__&marketing_asset_id=__MARKETING_ASSET_ID__&material_package_id=__MATERIAL_PACKAGE_ID__&hash_android_id=__HASH_ANDROID_ID__&hash_oaid=__HASH_OAID__&muid=__MUID__
+    // https://api.zanxiangwl.com/gameBack/api/tencentCallback/callback
+    // ?click_id=__CLICK_ID__&click_time=__CLICK_TIME__&impressionTime=__IMPRESSION_TIME__&adgroup_id=__ADGROUP_ID__
+    // &dynamicCreativeId=__DYNAMIC_CREATIVE_ID__&marketing_asset_id=__MARKETING_ASSET_ID__&material_package_id=__MATERIAL_PACKAGE_ID__
+    // &ad_platform_type=__AD_PLATFORM_TYPE__&account_id=__ACCOUNT_ID__&agency_id=__AGENCY_ID__&click_sku_id=__CLICK_SKU_ID__&device_os_type=__DEVICE_OS_TYPE__
+    // &process_time=__PROCESS_TIME__&promotedObjectId=__PROMOTED_OBJECT_ID__&request_id=__REQUEST_ID__&impressionId=__IMPRESSION_ID__&muid=__MUID__
+    // &hash_android_id=__HASH_ANDROID_ID__&ip=__IP__&userAgent=__USER_AGENT__&callback=__CALLBACK__&encryptedPositionId=__ENCRYPTED_POSITION_ID__
+    // &ipv6=__IPV6__&hash_oaid=__HASH_OAID__&&caid=__QAID_CAA__&model=__MODEL__&ipMd5=__IP_MD5__&ipv6Md5=__IPV6_MD5__
+    // &channelPackageId=__CHANNEL_PACKAGE_ID__&deviceOsVersion=__DEVICE_OS_VERSION__
     @GetMapping("/callback")
     public ResultVO<Boolean> callback(GameTencentAppCallbackDTO dto) {
         log.info("腾讯监测链接:{}", JsonUtil.toString(dto));

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppBackLogMapper.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.GameOceanengineAppBackLog;
+
+public interface GameOceanengineAppBackLogMapper extends BaseMapper<GameOceanengineAppBackLog> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppOrderLogMapper.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.GameOceanengineAppOrderLog;
+
+public interface GameOceanengineAppOrderLogMapper extends BaseMapper<GameOceanengineAppOrderLog> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppRoleRegisterLogMapper.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.GameOceanengineAppRoleRegisterLog;
+
+public interface GameOceanengineAppRoleRegisterLogMapper extends BaseMapper<GameOceanengineAppRoleRegisterLog> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameOceanengineAppUserLogMapper.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.GameOceanengineAppUserLog;
+
+public interface GameOceanengineAppUserLogMapper extends BaseMapper<GameOceanengineAppUserLog> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppBackLogMapper.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.GameTencentAppBackLog;
+
+public interface GameTencentAppBackLogMapper extends BaseMapper<GameTencentAppBackLog> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppOrderMapper.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.GameTencentAppOrder;
+
+public interface GameTencentAppOrderMapper extends BaseMapper<GameTencentAppOrder> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppOrderSplitLogMapper.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.GameTencentAppOrderSplitLog;
+
+public interface GameTencentAppOrderSplitLogMapper extends BaseMapper<GameTencentAppOrderSplitLog> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppRoleRegisterMapper.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.GameTencentAppRoleRegister;
+
+public interface GameTencentAppRoleRegisterMapper extends BaseMapper<GameTencentAppRoleRegister> {
+}

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/dao/mapper/GameTencentAppUserMapper.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.GameTencentAppUser;
+
+public interface GameTencentAppUserMapper extends BaseMapper<GameTencentAppUser> {
+}

+ 88 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppBackLog.java

@@ -0,0 +1,88 @@
+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;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName("t_game_ocenaengine_app_back_log")
+public class GameOceanengineAppBackLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+    /**
+     * 游戏 id
+     */
+    private Long gameId;
+
+    private Long accountId;
+    /**
+     * 事件类型
+     */
+    private String eventType;
+    /**
+     * 触发回传的日志 id
+     */
+    private Long eventLogId;
+    /**
+     * 支付回传的支付金额
+     */
+    private Long payAmount;
+    /**
+     * 回传状态(0:成功、-1:失败)
+     */
+    private Integer backStatus;
+    /**
+     * 回传失败的错误日志
+     */
+    private String errMsg;
+    /**
+     * 回传时间
+     */
+    private LocalDateTime createTime;
+
+}

+ 132 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppOrderLog.java

@@ -0,0 +1,132 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameOceanengineAppOrderLog.TABLE_NAME)
+public class GameOceanengineAppOrderLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_oceanengine_app_order_log";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+
+    /**
+     * 游戏 id
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号_id
+     */
+    private Long accountId;
+
+    private Long backPolicyId;
+
+    /**
+     * 渠道标识
+     */
+    private String agentKey;
+
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+
+    /**
+     * 订单金额(分)
+     */
+    private Long amount;
+
+    /**
+     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
+     */
+    private Integer orderStatus;
+
+    /**
+     * 下单时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 支付时间
+     */
+    private LocalDateTime payTime;
+
+    private Integer backStatus;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime regTime;
+
+    private String roleId;
+
+    private String roleName;
+
+    /**
+     * 是否是首单
+     */
+    private Boolean isFirstOrder;
+
+    /**
+     * 回传金额
+     */
+    private Long backMoney;
+
+    /**
+     * 回传信息
+     */
+    private String backMsg;
+
+
+}

+ 98 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppRoleRegisterLog.java

@@ -0,0 +1,98 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameOceanengineAppRoleRegisterLog.TABLE_NAME)
+public class GameOceanengineAppRoleRegisterLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_oceanengine_app_role_register_log";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+
+    /**
+     * 游戏 id
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号_id
+     */
+    private Long accountId;
+
+    /**
+     * 渠道标识
+     */
+    private String agentKey;
+
+    /**
+     * 角色 id
+     */
+    private String roleId;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 创角时间
+     */
+    private LocalDateTime registerTime;
+
+    private Integer backStatus;
+
+    private LocalDateTime createTime;
+
+
+}

+ 88 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppUserLog.java

@@ -0,0 +1,88 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameOceanengineAppUserLog.TABLE_NAME)
+public class GameOceanengineAppUserLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_oceanengine_app_user_log";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+
+    /**
+     * 游戏 id
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号_id
+     */
+    private Long accountId;
+
+    /**
+     * 渠道标识
+     */
+    private String agentKey;
+
+    /**
+     * 激活/注册时间
+     */
+    private LocalDateTime activeTime;
+
+    private Integer backStatus;
+
+    private LocalDateTime createTime;
+
+
+}

+ 109 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppBackLog.java

@@ -0,0 +1,109 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 腾讯 APP回传日志表
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameTencentAppBackLog.TABLE_NAME)
+public class GameTencentAppBackLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_tencent_app_back_log";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    private Long adAccountId;
+
+    /**
+     * 数据源ID
+     */
+    private Long userActionSetId;
+
+    /**
+     * 行为发生时,客户端的时间点
+     */
+    private LocalDateTime actionTime;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+
+    /**
+     * 行为类型:(REGISTER/PURCHASE/COMPLETE_ORDER)
+     */
+    private String actionType;
+
+    /**
+     * 订单ID
+     */
+    private String orderId;
+
+    /**
+     * 回传时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 回传日志
+     */
+    private String backLog;
+
+    /**
+     * 行为参数
+     */
+    private String actionParam;
+
+
+}

+ 159 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppOrder.java

@@ -0,0 +1,159 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 游戏腾讯APP订单表
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameTencentAppOrder.TABLE_NAME)
+public class GameTencentAppOrder implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_tencent_app_order";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 渠道号
+     */
+    private String channel;
+
+    /**
+     * 游戏ID
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime registerTime;
+
+    /**
+     * 关注时间
+     */
+    private LocalDateTime subscribeTime;
+
+    /**
+     * 充值金额(分)
+     */
+    private Long rechargeMoney;
+
+    /**
+     * 充值时间
+     */
+    private LocalDateTime rechargeTime;
+
+    /**
+     * 订单ID
+     */
+    private String orderId;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+
+    /**
+     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
+     */
+    private Integer orderStatus;
+
+    /**
+     * 支付时间
+     */
+    private LocalDateTime payTime;
+
+    /**
+     * 0:未回传;1:回传
+     */
+    private Integer isBack;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private Long updateBy;
+
+    /**
+     * 回传日志
+     */
+    private String backLog;
+
+    /**
+     * 回传策略id
+     */
+    private Long backPolicyId;
+
+    /**
+     * 数据源ID
+     */
+    private Long userActionSetId;
+
+    private String roleId;
+
+    private String roleName;
+
+    /**
+     * 是否是首单
+     */
+    private Boolean isFirstOrder;
+
+    /**
+     * 回传金额
+     */
+    private Long backMoney;
+
+    /**
+     * 回传信息
+     */
+    private String backMsg;
+
+
+}

+ 82 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppOrderSplitLog.java

@@ -0,0 +1,82 @@
+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 java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameTencentAppOrderSplitLog.TABLE_NAME)
+public class GameTencentAppOrderSplitLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_tencent_app_order_split_log";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 回传日期
+     */
+    private LocalDate backDay;
+
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+
+    /**
+     * 回传序号
+     */
+    private Integer backIndex;
+
+    /**
+     * 总计拆成几单
+     */
+    private Integer backCount;
+
+    /**
+     * 拆分的回传金额
+     */
+    private Long splitMoney;
+
+    /**
+     * 回传时间
+     */
+    private LocalDateTime backTime;
+
+    /**
+     * 真实的回传时间
+     */
+    private LocalDateTime executeTime;
+
+    /**
+     * 回传状态
+     */
+    private Integer backStatus;
+
+    private LocalDateTime createTime;
+
+    /**
+     * 回传失败消息
+     */
+    private String backErrorMsg;
+
+
+}

+ 115 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppRoleRegister.java

@@ -0,0 +1,115 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 游戏腾讯APP角色创建表
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameTencentAppRoleRegister.TABLE_NAME)
+public class GameTencentAppRoleRegister implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_tencent_app_role_register";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 渠道号
+     */
+    private String channel;
+
+    /**
+     * 游戏ID
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime registerTime;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+
+    /**
+     * 0:未回传;1:回传
+     */
+    private Integer isBack;
+
+    private LocalDateTime createTime;
+
+    /**
+     * 回传日志
+     */
+    private String backLog;
+
+    /**
+     * 回传策略id
+     */
+    private Long backPolicyId;
+
+    /**
+     * 数据源ID
+     */
+    private Long userActionSetId;
+
+    private String roleId;
+
+    private String roleName;
+
+    /**
+     * 回传信息
+     */
+    private String backMsg;
+
+
+}

+ 115 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppUser.java

@@ -0,0 +1,115 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 游戏腾讯 APP用户表
+ * </p>
+ *
+ * @author wcc
+ * @since 2024-06-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@TableName(GameTencentAppUser.TABLE_NAME)
+public class GameTencentAppUser implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "t_game_tencent_app_user";
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 渠道号
+     */
+    private String channel;
+
+    /**
+     * 游戏ID
+     */
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime registerTime;
+
+    /**
+     * 关注时间
+     */
+    private LocalDateTime subscribeTime;
+
+    /**
+     * 用户设备mac地址
+     */
+    private String mac;
+
+    /**
+     * 设备唯一编号IMEI
+     */
+    private String imei;
+
+    /**
+     * 设备OAID
+     */
+    private String oaid;
+
+    /**
+     * 安卓id, (仅安卓设备才有值)
+     */
+    private String androidId;
+
+    /**
+     * IOS设备IDFA
+     */
+    private String idfa;
+
+    /**
+     * IOS设备CAID
+     */
+    private String caid;
+
+    /**
+     * 0:未回传;1:回传;-1:回传失败
+     */
+    private Integer isBack;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private Long updateBy;
+
+    /**
+     * 回传日志
+     */
+    private String backLog;
+
+    /**
+     * 回传策略id
+     */
+    private Long backPolicyId;
+
+    /**
+     * 数据源ID
+     */
+    private Long userActionSetId;
+
+
+}

+ 186 - 13
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentAppBackRpcImpl.java

@@ -1,39 +1,212 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.game.back.base.pojo.dto.*;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITencentAppBackRpc;
+import com.zanxiang.game.back.serve.pojo.entity.*;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.service.IGameTencentAppOrderService;
+import com.zanxiang.game.back.serve.service.IGameTencentAppRoleRegisterService;
+import com.zanxiang.game.back.serve.service.IGameTencentAppUserService;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import java.time.LocalDateTime;
 import java.util.Objects;
 
 @Slf4j
 @DubboService
 public class TencentAppBackRpcImpl implements ITencentAppBackRpc {
-
-    @Override
-    public ResultVO<Boolean> backOrder(TencentOrderAppRpcDTO dto) {
-        if (Objects.equals(OrderStatusEnum.SUCCESS_PAY.getValue(), dto.getOrderStatus())) {
-            log.error("腾讯 APP订单回传收到:{}。", JsonUtil.toString(dto));
-        } else {
-            log.error("腾讯H5订单回传收到:{}。订单未支付,直接过滤", JsonUtil.toString(dto));
-            return ResultVO.ok(true);
-        }
-        return ResultVO.ok(Boolean.TRUE);
-    }
+    @Autowired
+    private IGameTencentAppUserService gameTencentAppUserService;
+    @Autowired
+    private IGameTencentAppRoleRegisterService gameTencentAppRoleRegisterService;
+    @Autowired
+    private IGameTencentAppOrderService gameTencentAppOrderService;
 
     @Override
     public ResultVO<Boolean> backUser(TencentUserAppRpcDTO dto) {
         log.error("腾讯 APP用户回传收到:{}", JsonUtil.toString(dto));
-        return ResultVO.ok(Boolean.TRUE);
+        if (StringUtils.isBlank(dto.getMac())) {
+            dto.setMac("");
+        }
+        if(StringUtils.isBlank(dto.getImei())) {
+            dto.setImei("");
+        }
+        if(StringUtils.isBlank(dto.getOaid())) {
+            dto.setOaid("");
+        }
+        if(StringUtils.isBlank(dto.getAndroidId())) {
+            dto.setAndroidId("");
+        }
+        if(StringUtils.isBlank(dto.getIdfa())) {
+            dto.setIdfa("");
+        }
+        if(StringUtils.isBlank(dto.getCaid())) {
+            dto.setCaid("");
+        }
+        if(StringUtils.isBlank(dto.getMac())
+                && StringUtils.isBlank(dto.getImei())
+                && StringUtils.isBlank(dto.getOaid())
+                && StringUtils.isBlank(dto.getAndroidId())
+                && StringUtils.isBlank(dto.getIdfa())
+                && StringUtils.isBlank(dto.getCaid())) {
+            return ResultVO.fail("找不到用户唯一标识");
+        }
+        GameTencentAppUser gameTencentUser = GameTencentAppUser.builder()
+                .adAccountId(dto.getAdAccountId())
+                .gameId(dto.getGameId())
+                .channel(dto.getChannel())
+                .subscribeTime(dto.getSubscribeTime())
+                .registerTime(dto.getRegisterTime())
+                .mac(dto.getMac())
+                .imei(dto.getImei())
+                .oaid(dto.getOaid())
+                .androidId(dto.getAndroidId())
+                .idfa(dto.getIdfa())
+                .caid(dto.getCaid())
+                .isBack(BackStatusEnum.NO.getBackStatus())
+                .userActionSetId(dto.getUserActionSetId())
+                .createTime(LocalDateTime.now())
+                .build();
+        gameTencentAppUserService.save(gameTencentUser);
+        return ResultVO.ok(true);
+        // 激活现在默认不回传了,等创角的时候一起回传
+        // return ResultVO.ok(gameTencentUserService.userBack(gameTencentUser, false));
     }
 
     @Override
     public ResultVO<Boolean> backRoleRegister(TencentRoleRegisterAppRpcDTO dto) {
         log.error("腾讯 APP创角回传收到:{}", JsonUtil.toString(dto));
-        return ResultVO.ok(Boolean.TRUE);
+        if (StringUtils.isBlank(dto.getMac())) {
+            dto.setMac("");
+        }
+        if(StringUtils.isBlank(dto.getImei())) {
+            dto.setImei("");
+        }
+        if(StringUtils.isBlank(dto.getOaid())) {
+            dto.setOaid("");
+        }
+        if(StringUtils.isBlank(dto.getAndroidId())) {
+            dto.setAndroidId("");
+        }
+        if(StringUtils.isBlank(dto.getIdfa())) {
+            dto.setIdfa("");
+        }
+        if(StringUtils.isBlank(dto.getCaid())) {
+            dto.setCaid("");
+        }
+        if(StringUtils.isBlank(dto.getMac())
+                && StringUtils.isBlank(dto.getImei())
+                && StringUtils.isBlank(dto.getOaid())
+                && StringUtils.isBlank(dto.getAndroidId())
+                && StringUtils.isBlank(dto.getIdfa())
+                && StringUtils.isBlank(dto.getCaid())) {
+            return ResultVO.fail("找不到用户唯一标识");
+        }
+        GameTencentAppRoleRegister roleRegister = GameTencentAppRoleRegister.builder()
+                .backPolicyId(dto.getBackPolicyId())
+                .channel(dto.getChannel())
+                .gameId(dto.getGameId())
+                .adAccountId(dto.getAdAccountId())
+                .registerTime(dto.getRegisterTime())
+                .mac(dto.getMac())
+                .imei(dto.getImei())
+                .oaid(dto.getOaid())
+                .androidId(dto.getAndroidId())
+                .idfa(dto.getIdfa())
+                .caid(dto.getCaid())
+                .isBack(BackStatusEnum.NO.getBackStatus())
+                .userActionSetId(dto.getUserActionSetId())
+                .createTime(LocalDateTime.now())
+                .roleId(dto.getRoleId())
+                .roleName(dto.getRoleName())
+                .build();
+        gameTencentAppRoleRegisterService.save(roleRegister);
+        // return ResultVO.ok(gameTencentAppRoleRegisterService.roleRegisterBack(roleRegister));
+        return ResultVO.ok(true);
+    }
+
+    @Override
+    public ResultVO<Boolean> backOrder(TencentOrderAppRpcDTO dto) {
+        if (Objects.equals(OrderStatusEnum.SUCCESS_PAY.getValue(), dto.getOrderStatus())) {
+            log.error("腾讯 APP订单回传收到:{}。", JsonUtil.toString(dto));
+        } else {
+            log.error("腾讯H5订单回传收到:{}。订单未支付,直接过滤", JsonUtil.toString(dto));
+            return ResultVO.ok(true);
+        }
+        if (StringUtils.isBlank(dto.getMac())) {
+            dto.setMac("");
+        }
+        if(StringUtils.isBlank(dto.getImei())) {
+            dto.setImei("");
+        }
+        if(StringUtils.isBlank(dto.getOaid())) {
+            dto.setOaid("");
+        }
+        if(StringUtils.isBlank(dto.getAndroidId())) {
+            dto.setAndroidId("");
+        }
+        if(StringUtils.isBlank(dto.getIdfa())) {
+            dto.setIdfa("");
+        }
+        if(StringUtils.isBlank(dto.getCaid())) {
+            dto.setCaid("");
+        }
+        if(StringUtils.isBlank(dto.getMac())
+                && StringUtils.isBlank(dto.getImei())
+                && StringUtils.isBlank(dto.getOaid())
+                && StringUtils.isBlank(dto.getAndroidId())
+                && StringUtils.isBlank(dto.getIdfa())
+                && StringUtils.isBlank(dto.getCaid())) {
+            return ResultVO.fail("找不到用户唯一标识");
+        }
+        boolean isFirstOrder = gameTencentAppOrderService.getOne(new LambdaQueryWrapper<GameTencentAppOrder>()
+                .select(GameTencentAppOrder::getOrderId)
+                .eq(GameTencentAppOrder::getGameId, dto.getGameId())
+                .eq(GameTencentAppOrder::getAdAccountId, dto.getAdAccountId())
+                .eq(GameTencentAppOrder::getMac, dto.getMac())
+                .eq(GameTencentAppOrder::getImei, dto.getImei())
+                .eq(GameTencentAppOrder::getOaid, dto.getOaid())
+                .eq(GameTencentAppOrder::getAndroidId, dto.getAndroidId())
+                .eq(GameTencentAppOrder::getIdfa, dto.getIdfa())
+                .eq(GameTencentAppOrder::getCaid, dto.getCaid())
+                .eq(GameTencentAppOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                .last("limit 1")
+        ) == null;
+        //订单保存
+        GameTencentAppOrder gameTencentOrder = GameTencentAppOrder.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())
+                .mac(dto.getMac())
+                .imei(dto.getImei())
+                .oaid(dto.getOaid())
+                .androidId(dto.getAndroidId())
+                .idfa(dto.getIdfa())
+                .caid(dto.getCaid())
+                .orderStatus(dto.getOrderStatus())
+                .payTime(dto.getPayTime())
+                .createTime(LocalDateTime.now())
+                .isBack(BackStatusEnum.NO.getBackStatus())
+                .backPolicyId(dto.getBackPolicyId())
+                .userActionSetId(dto.getUserActionSetId())
+                .roleId(dto.getRoleId())
+                .roleName(dto.getRoleName())
+                .isFirstOrder(isFirstOrder)
+                .build();
+        gameTencentAppOrderService.save(gameTencentOrder);
+        return ResultVO.ok(true);
+        // return ResultVO.ok(gameTencentAppOrderService.orderBack(gameTencentOrder));
     }
 }

+ 179 - 5
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtAppBackRpcImpl.java

@@ -1,18 +1,26 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.game.back.base.pojo.dto.*;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITtAppBackRpc;
+import com.zanxiang.game.back.serve.pojo.entity.*;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
+import com.zanxiang.game.back.serve.service.IGameOceanengineAppOrderLogService;
+import com.zanxiang.game.back.serve.service.IGameOceanengineAppRoleRegisterLogService;
+import com.zanxiang.game.back.serve.service.IGameOceanengineAppUserLogService;
 import com.zanxiang.game.module.base.ServerInfo;
 import com.zanxiang.game.module.base.rpc.IAgentRpc;
 import com.zanxiang.module.util.JsonUtil;
 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.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.time.LocalDateTime;
 import java.util.Objects;
 
 @Slf4j
@@ -21,14 +29,61 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
 
     @Autowired
     private IGameBackPolicyService gameBackPolicyService;
-
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private IAgentRpc agentRpc;
+    @Autowired
+    private IGameOceanengineAppUserLogService gameOceanengineAppUserLogService;
+    @Autowired
+    private IGameOceanengineAppRoleRegisterLogService gameOceanengineAppRoleRegisterLogService;
+    @Autowired
+    private IGameOceanengineAppOrderLogService gameOceanengineAppOrderLogService;
 
     @Override
     public ResultVO<Boolean> userActiveReport(TtUserActiveAppRpcDTO dto) {
         log.error("头条 APP用户回传收到:{}", JsonUtil.toString(dto));
-        return ResultVO.ok(Boolean.TRUE);
+        if (StringUtils.isBlank(dto.getMac())) {
+            dto.setMac("");
+        }
+        if(StringUtils.isBlank(dto.getImei())) {
+            dto.setImei("");
+        }
+        if(StringUtils.isBlank(dto.getOaid())) {
+            dto.setOaid("");
+        }
+        if(StringUtils.isBlank(dto.getAndroidId())) {
+            dto.setAndroidId("");
+        }
+        if(StringUtils.isBlank(dto.getIdfa())) {
+            dto.setIdfa("");
+        }
+        if(StringUtils.isBlank(dto.getCaid())) {
+            dto.setCaid("");
+        }
+        if(StringUtils.isBlank(dto.getMac())
+                && StringUtils.isBlank(dto.getImei())
+                && StringUtils.isBlank(dto.getOaid())
+                && StringUtils.isBlank(dto.getAndroidId())
+                && StringUtils.isBlank(dto.getIdfa())
+                && StringUtils.isBlank(dto.getCaid())) {
+            return ResultVO.fail("找不到用户唯一标识");
+        }
+
+        GameOceanengineAppUserLog userLog = GameOceanengineAppUserLog.builder()
+                .mac(dto.getMac())
+                .imei(dto.getImei())
+                .oaid(dto.getOaid())
+                .androidId(dto.getAndroidId())
+                .idfa(dto.getIdfa())
+                .caid(dto.getCaid())
+                .gameId(dto.getGameId())
+                .accountId(dto.getAccountReport().getAccountId())
+                .agentKey(dto.getAgentKey())
+                .activeTime(dto.getActiveTime())
+                .backStatus(BackStatusEnum.NO.getBackStatus())
+                .createTime(LocalDateTime.now())
+                .build();
+        gameOceanengineAppUserLogService.save(userLog);
+        return ResultVO.ok(gameOceanengineAppUserLogService.callback(userLog, Boolean.FALSE));
     }
 
     @Override
@@ -39,13 +94,117 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
             log.error("头条 APP订单回传收到:{}。订单未支付,直接过滤", JsonUtil.toString(dto));
             return ResultVO.ok(true);
         }
-        return ResultVO.ok(Boolean.TRUE);
+        if (StringUtils.isBlank(dto.getMac())) {
+            dto.setMac("");
+        }
+        if(StringUtils.isBlank(dto.getImei())) {
+            dto.setImei("");
+        }
+        if(StringUtils.isBlank(dto.getOaid())) {
+            dto.setOaid("");
+        }
+        if(StringUtils.isBlank(dto.getAndroidId())) {
+            dto.setAndroidId("");
+        }
+        if(StringUtils.isBlank(dto.getIdfa())) {
+            dto.setIdfa("");
+        }
+        if(StringUtils.isBlank(dto.getCaid())) {
+            dto.setCaid("");
+        }
+        if(StringUtils.isBlank(dto.getMac())
+                && StringUtils.isBlank(dto.getImei())
+                && StringUtils.isBlank(dto.getOaid())
+                && StringUtils.isBlank(dto.getAndroidId())
+                && StringUtils.isBlank(dto.getIdfa())
+                && StringUtils.isBlank(dto.getCaid())) {
+            return ResultVO.fail("找不到用户唯一标识");
+        }
+        GameOceanengineAppOrderLog orderLog = GameOceanengineAppOrderLog.builder()
+                .mac(dto.getMac())
+                .imei(dto.getImei())
+                .oaid(dto.getOaid())
+                .androidId(dto.getAndroidId())
+                .idfa(dto.getIdfa())
+                .caid(dto.getCaid())
+                .gameId(dto.getGameId())
+                .backPolicyId(dto.getBackPolicyId())
+                .accountId(dto.getAccountReport().getAccountId())
+                .agentKey(dto.getAgentKey())
+                .regTime(dto.getRegTime())
+                .orderNo(dto.getOrderId())
+                .amount(dto.getRechargeMoney())
+                .orderStatus(dto.getOrderStatus())
+                .createTime(dto.getCreateTime())
+                .payTime(dto.getPayTime())
+                .backStatus(BackStatusEnum.NO.getBackStatus())
+                .roleId(dto.getRoleId())
+                .roleName(dto.getRoleName())
+                .build();
+        boolean isFirstOrder = gameOceanengineAppOrderLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                .eq(GameOceanengineAppOrderLog::getMac, orderLog.getMac())
+                .eq(GameOceanengineAppOrderLog::getImei, orderLog.getImei())
+                .eq(GameOceanengineAppOrderLog::getOaid, orderLog.getOaid())
+                .eq(GameOceanengineAppOrderLog::getAndroidId, orderLog.getAndroidId())
+                .eq(GameOceanengineAppOrderLog::getIdfa, orderLog.getIdfa())
+                .eq(GameOceanengineAppOrderLog::getCaid, orderLog.getCaid())
+                .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                .last("limit 1")
+        ) == null;
+        orderLog.setIsFirstOrder(isFirstOrder);
+        gameOceanengineAppOrderLogService.save(orderLog);
+        return ResultVO.ok(gameOceanengineAppOrderLogService.callback(orderLog));
     }
 
     @Override
     public ResultVO<Boolean> roleRegisterReport(TtRoleRegisterAppRpcDTO dto) {
         log.error("头条 APP创角回传收到:{}", JsonUtil.toString(dto));
-        return ResultVO.ok(Boolean.TRUE);
+        if (StringUtils.isBlank(dto.getMac())) {
+            dto.setMac("");
+        }
+        if(StringUtils.isBlank(dto.getImei())) {
+            dto.setImei("");
+        }
+        if(StringUtils.isBlank(dto.getOaid())) {
+            dto.setOaid("");
+        }
+        if(StringUtils.isBlank(dto.getAndroidId())) {
+            dto.setAndroidId("");
+        }
+        if(StringUtils.isBlank(dto.getIdfa())) {
+            dto.setIdfa("");
+        }
+        if(StringUtils.isBlank(dto.getCaid())) {
+            dto.setCaid("");
+        }
+        if(StringUtils.isBlank(dto.getMac())
+                && StringUtils.isBlank(dto.getImei())
+                && StringUtils.isBlank(dto.getOaid())
+                && StringUtils.isBlank(dto.getAndroidId())
+                && StringUtils.isBlank(dto.getIdfa())
+                && StringUtils.isBlank(dto.getCaid())) {
+            return ResultVO.fail("找不到用户唯一标识");
+        }
+        GameOceanengineAppRoleRegisterLog roleRegisterLog = GameOceanengineAppRoleRegisterLog.builder()
+                .mac(dto.getMac())
+                .imei(dto.getImei())
+                .oaid(dto.getOaid())
+                .androidId(dto.getAndroidId())
+                .idfa(dto.getIdfa())
+                .caid(dto.getCaid())
+                .gameId(dto.getGameId())
+                .accountId(dto.getAccountReport().getAccountId())
+                .agentKey(dto.getAgentKey())
+                .roleId(dto.getRoleId())
+                .roleName(dto.getRoleName())
+                .registerTime(dto.getRegisterTime())
+                .backStatus(BackStatusEnum.NO.getBackStatus())
+                .createTime(LocalDateTime.now())
+                .build();
+        gameOceanengineAppRoleRegisterLogService.save(roleRegisterLog);
+        return ResultVO.ok(gameOceanengineAppRoleRegisterLogService.callback(roleRegisterLog));
     }
 
     @Override
@@ -55,7 +214,22 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
 
     @Override
     public ResultVO<Boolean> orderBackQuery(TtAppOrderBackQueryRpcDTO dto) {
-        return ResultVO.ok(Boolean.TRUE);
+        GameOceanengineAppOrderLog orderLog = gameOceanengineAppOrderLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                .eq(GameOceanengineAppOrderLog::getOrderNo, dto.getOrderId())
+                .eq(GameOceanengineAppOrderLog::getGameId, dto.getGameId())
+                .eq(GameOceanengineAppOrderLog::getAgentKey, dto.getAgentKey())
+                .eq(GameOceanengineAppOrderLog::getAccountId, dto.getAccountReport().getAccountId())
+                .eq(GameOceanengineAppOrderLog::getMac, dto.getMac())
+                .eq(GameOceanengineAppOrderLog::getImei, dto.getImei())
+                .eq(GameOceanengineAppOrderLog::getOaid, dto.getOaid())
+                .eq(GameOceanengineAppOrderLog::getAndroidId, dto.getAndroidId())
+                .eq(GameOceanengineAppOrderLog::getIdfa, dto.getIdfa())
+                .eq(GameOceanengineAppOrderLog::getCaid, dto.getCaid())
+        );
+        if  (orderLog == null) {
+            return ResultVO.ok(Boolean.FALSE);
+        }
+        return ResultVO.ok(BackStatusEnum.getByValue(orderLog.getBackStatus()) ==  BackStatusEnum.SUCCESS);
     }
 
     @Override

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

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppBackLog;
+
+public interface IGameOceanengineAppBackLogService extends IService<GameOceanengineAppBackLog> {
+}

+ 15 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppOrderLogService.java

@@ -0,0 +1,15 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.sd4324530.jtuple.Tuple2;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppOrderLog;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+
+import java.time.LocalDateTime;
+
+public interface IGameOceanengineAppOrderLogService extends IService<GameOceanengineAppOrderLog> {
+
+    boolean callback(GameOceanengineAppOrderLog orderLog);
+
+    Tuple2<BackStatusEnum, String> doCallback(GameOceanengineAppOrderLog orderLog, LocalDateTime backTime, Long backMoney);
+}

+ 9 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppRoleRegisterLogService.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppRoleRegisterLog;
+
+public interface IGameOceanengineAppRoleRegisterLogService extends IService<GameOceanengineAppRoleRegisterLog> {
+
+    boolean callback(GameOceanengineAppRoleRegisterLog roleRegisterLog);
+}

+ 9 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppUserLogService.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppUserLog;
+
+public interface IGameOceanengineAppUserLogService extends IService<GameOceanengineAppUserLog> {
+
+    boolean callback(GameOceanengineAppUserLog userLog, boolean mustBack);
+}

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

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppBackLog;
+
+public interface IGameTencentAppBackLogService extends IService<GameTencentAppBackLog> {
+}

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

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppOrder;
+
+public interface IGameTencentAppOrderService extends IService<GameTencentAppOrder> {
+}

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

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppOrderSplitLog;
+
+public interface IGameTencentAppOrderSplitLogService extends IService<GameTencentAppOrderSplitLog> {
+}

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

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppRoleRegister;
+
+public interface IGameTencentAppRoleRegisterService extends IService<GameTencentAppRoleRegister> {
+}

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

@@ -0,0 +1,7 @@
+package com.zanxiang.game.back.serve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppUser;
+
+public interface IGameTencentAppUserService extends IService<GameTencentAppUser> {
+}

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

@@ -0,0 +1,14 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppBackLogMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppBackLog;
+import com.zanxiang.game.back.serve.service.IGameOceanengineAppBackLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class GameOceanengineAppBackLogServiceImpl extends ServiceImpl<GameOceanengineAppBackLogMapper, GameOceanengineAppBackLog>
+implements IGameOceanengineAppBackLogService {
+}

+ 374 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppOrderLogServiceImpl.java

@@ -0,0 +1,374 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.sd4324530.jtuple.Tuple2;
+import com.github.sd4324530.jtuple.Tuple3;
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
+import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppOrderLogMapper;
+import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
+import com.zanxiang.game.back.serve.pojo.entity.*;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackUnitEnum;
+import com.zanxiang.game.back.serve.service.*;
+import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+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.*;
+
+@Slf4j
+@Service
+public class GameOceanengineAppOrderLogServiceImpl extends ServiceImpl<GameOceanengineAppOrderLogMapper, GameOceanengineAppOrderLog>
+implements IGameOceanengineAppOrderLogService {
+
+    @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
+    @Autowired
+    private IGameOceanengineAppUserLogService gameOceanengineAppUserLogService;
+    @Autowired
+    private IGameOceanengineAppBackLogService gameOceanengineAppBackLogService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean callback(GameOceanengineAppOrderLog orderLog) {
+        if (!Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue())) {
+            // 头条只要回传支付订单
+            return true;
+        }
+        GameOceanengineAppUserLog userLog = userLog(orderLog);
+        if (userLog == null) {
+            // 找不到用户
+            return update(new LambdaUpdateWrapper<GameOceanengineAppOrderLog>()
+                    .set(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.NO.getBackStatus())
+                    .set(GameOceanengineAppOrderLog::getBackMoney, orderLog.getAmount())
+                    .set(GameOceanengineAppOrderLog::getBackMsg, "回传失败!找不到回传用户")
+                    .eq(GameOceanengineAppOrderLog::getId, orderLog.getId())
+            );
+        }
+
+        GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
+        Tuple3<Boolean, Long, String> backInfo = BackPolicyUtil.backOrder(orderLog.getOrderNo(), gameBackPolicy, orderLog.getAmount(),
+                orderLog.getIsFirstOrder(),
+                orderLog.getPayTime(),
+                // 此处使用用户最近一次的重新染色时间
+                userLog.getCreateTime(),
+                null,
+                new OceanengineOrderBackPolicyCheck(this, userLog, orderLog, gameBackPolicy)
+        );
+        boolean doBack = backInfo.first;
+        Long backMoney = backInfo.second;
+        String backMsg = backInfo.third;
+
+        if (!doBack) {
+            // 不回传
+            return update(new LambdaUpdateWrapper<GameOceanengineAppOrderLog>()
+                    .set(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.NO.getBackStatus())
+                    .set(GameOceanengineAppOrderLog::getBackMoney, backMoney)
+                    .set(GameOceanengineAppOrderLog::getBackMsg, backMsg)
+                    .eq(GameOceanengineAppOrderLog::getId, orderLog.getId())
+            );
+        }
+
+        Tuple2<BackStatusEnum, String> backResult = doCallback(orderLog, orderLog.getPayTime(), backMoney);
+        if (StringUtils.isNotBlank(backResult.second)) {
+            backMsg = backMsg + ("回传失败:" + backResult.second);
+        }
+        return update(new LambdaUpdateWrapper<GameOceanengineAppOrderLog>()
+                .set(GameOceanengineAppOrderLog::getBackStatus, backResult.first.getBackStatus())
+                .set(GameOceanengineAppOrderLog::getBackMoney, backMoney)
+                .set(GameOceanengineAppOrderLog::getBackMsg, backMsg)
+                .eq(GameOceanengineAppOrderLog::getId, orderLog.getId())
+        );
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Tuple2<BackStatusEnum, String> doCallback(GameOceanengineAppOrderLog orderLog, LocalDateTime backTime, Long backMoney) {
+        GameOceanengineAppUserLog userLog = userLog(orderLog);
+        if (userLog == null) {
+            gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()
+                    .mac(orderLog.getMac())
+                    .imei(orderLog.getImei())
+                    .oaid(orderLog.getOaid())
+                    .androidId(orderLog.getAndroidId())
+                    .idfa(orderLog.getIdfa())
+                    .caid(orderLog.getCaid())
+                    .gameId(orderLog.getGameId())
+                    .accountId(orderLog.getAccountId())
+                    .eventType(String.valueOf(MiniGameCallback.EventType.ACTIVE_PAY.getEventType()))
+                    .eventLogId(orderLog.getId())
+                    .createTime(LocalDateTime.now())
+                    .payAmount(backMoney)
+                    .backStatus(BackStatusEnum.FAILED.getBackStatus())
+                    .errMsg("找不到用户注册信息")
+                    .build());
+            return Tuple2.with(BackStatusEnum.FAILED, "找不到用户注册信息");
+        }
+        Integer eventType = MiniGameCallback.EventType.ACTIVE_PAY.getEventType();
+        BackStatusEnum backStatus = BackStatusEnum.SUCCESS;
+        String errMsg = null;
+        gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()
+                .mac(orderLog.getMac())
+                .imei(orderLog.getImei())
+                .oaid(orderLog.getOaid())
+                .androidId(orderLog.getAndroidId())
+                .idfa(orderLog.getIdfa())
+                .caid(orderLog.getCaid())
+                .gameId(orderLog.getGameId())
+                .accountId(orderLog.getAccountId())
+                .eventType(String.valueOf(eventType))
+                .eventLogId(orderLog.getId())
+                .createTime(LocalDateTime.now())
+                .payAmount(backMoney)
+                .backStatus(backStatus.getBackStatus())
+                .errMsg(errMsg)
+                .build());
+        return Tuple2.with(backStatus, errMsg);
+    }
+
+    private GameOceanengineAppUserLog userLog(GameOceanengineAppOrderLog orderLog) {
+        return gameOceanengineAppUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppUserLog>()
+                .eq(GameOceanengineAppUserLog::getGameId, orderLog.getGameId())
+                .eq(GameOceanengineAppUserLog::getMac, orderLog.getMac())
+                .eq(GameOceanengineAppUserLog::getImei, orderLog.getImei())
+                .eq(GameOceanengineAppUserLog::getOaid, orderLog.getOaid())
+                .eq(GameOceanengineAppUserLog::getAndroidId, orderLog.getAndroidId())
+                .eq(GameOceanengineAppUserLog::getIdfa, orderLog.getIdfa())
+                .eq(GameOceanengineAppUserLog::getCaid, orderLog.getCaid())
+                .eq(GameOceanengineAppUserLog::getAccountId, orderLog.getAccountId())
+                .orderByDesc(GameOceanengineAppUserLog::getCreateTime)
+                .last("limit 1")
+        );
+    }
+
+    public static class OceanengineOrderBackPolicyCheck implements BackPolicyUtil.IBackPolicyCheck {
+        private final IGameOceanengineAppOrderLogService gameOceanengineAppOrderLogService;
+        private final GameBackPolicy gameBackPolicy;
+        private final GameOceanengineAppUserLog userLog;
+        private final GameOceanengineAppOrderLog orderLog;
+
+        public OceanengineOrderBackPolicyCheck(IGameOceanengineAppOrderLogService gameOceanengineAppOrderLogService, GameOceanengineAppUserLog userLog, GameOceanengineAppOrderLog orderLog, GameBackPolicy gameBackPolicy) {
+            this.gameOceanengineAppOrderLogService = gameOceanengineAppOrderLogService;
+            this.gameBackPolicy = gameBackPolicy;
+            this.userLog = userLog;
+            this.orderLog = orderLog;
+        }
+
+        @Override
+        public long backCountForFixedRate(int numberOfRound, BackUnitEnum backUnit, Boolean firstPolicy) {
+            numberOfRound = numberOfRound - 1;
+            if (backUnit == BackUnitEnum.UNIT_ONCE) {
+                return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .eq(GameOceanengineAppOrderLog::getIsFirstOrder, firstPolicy)
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                        .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
+                        .last("limit " + numberOfRound)
+                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+            } else if (backUnit == BackUnitEnum.UNIT_DAY) {
+                return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .apply(firstPolicy, "date(reg_time) = date(pay_time)")
+                        .apply(!firstPolicy, "date(reg_time) != date(pay_time)")
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                        .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
+                        .last("limit " + numberOfRound)
+                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+            } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
+                return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 24")
+                        .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 24")
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                        .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
+                        .last("limit " + numberOfRound)
+                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+            } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
+                return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 48")
+                        .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 48")
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                        .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
+                        .last("limit " + numberOfRound)
+                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                        .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
+                        .last("limit " + numberOfRound)
+                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+            } else {
+                throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
+            }
+        }
+
+        @Override
+        public long backCountForUser(BackUnitEnum backUnit, String userId, Boolean firstPolicy) {
+            if (backUnit == BackUnitEnum.UNIT_ONCE) {
+                if (firstPolicy) {
+                    // 首单直接返回 0,必定回传
+                    return 0;
+                }
+                return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                        .eq(GameOceanengineAppOrderLog::getMac, userLog.getMac())
+                        .eq(GameOceanengineAppOrderLog::getImei, userLog.getImei())
+                        .eq(GameOceanengineAppOrderLog::getOaid, userLog.getOaid())
+                        .eq(GameOceanengineAppOrderLog::getAndroidId, userLog.getAndroidId())
+                        .eq(GameOceanengineAppOrderLog::getIdfa, userLog.getIdfa())
+                        .eq(GameOceanengineAppOrderLog::getCaid, userLog.getCaid())
+                        .eq(GameOceanengineAppOrderLog::getIsFirstOrder, firstPolicy)
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                );
+            } else if (backUnit == BackUnitEnum.UNIT_DAY) {
+                return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                        .eq(GameOceanengineAppOrderLog::getMac, userLog.getMac())
+                        .eq(GameOceanengineAppOrderLog::getImei, userLog.getImei())
+                        .eq(GameOceanengineAppOrderLog::getOaid, userLog.getOaid())
+                        .eq(GameOceanengineAppOrderLog::getAndroidId, userLog.getAndroidId())
+                        .eq(GameOceanengineAppOrderLog::getIdfa, userLog.getIdfa())
+                        .eq(GameOceanengineAppOrderLog::getCaid, userLog.getCaid())
+                        .apply(firstPolicy, "date(reg_time) = date(pay_time)")
+                        .apply(!firstPolicy, "date(reg_time) != date(pay_time)")
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                );
+            } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
+                return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                        .eq(GameOceanengineAppOrderLog::getMac, userLog.getMac())
+                        .eq(GameOceanengineAppOrderLog::getImei, userLog.getImei())
+                        .eq(GameOceanengineAppOrderLog::getOaid, userLog.getOaid())
+                        .eq(GameOceanengineAppOrderLog::getAndroidId, userLog.getAndroidId())
+                        .eq(GameOceanengineAppOrderLog::getIdfa, userLog.getIdfa())
+                        .eq(GameOceanengineAppOrderLog::getCaid, userLog.getCaid())
+                        .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 24")
+                        .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 24")
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                );
+            } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
+                return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                        .eq(GameOceanengineAppOrderLog::getMac, userLog.getMac())
+                        .eq(GameOceanengineAppOrderLog::getImei, userLog.getImei())
+                        .eq(GameOceanengineAppOrderLog::getOaid, userLog.getOaid())
+                        .eq(GameOceanengineAppOrderLog::getAndroidId, userLog.getAndroidId())
+                        .eq(GameOceanengineAppOrderLog::getIdfa, userLog.getIdfa())
+                        .eq(GameOceanengineAppOrderLog::getCaid, userLog.getCaid())
+                        .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 48")
+                        .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 48")
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                );
+            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                        .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                        .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                        .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                        .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                        .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                        .eq(GameOceanengineAppOrderLog::getMac, userLog.getMac())
+                        .eq(GameOceanengineAppOrderLog::getImei, userLog.getImei())
+                        .eq(GameOceanengineAppOrderLog::getOaid, userLog.getOaid())
+                        .eq(GameOceanengineAppOrderLog::getAndroidId, userLog.getAndroidId())
+                        .eq(GameOceanengineAppOrderLog::getIdfa, userLog.getIdfa())
+                        .eq(GameOceanengineAppOrderLog::getCaid, userLog.getCaid())
+                        .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                );
+            } else {
+                throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
+            }
+        }
+
+        @Override
+        public long markUpOfFixedRate(int numberOfRound, Long markUpTime) {
+            numberOfRound = numberOfRound - 1;
+            return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                    .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                    .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                    .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                    .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                    .apply("TIMESTAMPDIFF(MINUTE, reg_time, pay_time) > {0}", markUpTime)
+                    .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+                    .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
+                    .last("limit " + numberOfRound)
+            ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+        }
+
+        @Override
+        public long markUpForUser(String userId, Long markUpTime) {
+            return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                    .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                    .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                    .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                    .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                    .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                    .eq(GameOceanengineAppOrderLog::getMac, userLog.getMac())
+                    .eq(GameOceanengineAppOrderLog::getImei, userLog.getImei())
+                    .eq(GameOceanengineAppOrderLog::getOaid, userLog.getOaid())
+                    .eq(GameOceanengineAppOrderLog::getAndroidId, userLog.getAndroidId())
+                    .eq(GameOceanengineAppOrderLog::getIdfa, userLog.getIdfa())
+                    .eq(GameOceanengineAppOrderLog::getCaid, userLog.getCaid())
+                    .apply("TIMESTAMPDIFF(MINUTE, reg_time, pay_time) > {0}", markUpTime)
+                    .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+            );
+        }
+
+        @Override
+        public Long totalRechargeAmount() {
+            return gameOceanengineAppOrderLogService.getOne(new QueryWrapper<GameOceanengineAppOrderLog>()
+                    .select("ifnull(sum(amount), 0) as amount").lambda()
+                    .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
+                    .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
+                    .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                    .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                    .eq(GameOceanengineAppOrderLog::getMac, userLog.getMac())
+                    .eq(GameOceanengineAppOrderLog::getImei, userLog.getImei())
+                    .eq(GameOceanengineAppOrderLog::getOaid, userLog.getOaid())
+                    .eq(GameOceanengineAppOrderLog::getAndroidId, userLog.getAndroidId())
+                    .eq(GameOceanengineAppOrderLog::getIdfa, userLog.getIdfa())
+                    .eq(GameOceanengineAppOrderLog::getCaid, userLog.getCaid())
+                    .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
+            ).getAmount();
+        }
+    }
+}

+ 108 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppRoleRegisterLogServiceImpl.java

@@ -0,0 +1,108 @@
+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.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppRoleRegisterLogMapper;
+import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
+import com.zanxiang.game.back.serve.pojo.entity.*;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.service.*;
+import com.zanxiang.game.module.base.ServerInfo;
+import com.zanxiang.game.module.base.rpc.IAgentRpc;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+@Service
+public class GameOceanengineAppRoleRegisterLogServiceImpl extends ServiceImpl<GameOceanengineAppRoleRegisterLogMapper, GameOceanengineAppRoleRegisterLog>
+implements IGameOceanengineAppRoleRegisterLogService {
+    @Autowired
+    private IGameOceanengineAppUserLogService gameOceanengineAppUserLogService;
+    @Autowired
+    private IGameOceanengineAppBackLogService gameOceanengineAppBackLogService;
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IAgentRpc agentRpc;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean callback(GameOceanengineAppRoleRegisterLog roleRegisterLog) {
+        BackStatusEnum backStatus = doCallback(roleRegisterLog);
+        return update(new LambdaUpdateWrapper<GameOceanengineAppRoleRegisterLog>()
+                .set(GameOceanengineAppRoleRegisterLog::getBackStatus, backStatus.getBackStatus())
+                .eq(GameOceanengineAppRoleRegisterLog::getId, roleRegisterLog.getId())
+        );
+    }
+
+    private BackStatusEnum doCallback(GameOceanengineAppRoleRegisterLog roleRegisterLog) {
+        GameOceanengineAppUserLog userLog = gameOceanengineAppUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppUserLog>()
+                .eq(GameOceanengineAppUserLog::getGameId, roleRegisterLog.getGameId())
+                .eq(GameOceanengineAppUserLog::getMac, roleRegisterLog.getMac())
+                .eq(GameOceanengineAppUserLog::getImei, roleRegisterLog.getImei())
+                .eq(GameOceanengineAppUserLog::getOaid, roleRegisterLog.getOaid())
+                .eq(GameOceanengineAppUserLog::getAndroidId, roleRegisterLog.getAndroidId())
+                .eq(GameOceanengineAppUserLog::getIdfa, roleRegisterLog.getIdfa())
+                .eq(GameOceanengineAppUserLog::getCaid, roleRegisterLog.getCaid())
+                .eq(GameOceanengineAppUserLog::getAccountId, roleRegisterLog.getAccountId())
+                .orderByDesc(GameOceanengineAppUserLog::getCreateTime)
+                .last("limit 1")
+        );
+        if (userLog == null) {
+            gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()
+                    .mac(roleRegisterLog.getMac())
+                    .imei(roleRegisterLog.getImei())
+                    .oaid(roleRegisterLog.getOaid())
+                    .androidId(roleRegisterLog.getAndroidId())
+                    .idfa(roleRegisterLog.getIdfa())
+                    .caid(roleRegisterLog.getCaid())
+                    .gameId(roleRegisterLog.getGameId())
+                    .accountId(roleRegisterLog.getAccountId())
+                    .eventType(String.valueOf(MiniGameCallback.EventType.ACTIVE_REGISTER.getEventType()))
+                    .eventLogId(roleRegisterLog.getId())
+                    .createTime(LocalDateTime.now())
+                    .backStatus(BackStatusEnum.FAILED.getBackStatus())
+                    .errMsg("找不到用户注册信息")
+                    .build());
+            return BackStatusEnum.FAILED;
+        }
+        //判断创角是否已回传
+        if (gameOceanengineAppBackLogService.count(new LambdaQueryWrapper<GameOceanengineAppBackLog>()
+                .eq(GameOceanengineAppBackLog::getGameId, userLog.getGameId())
+                .eq(GameOceanengineAppBackLog::getMac, userLog.getMac())
+                .eq(GameOceanengineAppBackLog::getImei, userLog.getImei())
+                .eq(GameOceanengineAppBackLog::getOaid, userLog.getOaid())
+                .eq(GameOceanengineAppBackLog::getAndroidId, userLog.getAndroidId())
+                .eq(GameOceanengineAppBackLog::getIdfa, userLog.getIdfa())
+                .eq(GameOceanengineAppBackLog::getCaid, userLog.getCaid())
+                .eq(GameOceanengineAppBackLog::getAccountId, userLog.getAccountId())
+                .eq(GameOceanengineAppBackLog::getEventType, MiniGameCallback.EventType.ACTIVE_REGISTER.getEventType())
+                .eq(GameOceanengineAppBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+        ) > 0) {
+            //创角已回传
+            return BackStatusEnum.NO;
+        }
+        BackStatusEnum backStatus = BackStatusEnum.SUCCESS;
+        String errMsg = null;
+        gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()
+                .mac(roleRegisterLog.getMac())
+                .imei(roleRegisterLog.getImei())
+                .oaid(roleRegisterLog.getOaid())
+                .androidId(roleRegisterLog.getAndroidId())
+                .idfa(roleRegisterLog.getIdfa())
+                .caid(roleRegisterLog.getCaid())
+                .gameId(roleRegisterLog.getGameId())
+                .accountId(roleRegisterLog.getAccountId())
+                .eventType(String.valueOf(MiniGameCallback.EventType.ACTIVE_REGISTER.getEventType()))
+                .eventLogId(roleRegisterLog.getId())
+                .createTime(LocalDateTime.now())
+                .backStatus(backStatus.getBackStatus())
+                .errMsg(errMsg)
+                .build());
+        return backStatus;
+    }
+}

+ 77 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppUserLogServiceImpl.java

@@ -0,0 +1,77 @@
+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.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppUserLogMapper;
+import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppBackLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppUserLog;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.service.IGameOceanengineAppBackLogService;
+import com.zanxiang.game.back.serve.service.IGameOceanengineAppUserLogService;
+import com.zanxiang.game.module.base.ServerInfo;
+import com.zanxiang.game.module.base.rpc.IAgentRpc;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+@Service
+public class GameOceanengineAppUserLogServiceImpl extends ServiceImpl<GameOceanengineAppUserLogMapper, GameOceanengineAppUserLog>
+implements IGameOceanengineAppUserLogService {
+
+    @Autowired
+    private IGameOceanengineAppBackLogService gameOceanengineAppBackLogService;
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IAgentRpc agentRpc;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean callback(GameOceanengineAppUserLog userLog, boolean mustBack) {
+        BackStatusEnum backStatus = doCallback(userLog, mustBack);
+        return update(new LambdaUpdateWrapper<GameOceanengineAppUserLog>()
+                .set(GameOceanengineAppUserLog::getBackStatus, backStatus.getBackStatus())
+                .eq(GameOceanengineAppUserLog::getId, userLog.getId())
+        );
+    }
+
+    private BackStatusEnum doCallback(GameOceanengineAppUserLog userLog, boolean mustBack) {
+        // 是否已经回传过
+        if (!mustBack && gameOceanengineAppBackLogService.count(new LambdaQueryWrapper<GameOceanengineAppBackLog>()
+                .eq(GameOceanengineAppBackLog::getGameId, userLog.getGameId())
+                .eq(GameOceanengineAppBackLog::getMac, userLog.getMac())
+                .eq(GameOceanengineAppBackLog::getImei, userLog.getImei())
+                .eq(GameOceanengineAppBackLog::getOaid, userLog.getOaid())
+                .eq(GameOceanengineAppBackLog::getAndroidId, userLog.getAndroidId())
+                .eq(GameOceanengineAppBackLog::getIdfa, userLog.getIdfa())
+                .eq(GameOceanengineAppBackLog::getCaid, userLog.getCaid())
+                .eq(GameOceanengineAppBackLog::getAccountId, userLog.getAccountId())
+                .eq(GameOceanengineAppBackLog::getEventType, MiniGameCallback.EventType.ACTIVE.getEventType())
+                .eq(GameOceanengineAppBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+        ) > 0) {
+            return BackStatusEnum.NO;
+        }
+        BackStatusEnum backStatus = BackStatusEnum.SUCCESS;
+        gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()
+                .mac(userLog.getMac())
+                .imei(userLog.getImei())
+                .oaid(userLog.getOaid())
+                .androidId(userLog.getAndroidId())
+                .idfa(userLog.getIdfa())
+                .caid(userLog.getCaid())
+                .gameId(userLog.getGameId())
+                .accountId(userLog.getAccountId())
+                .eventType(String.valueOf(MiniGameCallback.EventType.ACTIVE.getEventType()))
+                .eventLogId(userLog.getId())
+                .createTime(LocalDateTime.now())
+                .backStatus(backStatus.getBackStatus())
+                .errMsg(null)
+                .build());
+        return backStatus;
+    }
+}

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

@@ -0,0 +1,14 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.dao.mapper.GameTencentAppBackLogMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppBackLog;
+import com.zanxiang.game.back.serve.service.IGameTencentAppBackLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class GameTencentAppBackLogServiceImpl extends ServiceImpl<GameTencentAppBackLogMapper, GameTencentAppBackLog>
+implements IGameTencentAppBackLogService {
+}

+ 21 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppCallbackServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.back.serve.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentAppCallbackMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentAppCallbackDTO;
@@ -8,7 +9,9 @@ import com.zanxiang.game.back.serve.service.IGameTencentAppCallbackService;
 import com.zanxiang.module.util.DateUtil;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
+import com.zanxiang.module.util.encryption.Md5Util;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.kafka.clients.producer.KafkaProducer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,4 +44,22 @@ implements IGameTencentAppCallbackService {
         }
         return true;
     }
+
+    public GameTencentAppCallback getUserClickInfo(String imei, String oaid, String android, String idfa, String caid) {
+        LambdaQueryWrapper<GameTencentAppCallback> qw = new LambdaQueryWrapper<>();
+        if (StringUtils.isNoneBlank(imei)) {
+            qw.or().eq(GameTencentAppCallback::getMuid, Md5Util.encrypt32(imei.toLowerCase()).toLowerCase());
+        } else if (StringUtils.isNoneBlank(idfa)) {
+            qw.or().eq(GameTencentAppCallback::getMuid, Md5Util.encrypt32(idfa).toLowerCase());
+        }
+        if(StringUtils.isNoneBlank(android)) {
+            qw.or().eq(GameTencentAppCallback::getHashAndroidId, Md5Util.encrypt32(android).toLowerCase());
+        }
+        if(StringUtils.isNoneBlank(oaid)) {
+            qw.or().eq(GameTencentAppCallback::getHashOaid, Md5Util.encrypt32(oaid).toLowerCase());
+        }
+        qw.orderByDesc(GameTencentAppCallback::getClickTime)
+                .last("limit 1");
+        return getOne(qw);
+    }
 }

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

@@ -0,0 +1,14 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.dao.mapper.GameTencentAppOrderMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppOrder;
+import com.zanxiang.game.back.serve.service.IGameTencentAppOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class GameTencentAppOrderServiceImpl extends ServiceImpl<GameTencentAppOrderMapper, GameTencentAppOrder>
+implements IGameTencentAppOrderService {
+}

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

@@ -0,0 +1,14 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.dao.mapper.GameTencentAppOrderSplitLogMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppOrderSplitLog;
+import com.zanxiang.game.back.serve.service.IGameTencentAppOrderSplitLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class GameTencentAppOrderSplitLogServiceImpl extends ServiceImpl<GameTencentAppOrderSplitLogMapper, GameTencentAppOrderSplitLog>
+implements IGameTencentAppOrderSplitLogService {
+}

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

@@ -0,0 +1,14 @@
+package com.zanxiang.game.back.serve.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.back.serve.dao.mapper.GameTencentAppRoleRegisterMapper;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppRoleRegister;
+import com.zanxiang.game.back.serve.service.IGameTencentAppRoleRegisterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class GameTencentAppRoleRegisterServiceImpl extends ServiceImpl<GameTencentAppRoleRegisterMapper, GameTencentAppRoleRegister>
+implements IGameTencentAppRoleRegisterService {
+}

+ 178 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppUserServiceImpl.java

@@ -0,0 +1,178 @@
+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.plugins.pagination.Page;
+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.game.back.serve.dao.mapper.GameTencentAppUserMapper;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentUserDTO;
+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.GameTencentUserVO;
+import com.zanxiang.game.back.serve.service.IGameTencentAppBackLogService;
+import com.zanxiang.game.back.serve.service.IGameTencentAppCallbackService;
+import com.zanxiang.game.back.serve.service.IGameTencentAppUserService;
+import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
+import com.zanxiang.game.module.base.ServerInfo;
+import com.zanxiang.game.module.base.pojo.vo.AgentRpcVO;
+import com.zanxiang.game.module.base.rpc.IAgentRpc;
+import com.zanxiang.module.util.bean.BeanUtil;
+import com.zanxiang.module.util.pojo.ResultVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+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.time.LocalTime;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class GameTencentAppUserServiceImpl extends ServiceImpl<GameTencentAppUserMapper, GameTencentAppUser>
+implements IGameTencentAppUserService {
+    @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
+    private IUserActionSetRpc userActionSetRpc;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+    @Autowired
+    private IGameTencentAppBackLogService gameTencentAppBackLogService;
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IAgentRpc agentRpc;
+    @Autowired
+    private IGameTencentAppCallbackService gameTencentAppCallbackService;
+
+    /*@Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean userBack(GameTencentAppUser userLog, boolean mustBack) {
+        BackStatusEnum backStatus = doCallback(userLog, mustBack);
+        return update(new LambdaUpdateWrapper<GameTencentAppUser>()
+                .set(GameTencentAppUser::getIsBack, backStatus.getBackStatus())
+                .eq(GameTencentAppUser::getId, userLog.getId())
+        );
+    }
+
+
+    @Override
+    public IPage<GameTencentUserVO> tencentUserLogList(GameTencentUserDTO dto) {
+        IPage<GameTencentUser> page = page(dto.toPage(), new LambdaQueryWrapper<GameTencentUser>()
+                .eq(StringUtils.isNotBlank(dto.getChannel()), GameTencentUser::getChannel, dto.getChannel())
+                .ge(dto.getActiveTimeBegin() != null, GameTencentUser::getRegisterTime, dto.getActiveTimeBegin() == null ? null : LocalDateTime.of(dto.getActiveTimeBegin(), LocalTime.MIDNIGHT))
+                .le(dto.getActiveTimeEnd() != null, GameTencentUser::getRegisterTime, dto.getActiveTimeEnd() == null ? null : LocalDateTime.of(dto.getActiveTimeEnd(), LocalTime.MAX))
+                .eq(null != dto.getGameId(), GameTencentUser::getGameId, dto.getGameId())
+                .eq(null != dto.getAdAccountId(), GameTencentUser::getAdAccountId, dto.getAdAccountId())
+                .eq(StringUtils.isNotBlank(dto.getWechatAppId()), GameTencentUser::getWechatAppId, dto.getWechatAppId())
+                .eq(StringUtils.isNotBlank(dto.getWechatOpenid()), GameTencentUser::getWechatOpenid, dto.getWechatOpenid())
+                .eq(null != dto.getIsBack(), GameTencentUser::getIsBack, dto.getIsBack())
+                .orderByDesc(GameTencentUser::getCreateTime)
+        );
+
+        IPage<GameTencentUserVO> result = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        if (CollectionUtils.isEmpty(page.getRecords())) {
+            return result;
+        }
+        result.setRecords(toVOBatch(page.getRecords()));
+        return result;
+    }
+
+    @Override
+    public boolean tencentUserReport(List<Long> ids) {
+        listByIds(ids).forEach(userLog -> {
+            BackStatusEnum backStatus = doCallback(userLog, true);
+            update(new LambdaUpdateWrapper<GameTencentUser>()
+                    .set(GameTencentUser::getIsBack, backStatus.getBackStatus())
+                    .eq(GameTencentUser::getId, userLog.getId())
+            );
+        });
+        return true;
+    }
+
+    private List<GameTencentUserVO> toVOBatch(List<GameTencentUser> logList) {
+        if (CollectionUtils.isEmpty(logList)) {
+            return Collections.emptyList();
+        }
+        Set<String> agentKeys = logList.stream().map(GameTencentUser::getChannel).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
+        Map<String, AgentRpcVO> agentMap = CollectionUtils.isEmpty(agentKeys) ? Collections.emptyMap() : agentRpc.getByAgentKeys(new ArrayList<>(agentKeys))
+                .getData().stream().collect(Collectors.toMap(AgentRpcVO::getAgentKey, Function.identity()));
+        return logList.stream().map(log -> {
+            GameTencentUserVO vo = BeanUtil.copy(log, GameTencentUserVO.class);
+            if (StringUtils.isNotBlank(log.getChannel())) {
+                AgentRpcVO agent = agentMap.get(log.getChannel());
+                if (agent != null) {
+                    vo.setAgentName(agent.getAgentName());
+                }
+            }
+            return vo;
+        }).collect(Collectors.toList());
+
+    }
+
+
+    private BackStatusEnum doCallback(GameTencentAppUser userLog, boolean mustBack) {
+        boolean isBack = mustBack ? false : gameTencentAppBackLogService.count(new LambdaQueryWrapper<GameTencentAppBackLog>()
+                .eq(GameTencentAppBackLog::getGameId, userLog.getGameId())
+                .eq(GameTencentAppBackLog::getMac, userLog.getMac())
+                .eq(GameTencentAppBackLog::getImei, userLog.getImei())
+                .eq(GameTencentAppBackLog::getOaid, userLog.getOaid())
+                .eq(GameTencentAppBackLog::getAndroidId, userLog.getAndroidId())
+                .eq(GameTencentAppBackLog::getIdfa, userLog.getIdfa())
+                .eq(GameTencentAppBackLog::getCaid, userLog.getCaid())
+                .eq(GameTencentAppBackLog::getAdAccountId, userLog.getAdAccountId())
+                .eq(GameTencentAppBackLog::getBackLog, "回传成功")
+        ) > 0;
+        if (isBack) {
+            return BackStatusEnum.NO;
+        }
+
+        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();
+
+        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;
+    }*/
+}