瀏覽代碼

修改内容:推广

shishaosong 1 年之前
父節點
當前提交
1927a95128
共有 28 個文件被更改,包括 1163 次插入21 次删除
  1. 1 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AccountAgentDayController.java
  2. 9 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameDataController.java
  3. 46 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataH5DTO.java
  4. 3 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataWaterDTO.java
  5. 2 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteDayDTO.java
  6. 2 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteDayTotalDTO.java
  7. 2 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteTotalDTO.java
  8. 2 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RechargeRankingDTO.java
  9. 1 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAccountAgentDay.java
  10. 4 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynAmount.java
  11. 66 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5LeadBuyGame.java
  12. 66 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5LeadNatureGame.java
  13. 66 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5NatureGame.java
  14. 66 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5PayGame.java
  15. 4 3
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsEverydayWater.java
  16. 7 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsH5GameDay.java
  17. 3 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPlayerRechargeRanking.java
  18. 123 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataH5VO.java
  19. 2 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataWaterVO.java
  20. 4 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GamePromoteDayVO.java
  21. 2 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameRechargeRankingVO.java
  22. 69 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/H5BuyUserVO.java
  23. 69 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/H5NatureUserVO.java
  24. 3 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerRechargeRankingVO.java
  25. 4 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IGameDataService.java
  26. 21 4
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java
  27. 506 5
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java
  28. 10 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RankingServiceImpl.java

+ 1 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AccountAgentDayController.java

@@ -30,7 +30,7 @@ public class AccountAgentDayController {
     }
 
     @ApiOperation(value = "推广每日数据总计")
