ソースを参照

修改内容:回传日志;手动上报

shishaosong 1 年間 前
コミット
a5dbbadee6
23 ファイル変更1003 行追加76 行削除
  1. 0 3
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/pojo/dto/TencentUserDTO.java
  2. 0 15
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/pojo/enums/UserTypeEnum.java
  3. 67 4
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/BackPolicyController.java
  4. 45 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineOrderLogDTO.java
  5. 45 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineUserLogDTO.java
  6. 71 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameTencentOrderDTO.java
  7. 39 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameTencentUserDTO.java
  8. 11 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentOrder.java
  9. 9 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentUser.java
  10. 63 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineOrderLogVO.java
  11. 63 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineUserLogVO.java
  12. 122 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentOrderVO.java
  13. 93 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentUserVO.java
  14. 1 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameBackPolicyService.java
  15. 9 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineOrderLogService.java
  16. 9 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineUserLogService.java
  17. 9 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentOrderService.java
  18. 8 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentUserService.java
  19. 66 49
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java
  20. 39 4
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java
  21. 30 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineUserLogServiceImpl.java
  22. 109 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java
  23. 95 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentUserServiceImpl.java

+ 0 - 3
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/pojo/dto/TencentUserDTO.java

@@ -47,7 +47,4 @@ public class TencentUserDTO implements Serializable {
      * appid
      */
     private String wechatAppId;
-
-    private String userType;
-
 }

+ 0 - 15
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/tencent/pojo/enums/UserTypeEnum.java

@@ -1,15 +0,0 @@
-package com.zanxiang.game.back.base.tencent.pojo.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum UserTypeEnum {
-    REGISTER("REGISTER","注册"),
-    CREATE_ROLE("CREATE_ROLE","创角");
-
-    private String userType;
-
-    private String description;
-}

+ 67 - 4
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/BackPolicyController.java