-    @PreAuthorize(permissionKey = "gameData:accountAgent:dayTotal")
+//    @PreAuthorize(permissionKey = "gameData:accountAgent:dayTotal")
     @PostMapping("/day/total")
     public ResultVO<GamePromoteDayTotalVO> accountAgentDayTotal(@RequestBody GamePromoteDayTotalDTO dto) {
         return ResultVO.ok(accountAgentDayService.accountAgentDayTotal(dto));

+ 9 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameDataController.java

@@ -3,10 +3,12 @@ package com.zanxiang.game.data.serve.controller;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataAgainDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
+import com.zanxiang.game.data.serve.pojo.dto.GameDataH5DTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataWaterDTO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataAgainDayVO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataDayVO;
+import com.zanxiang.game.data.serve.pojo.vo.GameDataH5VO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataTotalVO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataWaterVO;
 import com.zanxiang.game.data.serve.service.IGameDataService;
@@ -49,7 +51,12 @@ public class GameDataController {
         return ResultVO.ok(gameDataService.getGameDataDay(dto));
     }
 
-
+    @ApiOperation(value = "h5游戏充值")
+    //@PreAuthorize(permissionKey = "gameData:adsGameDay:h5")
+    @PostMapping("/h5")
+    public ResultVO<Page<GameDataH5VO>> getH5Recharge(@RequestBody GameDataH5DTO dto) {
+        return ResultVO.ok(gameDataService.getH5Recharge(dto));
+    }
     @ApiOperation(value = "游戏总数据")
     @PreAuthorize(permissionKey = "gameData:adsGameDay:total")
     @PostMapping("/total")
@@ -59,7 +66,7 @@ public class GameDataController {
     }
 
     @ApiOperation(value = "每日流水贡献")
-    @PreAuthorize(permissionKey = "gameData:adsGameDay:water")
+//    @PreAuthorize(permissionKey = "gameData:adsGameDay:water")
     @PostMapping("/water")
     public ResultVO<Page<GameDataWaterVO>> getGameDataWater(@RequestBody GameDataWaterDTO dto) {
         return ResultVO.ok(gameDataService.getGameDataWater(dto));

+ 46 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataH5DTO.java

@@ -0,0 +1,46 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+import com.zanxiang.game.data.serve.pojo.base.BasePage;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 游戏总数据前端查询参数实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameDataH5DTO extends BasePage {
+    @ApiModelProperty(notes = "游戏名称")
+    private String gameName;
+
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
+
+    @ApiModelProperty(notes = "充值开始时间")
+    private LocalDate rechargeBeginDate;
+
+    @ApiModelProperty(notes = "充值结束时间")
+    private LocalDate rechargeEndDate;
+
+    @ApiModelProperty(notes = "注册开始时间")
+    private LocalDate costBeginDate;
+
+    @ApiModelProperty(notes = "注册结束时间")
+    private LocalDate costEndDate;
+
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
+
+}

+ 3 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataWaterDTO.java

@@ -27,6 +27,9 @@ public class GameDataWaterDTO extends BasePage {
     @ApiModelProperty(notes = "游戏名称")
     private String gameName;
 
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
+
     /**
      * 推广游戏应用类别
      */

+ 2 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteDayDTO.java

@@ -14,6 +14,8 @@ import java.time.LocalDate;
 @AllArgsConstructor
 @Builder
 public class GamePromoteDayDTO extends BasePage {
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
     @ApiModelProperty(notes = "投手id")
     private Long sysUserId;
     @ApiModelProperty(notes = "推广账号ID")

+ 2 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteDayTotalDTO.java

@@ -13,6 +13,8 @@ import java.time.LocalDate;
 @AllArgsConstructor
 @Builder
 public class GamePromoteDayTotalDTO {
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
     @ApiModelProperty(notes = "投手id")
     private Long sysUserId;
     @ApiModelProperty(notes = "推广账号ID")

+ 2 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteTotalDTO.java

@@ -14,6 +14,8 @@ import java.time.LocalDate;
 @AllArgsConstructor
 @Builder
 public class GamePromoteTotalDTO extends BasePage {
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
     @ApiModelProperty(notes = "投手id")
     private Long sysUserId;
     @ApiModelProperty(notes = "推广账号ID")

+ 2 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RechargeRankingDTO.java

@@ -21,6 +21,8 @@ public class RechargeRankingDTO extends BasePage{
     @ApiModelProperty(notes = "充值结束日期")
     private LocalDate endDay;
 
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
     @ApiModelProperty(notes = "排序字段")
     private String sortFiled;
 

+ 1 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAccountAgentDay.java

@@ -26,7 +26,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @Builder
 @Table(AdsAccountAgentDay.TABLE_NAME)
-@PK({"dt", "accountId", "agentId"})
+@PK({"dt","sourceSystem", "accountId", "agentId"})
 public class AdsAccountAgentDay implements Serializable {
     private static final long serialVersionUID = 1L;
     public static final String TABLE_NAME = "ads_account_agent_day";

+ 4 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynAmount.java

@@ -24,7 +24,7 @@ import java.time.LocalDate;
 @AllArgsConstructor
 @Builder
 @Table(AdsDaynAmount.TABLE_NAME)
-@PK({"dt", "accountId", "agentId"})
+@PK({"dt","sourceSystem", "accountId", "agentId"})
 public class AdsDaynAmount implements Serializable {
     private static final long serialVersionUID = 1L;
     public static final String TABLE_NAME = "ads_dayn_amount";
@@ -34,6 +34,9 @@ public class AdsDaynAmount implements Serializable {
      */
     private LocalDate dt;
 
+
+    private String sourceSystem;
+
     /**
      * 推广账号
      */

+ 66 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5LeadBuyGame.java

@@ -0,0 +1,66 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.nutz.dao.entity.annotation.Column;
+import org.nutz.dao.entity.annotation.PK;
+import org.nutz.dao.entity.annotation.Table;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * h5买量导入游戏聚合表(按游戏聚合)
+ * </p>
+ *
+ * @author auto
+ * @since 2023-07-19
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Table(AdsDaynH5LeadBuyGame.TABLE_NAME)
+@PK({"dt","source_system", "h5_lead_buy_game_id", "h5_lead_buy_game_name"})
+public class AdsDaynH5LeadBuyGame implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_dayn_h5_lead_buy_game";
+
+    /**
+     * 注册时间
+     */
+    private LocalDate dt;
+
+    /**
+     * SDK来源
+     */
+    private String sourceSystem;
+
+    /**
+     * h5买量导入游戏ID
+     */
+    private String h5LeadBuyGameId;
+
+    /**
+     * h5买量导入游戏名称
+     */
+    private String h5LeadBuyGameName;
+
+    /**
+     * 游戏类型
+     */
+    @Column
+    private String classify;
+
+    /**
+     * 每一天的的充值金额,充值次数,充值人数
+     */
+    @Column
+    private String dayN;
+
+
+}

+ 66 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5LeadNatureGame.java

@@ -0,0 +1,66 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.nutz.dao.entity.annotation.Column;
+import org.nutz.dao.entity.annotation.PK;
+import org.nutz.dao.entity.annotation.Table;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * h5自然量导入游戏聚合表(按游戏聚合)
+ * </p>
+ *
+ * @author auto
+ * @since 2023-07-19
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Table(AdsDaynH5LeadNatureGame.TABLE_NAME)
+@PK({"dt","source_system", "h5_lead_nature_game_id", "h5_lead_nature_game_name"})
+public class AdsDaynH5LeadNatureGame implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_dayn_h5_lead_nature_game";
+
+    /**
+     * 注册时间
+     */
+    private LocalDate dt;
+
+    /**
+     * SDK来源
+     */
+    private String sourceSystem;
+
+    /**
+     * h5自然量导入游戏ID
+     */
+    private String h5LeadNatureGameId;
+
+    /**
+     * h5自然量导入游戏名称
+     */
+    private String h5LeadNatureGameName;
+
+    /**
+     * 游戏类型
+     */
+    @Column
+    private String classify;
+
+    /**
+     * 每一天的的充值金额,充值次数,充值人数
+     */
+    @Column
+    private String dayN;
+
+
+}

+ 66 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5NatureGame.java

@@ -0,0 +1,66 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.nutz.dao.entity.annotation.Column;
+import org.nutz.dao.entity.annotation.PK;
+import org.nutz.dao.entity.annotation.Table;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * h5自然量游戏聚合表(按游戏聚合)
+ * </p>
+ *
+ * @author auto
+ * @since 2023-07-19
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Table(AdsDaynH5NatureGame.TABLE_NAME)
+@PK({"dt", "source_system", "h5_nature_game_id","h5_nature_game_name"})
+public class AdsDaynH5NatureGame implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_dayn_h5_nature_game";
+
+    /**
+     * 注册时间
+     */
+    private LocalDate dt;
+
+    /**
+     * SDK来源
+     */
+    private String sourceSystem;
+
+    /**
+     * h5自然量游戏ID
+     */
+    private String h5NatureGameId;
+
+    /**
+     * h5自然量游戏名称
+     */
+    private String h5NatureGameName;
+
+    /**
+     * 游戏类型
+     */
+    @Column
+    private String classify;
+
+    /**
+     * 每一天的的充值金额,充值人数
+     */
+    @Column
+    private String dayN;
+
+
+}

+ 66 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsDaynH5PayGame.java

@@ -0,0 +1,66 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.nutz.dao.entity.annotation.Column;
+import org.nutz.dao.entity.annotation.PK;
+import org.nutz.dao.entity.annotation.Table;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * h5付费游戏聚合表(按游戏聚合)
+ * </p>
+ *
+ * @author auto
+ * @since 2023-07-19
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Table(AdsDaynH5PayGame.TABLE_NAME)
+@PK({"dt", "source_system", "h5_game_id","h5_game_name"})
+public class AdsDaynH5PayGame implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_dayn_h5_pay_game";
+
+    /**
+     * 注册时间
+     */
+    private LocalDate dt;
+
+    /**
+     * SDK来源
+     */
+    private String sourceSystem;
+
+    /**
+     * h5付费游戏ID
+     */
+    private String h5GameId;
+
+    /**
+     * h5付费游戏名称
+     */
+    private String h5GameName;
+
+    /**
+     * 游戏类型
+     */
+    @Column
+    private String classify;
+
+    /**
+     * 每一天的的充值金额,充值人数
+     */
+    @Column
+    private String dayN;
+
+
+}

+ 4 - 3
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsEverydayWater.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.pojo.entity;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -25,6 +26,7 @@ import java.time.LocalDate;
 @AllArgsConstructor
 @Builder
 @Table(AdsEverydayWater.TABLE_NAME)
+@PK({"dt", "gameId", "sourceSystem","userOrderBy"})
 public class AdsEverydayWater implements Serializable {
     private static final long serialVersionUID = 1L;
     public static final String TABLE_NAME = "ads_everyday_water";
@@ -32,19 +34,18 @@ public class AdsEverydayWater implements Serializable {
     /**
      * 日期
      */
-    @Column
     private LocalDate dt;
 
+    private String sourceSystem;
+
     /**
      * 游戏ID
      */
-    @Column
     private Long gameId;
 
     /**
      * 玩家模板排序
      */
-    @Column
     private String userOrderBy;
 
     /**

+ 7 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsH5GameDay.java

@@ -25,7 +25,7 @@ import java.time.LocalDate;
 @AllArgsConstructor
 @Builder
 @Table(AdsH5GameDay.TABLE_NAME)
-@PK({"dt", "gameId", "gameName", "gameClassify", "sourceSystem"})
+@PK({"id","dt", "gameId", "gameName", "gameClassify", "sourceSystem"})
 public class AdsH5GameDay implements Serializable {
     private static final long serialVersionUID = 1L;
     public static final String TABLE_NAME = "ads_h5_game_day";
@@ -121,6 +121,9 @@ public class AdsH5GameDay implements Serializable {
     @Column
     private Long buyGameId;
 
+    @Column
+    private String buySourceSystem;
+
     /**
      * 游戏买量导入用户数据:游戏类别
      */
@@ -163,6 +166,9 @@ public class AdsH5GameDay implements Serializable {
     @Column
     private Long natureGameId;
 
+    @Column
+    private String natureSourceSystem;
+
     /**
      * 游戏官方导量用户数据:游戏类别
      */

+ 3 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPlayerRechargeRanking.java

@@ -26,7 +26,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @Builder
 @Table(AdsPlayerRechargeRanking.TABLE_NAME)
-@PK({"dt", "playerId"})
+@PK({"dt","sourceSystem", "playerId"})
 public class AdsPlayerRechargeRanking implements Serializable {
     private static final long serialVersionUID = 1L;
     public static final String TABLE_NAME = "ads_player_recharge_ranking";
@@ -36,6 +36,8 @@ public class AdsPlayerRechargeRanking implements Serializable {
      */
     private LocalDate dt;
 
+    private String sourceSystem;
+
     /**
      * 玩家ID
      */

+ 123 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataH5VO.java

@@ -0,0 +1,123 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.nutz.dao.entity.annotation.Column;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 返回给前端的游戏总数据实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameDataH5VO {
+    /**
+     * ID
+     */
+    private String id;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    /**
+     * 游戏名称
+     */
+    @ApiModelProperty("游戏名称")
+    private String gameName;
+
+    /**
+     * 游戏来源
+     */
+    @ApiModelProperty("游戏来源")
+    private String sourceSystem;
+
+    @ApiModelProperty("H5游戏新用户充值金额")
+    private BigDecimal h5NewUserRechargeMoney;
+
+    @ApiModelProperty("H5游戏新用户充值人数")
+    private Long h5NewUserRechargeNum;
+
+    /**
+     * H5游戏至今充值金额(买量)
+     */
+    @ApiModelProperty("H5游戏至今充值金额(买量)")
+    private BigDecimal h5BuyNewUserTotalAmount;
+
+    /**
+     * H5游戏至今充值人数(买量)
+     */
+    @ApiModelProperty("H5游戏至今充值人数(买量)")
+    private Long h5BuyNewUserTotalAmountNum;
+
+    /**
+     * H5游戏账面充值金额(买量)
+     */
+    @ApiModelProperty("H5游戏账面充值金额(买量)")
+    private BigDecimal h5BuyAmount;
+
+    /**
+     * H5游戏账面充值人数(买量)
+     */
+    @ApiModelProperty("H5游戏账面充值人数(买量)")
+    private Long h5BuyAmountNum;
+
+    @ApiModelProperty("H5自然量新用户充值金额(自然量)")
+    private BigDecimal h5NewUserNatureRechargeMoney;
+
+    @ApiModelProperty("H5自然量新用户充额比例(自然量)=H5自然量新用户充值金额/H5游戏新用户充值金额")
+    private BigDecimal h5NewUserNatureRechargeRate;
+
+    @ApiModelProperty("H5自然量新用户充值人数(自然量)")
+    private Long h5NewUserNatureRechargeNum;
+
+    @ApiModelProperty("H5自然量新用户比例=H5自然量新用户充值人数/H5游戏新用户充值人数")
+    private BigDecimal h5NewUserNatureNewUserRate;
+
+    /**
+     * H5自然量至今充值金额(自然量)
+     */
+    @ApiModelProperty("H5自然量至今充值金额(自然量)")
+    private BigDecimal h5NatureNewUserTotalAmount;
+
+    /**
+     * H5自然量至今充值金额比例(自然量)
+     */
+    @ApiModelProperty("H5自然量至今充值金额比例(自然量)")
+    private BigDecimal h5NatureNewUserTotalAmountRate;
+
+    /**
+     * H5自然量至今充值人数(自然量)
+     */
+    @ApiModelProperty("H5自然量至今充值人数(自然量)")
+    private Long h5NatureNewUserTotalAmountNum;
+
+    /**
+     * H5自然量账面充值金额(自然量)
+     */
+    @ApiModelProperty("H5自然量账面充值金额(自然量)")
+    private BigDecimal h5NatureAmount;
+
+    /**
+     * H5自然量账面充值人数(自然量)
+     */
+    @ApiModelProperty("H5自然量账面充值人数(自然量)")
+    private Long h5NatureAmountNum;
+
+    private List<H5BuyUserVO> h5BuyUserVOList;
+
+    private List<H5NatureUserVO> h5NatureUserVOList;
+
+}

+ 2 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataWaterVO.java

@@ -23,6 +23,8 @@ import java.util.List;
 @Builder
 public class GameDataWaterVO {
     private Long id;
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
     /**
      * 游戏ID
      */

+ 4 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GamePromoteDayVO.java

@@ -15,7 +15,11 @@ import java.time.LocalDate;
 @Builder
 public class GamePromoteDayVO {
     private String id;
+    @ApiModelProperty(notes = "日期")
+    private LocalDate dt;
 
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
     @ApiModelProperty(notes = "渠道id")
     private Long agentId;
 

+ 2 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameRechargeRankingVO.java

@@ -16,6 +16,8 @@ import java.time.LocalDate;
 @Builder
 public class GameRechargeRankingVO {
     private String id;
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
 
     /**
      * 游戏ID

+ 69 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/H5BuyUserVO.java

@@ -0,0 +1,69 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 返回给前端的游戏总数据实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class H5BuyUserVO {
+    private String buySourceSystem;
+    /**
+     * 游戏买量导入用户数据:游戏名称
+     */
+    @ApiModelProperty("游戏买量导入用户数据:游戏名称")
+    private String buyGameName;
+
+    /**
+     * 游戏买量导入用户数据:游戏ID
+     */
+    @ApiModelProperty("游戏买量导入用户数据:游戏ID")
+    private Long buyGameId;
+
+    /**
+     * 游戏买量导入用户数据:游戏类别
+     */
+    @ApiModelProperty("游戏买量导入用户数据:游戏类别")
+    private Long buyClassify;
+
+    @ApiModelProperty("游戏买量导入用户数据:新用户充值金额")
+    private BigDecimal newUserRechargeMoney;
+
+    @ApiModelProperty("游戏买量导入用户数据:新用户充值人数")
+    private Long newUserRechargeNum;
+
+    /**
+     * 游戏买量导入用户数据:累计充值金额
+     */
+    @ApiModelProperty("游戏买量导入用户数据:累计充值金额")
+    private BigDecimal h5LeadBuyNewUserTotalAmount;
+
+    /**
+     * 游戏买量导入用户数据:累计充值人数
+     */
+    @ApiModelProperty("游戏买量导入用户数据:累计充值人数")
+    private Long h5LeadBuyNewUserTotalAmountNum;
+
+    /**
+     * 游戏买量导入用户数据:账面充值金额
+     */
+    @ApiModelProperty("游戏买量导入用户数据:账面充值金额")
+    private BigDecimal h5LeadBuyAmount;
+
+    /**
+     * 游戏买量导入用户数据:账面充值人数
+     */
+    @ApiModelProperty("游戏买量导入用户数据:账面充值人数")
+    private Long h5LeadBuyAmountNum;
+}

+ 69 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/H5NatureUserVO.java

@@ -0,0 +1,69 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 返回给前端的游戏总数据实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class H5NatureUserVO {
+    private String natureSourceSystem;
+    /**
+     * 游戏官方导量用户数据:游戏名称
+     */
+    @ApiModelProperty("游戏官方导量用户数据:游戏名称")
+    private String natureGameName;
+
+    /**
+     * 游戏官方导量用户数据:游戏ID
+     */
+    @ApiModelProperty("游戏官方导量用户数据:游戏ID")
+    private Long natureGameId;
+
+    /**
+     * 游戏官方导量用户数据:游戏类别
+     */
+    @ApiModelProperty("游戏官方导量用户数据:游戏类别")
+    private Long natureClassify;
+
+    @ApiModelProperty("游戏买量导入用户数据:新用户充值金额")
+    private BigDecimal newUserRechargeMoney;
+
+    @ApiModelProperty("游戏买量导入用户数据:新用户充值人数")
+    private Long newUserRechargeNum;
+
+    /**
+     * 游戏官方导量用户数据:累计充值金额
+     */
+    @ApiModelProperty("游戏官方导量用户数据:累计充值金额")
+    private BigDecimal h5LeadNatureNewUserTotalAmount;
+
+    /**
+     * 游戏官方导量用户数据:累计充值人数
+     */
+    @ApiModelProperty("游戏官方导量用户数据:累计充值人数")
+    private Long h5LeadNatureNewUserTotalAmountNum;
+
+    /**
+     * 游戏官方导量用户数据:账面充值金额
+     */
+    @ApiModelProperty("游戏官方导量用户数据:账面充值金额")
+    private BigDecimal h5LeadNatureAmount;
+
+    /**
+     * 游戏官方导量用户数据:账面充值人数
+     */
+    @ApiModelProperty("游戏官方导量用户数据:账面充值人数")
+    private Long h5LeadNatureAmountNum;
+}

+ 3 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerRechargeRankingVO.java

@@ -23,6 +23,9 @@ public class PlayerRechargeRankingVO {
     @ApiModelProperty("玩家ID")
     private Long playerId;
 
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
+
     /**
      * 玩家账号
      */

+ 4 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IGameDataService.java

@@ -2,10 +2,12 @@ package com.zanxiang.game.data.serve.service;
 
 import com.zanxiang.game.data.serve.pojo.dto.GameDataAgainDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
+import com.zanxiang.game.data.serve.pojo.dto.GameDataH5DTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataWaterDTO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataAgainDayVO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataDayVO;
+import com.zanxiang.game.data.serve.pojo.vo.GameDataH5VO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataTotalVO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataWaterVO;
 import com.zanxiang.game.data.serve.utils.Page;
@@ -44,4 +46,6 @@ public interface IGameDataService {
      */
     Map<LocalDate, List<GameDataAgainDayVO>> getGameDataAgainDay(GameDataAgainDayDTO dto) throws Exception;
 
+
+    Page<GameDataH5VO> getH5Recharge(GameDataH5DTO dto);
 }

+ 21 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java

@@ -92,6 +92,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         if (null != dto.getEndDay()) {
             cri.where().and("dt", "<=", dto.getEndDay());
         }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
         cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
         Sql sql = Sqls.queryEntity(accountAgentDaySql() + "$condition");
         sql.setPager(pager);
@@ -230,6 +233,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         if (null != dto.getEndDay()) {
             cri.where().and("dt", "<=", dto.getEndDay());
         }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
         Sql sql = Sqls.queryEntity(accountAgentDayTotalSql() + "$condition");
         Entity<GamePromoteDayTotalVO> entity = dao.getEntity(GamePromoteDayTotalVO.class);
         sql.setEntity(entity).setCondition(cri);
@@ -284,6 +290,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         if (null != dto.getCostEndDay()) {
             cri.where().and("a.dt", "<=", dto.getCostEndDay());
         }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("a.source_system", dto.getSourceSystem());
+        }
         cri.groupBy("a.account_id,a.agent_id,a.source_system");
         cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
         Sql sql = Sqls.queryEntity(accountAgentTotalSql() + "$condition");
@@ -344,12 +353,18 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                 item.setShowRechargeUser(0L);
                 item.setAvgShowUserRecharge(BigDecimal.ZERO);
             }
-            Sql sqlDayN = Sqls.queryString("select dayN from ads_dayn_amount where " +
-                    "dt>=@beginDay and dt<=@endDay " +
-                    "and account_id = @accountId " +
-                    "and agent_id = @agentId");
+            Sql sqlDayN = Sqls.queryString("""
+                    select dayN
+                    from ads_dayn_amount 
+                    where
+                    dt>=@beginDay and dt<=@endDay
+                    and account_id = @accountId
+                    and agent_id = @agentId
+                    and source_system = @sourceSystem
+                    """);
             dayNMap.put("accountId", item.getAccountId());
             dayNMap.put("agentId", item.getAgentId());
+            dayNMap.put("sourceSystem", item.getSourceSystem());
             sqlDayN.setParams(dayNMap);
             dao.execute(sqlDayN);
             List<String> dayNList = sqlDayN.getList(String.class);
@@ -433,7 +448,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
     private String accountAgentDaySql() {
         return """
                 select
+                    dt,
                 	concat( dt, account_id, agent_id ) AS id,
+                	source_system,
                 	agent_id,
                 	agent_name,
                 	account_id,

+ 506 - 5
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -4,6 +4,7 @@ import com.google.common.base.CaseFormat;
 import com.google.gson.Gson;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataAgainDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
+import com.zanxiang.game.data.serve.pojo.dto.GameDataH5DTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataWaterDTO;
 import com.zanxiang.game.data.serve.pojo.entity.AdsEverydayWater;
@@ -16,8 +17,10 @@ import com.zanxiang.game.data.serve.service.IGameDataService;
 import com.zanxiang.game.data.serve.utils.Page;
 import com.zanxiang.module.util.DateUtil;
 import com.zanxiang.module.util.exception.BaseException;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.nutz.dao.Cnd;
@@ -609,8 +612,14 @@ public class GameDataServiceImpl implements IGameDataService {
         if (StringUtils.isNotBlank(dto.getGameClassify())) {
             cri.where().andEquals("game_classify", dto.getGameClassify());
         }
+        if (StringUtils.isNotBlank(dto.getGameClassify())) {
+            cri.where().andEquals("game_classify", dto.getGameClassify());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
         cri.where().and("dt", "=", dto.getRechargeDate());
-        cri.groupBy("game_id");
+        cri.groupBy("source_system,game_id");
         cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
         Sql sql = Sqls.queryEntity(waterSql() + "$condition");
         sql.setPager(pager);
@@ -1369,14 +1378,485 @@ public class GameDataServiceImpl implements IGameDataService {
                 """;
     }
 
-    /**
-     * 流水sql
-     * @return String
-     */
+    @Override
+    public Page<GameDataH5VO> getH5Recharge(GameDataH5DTO dto) {
+        if (null == dto.getCostBeginDate() || null == dto.getCostEndDate()) {
+            dto.setCostEndDate(LocalDate.now());
+            dto.setCostBeginDate(LocalDate.now());
+        }
+        if (null == dto.getRechargeBeginDate() || null == dto.getRechargeEndDate()) {
+            dto.setRechargeEndDate(LocalDate.now());
+            dto.setRechargeBeginDate(LocalDate.now());
+        }
+        if (StringUtils.isBlank(dto.getSortFiled())) {
+            dto.setSortFiled("h5_nature_new_user_total_amount");
+        }
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        // 创建一个 Criteria 接口实例
+        SimpleCriteria cri = Cnd.cri();
+        if (StringUtils.isNotBlank(dto.getGameName())) {
+            cri.where().andLike("a.game_name", dto.getGameName());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andLike("a.source_system", dto.getSourceSystem());
+        }
+        cri.where().and("a.dt", ">=", dto.getCostBeginDate()).and("a.dt", "<=", dto.getCostEndDate());
+        cri.where().andEquals("a.id",1);
+        cri.groupBy("a.source_system,a.game_id");
+        cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        Sql sql = Sqls.queryEntity(h5RechargeSql() + "$condition");
+        sql.setPager(pager);
+        Entity<GameDataH5VO> entity = dao.getEntity(GameDataH5VO.class);
+        sql.setEntity(entity).setCondition(cri);
+        sql.setParam("rechargeBeginDay", dto.getRechargeBeginDate());
+        sql.setParam("rechargeEndDay", dto.getRechargeEndDate());
+        dao.execute(sql);
+        Sql sqlCount = Sqls.queryEntity("select count(*) from ads_h5_game_day a " + "$condition");
+        sqlCount.setCondition(cri);
+        pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
+        List<Long> gameIds = sql.getList(GameDataH5VO.class).stream()
+                .map(GameDataH5VO::getGameId).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(gameIds)) {
+            return new Page<>();
+        }
+
+        //h5注册时间内的dayn充值数据,dayn的json数据
+        Map<String, Object> dayNMap = new HashMap<>(4);
+        dayNMap.put("beginDay", dto.getCostBeginDate());
+        dayNMap.put("endDay", dto.getCostEndDate());
+
+        //h5导量注册时间内的dayn充值数据,dayn的json数据
+        Map<String, Object> importDayNMap = new HashMap<>(4);
+        importDayNMap.put("beginDay", dto.getCostBeginDate());
+        importDayNMap.put("endDay", dto.getCostEndDate());
+
+        //h5账面
+        String show = """
+                        select
+                        sum(h5_buy_amount) as h5_buy_amount,
+                        sum(h5_buy_amount_num) as h5_buy_amount_num,
+                        sum(h5_nature_amount) as h5_nature_amount,
+                        sum(h5_nature_amount_num) as h5_nature_amount_num
+                        from ads_h5_game_day
+                        """;
+        Sql showSql = Sqls.queryEntity(show + "$condition");
+        Entity<ShowRecharge> showEntity = dao.getEntity(ShowRecharge.class);
+        List<GameDataH5VO> gameDataH5VOList = sql.getList(GameDataH5VO.class).stream().map(item -> {
+            {
+                SimpleCriteria showCri = Cnd.cri();
+                if (StringUtils.isNotBlank(dto.getGameName())) {
+                    showCri.where().andLike("game_name", dto.getGameName());
+                }
+                showCri.where().and("dt", ">=", dto.getRechargeBeginDate()).and("dt", "<=", dto.getRechargeEndDate());
+                showCri.groupBy("source_system,game_id");
+                showCri.where().andEquals("game_id",item.getGameId());
+                showCri.where().andEquals("id",1);
+                showCri.where().andEquals("source_system",item.getSourceSystem());
+                showSql.setEntity(showEntity).setCondition(showCri);
+                dao.execute(showSql);
+                ShowRecharge showRecharge = showSql.getObject(ShowRecharge.class);
+                if (null != showRecharge){
+                    item.setH5NatureAmount(showRecharge.getH5NatureAmount());
+                    item.setH5NatureAmountNum(showRecharge.getH5NatureAmountNum());
+                    item.setH5BuyAmount(showRecharge.getH5BuyAmount());
+                    item.setH5BuyAmountNum(showRecharge.getH5BuyAmountNum());
+                }else {
+                    item.setH5NatureAmount(BigDecimal.ZERO);
+                    item.setH5NatureAmountNum(0L);
+                    item.setH5BuyAmount(BigDecimal.ZERO);
+                    item.setH5BuyAmountNum(0L);
+                }
+
+                dayNMap.put("sourceSystem", item.getSourceSystem());
+                dayNMap.put("h5GameId", item.getGameId());
+
+                H5DayN h5PayDayN = getH5PayDayN(dto, dayNMap);
+                //h5充值时间范围内存在买量充值数据
+                if (null != h5PayDayN) {
+                    item.setH5NewUserRechargeMoney(h5PayDayN.getRechargeMoney());
+                    item.setH5NewUserRechargeNum(h5PayDayN.getRechargeNum());
+                } else {
+                    item.setH5NewUserRechargeMoney(BigDecimal.ZERO);
+                    item.setH5NewUserRechargeNum(0L);
+                }
+                H5DayN h5NatureDayN = getNatureH5DayN(dto, dayNMap);
+                //h5充值时间范围内存在自然量充值数据
+                if (null != h5NatureDayN) {
+                    item.setH5NewUserNatureRechargeMoney(h5NatureDayN.getRechargeMoney());
+                    item.setH5NewUserNatureRechargeNum(h5NatureDayN.getRechargeNum());
+                } else {
+                    item.setH5NewUserNatureRechargeMoney(BigDecimal.ZERO);
+                    item.setH5NewUserNatureRechargeNum(0L);
+                }
+                item.setH5NewUserNatureRechargeRate(null == item.getH5NewUserNatureRechargeMoney() || null == item.getH5NewUserRechargeMoney() || item.getH5NewUserRechargeMoney().compareTo(BigDecimal.ZERO) == 0 ?
+                        BigDecimal.ZERO : item.getH5NewUserNatureRechargeMoney().divide(item.getH5NewUserRechargeMoney(), 4, RoundingMode.DOWN));
+                item.setH5NewUserNatureNewUserRate(null == item.getH5NewUserRechargeNum() || null == item.getH5NewUserNatureRechargeNum() || item.getH5NewUserRechargeNum() == 0 ?
+                        BigDecimal.ZERO : BigDecimal.valueOf(item.getH5NewUserNatureRechargeNum()).divide(BigDecimal.valueOf(item.getH5NewUserRechargeNum()), 4, RoundingMode.DOWN));
+
+                //买量导入用户数据
+                List<H5BuyUserVO> buyGameList = getH5BuyUserVOList(dto, importDayNMap, item);
+                //官方导入用户数据
+                List<H5NatureUserVO> natureGameList = getH5NatureUserVOList(dto, importDayNMap, item);
+
+                item.setH5BuyUserVOList(buyGameList);
+                item.setH5NatureUserVOList(natureGameList);
+                return item;
+            }
+        }).collect(Collectors.toList());
+
+        return new Page<>(gameDataH5VOList, pager);
+    }
+
+    private List<H5NatureUserVO> getH5NatureUserVOList(GameDataH5DTO dto, Map<String, Object> importDayNMap, GameDataH5VO item) {
+        Sql natureGameSql = Sqls.queryEntity("""
+                        select
+                        nature_source_system,
+                        nature_game_id,
+                        max(nature_game_name) as nature_game_name,
+                        max(nature_classify) as nature_classify,
+                        sum(h5_lead_nature_new_user_total_amount) as h5_lead_nature_new_user_total_amount,
+                        sum(h5_lead_nature_new_user_total_amount_num) as h5_lead_nature_new_user_total_amount_num
+                        from ads_h5_game_day
+                        where
+                        game_id = @gameId
+                        and
+                        dt>=@beginDay and dt<=@endDay
+                        group by nature_source_system,nature_game_id
+                        """);
+        natureGameSql.setParam("gameId", item.getGameId());
+        natureGameSql.setParam("beginDay", dto.getCostBeginDate());
+        natureGameSql.setParam("endDay", dto.getCostEndDate());
+        Entity<H5NatureUserVO> natureGameEntity = dao.getEntity(H5NatureUserVO.class);
+        natureGameSql.setEntity(natureGameEntity);
+        dao.execute(natureGameSql);
+
+        Sql natureShowGameSql = Sqls.queryEntity("""
+                        select
+                        nature_source_system,
+                        nature_game_id,
+                        sum(h5_lead_nature_amount) as h5_lead_nature_amount,
+                        sum(h5_lead_nature_amount_num) as h5_lead_nature_amount_num
+                        from ads_h5_game_day
+                        where
+                        game_id = @gameId
+                        and
+                        dt>=@beginDay and dt<=@endDay
+                        group by nature_source_system,nature_game_id
+                        """);
+        natureShowGameSql.setParam("gameId", item.getGameId());
+        natureShowGameSql.setParam("beginDay", dto.getRechargeBeginDate());
+        natureShowGameSql.setParam("endDay", dto.getRechargeEndDate());
+        Entity<H5NatureUserVO> buyShowGameEntity = dao.getEntity(H5NatureUserVO.class);
+        natureShowGameSql.setEntity(buyShowGameEntity);
+        dao.execute(natureShowGameSql);
+        Map<Long, List<H5NatureUserVO>> showBuyGameMap = natureShowGameSql.getList(H5NatureUserVO.class).stream()
+                .filter(tt->null!=tt.getNatureGameId())
+                .collect(Collectors.groupingBy(H5NatureUserVO::getNatureGameId));
+
+        List<H5NatureUserVO> natureGameList = natureGameSql.getList(H5NatureUserVO.class).stream()
+                .filter(tt->null!=tt.getNatureGameId())
+                .map(natureGame -> {
+            importDayNMap.put("sourceSystem", natureGame.getNatureSourceSystem());
+            importDayNMap.put("gameId", natureGame.getNatureGameId());
+            H5DayN importNatureH5DayN = getImportNatureH5DayN(dto, importDayNMap);
+            if (null != showBuyGameMap&& null!=showBuyGameMap.get(natureGame.getNatureGameId()) && !showBuyGameMap.get(natureGame.getNatureGameId()).isEmpty()) {
+                natureGame.setH5LeadNatureAmount(showBuyGameMap.get(natureGame.getNatureGameId()).get(0).getH5LeadNatureAmount());
+                natureGame.setH5LeadNatureAmountNum(showBuyGameMap.get(natureGame.getNatureGameId()).get(0).getH5LeadNatureAmountNum());
+            }else {
+                natureGame.setH5LeadNatureAmount(BigDecimal.ZERO);
+                natureGame.setH5LeadNatureAmountNum(0L);
+            }
+            //充值时间范围内存在官方导量充值数据
+            if (null != importNatureH5DayN) {
+                natureGame.setNewUserRechargeMoney(importNatureH5DayN.getRechargeMoney());
+                natureGame.setNewUserRechargeNum(importNatureH5DayN.getRechargeNum());
+            } else {
+                natureGame.setNewUserRechargeMoney(BigDecimal.ZERO);
+                natureGame.setNewUserRechargeNum(0L);
+            }
+            return natureGame;
+        }).collect(Collectors.toList());
+        return natureGameList;
+    }
+
+    private List<H5BuyUserVO> getH5BuyUserVOList(GameDataH5DTO dto, Map<String, Object> importDayNMap, GameDataH5VO item) {
+        //买量导入游戏
+        Sql buyGameSql = Sqls.queryEntity("""
+                        select
+                        buy_source_system,
+                        buy_game_id,
+                        max(buy_game_name) as buy_game_name,
+                        max(buy_classify) as buy_classify,
+                        sum(h5_lead_buy_new_user_total_amount) as h5_lead_buy_new_user_total_amount,
+                        sum(h5_lead_buy_new_user_total_amount_num) as h5_lead_buy_new_user_total_amount_num
+                        from ads_h5_game_day
+                        where
+                        game_id = @gameId
+                        and
+                        dt>=@beginDay and dt<=@endDay
+                        group by buy_source_system,buy_game_id
+                        """);
+        buyGameSql.setParam("gameId", item.getGameId());
+        buyGameSql.setParam("beginDay", dto.getCostBeginDate());
+        buyGameSql.setParam("endDay", dto.getCostEndDate());
+        Entity<H5BuyUserVO> buyGameEntity = dao.getEntity(H5BuyUserVO.class);
+        buyGameSql.setEntity(buyGameEntity);
+        dao.execute(buyGameSql);
+
+        //买量导入游戏账面
+        Sql buyShowGameSql = Sqls.queryEntity("""
+                        select
+                        buy_source_system,
+                        buy_game_id,
+                        sum(h5_lead_buy_amount) as h5_lead_buy_amount,
+                        sum(h5_lead_buy_amount_num) as h5_lead_buy_amount_num
+                        from ads_h5_game_day
+                        where
+                        game_id = @gameId
+                        and
+                        dt>=@beginDay and dt<=@endDay
+                        group by buy_source_system,buy_game_id
+                        """);
+        buyShowGameSql.setParam("gameId", item.getGameId());
+        buyShowGameSql.setParam("beginDay", dto.getRechargeBeginDate());
+        buyShowGameSql.setParam("endDay", dto.getRechargeEndDate());
+        Entity<H5BuyUserVO> buyShowGameEntity = dao.getEntity(H5BuyUserVO.class);
+        buyShowGameSql.setEntity(buyShowGameEntity);
+        dao.execute(buyShowGameSql);
+        Map<Long, List<H5BuyUserVO>> showBuyGameMap = buyShowGameSql.getList(H5BuyUserVO.class).stream()
+                .filter(tt -> null != tt.getBuyGameId())
+                .collect(Collectors.groupingBy(H5BuyUserVO::getBuyGameId));
+
+        List<H5BuyUserVO> buyGameList = buyGameSql.getList(H5BuyUserVO.class).stream()
+                .filter(tt->null!=tt.getBuyGameId())
+                .map(buyGame -> {
+            importDayNMap.put("sourceSystem", buyGame.getBuySourceSystem());
+            importDayNMap.put("gameId", buyGame.getBuyGameId());
+            H5DayN importBuyH5DayN = getImportBuyH5DayN(dto, importDayNMap);
+            if (null != showBuyGameMap && null!=showBuyGameMap.get(buyGame.getBuyGameId()) && !showBuyGameMap.get(buyGame.getBuyGameId()).isEmpty()) {
+                buyGame.setH5LeadBuyAmount(showBuyGameMap.get(buyGame.getBuyGameId()).get(0).getH5LeadBuyAmount());
+                buyGame.setH5LeadBuyAmountNum(showBuyGameMap.get(buyGame.getBuyGameId()).get(0).getH5LeadBuyAmountNum());
+            }else {
+                buyGame.setH5LeadBuyAmount(BigDecimal.ZERO);
+                buyGame.setH5LeadBuyAmountNum(0L);
+            }
+            //买量导入游戏充值时间范围内存在新用户充值数据
+            if (null != importBuyH5DayN) {
+                buyGame.setNewUserRechargeMoney(importBuyH5DayN.getRechargeMoney());
+                buyGame.setNewUserRechargeNum(importBuyH5DayN.getRechargeNum());
+            } else {
+                buyGame.setNewUserRechargeMoney(BigDecimal.ZERO);
+                buyGame.setNewUserRechargeNum(0L);
+            }
+            return buyGame;
+        }).collect(Collectors.toList());
+        return buyGameList;
+    }
+    private H5DayN getImportNatureH5DayN(GameDataH5DTO dto, Map<String, Object> dayNMap) {
+        Sql importNatureSqlDayN = Sqls.queryString("""
+                select dayN from ads_dayn_h5_lead_nature_game
+                where
+                dt>=@beginDay and dt<=@endDay
+                and source_system = @sourceSystem
+                and h5_lead_nature_game_id = @gameId
+                """);
+        importNatureSqlDayN.setParams(dayNMap);
+        dao.execute(importNatureSqlDayN);
+        List<String> importNatureDayNList = importNatureSqlDayN.getList(String.class);
+        H5DayN importNatureDayN = null;
+        //ads_dayn_h5_nature_game 存在充值数据
+        if (!CollectionUtils.isEmpty(importNatureDayNList)) {
+            Gson gson = new Gson();
+            List<Map<String, String>> jsonList = gson.fromJson(importNatureDayNList.toString(), ArrayList.class);
+
+            Map<String, String> resultMap = new HashMap<>();
+            resultMap.put("dayN", "0.00-0");
+            for (Map<String, String> jsonMap : jsonList) {
+                for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
+                    String key = entry.getKey();
+                    String value = entry.getValue();
+                    String[] parts = value.split("-");
+                    if (DateUtil.parseLocalDate(key).compareTo(dto.getRechargeBeginDate()) >= 0
+                            && DateUtil.parseLocalDate(key).compareTo(dto.getRechargeEndDate()) <= 0) {
+                        String[] existingParts = resultMap.get("dayN").split("-");
+                        BigDecimal money = new BigDecimal(existingParts[0]).add(new BigDecimal(parts[0]));
+                        int num = Integer.parseInt(existingParts[1]) + Integer.parseInt(parts[1]);
+                        String newValue = money + "-" + num;
+                        resultMap.put("dayN", newValue);
+                    }
+                }
+            }
+            if (!resultMap.isEmpty() && !resultMap.get("dayN").isEmpty()) {
+                String[] parts = resultMap.get("dayN").split("-");
+                importNatureDayN = H5DayN.builder()
+                        .rechargeMoney(new BigDecimal(parts[0]))
+                        .rechargeNum(Long.valueOf(parts[1]))
+                        .build();
+            }
+        }
+        return importNatureDayN;
+    }
+
+    private H5DayN getImportBuyH5DayN(GameDataH5DTO dto, Map<String, Object> dayNMap) {
+        Sql importBuySqlDayN = Sqls.queryString("""
+                select dayN from ads_dayn_h5_lead_buy_game
+                where
+                dt>=@beginDay and dt<=@endDay
+                and source_system = @sourceSystem
+                and h5_lead_buy_game_id = @gameId
+                """);
+        importBuySqlDayN.setParams(dayNMap);
+        dao.execute(importBuySqlDayN);
+        List<String> importBuyDayNList = importBuySqlDayN.getList(String.class);
+        H5DayN importBuyDayN = null;
+        //ads_dayn_h5_nature_game 存在充值数据
+        if (!CollectionUtils.isEmpty(importBuyDayNList)) {
+            Gson gson = new Gson();
+            List<Map<String, String>> jsonList = gson.fromJson(importBuyDayNList.toString(), ArrayList.class);
+
+            Map<String, String> resultMap = new HashMap<>();
+            resultMap.put("dayN", "0.00-0");
+            for (Map<String, String> jsonMap : jsonList) {
+                for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
+                    String key = entry.getKey();
+                    String value = entry.getValue();
+                    String[] parts = value.split("-");
+                    if (DateUtil.parseLocalDate(key).compareTo(dto.getRechargeBeginDate()) >= 0
+                            && DateUtil.parseLocalDate(key).compareTo(dto.getRechargeEndDate()) <= 0) {
+                        String[] existingParts = resultMap.get("dayN").split("-");
+                        BigDecimal money = new BigDecimal(existingParts[0]).add(new BigDecimal(parts[0]));
+                        int num = Integer.parseInt(existingParts[1]) + Integer.parseInt(parts[1]);
+                        String newValue = money + "-" + num;
+                        resultMap.put("dayN", newValue);
+                    }
+                }
+            }
+            if (!resultMap.isEmpty() && !resultMap.get("dayN").isEmpty()) {
+                String[] parts = resultMap.get("dayN").split("-");
+                importBuyDayN = H5DayN.builder()
+                        .rechargeMoney(new BigDecimal(parts[0]))
+                        .rechargeNum(Long.valueOf(parts[1]))
+                        .build();
+            }
+        }
+        return importBuyDayN;
+    }
+
+    private H5DayN getNatureH5DayN(GameDataH5DTO dto, Map<String, Object> dayNMap) {
+        Sql natureSqlDayN = Sqls.queryString("""
+                select dayN from ads_dayn_h5_nature_game
+                where
+                dt>=@beginDay and dt<=@endDay
+                and source_system = @sourceSystem
+                and h5_nature_game_id = @h5GameId
+                """);
+        natureSqlDayN.setParams(dayNMap);
+        dao.execute(natureSqlDayN);
+        List<String> natureDayNList = natureSqlDayN.getList(String.class);
+        H5DayN h5NatureDayN = null;
+        //ads_dayn_h5_nature_game 存在充值数据
+        if (!CollectionUtils.isEmpty(natureDayNList)) {
+            Gson gson = new Gson();
+            List<Map<String, String>> jsonList = gson.fromJson(natureDayNList.toString(), ArrayList.class);
+
+            Map<String, String> resultMap = new HashMap<>();
+            resultMap.put("dayN", "0.00-0");
+            for (Map<String, String> jsonMap : jsonList) {
+                for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
+                    String key = entry.getKey();
+                    String value = entry.getValue();
+                    String[] parts = value.split("-");
+                    if (DateUtil.parseLocalDate(key).compareTo(dto.getRechargeBeginDate()) >= 0
+                            && DateUtil.parseLocalDate(key).compareTo(dto.getRechargeEndDate()) <= 0) {
+                        String[] existingParts = resultMap.get("dayN").split("-");
+                        BigDecimal money = new BigDecimal(existingParts[0]).add(new BigDecimal(parts[0]));
+                        int num = Integer.parseInt(existingParts[1]) + Integer.parseInt(parts[1]);
+                        String newValue = money + "-" + num;
+                        resultMap.put("dayN", newValue);
+                    }
+                }
+            }
+            if (!resultMap.isEmpty() && !resultMap.get("dayN").isEmpty()) {
+                String[] parts = resultMap.get("dayN").split("-");
+                h5NatureDayN = H5DayN.builder()
+                        .rechargeMoney(new BigDecimal(parts[0]))
+                        .rechargeNum(Long.valueOf(parts[1]))
+                        .build();
+            }
+        }
+        return h5NatureDayN;
+    }
+
+    private H5DayN getH5PayDayN(GameDataH5DTO dto, Map<String, Object> dayNMap) {
+        H5DayN h5PayDayN = null;
+        Sql paySqlDayN = Sqls.queryString("""
+                select dayN from ads_dayn_h5_pay_game
+                where
+                dt>=@beginDay and dt<=@endDay
+                and source_system = @sourceSystem
+                and h5_game_id = @h5GameId
+                """);
+        paySqlDayN.setParams(dayNMap);
+        dao.execute(paySqlDayN);
+        List<String> payDayNList = paySqlDayN.getList(String.class);
+
+        //ads_dayn_h5_pay_game存在充值数据
+        if (!CollectionUtils.isEmpty(payDayNList)) {
+            Gson gson = new Gson();
+            List<Map<String, String>> jsonList = gson.fromJson(payDayNList.toString(), ArrayList.class);
+
+            Map<String, String> resultMap = new HashMap<>();
+            resultMap.put("dayN", "0.00-0");
+            for (Map<String, String> jsonMap : jsonList) {
+                for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
+                    String key = entry.getKey();
+                    String value = entry.getValue();
+                    String[] parts = value.split("-");
+                    if (DateUtil.parseLocalDate(key).compareTo(dto.getRechargeBeginDate()) >= 0
+                            && DateUtil.parseLocalDate(key).compareTo(dto.getRechargeEndDate()) <= 0) {
+                        String[] existingParts = resultMap.get("dayN").split("-");
+                        BigDecimal money = new BigDecimal(existingParts[0]).add(new BigDecimal(parts[0]));
+                        int num = Integer.parseInt(existingParts[1]) + Integer.parseInt(parts[1]);
+                        String newValue = money + "-" + num;
+                        resultMap.put("dayN", newValue);
+                    }
+                }
+            }
+            if (!resultMap.isEmpty() && !resultMap.get("dayN").isEmpty()) {
+                String[] parts = resultMap.get("dayN").split("-");
+                h5PayDayN = H5DayN.builder()
+                        .rechargeMoney(new BigDecimal(parts[0]))
+                        .rechargeNum(Long.valueOf(parts[1]))
+                        .build();
+            }
+        }
+        return h5PayDayN;
+    }
+
+    private String h5RechargeSql() {
+        return """
+                select
+                a.game_id as id,
+                a.game_id as game_id,
+                max(a.game_name) as game_name,
+                max(a.source_system) as source_system,
+                sum(a.h5_buy_new_user_total_amount) as h5_buy_new_user_total_amount,
+                sum(a.h5_buy_new_user_total_amount_num) as h5_buy_new_user_total_amount_num,
+                round(if(sum(a.h5_buy_new_user_total_amount) > 0, sum(a.h5_nature_new_user_total_amount) / sum(a.h5_buy_new_user_total_amount), 0), 4) as h5_nature_new_user_total_amount_rate,
+                sum(a.h5_nature_new_user_total_amount) as h5_nature_new_user_total_amount,
+                sum(a.h5_nature_new_user_total_amount_num) as h5_nature_new_user_total_amount_num
+                from ads_h5_game_day a
+                """;
+    }
+
     private String waterSql() {
         return """
                 select
                 game_id as id,
+                source_system,
                 game_id,
                 max(game_name) as game_name,
                 max(game_classify) as game_classify,
@@ -1434,4 +1914,25 @@ public class GameDataServiceImpl implements IGameDataService {
         private BigInteger rechargeAgainNum;
     }
 
+
+    @Data
+    @Builder
+    public static class H5DayN{
+        private BigDecimal rechargeMoney;
+        private Long rechargeNum;
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @Builder
+    public static class ShowRecharge{
+        private BigDecimal h5NatureAmount;
+
+        private Long h5NatureAmountNum;
+
+        private BigDecimal h5BuyAmount;
+
+        private Long h5BuyAmountNum;
+    }
 }

+ 10 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RankingServiceImpl.java

@@ -40,7 +40,10 @@ public class RankingServiceImpl implements IRankingService {
         if (null != dto.getBeginDay() && null != dto.getEndDay()){
             cri.where().and("dt",">=",dto.getBeginDay()).and("dt","<=",dto.getEndDay());
         }
-        cri.groupBy("game_id");
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        cri.groupBy("source_system,game_id");
         cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
         Sql sql = Sqls.queryEntity(gameRankingSql() + "$condition");
         sql.setPager(pager);
@@ -57,6 +60,7 @@ public class RankingServiceImpl implements IRankingService {
     private String gameRankingSql() {
         return """
                 select
+                source_system,
                 max(game_id) as id,
                 max(game_id) as game_id,
                 max(game_name) as game_name,
@@ -91,7 +95,10 @@ public class RankingServiceImpl implements IRankingService {
         if (null != dto.getBeginDay() && null != dto.getEndDay()){
             cri.where().and("dt",">=",dto.getBeginDay()).and("dt","<=",dto.getEndDay());
         }
-        cri.groupBy("player_id");
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        cri.groupBy("source_system,player_id");
         cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
         Sql sql = Sqls.queryEntity(playerRankingSql() + "$condition");
         sql.setPager(pager);
@@ -108,6 +115,7 @@ public class RankingServiceImpl implements IRankingService {
     private String playerRankingSql() {
         return """
                 select
+                source_system,
                 max(player_id) as id,
                 max(player_id) as player_id,
                 max(player_account_id) as player_account_id,