@@ -2,10 +2,9 @@ package com.zanxiang.game.back.serve.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
-import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyDTO;
-import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
-import com.zanxiang.game.back.serve.pojo.vo.GameBackPolicyVO;
-import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
+import com.zanxiang.game.back.serve.pojo.dto.*;
+import com.zanxiang.game.back.serve.pojo.vo.*;
+import com.zanxiang.game.back.serve.service.*;
 import com.zanxiang.module.util.pojo.ResultVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -20,6 +19,14 @@ import java.util.List;
 public class BackPolicyController {
     @Autowired
     private IGameBackPolicyService gameBackPolicyService;
+    @Autowired
+    private IGameTencentUserService tencentUserService;
+    @Autowired
+    private IGameTencentOrderService tencentOrderService;
+    @Autowired
+    private IGameOceanengineOrderLogService oceanengineOrderLogService;
+    @Autowired
+    private IGameOceanengineUserLogService oceanengineUserLogService;
 
     @PreAuthorize(permissionKey = "gameBack:policy:create")
     @PostMapping("/policy/create")
@@ -48,4 +55,60 @@ public class BackPolicyController {
     public ResultVO<IPage<GameBackPolicyVO>> policyList(@RequestBody GameBackPolicyListDTO dto) {
         return ResultVO.ok(gameBackPolicyService.policyList(dto));
     }
+
+    @PreAuthorize(permissionKey = "gameBack:tencent:orderLogs")
+    @PostMapping("/tencent/orderLogs")
+    @ApiOperation(value = "腾讯订单回传日志列表")
+    public ResultVO<IPage<GameTencentOrderVO>> tencentOrderLogList(@RequestBody GameTencentOrderDTO dto) {
+        return ResultVO.ok(tencentOrderService.tencentOrderLogList(dto));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencent:orderReport")
+    @PostMapping("/tencent/orderReport/{ids}")
+    @ApiOperation(value = "腾讯订单手动上报")
+    public ResultVO<Boolean> tencentOrderReport(@PathVariable("ids") List<Long> ids) {
+        return ResultVO.ok(tencentOrderService.tencentOrderReport(ids));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencent:userLogs")
+    @PostMapping("/tencent/userLogs")
+    @ApiOperation(value = "腾讯用户回传日志列表")
+    public ResultVO<IPage<GameTencentUserVO>> tencentUserLogList(@RequestBody GameTencentUserDTO dto) {
+        return ResultVO.ok(tencentUserService.tencentUserLogList(dto));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencent:userReport")
+    @PostMapping("/tencent/userReport/{ids}")
+    @ApiOperation(value = "腾讯用户手动上报")
+    public ResultVO<Boolean> tencentUserReport(@PathVariable("ids") List<Long> ids) {
+        return ResultVO.ok(tencentUserService.tencentUserReport(ids));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengine:orderLogs")
+    @PostMapping("/oceanengine/orderLogs")
+    @ApiOperation(value = "头条订单回传日志列表")
+    public ResultVO<IPage<GameOceanengineOrderLogVO>> oceanengineOrderLogList(@RequestBody GameOceanengineOrderLogDTO dto) {
+        return ResultVO.ok(oceanengineOrderLogService.oceanengineOrderLogList(dto));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengine:orderReport")
+    @PostMapping("/oceanengine/orderReport/{ids}")
+    @ApiOperation(value = "头条订单手动上报")
+    public ResultVO<Boolean> oceanengineOrderReport(@PathVariable("ids") List<Long> ids) {
+        return ResultVO.ok(oceanengineOrderLogService.oceanengineOrderReport(ids));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengine:userLogs")
+    @PostMapping("/oceanengine/userLogs")
+    @ApiOperation(value = "头条用户回传日志列表")
+    public ResultVO<IPage<GameOceanengineUserLogVO>> oceanengineUserLogList(@RequestBody GameOceanengineUserLogDTO dto) {
+        return ResultVO.ok(oceanengineUserLogService.oceanengineUserLogList(dto));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengine:userReport")
+    @PostMapping("/oceanengine/userReport/{ids}")
+    @ApiOperation(value = "头条用户手动上报")
+    public ResultVO<Boolean> oceanengineUserReport(@PathVariable("ids") List<Long> ids) {
+        return ResultVO.ok(oceanengineUserLogService.oceanengineUserReport(ids));
+    }
 }

+ 45 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineOrderLogDTO.java

@@ -0,0 +1,45 @@
+package com.zanxiang.game.back.serve.pojo.dto;
+
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderLog;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineOrderLogDTO extends BaseListDTO<GameOceanengineOrderLog> {
+    @ApiModelProperty("小游戏ID")
+    private String appId;
+
+    @ApiModelProperty("用户OpenID")
+    private String openId;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("支付状态,0:预下单,1:待支付,2:支付成功,-1:已取消")
+    private Integer orderStatus;
+
+    @ApiModelProperty("回传状态")
+    private Integer backStatus;
+}

+ 45 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineUserLogDTO.java

@@ -0,0 +1,45 @@
+package com.zanxiang.game.back.serve.pojo.dto;
+
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineUserLogDTO extends BaseListDTO<GameOceanengineUserLog> {
+    @ApiModelProperty("小游戏ID")
+    private String appId;
+
+    @ApiModelProperty("用户OpenID")
+    private String openId;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("头条2.0-项目ID")
+    private Long projectId;
+
+    @ApiModelProperty("头条2.0-广告ID")
+    private Long promotionId;
+
+    @ApiModelProperty("回传状态")
+    private Integer backStatus;
+}

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

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

+ 39 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameTencentUserDTO.java

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

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

@@ -90,4 +90,15 @@ public class GameTencentOrder implements Serializable {
      * 支付时间
      */
     private LocalDateTime payTime;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private Long updateBy;
+
+    /**
+     * 回传日志
+     */
+    private String backLog;
 }

+ 9 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentUser.java

@@ -66,6 +66,14 @@ public class GameTencentUser implements Serializable {
      */
     private Integer isBack;
 
-    private String userType;
+    private LocalDateTime createTime;
 
+    private LocalDateTime updateTime;
+
+    private Long updateBy;
+
+    /**
+     * 回传日志
+     */
+    private String backLog;
 }

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

@@ -0,0 +1,63 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineOrderLogVO {
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("小游戏ID")
+    private String appId;
+
+    @ApiModelProperty("用户OpenID")
+    private String openId;
+
+    @ApiModelProperty("用户UnionID")
+    private String unionId;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("广告回传Token")
+    private String accountReportToken;
+
+    @ApiModelProperty("广告回传URL")
+    private String accountReportUrl;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("订单金额(分)")
+    private Long amount;
+
+    @ApiModelProperty("支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消")
+    private Integer orderStatus;
+
+    @ApiModelProperty("下单时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("支付时间")
+    private LocalDateTime payTime;
+
+    @ApiModelProperty("回传状态 -1:回传失败;0:未回传;1:回传")
+    private Integer backStatus;
+}

+ 63 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineUserLogVO.java

@@ -0,0 +1,63 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineUserLogVO {
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("小游戏ID")
+    private String appId;
+
+    @ApiModelProperty("用户OpenID")
+    private String openId;
+
+    @ApiModelProperty("用户UnionID")
+    private String unionId;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("广告回传Token")
+    private String accountReportToken;
+
+    @ApiModelProperty("广告回传URL")
+    private String accountReportUrl;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("注册Token")
+    private String clueToken;
+
+    @ApiModelProperty("头条2.0-项目ID")
+    private Long projectId;
+
+    @ApiModelProperty("头条2.0-广告ID")
+    private Long promotionId;
+
+    @ApiModelProperty("请求ID")
+    private String reqId;
+
+    @ApiModelProperty("注册/激活时间")
+    private LocalDateTime activeTime;
+
+    @ApiModelProperty("回传状态")
+    private Integer backStatus;
+}

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

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

+ 93 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentUserVO.java

@@ -0,0 +1,93 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 游戏腾讯用户表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-06-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameTencentUserVO {
+    private Long id;
+
+    /**
+     * 渠道号
+     */
+    @ApiModelProperty("渠道号")
+    private String channel;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    /**
+     * 广告账号ID
+     */
+    @ApiModelProperty("广告账号ID")
+    private Long adAccountId;
+
+    /**
+     * 注册时间
+     */
+    @ApiModelProperty("注册时间")
+    private LocalDateTime registerTime;
+
+    /**
+     * 关注时间
+     */
+    @ApiModelProperty("关注时间")
+    private LocalDateTime subscribeTime;
+
+    /**
+     * openid
+     */
+    @ApiModelProperty("openid")
+    private String wechatOpenid;
+
+    /**
+     * appid
+     */
+    @ApiModelProperty("appid")
+    private String wechatAppId;
+
+    /**
+     * 0:未回传;1:回传
+     */
+    @ApiModelProperty("回传状态:-1:回传失败;0:未回传;1:回传")
+    private Integer isBack;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("更新者id")
+    private Long updateBy;
+
+    @ApiModelProperty("更新者名称")
+    private String updateName;
+
+    /**
+     * 回传日志
+     */
+    @ApiModelProperty("回传日志")
+    private String backLog;
+}

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

@@ -8,6 +8,7 @@ import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.back.serve.pojo.vo.GameBackPolicyVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentOrderVO;
 
 import java.util.List;
 

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

@@ -1,9 +1,18 @@
 package com.zanxiang.game.back.serve.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineOrderLogDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineOrderLogVO;
+
+import java.util.List;
 
 public interface IGameOceanengineOrderLogService extends IService<GameOceanengineOrderLog> {
 
     boolean callback(GameOceanengineOrderLog orderLog, boolean mustBack);
+
+    IPage<GameOceanengineOrderLogVO> oceanengineOrderLogList(GameOceanengineOrderLogDTO dto);
+
+    boolean oceanengineOrderReport(List<Long> ids);
 }

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

@@ -1,9 +1,18 @@
 package com.zanxiang.game.back.serve.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineUserLogDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineUserLogVO;
+
+import java.util.List;
 
 public interface IGameOceanengineUserLogService extends IService<GameOceanengineUserLog> {
 
     boolean callback(GameOceanengineUserLog userLog, boolean mustBack);
+
+    IPage<GameOceanengineUserLogVO> oceanengineUserLogList(GameOceanengineUserLogDTO dto);
+
+    boolean oceanengineUserReport(List<Long> ids);
 }

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

@@ -1,7 +1,13 @@
 package com.zanxiang.game.back.serve.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentOrderDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentOrderVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IGameTencentOrderService extends IService<GameTencentOrder> {
 
+    IPage<GameTencentOrderVO> tencentOrderLogList(GameTencentOrderDTO dto);
+
+    boolean tencentOrderReport(List<Long> ids);
 }

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

@@ -1,7 +1,12 @@
 package com.zanxiang.game.back.serve.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentUserDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentUserVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IGameTencentUserService extends IService<GameTencentUser> {
 
+    IPage<GameTencentUserVO> tencentUserLogList(GameTencentUserDTO dto);
+
+    boolean tencentUserReport(List<Long> ids);
 }

+ 66 - 49
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java

@@ -15,11 +15,9 @@ import com.zanxiang.game.back.base.tencent.pojo.dto.TencentUserDTO;
 import com.zanxiang.game.back.serve.dao.mapper.GameBackPolicyMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
-import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
+import com.zanxiang.game.back.serve.pojo.entity.*;
 import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameBackPolicyVO;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
@@ -69,42 +67,31 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean tencentOrderBack(TencentOrderDTO dto) {
-        GameTencentOrder gameTencentOrder = gameTencentOrderService.getOne(new LambdaQueryWrapper<GameTencentOrder>()
-                .eq(GameTencentOrder::getWechatAppId, dto.getWechatAppId())
-                .eq(GameTencentOrder::getOrderId, dto.getOrderId())
-                .eq(GameTencentOrder::getOrderStatus,dto.getOrderStatus()));
-
         //订单保存
-        if (null == gameTencentOrder){
-            gameTencentOrder = GameTencentOrder.builder()
-                    .orderId(dto.getOrderId())
-                    .channel(dto.getChannel())
-                    .rechargeMoney(dto.getRechargeMoney())
-                    .rechargeTime(dto.getRechargeTime())
-                    .subscribeTime(dto.getSubscribeTime())
-                    .registerTime(dto.getRegisterTime())
-                    .wechatAppId(dto.getWechatAppId())
-                    .wechatOpenid(dto.getWechatOpenid())
-                    .orderStatus(dto.getOrderStatus())
-                    .payTime(dto.getPayTime())
-                    .isBack(0)
-                    .build();
-            gameTencentOrderService.save(gameTencentOrder);
-        }
+        GameTencentOrder gameTencentOrder = GameTencentOrder.builder()
+                .orderId(dto.getOrderId())
+                .channel(dto.getChannel())
+                .rechargeMoney(dto.getRechargeMoney())
+                .rechargeTime(dto.getRechargeTime())
+                .subscribeTime(dto.getSubscribeTime())
+                .registerTime(dto.getRegisterTime())
+                .wechatAppId(dto.getWechatAppId())
+                .wechatOpenid(dto.getWechatOpenid())
+                .orderStatus(dto.getOrderStatus())
+                .payTime(dto.getPayTime())
+                .isBack(BackStatusEnum.NO.getBackStatus())
+                .build();
+        gameTencentOrderService.save(gameTencentOrder);
         if (!dto.getOrderStatus().equals(COMPLETE_ORDER) && !dto.getOrderStatus().equals(PURCHASE)) {
             return true;
         }
 
-        String actionType;
-        if (dto.getOrderStatus().equals(PURCHASE)){
-            actionType = ActionTypeEnum.PURCHASE.getActionType();
-        }else {
-            actionType = ActionTypeEnum.COMPLETE_ORDER.getActionType();
-        }
+        String actionType = gameTencentOrder.getOrderStatus().equals(PURCHASE) ?
+                ActionTypeEnum.PURCHASE.getActionType() : ActionTypeEnum.COMPLETE_ORDER.getActionType();
         DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
                 .appId(dto.getWechatAppId())
                 .action(UserActionRpcDTO.builder()
-                        .actionTime(dto.getRechargeTime())
+                        .actionTime(dto.getOrderStatus().equals(PURCHASE) ? dto.getPayTime() : dto.getRechargeTime())
                         .actionType(actionType)
                         .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
                                 .wechatAppId(dto.getWechatAppId())
@@ -132,15 +119,31 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                     .eq(GameBackPolicy::getGameId, dto.getGameId())
                     .isNull(GameBackPolicy::getAccountId));
         }
+
+        boolean doBack = BackPolicyUtil.backOrder(gameBackPolicy, dto.getRechargeMoney(), backUnit -> Long.valueOf(
+                gameTencentOrderService.list(new LambdaQueryWrapper<GameTencentOrder>()
+                        .eq(GameTencentOrder::getGameId, dto.getGameId())
+                        .eq(GameTencentOrder::getWechatAppId, dto.getWechatAppId())
+                        .eq(GameTencentOrder::getAdAccountId, dto.getAdAccountId())
+                        .eq(GameTencentOrder::getOrderStatus, 2)
+                        .last("limit " + backUnit)
+                        .orderByDesc(GameTencentOrder::getCreateTime)
+                ).stream().filter(order -> order.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()
+        ).intValue());
         try {
-            if (BackPolicyUtil.isBackOrder(gameBackPolicy, dto.getRechargeMoney())) {
+            if (dto.getOrderStatus().equals(COMPLETE_ORDER) || doBack) {
                 userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-                gameTencentBackLogService.save(gameTencentBackLog);
-                gameTencentOrder.setIsBack(1);
+                gameTencentOrder.setIsBack(BackStatusEnum.FAILED.getBackStatus());
                 gameTencentOrderService.updateById(gameTencentOrder);
+
+                gameTencentBackLogService.save(gameTencentBackLog);
             }
         } catch (Exception e) {
             log.error("回传腾讯订单失败,失败原因:{}", e.getMessage());
+            gameTencentOrder.setBackLog(e.getMessage());
+            gameTencentOrder.setIsBack(BackStatusEnum.FAILED.getBackStatus());
+            gameTencentOrderService.updateById(gameTencentOrder);
+
             gameTencentBackLog.setBackLog(e.getMessage());
             gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
             return false;
@@ -151,18 +154,27 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean tencentUserBack(TencentUserDTO dto) {
-        GameTencentUser gameTencentUser = GameTencentUser.builder()
-                .adAccountId(dto.getAdAccountId())
-                .gameId(dto.getGameId())
-                .channel(dto.getChannel())
-                .subscribeTime(dto.getSubscribeTime())
-                .registerTime(dto.getRegisterTime())
-                .wechatAppId(dto.getWechatAppId())
-                .wechatOpenid(dto.getWechatOpenid())
-                .userType(dto.getUserType())
-                .isBack(0)
-                .build();
-        gameTencentUserService.save(gameTencentUser);
+        GameTencentUser gameTencentUser = gameTencentUserService.getOne(new LambdaQueryWrapper<GameTencentUser>()
+                .eq(GameTencentUser::getWechatOpenid, dto.getWechatOpenid())
+                .eq(GameTencentUser::getGameId, dto.getGameId())
+                .eq(GameTencentUser::getWechatAppId, dto.getWechatAppId())
+                .eq(GameTencentUser::getAdAccountId, dto.getAdAccountId())
+                .eq(GameTencentUser::getIsBack,BackStatusEnum.SUCCESS.getBackStatus())
+        );
+        if (null == gameTencentUser){
+            //用户保存
+            gameTencentUser = GameTencentUser.builder()
+                    .adAccountId(dto.getAdAccountId())
+                    .gameId(dto.getGameId())
+                    .channel(dto.getChannel())
+                    .subscribeTime(dto.getSubscribeTime())
+                    .registerTime(dto.getRegisterTime())
+                    .wechatAppId(dto.getWechatAppId())
+                    .wechatOpenid(dto.getWechatOpenid())
+                    .isBack(BackStatusEnum.NO.getBackStatus())
+                    .build();
+            gameTencentUserService.save(gameTencentUser);
+        }
 
         DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
                 .appId(dto.getWechatAppId())
@@ -187,11 +199,16 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .build();
         try {
             userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-            gameTencentBackLogService.save(gameTencentBackLog);
-            gameTencentUser.setIsBack(1);
+            gameTencentUser.setIsBack(BackStatusEnum.SUCCESS.getBackStatus());
             gameTencentUserService.updateById(gameTencentUser);
+
+            gameTencentBackLogService.save(gameTencentBackLog);
         } catch (Exception e) {
             log.error("回传腾讯用户失败,失败原因:{}", e.getMessage());
+            gameTencentUser.setBackLog(e.getMessage());
+            gameTencentUser.setIsBack(BackStatusEnum.FAILED.getBackStatus());
+            gameTencentUserService.updateById(gameTencentUser);
+
             gameTencentBackLog.setBackLog(e.getMessage());
             gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
             return false;

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

@@ -2,22 +2,32 @@ package com.zanxiang.game.back.serve.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.advertising.tencent.base.pojo.dto.DataReportOfAppIdRpcDTO;
+import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineOrderLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
 import com.zanxiang.game.back.serve.oceanengine.OceanengineCallbackException;
-import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
-import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineBackLog;
-import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderLog;
-import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineOrderLogDTO;
+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.GameOceanengineOrderLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentOrderVO;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineBackLogService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineOrderLogService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineUserLogService;
 import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
+import com.zanxiang.module.util.bean.BeanUtil;
 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;
@@ -37,6 +47,8 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
     private IGameOceanengineUserLogService gameOceanengineUserLogService;
     @Autowired
     private IGameOceanengineBackLogService gameOceanengineBackLogService;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -90,6 +102,29 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
         return false;
     }
 
+    @Override
+    public IPage<GameOceanengineOrderLogVO> oceanengineOrderLogList(GameOceanengineOrderLogDTO dto) {
+        return page(dto.toPage(), new LambdaQueryWrapper<GameOceanengineOrderLog>()
+                .eq(StringUtils.isNotBlank(dto.getAgentKey()), GameOceanengineOrderLog::getAgentKey, dto.getAgentKey())
+                .eq(null != dto.getGameId(), GameOceanengineOrderLog::getGameId, dto.getGameId())
+                .eq(null != dto.getAccountId(), GameOceanengineOrderLog::getAccountId, dto.getAccountId())
+                .eq(StringUtils.isNotBlank(dto.getAppId()), GameOceanengineOrderLog::getAppId, dto.getAppId())
+                .eq(StringUtils.isNotBlank(dto.getOpenId()), GameOceanengineOrderLog::getOpenId, dto.getOpenId())
+                .eq(StringUtils.isNotBlank(dto.getOrderNo()), GameOceanengineOrderLog::getOrderNo, dto.getOrderNo())
+                .eq(null != dto.getBackStatus(), GameOceanengineOrderLog::getBackStatus, dto.getBackStatus())
+                .eq(null != dto.getOrderStatus(), GameOceanengineOrderLog::getOrderStatus, dto.getOrderStatus())
+                .orderByDesc(GameOceanengineOrderLog::getCreateTime)
+        ).convert(item -> BeanUtil.copy(item, GameOceanengineOrderLogVO.class));
+    }
+
+    @Override
+    public boolean oceanengineOrderReport(List<Long> ids) {
+        baseMapper.selectBatchIds(ids).stream()
+                .filter(item -> !item.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus()))
+                .forEach(oceanengineOrderLog -> callback(oceanengineOrderLog,true));
+        return true;
+    }
+
     private BackStatusEnum doCallback(GameOceanengineOrderLog orderLog) {
         GameOceanengineUserLog userLog = gameOceanengineUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineUserLog>()
                 .eq(GameOceanengineUserLog::getGameId, orderLog.getGameId())

+ 30 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineUserLogServiceImpl.java

@@ -2,22 +2,30 @@ package com.zanxiang.game.back.serve.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineUserLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
 import com.zanxiang.game.back.serve.oceanengine.OceanengineCallbackException;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineUserLogDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineBackLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineOrderLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineUserLogVO;
 import com.zanxiang.game.back.serve.service.IGameOceanengineBackLogService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineUserLogService;
+import com.zanxiang.module.util.bean.BeanUtil;
 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.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Slf4j
 @Service
@@ -39,6 +47,28 @@ public class GameOceanengineUserLogServiceImpl extends ServiceImpl<GameOceanengi
         );
     }
 
+    @Override
+    public IPage<GameOceanengineUserLogVO> oceanengineUserLogList(GameOceanengineUserLogDTO dto) {
+        return page(dto.toPage(), new LambdaQueryWrapper<GameOceanengineUserLog>()
+                .eq(StringUtils.isNotBlank(dto.getAgentKey()), GameOceanengineUserLog::getAgentKey, dto.getAgentKey())
+                .eq(null != dto.getGameId(), GameOceanengineUserLog::getGameId, dto.getGameId())
+                .eq(null != dto.getAccountId(), GameOceanengineUserLog::getAccountId, dto.getAccountId())
+                .eq(StringUtils.isNotBlank(dto.getAppId()), GameOceanengineUserLog::getAppId, dto.getAppId())
+                .eq(StringUtils.isNotBlank(dto.getOpenId()), GameOceanengineUserLog::getOpenId, dto.getOpenId())
+                .eq(null != dto.getBackStatus(), GameOceanengineUserLog::getBackStatus, dto.getBackStatus())
+                .eq(null != dto.getProjectId(), GameOceanengineUserLog::getProjectId, dto.getProjectId())
+                .eq(null != dto.getPromotionId(), GameOceanengineUserLog::getPromotionId, dto.getPromotionId())
+        ).convert(item -> BeanUtil.copy(item, GameOceanengineUserLogVO.class));
+    }
+
+    @Override
+    public boolean oceanengineUserReport(List<Long> ids) {
+        baseMapper.selectBatchIds(ids).stream()
+                .filter(item -> !item.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus()))
+                .forEach(oceanengineUserLog -> callback(oceanengineUserLog,true));
+        return true;
+    }
+
     private BackStatusEnum doCallback(GameOceanengineUserLog userLog, boolean mustBack) {
         // 是否已经回传过
         boolean isBack = mustBack ? false : gameOceanengineBackLogService.count(new LambdaQueryWrapper<GameOceanengineBackLog>()

+ 109 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java

@@ -1,11 +1,39 @@
 package com.zanxiang.game.back.serve.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
+import com.zanxiang.advertising.tencent.base.pojo.dto.DataReportOfAppIdRpcDTO;
+import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
+import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentOrderDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentOrderMapper;
+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.GameTencentOrderVO;
+import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
+import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.module.util.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum.PURCHASE;
+
 /**
  * <p>
  * 游戏腾讯订单表 服务实现类
@@ -14,7 +42,88 @@ import org.springframework.stereotype.Service;
  * @author auto
  * @since 2023-06-01
  */
+@Slf4j
 @Service
 public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMapper, GameTencentOrder> implements IGameTencentOrderService {
+    @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
+    private IUserActionSetRpc userActionSetRpc;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+    @Autowired
+    private IGameTencentBackLogService gameTencentBackLogService;
+    /**
+     * 支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消
+     */
+    private static final Integer COMPLETE_ORDER = 0;
+    private static final Integer PURCHASE = 2;
+
+
+    @Override
+    public IPage<GameTencentOrderVO> tencentOrderLogList(GameTencentOrderDTO dto) {
+        return page(dto.toPage(), new LambdaQueryWrapper<GameTencentOrder>()
+                .eq(StringUtils.isNotBlank(dto.getChannel()), GameTencentOrder::getChannel, dto.getChannel())
+                .eq(null != dto.getGameId(), GameTencentOrder::getGameId, dto.getGameId())
+                .eq(null != dto.getAdAccountId(), GameTencentOrder::getAdAccountId, dto.getAdAccountId())
+                .eq(StringUtils.isNotBlank(dto.getWechatAppId()), GameTencentOrder::getWechatAppId, dto.getWechatAppId())
+                .eq(StringUtils.isNotBlank(dto.getWechatOpenid()), GameTencentOrder::getWechatOpenid, dto.getWechatOpenid())
+                .eq(StringUtils.isNotBlank(dto.getOrderId()), GameTencentOrder::getOrderId, dto.getOrderId())
+                .eq(null != dto.getIsBack(), GameTencentOrder::getIsBack, dto.getIsBack())
+                .eq(null != dto.getOrderStatus(), GameTencentOrder::getOrderStatus, dto.getOrderStatus())
+                .orderByDesc(GameTencentOrder::getCreateTime)
+        ).convert(item -> {
+            GameTencentOrderVO copy = BeanUtil.copy(item, GameTencentOrderVO.class);
+            copy.setUpdateName(null == item.getUpdateBy() ? null : sysUserRpc.getById(item.getUpdateBy()).getData().getNickName());
+            return copy;
+        });
+    }
+
+    @Override
+    public boolean tencentOrderReport(List<Long> ids) {
+        baseMapper.selectBatchIds(ids).stream()
+                .filter(item -> !item.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus()))
+                .forEach(gameTencentOrder -> {
+                    String actionType = gameTencentOrder.getOrderStatus().equals(PURCHASE) ?
+                            ActionTypeEnum.PURCHASE.getActionType() : ActionTypeEnum.COMPLETE_ORDER.getActionType();
+                    DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
+                            .appId(gameTencentOrder.getWechatAppId())
+                            .action(UserActionRpcDTO.builder()
+                                    .actionTime(gameTencentOrder.getOrderStatus().equals(PURCHASE) ? gameTencentOrder.getPayTime() : gameTencentOrder.getRechargeTime())
+                                    .actionType(actionType)
+                                    .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
+                                            .wechatAppId(gameTencentOrder.getWechatAppId())
+                                            .wechatOpenid(gameTencentOrder.getWechatOpenid())
+                                            .build())
+                                    .build())
+                            .build();
+
+                    GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
+                            .gameId(gameTencentOrder.getGameId())
+                            .adAccountId(gameTencentOrder.getAdAccountId())
+                            .actionTime(gameTencentOrder.getOrderStatus().equals(PURCHASE) ? gameTencentOrder.getPayTime() : gameTencentOrder.getRechargeTime())
+                            .createTime(LocalDateTime.now())
+                            .actionType(actionType)
+                            .orderId(gameTencentOrder.getOrderId())
+                            .wechatAppId(gameTencentOrder.getWechatAppId())
+                            .wechatOpenid(gameTencentOrder.getWechatOpenid())
+                            .build();
+                    gameTencentOrder.setUpdateTime(LocalDateTime.now());
+                    gameTencentOrder.setUpdateBy(SecurityUtil.getUserId());
+                    try {
+                        userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
+                        gameTencentOrder.setIsBack(BackStatusEnum.SUCCESS.getBackStatus());
+                        updateById(gameTencentOrder);
+
+                        gameTencentBackLogService.save(gameTencentBackLog);
+                    } catch (Exception e) {
+                        log.error("回传腾讯订单失败,失败原因:{}", e.getMessage());
+                        gameTencentOrder.setBackLog(e.getMessage());
+                        gameTencentOrder.setIsBack(BackStatusEnum.FAILED.getBackStatus());
+                        updateById(gameTencentOrder);
 
+                        gameTencentBackLog.setBackLog(e.getMessage());
+                        gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
+                    }
+                });
+        return true;
+    }
 }

+ 95 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentUserServiceImpl.java

@@ -1,11 +1,36 @@
 package com.zanxiang.game.back.serve.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
+import com.zanxiang.advertising.tencent.base.pojo.dto.DataReportOfAppIdRpcDTO;
+import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
+import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.back.serve.pojo.dto.GameTencentUserDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentUserMapper;
+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.GameTencentOrderVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentUserVO;
+import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentUserService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.module.util.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
  * <p>
  * 游戏腾讯用户表 服务实现类
@@ -14,7 +39,77 @@ import org.springframework.stereotype.Service;
  * @author auto
  * @since 2023-06-01
  */
+@Slf4j
 @Service
 public class GameTencentUserServiceImpl extends ServiceImpl<GameTencentUserMapper, GameTencentUser> implements IGameTencentUserService {
+    @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
+    private IUserActionSetRpc userActionSetRpc;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+    @Autowired
+    private IGameTencentBackLogService gameTencentBackLogService;
+    @Override
+    public IPage<GameTencentUserVO> tencentUserLogList(GameTencentUserDTO dto) {
+        return page(dto.toPage(), new LambdaQueryWrapper<GameTencentUser>()
+                .eq(StringUtils.isNotBlank(dto.getChannel()), GameTencentUser::getChannel, dto.getChannel())
+                .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)
+        ).convert(item -> {
+            GameTencentUserVO copy = BeanUtil.copy(item, GameTencentUserVO.class);
+            copy.setUpdateName(null == item.getUpdateBy() ? null : sysUserRpc.getById(item.getUpdateBy()).getData().getNickName());
+            return copy;
+        });
+    }
+
+    @Override
+    public boolean tencentUserReport(List<Long> ids) {
+        baseMapper.selectBatchIds(ids).stream()
+                .filter(item -> !item.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus()))
+                .forEach(gameTencentUser -> {
+                    String actionType = ActionTypeEnum.REGISTER.getActionType();
+                    DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
+                            .appId(gameTencentUser.getWechatAppId())
+                            .action(UserActionRpcDTO.builder()
+                                    .actionTime(gameTencentUser.getRegisterTime())
+                                    .actionType(actionType)
+                                    .userId(UserActionRpcDTO.UserIdRpcDTO.builder()
+                                            .wechatAppId(gameTencentUser.getWechatAppId())
+                                            .wechatOpenid(gameTencentUser.getWechatOpenid())
+                                            .build())
+                                    .build())
+                            .build();
+
+                    GameTencentBackLog gameTencentBackLog = GameTencentBackLog.builder()
+                            .gameId(gameTencentUser.getGameId())
+                            .adAccountId(gameTencentUser.getAdAccountId())
+                            .actionTime(gameTencentUser.getRegisterTime())
+                            .createTime(LocalDateTime.now())
+                            .actionType(actionType)
+                            .wechatAppId(gameTencentUser.getWechatAppId())
+                            .wechatOpenid(gameTencentUser.getWechatOpenid())
+                            .build();
+                    gameTencentUser.setUpdateTime(LocalDateTime.now());
+                    gameTencentUser.setUpdateBy(SecurityUtil.getUserId());
+                    try {
+                        userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
+                        gameTencentUser.setIsBack(BackStatusEnum.SUCCESS.getBackStatus());
+                        updateById(gameTencentUser);
+
+                        gameTencentBackLogService.save(gameTencentBackLog);
+                    } catch (Exception e) {
+                        log.error("回传腾讯用户失败,失败原因:{}", e.getMessage());
+                        gameTencentUser.setBackLog(e.getMessage());
+                        gameTencentUser.setIsBack(BackStatusEnum.FAILED.getBackStatus());
+                        updateById(gameTencentUser);
 
+                        gameTencentBackLog.setBackLog(e.getMessage());
+                        gameTencentBackLogService.saveOrUpdate(gameTencentBackLog);
+                    }
+                });
+        return true;
+    }
 }