Просмотр исходного кода

Merge branch 'dev' of GameCenter/game-center into master

zhimo 1 год назад
Родитель
Сommit
74678adccc
74 измененных файлов с 18632 добавлено и 1108 удалено
  1. 3 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AdsGameServerController.java
  2. 27 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AdsPromotionDayController.java
  3. 88 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/PitcherDataController.java
  4. 12 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataUserDetailsDTO.java
  5. 9 3
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameServerDayTotalDTO.java
  6. 59 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherDataDayDTO.java
  7. 46 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherDataDayTotalDTO.java
  8. 9 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherDataTotalDTO.java
  9. 9 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherDataTotalSumDTO.java
  10. 78 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataDayDTO.java
  11. 64 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataDayTotalDTO.java
  12. 89 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataTotalDTO.java
  13. 76 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataTotalSumDTO.java
  14. 131 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/TencentPromotionDayDTO.java
  15. 118 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/TencentPromotionDayTotalDTO.java
  16. 1033 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAdgroupDay.java
  17. 1181 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsGamePitcherDay.java
  18. 1158 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPitcherDay.java
  19. 42 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPitcherDayn.java
  20. 50 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPitcherGameDayn.java
  21. 10 3
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPromotionDay.java
  22. 550 4
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameServerDayTotalVO.java
  23. 16 16
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameServerDayVO.java
  24. 1384 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataDayTotalVO.java
  25. 1409 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataDayVO.java
  26. 9 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataTotalSumVO.java
  27. 9 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataTotalVO.java
  28. 1386 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataDayTotalVO.java
  29. 1433 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataDayVO.java
  30. 604 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataTotalSumVO.java
  31. 640 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataTotalVO.java
  32. 2 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/RechargeTrendVO.java
  33. 886 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayTotalVO.java
  34. 1062 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayVO.java
  35. 25 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IAdsPromotionDayService.java
  36. 49 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IPitcherDataService.java
  37. 1 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java
  38. 108 948
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java
  39. 255 19
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameServerServiceImpl.java
  40. 2284 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java
  41. 914 89
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PromotionDayServiceImpl.java
  42. 66 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/GameAuthEnum.java
  43. 34 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/vo/GameAuthUserVO.java
  44. 21 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/rpc/GameAuthRpc.java
  45. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java
  46. 119 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameAuthController.java
  47. 38 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthAddParam.java
  48. 27 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthListParam.java
  49. 25 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleAddParam.java
  50. 25 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleListParam.java
  51. 30 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleUpdateParam.java
  52. 36 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthUpdateParam.java
  53. 52 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthRoleVO.java
  54. 64 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthVO.java
  55. 52 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/rpc/impl/GameAuthRpcImpl.java
  56. 59 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthRoleService.java
  57. 49 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthService.java
  58. 122 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthRoleServiceImpl.java
  59. 144 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthServiceImpl.java
  60. 68 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuth.java
  61. 68 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuthRole.java
  62. 48 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameShellLog.java
  63. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameAuthMapper.java
  64. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameAuthRoleMapper.java
  65. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameShellLogMapper.java
  66. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java
  67. 1 5
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/PayController.java
  68. 14 4
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/UserController.java
  69. 5 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/GameAppletDTO.java
  70. 5 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/MiPayConfigDTO.java
  71. 29 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/param/GameShellLogParam.java
  72. 24 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IGameShellLogService.java
  73. 33 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameShellLogServiceImpl.java
  74. 18 8
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/MiPayService.java

+ 3 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AdsGameServerController.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.controller;
 
+import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.data.serve.pojo.dto.GameServerDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameServerDayTotalDTO;
 import com.zanxiang.game.data.serve.pojo.vo.GameServerDayTotalVO;
@@ -31,14 +32,14 @@ public class AdsGameServerController {
     private IGameServerService gameServerService;
 
     @ApiOperation(value = "游戏区服数据")
-    //@PreAuthorize(permissionKey = "gameServer:adsGameServerDay:day")
+    @PreAuthorize(permissionKey = "gameServer:adsGameServerDay:day")
     @PostMapping("/day")
     public ResultVO<Page<GameServerDayVO>> getGameServerDataDay(@RequestBody GameServerDayDTO dto) {
         return ResultVO.ok(gameServerService.getGameServerDataDay(dto));
     }
 
     @ApiOperation(value = "游戏区服数据总计一栏")
-    //@PreAuthorize(permissionKey = "gameServer:adsGameServerDay:dayTotal")
+    @PreAuthorize(permissionKey = "gameServer:adsGameServerDay:dayTotal")
     @PostMapping("/day/total")
     public ResultVO<GameServerDayTotalVO> getGameServerDataDayTotal(@RequestBody GameServerDayTotalDTO dto) {
         return ResultVO.ok(gameServerService.getGameServerDataDayTotal(dto));

+ 27 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AdsPromotionDayController.java

@@ -3,8 +3,12 @@ package com.zanxiang.game.data.serve.controller;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.data.serve.pojo.dto.PromotionDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.PromotionDayTotalDTO;
+import com.zanxiang.game.data.serve.pojo.dto.TencentPromotionDayDTO;
+import com.zanxiang.game.data.serve.pojo.dto.TencentPromotionDayTotalDTO;
 import com.zanxiang.game.data.serve.pojo.vo.PromotionDayTotalVO;
 import com.zanxiang.game.data.serve.pojo.vo.PromotionDayVO;
+import com.zanxiang.game.data.serve.pojo.vo.TencentPromotionDayTotalVO;
+import com.zanxiang.game.data.serve.pojo.vo.TencentPromotionDayVO;
 import com.zanxiang.game.data.serve.service.IAdsPromotionDayService;
 import com.zanxiang.game.data.serve.utils.Page;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -34,7 +38,7 @@ public class AdsPromotionDayController {
     @ApiOperation(value = "广告监控数据")
     @PreAuthorize(permissionKey = "promotionData:adsPromotionDay:day")
     @PostMapping("/day")
-    public ResultVO<Page<PromotionDayVO>> getPromotionDayData(@RequestBody PromotionDayDTO dto){
+    public ResultVO<Page<PromotionDayVO>> getPromotionDayData(@RequestBody PromotionDayDTO dto) {
         return ResultVO.ok(adsPromotionDayService.getPromotionDayData(dto));
     }
 
@@ -48,8 +52,29 @@ public class AdsPromotionDayController {
     @ApiOperation(value = "广告监控每日数据")
     @PreAuthorize(permissionKey = "promotionData:adsPromotionDay:dayList")
     @PostMapping("/day/list")
-    public ResultVO<Page<PromotionDayVO>> getPromotionDayListData(@RequestBody PromotionDayDTO dto){
+    public ResultVO<Page<PromotionDayVO>> getPromotionDayListData(@RequestBody PromotionDayDTO dto) {
         return ResultVO.ok(adsPromotionDayService.getPromotionDayListData(dto));
     }
 
+    @ApiOperation(value = "腾讯广告监控数据")
+    @PreAuthorize(permissionKey = "promotionData:adsAdGroupDay:day")
+    @PostMapping("/tencent/day")
+    public ResultVO<Page<TencentPromotionDayVO>> getTencentPromotionDayData(@RequestBody TencentPromotionDayDTO dto) {
+        return ResultVO.ok(adsPromotionDayService.getTencentPromotionDayData(dto));
+    }
+
+    @ApiOperation(value = "腾讯广告监控数据总计")
+    @PreAuthorize(permissionKey = "promotionData:adsAdGroupDay:total")
+    @PostMapping("/tencent/total")
+    public ResultVO<TencentPromotionDayTotalVO> getTencentPromotionDayTotalData(@RequestBody TencentPromotionDayTotalDTO dto) {
+        return ResultVO.ok(adsPromotionDayService.getTencentPromotionDayTotalData(dto));
+    }
+
+    @ApiOperation(value = "腾讯广告监控每日数据")
+    @PreAuthorize(permissionKey = "promotionData:adsAdGroupDay:dayList")
+    @PostMapping("/tencent/day/list")
+    public ResultVO<Page<TencentPromotionDayVO>> getTencentPromotionDayListData(@RequestBody TencentPromotionDayDTO dto) {
+        return ResultVO.ok(adsPromotionDayService.getTencentPromotionDayListData(dto));
+    }
+
 }

+ 88 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/PitcherDataController.java

@@ -0,0 +1,88 @@
+package com.zanxiang.game.data.serve.controller;
+
+import com.zanxiang.game.data.serve.pojo.dto.*;
+import com.zanxiang.game.data.serve.pojo.vo.*;
+import com.zanxiang.game.data.serve.service.IPitcherDataService;
+import com.zanxiang.game.data.serve.utils.Page;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手数据相关控制层接口
+ **/
+@Api(tags = "投手数据")
+@RestController
+@RequestMapping("/pitcherData")
+@Slf4j
+public class PitcherDataController {
+
+    @Autowired
+    private IPitcherDataService pitcherDataService;
+
+    @ApiOperation(value = "投手每日数据")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcher:day")
+    @PostMapping("/pitcher/day")
+    public ResultVO<Page<PitcherDataDayVO>> getPitcherDataDay(@RequestBody PitcherDataDayDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherDataDay(dto));
+    }
+
+    @ApiOperation(value = "投手每日数据总计")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcher:dayTotal")
+    @PostMapping("/pitcher/day/total")
+    public ResultVO<PitcherDataDayTotalVO> getPitcherDataDayTotal(@RequestBody PitcherDataDayTotalDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherDataDayTotal(dto));
+    }
+
+    @ApiOperation(value = "投手总数据")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcher:total")
+    @PostMapping("/pitcher/total")
+    public ResultVO<Page<PitcherDataTotalVO>> getPitcherDataTotal(@RequestBody PitcherDataTotalDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherDataTotal(dto));
+    }
+
+    @ApiOperation(value = "投手总数据总计")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcher:totalSum")
+    @PostMapping("/pitcher/total/sum")
+    public ResultVO<PitcherDataTotalSumVO> getPitcherDataTotalSum(@RequestBody PitcherDataTotalSumDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherDataTotalSum(dto));
+    }
+
+    @ApiOperation(value = "投手游戏每日数据")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcherGame:day")
+    @PostMapping("/pitcherGame/day")
+    public ResultVO<Page<PitcherGameDataDayVO>> getPitcherGameDataDay(@RequestBody PitcherGameDataDayDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherGameDataDay(dto));
+    }
+
+    @ApiOperation(value = "投手游戏每日数据总计")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcherGame:dayTotal")
+    @PostMapping("/pitcherGame/day/total")
+    public ResultVO<PitcherGameDataDayTotalVO> getPitcherGameDataDayTotal(@RequestBody PitcherGameDataDayTotalDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherGameDataDayTotal(dto));
+    }
+
+    @ApiOperation(value = "投手游戏总数据")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcherGame:total")
+    @PostMapping("/pitcherGame/total")
+    public ResultVO<Page<PitcherGameDataTotalVO>> getPitcherGameDataTotal(@RequestBody PitcherGameDataTotalDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherGameDataTotal(dto));
+    }
+
+    @ApiOperation(value = "投手游戏总数据总计")
+    //@PreAuthorize(permissionKey = "pitcherData:pitcherGame:totalSum")
+    @PostMapping("/pitcherGame/total/sum")
+    public ResultVO<PitcherGameDataTotalSumVO> getPitcherGameDataTotalSum(@RequestBody PitcherGameDataTotalSumDTO dto) {
+        return ResultVO.ok(pitcherDataService.getPitcherGameDataTotalSum(dto));
+    }
+
+
+}

+ 12 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataUserDetailsDTO.java

@@ -31,4 +31,16 @@ public class GameDataUserDetailsDTO extends BasePage {
     @ApiModelProperty(notes = "SDK来源")
     private String sourceSystem;
 
+    /**
+     * 排序字段
+     */
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    /**
+     * 排序方式:升序asc;降序desc
+     */
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
+
 }

+ 9 - 3
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameServerDayTotalDTO.java

@@ -20,10 +20,16 @@ import java.time.LocalDate;
 public class GameServerDayTotalDTO {
 
     /**
-     * 开服时间
+     * 开服时间(开始时间)
      */
-    @ApiModelProperty(value = "开服时间")
-    private LocalDate dt;
+    @ApiModelProperty(value = "开服时间(起始)")
+    private LocalDate beginDate;
+
+    /**
+     * 开服时间(结束时间)
+     */
+    @ApiModelProperty(value = "开服时间(结束)")
+    private LocalDate endDate;
 
     /**
      * 游戏ID

+ 59 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherDataDayDTO.java

@@ -0,0 +1,59 @@
+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/8/15
+ * @Description 投手每日数据查询条件实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class PitcherDataDayDTO extends BasePage {
+
+    /**
+     * 消耗开始时间
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate beginDate;
+
+    /**
+     * 消耗结束时间
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate endDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 排序字段
+     */
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    /**
+     * 排序方式:升序asc;降序desc
+     */
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
+
+}

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

@@ -0,0 +1,46 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+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/8/15
+ * @Description 投手每日数据总计查询条件实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class PitcherDataDayTotalDTO {
+
+    /**
+     * 消耗开始时间
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate beginDate;
+
+    /**
+     * 消耗结束时间
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate endDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+}

+ 9 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherDataTotalDTO.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手总数据查询条件实体
+ **/
+public class PitcherDataTotalDTO {
+}

+ 9 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherDataTotalSumDTO.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手总数据总计查询条件实体
+ **/
+public class PitcherDataTotalSumDTO {
+}

+ 78 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataDayDTO.java

@@ -0,0 +1,78 @@
+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/8/15
+ * @Description 投手游戏每日数据查询条件实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class PitcherGameDataDayDTO extends BasePage {
+
+    /**
+     * 消耗开始时间
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate beginDate;
+
+    /**
+     * 消耗结束时间
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate endDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private String gameId;
+
+    /**
+     * 游戏CP方
+     */
+    @ApiModelProperty(value = "游戏CP方")
+    private String gameCp;
+
+    /**
+     * 游戏类型
+     */
+    @ApiModelProperty(value = "游戏类型")
+    private Long gameType;
+
+    /**
+     * 排序字段
+     */
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    /**
+     * 排序方式:升序asc;降序desc
+     */
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
+
+
+}

+ 64 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataDayTotalDTO.java

@@ -0,0 +1,64 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+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/8/15
+ * @Description 投手游戏每日数据总计查询条件实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class PitcherGameDataDayTotalDTO {
+
+    /**
+     * 消耗开始时间
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate beginDate;
+
+    /**
+     * 消耗结束时间
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate endDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private String gameId;
+
+    /**
+     * 游戏CP方
+     */
+    @ApiModelProperty(value = "游戏CP方")
+    private String gameCp;
+
+    /**
+     * 游戏类型
+     */
+    @ApiModelProperty(value = "游戏类型")
+    private Long gameType;
+
+}

+ 89 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataTotalDTO.java

@@ -0,0 +1,89 @@
+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/8/15
+ * @Description 投手游戏总数据查询条件实体
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class PitcherGameDataTotalDTO extends BasePage {
+
+    /**
+     * 消耗开始时间
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate beginDate;
+
+    /**
+     * 消耗结束时间
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate endDate;
+
+    /**
+     * 充值开始时间
+     */
+    @ApiModelProperty(value = "充值开始时间")
+    private LocalDate amountBeginDate;
+
+    /**
+     * 充值结束时间
+     */
+    @ApiModelProperty(value = "充值结束时间")
+    private LocalDate amountEndDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private String gameId;
+
+    /**
+     * 游戏CP方
+     */
+    @ApiModelProperty(value = "游戏CP方")
+    private String gameCp;
+
+    /**
+     * 游戏类型
+     */
+    @ApiModelProperty(value = "游戏类型")
+    private Long gameType;
+
+    /**
+     * 排序字段
+     */
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    /**
+     * 排序方式:升序asc;降序desc
+     */
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
+
+}

+ 76 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PitcherGameDataTotalSumDTO.java

@@ -0,0 +1,76 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+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/8/15
+ * @Description 投手游戏总数据总计查询条件实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class PitcherGameDataTotalSumDTO {
+
+    /**
+     * 消耗开始时间
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate beginDate;
+
+    /**
+     * 消耗结束时间
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate endDate;
+
+    /**
+     * 充值开始时间
+     */
+    @ApiModelProperty(value = "充值开始时间")
+    private LocalDate amountBeginDate;
+
+    /**
+     * 充值结束时间
+     */
+    @ApiModelProperty(value = "充值结束时间")
+    private LocalDate amountEndDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private String gameId;
+
+    /**
+     * 游戏CP方
+     */
+    @ApiModelProperty(value = "游戏CP方")
+    private String gameCp;
+
+    /**
+     * 游戏类型
+     */
+    @ApiModelProperty(value = "游戏类型")
+    private Long gameType;
+
+}

+ 131 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/TencentPromotionDayDTO.java

@@ -0,0 +1,131 @@
+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/27
+ * @Description 前端传递的查询参数实体(腾讯广告)
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class TencentPromotionDayDTO extends BasePage {
+
+    /**
+     * 消耗开始日期
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate costBeginDate;
+
+    /**
+     * 消耗结束日期
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate costEndDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 广告ID
+     */
+    @ApiModelProperty(value = "广告ID")
+    private Long promotionId;
+
+    /**
+     * 广告名称
+     */
+    @ApiModelProperty(value = "广告名称")
+    private String promotionName;
+
+    /**
+     * 广告状态
+     */
+    @ApiModelProperty(value = "广告状态")
+    private String status;
+
+    /**
+     * 项目ID
+     */
+    @ApiModelProperty(value = "项目ID")
+    private Long projectId;
+
+    /**
+     * 项目名称
+     */
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    /**
+     * 推广账号名称
+     */
+    @ApiModelProperty(value = "推广账号名称")
+    private String accountName;
+
+    /**
+     * 推广账号ID
+     */
+    @ApiModelProperty(value = "推广账号ID")
+    private Long accountId;
+
+    /**
+     * 投放媒体
+     */
+    @ApiModelProperty(value = "投放媒体")
+    private String accountType;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 渠道ID
+     */
+    @ApiModelProperty(value = "渠道ID")
+    private Long[] agentId;
+
+    /**
+     * cp名称
+     */
+    @ApiModelProperty(value = "CP名称")
+    private String cpName;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private Long gameId;
+
+    /**
+     * 游戏应用类型
+     */
+    @ApiModelProperty(value = "游戏应用类型")
+    private Long classify;
+
+    /**
+     * 排序字段
+     */
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    /**
+     * 排序方式:升序asc;降序desc
+     */
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
+
+}

+ 118 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/TencentPromotionDayTotalDTO.java

@@ -0,0 +1,118 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+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/27
+ * @Description 前端传递的查询参数实体(腾讯广告)
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class TencentPromotionDayTotalDTO {
+
+    /**
+     * 消耗开始日期
+     */
+    @ApiModelProperty(value = "消耗开始时间")
+    private LocalDate costBeginDate;
+
+    /**
+     * 消耗结束日期
+     */
+    @ApiModelProperty(value = "消耗结束时间")
+    private LocalDate costEndDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 广告ID
+     */
+    @ApiModelProperty(value = "广告ID")
+    private Long promotionId;
+
+    /**
+     * 广告名称
+     */
+    @ApiModelProperty(value = "广告名称")
+    private String promotionName;
+
+    /**
+     * 广告状态
+     */
+    @ApiModelProperty(value = "广告状态")
+    private String status;
+
+    /**
+     * 项目ID
+     */
+    @ApiModelProperty(value = "项目ID")
+    private Long projectId;
+
+    /**
+     * 项目名称
+     */
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    /**
+     * 推广账号名称
+     */
+    @ApiModelProperty(value = "推广账号名称")
+    private String accountName;
+
+    /**
+     * 推广账号ID
+     */
+    @ApiModelProperty(value = "推广账号ID")
+    private Long accountId;
+
+    /**
+     * 投放媒体
+     */
+    @ApiModelProperty(value = "投放媒体")
+    private String accountType;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 渠道ID
+     */
+    @ApiModelProperty(value = "渠道ID")
+    private Long[] agentId;
+
+    /**
+     * cp名称
+     */
+    @ApiModelProperty(value = "CP名称")
+    private String cpName;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private Long gameId;
+
+    /**
+     * 游戏应用类型
+     */
+    @ApiModelProperty(value = "游戏应用类型")
+    private Long classify;
+
+}

+ 1033 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAdgroupDay.java

@@ -0,0 +1,1033 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.Data;
+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.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@Table(AdsAdgroupDay.TABLE_NAME)
+@PK({"dt", "sourceSystem", "promotionId", "projectId"})
+public class AdsAdgroupDay implements Serializable {
+    
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_adgroup_day";
+     
+    /**
+    * 日期
+    */
+    private LocalDate dt;
+    
+    /**
+    * SDK来源
+    */
+    private String sourceSystem;
+    
+    /**
+    * 广告ID
+    */
+    private Long promotionId;
+    
+    /**
+    * 项目ID
+    */
+    private Long projectId;
+    
+    /**
+    * 广告名称
+    */    
+    @Column
+    private String promotionName;
+    
+    /**
+    * 计划名称
+    */    
+    @Column
+    private String projectName;
+    
+    /**
+    * 推广账号名称
+    */    
+    @Column
+    private String accountName;
+    
+    /**
+    * 推广账号ID
+    */    
+    @Column
+    private Long accountId;
+    
+    /**
+    * 投放媒体
+    */    
+    @Column
+    private String accountType;
+    
+    /**
+    * 投手ID
+    */    
+    @Column
+    private Long pitcherId;
+    
+    /**
+    * 投手名称
+    */    
+    @Column
+    private String pitcherName;
+    
+    /**
+    * 渠道ID
+    */    
+    @Column
+    private Long agentId;
+    
+    /**
+    * 渠道名称
+    */    
+    @Column
+    private String agentName;
+    
+    /**
+    * 渠道标识
+    */    
+    @Column
+    private String agentKey;
+    
+    /**
+    * cp名称
+    */    
+    @Column
+    private String cpName;
+    
+    /**
+    * 游戏ID
+    */    
+    @Column
+    private Long gameId;
+    
+    /**
+    * 游戏名称
+    */    
+    @Column
+    private String gameName;
+    
+    /**
+    * 游戏应用类型
+    */    
+    @Column
+    private Long classify;
+    
+    /**
+    * 广告状态
+    */    
+    @Column
+    private String status;
+    
+    /**
+    * 创意预览
+    */    
+    @Column
+    private String creativePreview;
+    
+    /**
+    * 推广目标
+    */    
+    @Column
+    private String landingType;
+    
+    /**
+    * 出价方式
+    */    
+    @Column
+    private String pricing;
+    
+    /**
+    * 当前出价
+    */    
+    @Column
+    private String cpaBid;
+    
+    /**
+    * 深度转化ROI系数
+    */    
+    @Column
+    private String roiGoal;
+    
+    /**
+    * 日预算
+    */    
+    @Column
+    private String budget;
+    
+    /**
+    * 投放开始时间
+    */    
+    @Column
+    private LocalDateTime startTime;
+    
+    /**
+    * 投放结束时间
+    */    
+    @Column
+    private LocalDateTime endTime;
+    
+    /**
+    * 备注
+    */    
+    @Column
+    private String notes;
+    
+    /**
+    * 服务商
+    */    
+    @Column
+    private String service;
+    
+    /**
+    * 余额
+    */    
+    @Column
+    private String balance;
+    
+    /**
+    * 注册人数 (应用下载广告数据-激活数)
+    */    
+    @Column
+    private Long active;
+    
+    /**
+    * 注册成本 (应用下载广告数据-激活成本)
+    */    
+    @Column
+    private BigDecimal activeCost;
+    
+    /**
+    * 首日转化数 (转化数据-转化数)
+    */    
+    @Column
+    private Long firstConvertCount;
+    
+    /**
+    * 首日转化成本 (转化数据-转化成本)
+    */    
+    @Column
+    private BigDecimal firstConvertCost;
+    
+    /**
+    * 首次付费率 (应用下载广告数据-首次付费率)
+    */    
+    @Column
+    private BigDecimal firstActivePayRate;
+    
+    /**
+    * 首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)
+    */    
+    @Column
+    private BigDecimal firstAttributionGameInAppLtv1day;
+    
+    /**
+    * 首日付费ROI (当日付费ROI)
+    */    
+    @Column
+    private BigDecimal firstAttributionGameInAppRoi1day;
+    
+    /**
+    * 付费次数 (应用下载广告数据-付费次数)
+    */    
+    @Column
+    private Long gamePayCount;
+    
+    /**
+    * 今日消耗
+    */    
+    @Column
+    private BigDecimal todayCost;
+    
+    /**
+    * 广告总消耗
+    */    
+    @Column
+    private BigDecimal promotionTotalCost;
+    
+    /**
+    * 曝光量
+    */    
+    @Column
+    private Long showCount;
+    
+    /**
+    * 千次曝光成本
+    */    
+    @Column
+    private BigDecimal thousandDisplayPrice;
+    
+    /**
+    * 点击量
+    */    
+    @Column
+    private Long clickCount;
+    
+    /**
+    * 点击均价
+    */    
+    @Column
+    private BigDecimal avgClickCost;
+    
+    /**
+    * 点击率
+    */    
+    @Column
+    private BigDecimal ctr;
+    
+    /**
+    * 转化目标
+    */    
+    @Column
+    private String convertTarget;
+    
+    /**
+    * 转化目标量
+    */    
+    @Column
+    private Long convertCount;
+    
+    /**
+    * 转化目标成本
+    */    
+    @Column
+    private BigDecimal convertCost;
+    
+    /**
+    * 目标转化率
+    */    
+    @Column
+    private BigDecimal convertRate;
+    
+    /**
+    * 新增用户数
+    */    
+    @Column
+    private Long regNum;
+    
+    /**
+    * 广告总注册人数
+    */    
+    @Column
+    private Long regTotalNum;
+    
+    /**
+    * 总创角人数
+    */    
+    @Column
+    private Long roleTotalNum;
+    
+    /**
+    * 首日创角人数
+    */    
+    @Column
+    private Long firstRoleNum;
+    
+    /**
+    * 新用户累计创角人数
+    */    
+    @Column
+    private Long newUserTotalRoleNum;
+    
+    /**
+    * 注册成本
+    */    
+    @Column
+    private BigDecimal regCost;
+    
+    /**
+    * 总注册成本
+    */    
+    @Column
+    private BigDecimal regTotalCost;
+    
+    /**
+    * 首日创角成本
+    */    
+    @Column
+    private BigDecimal firstRoleCost;
+    
+    /**
+    * 新用户创角成本
+    */    
+    @Column
+    private BigDecimal newUserTotalRoleCost;
+    
+    /**
+    * 总创角成本
+    */    
+    @Column
+    private BigDecimal roleTotalCost;
+    
+    /**
+    * 首日创角率
+    */    
+    @Column
+    private BigDecimal firstRoleRate;
+    
+    /**
+    * 新用户创角率
+    */    
+    @Column
+    private BigDecimal newUserTotalRoleRate;
+    
+    /**
+    * 总创角率
+    */    
+    @Column
+    private BigDecimal roleTotalRate;
+    
+    /**
+    * 首日新用户付费次数
+    */    
+    @Column
+    private Long firstNewUserAmountCount;
+    
+    /**
+    * 首日新用户付费人数
+    */    
+    @Column
+    private Long firstNewUserAmountNum;
+    
+    /**
+    * 首日新用户付费金额
+    */    
+    @Column
+    private BigDecimal firstNewUserAmount;
+    
+    /**
+    * 首日扣单数
+    */    
+    @Column
+    private Long firstSubAmountCount;
+    
+    /**
+    * 首日扣单金额
+    */    
+    @Column
+    private BigDecimal firstSubAmount;
+    
+    /**
+    * 至今付费次数
+    */    
+    @Column
+    private Long newUserTotalAmountCount;
+    
+    /**
+    * 至今付费人数
+    */    
+    @Column
+    private Long newUserTotalAmountNum;
+    
+    /**
+    * 至今付费金额
+    */    
+    @Column
+    private BigDecimal newUserTotalAmount;
+    
+    /**
+    * 总充值次数
+    */    
+    @Column
+    private Long totalAmountCount;
+    
+    /**
+    * 总充值人数
+    */    
+    @Column
+    private Long totalAmountNum;
+    
+    /**
+    * 总充值金额
+    */    
+    @Column
+    private BigDecimal totalAmount;
+    
+    /**
+    * 首日ROI
+    */    
+    @Column
+    private BigDecimal firstRoi;
+    
+    /**
+    * 新用户24小时充值金额
+    */    
+    @Column
+    private BigDecimal twentyFourHoursAmount;
+    
+    /**
+    * 新用户24小时ROI
+    */    
+    @Column
+    private BigDecimal twentyFourHoursRoi;
+    
+    /**
+    * 总ROI
+    */    
+    @Column
+    private BigDecimal totalRoi;
+    
+    /**
+    * 广告总ROI
+    */    
+    @Column
+    private BigDecimal promotionTotalRoi;
+    
+    /**
+    * 首日新用户付费成本
+    */    
+    @Column
+    private BigDecimal firstNewUserRechargeCost;
+    
+    /**
+    * 至今付费成本
+    */    
+    @Column
+    private BigDecimal newUserTotalRechargeCost;
+    
+    /**
+    * 广告总付费成本
+    */    
+    @Column
+    private BigDecimal totalRechargeCost;
+    
+    /**
+    * 新增付费ARPPU
+    */    
+    @Column
+    private BigDecimal firstNewUserArppu;
+    
+    /**
+    * 至今付费ARPPU
+    */    
+    @Column
+    private BigDecimal newUserTotalAmountArppu;
+    
+    /**
+    * 新增付费100+用户数
+    */    
+    @Column
+    private Long firstNewUserHundredUserNum;
+    
+    /**
+    * 新增付费200+用户数
+    */    
+    @Column
+    private Long firstNewUserTwoHundredUserNum;
+    
+    /**
+    * 至今付费100+用户数
+    */    
+    @Column
+    private Long newUserTotalHundredUserNum;
+    
+    /**
+    * 首充50~100元用户数
+    */    
+    @Column
+    private Long firstRechargeFiftyHundredNum;
+    
+    /**
+    * 新增付费100+用户付费成本
+    */    
+    @Column
+    private BigDecimal firstNewUserHundredUserCost;
+    
+    /**
+    * 新增付费200+用户付费成本
+    */    
+    @Column
+    private BigDecimal firstNewUserTwoHundredUserCost;
+    
+    /**
+    * 至今付费100+用户付费成本
+    */    
+    @Column
+    private BigDecimal newUserTotalHundredUserCost;
+    
+    /**
+    * 首充50~100元占比
+    */    
+    @Column
+    private BigDecimal firstRechargeFiftyHundredRate;
+    
+    /**
+    * 首日IOS付费次数
+    */    
+    @Column
+    private Long firstIosAmountCount;
+    
+    /**
+    * 首日IOS付费人数
+    */    
+    @Column
+    private Long firstIosAmountNum;
+    
+    /**
+    * 首日IOS付费金额
+    */    
+    @Column
+    private BigDecimal firstIosAmount;
+    
+    /**
+    * 首日Android付费次数
+    */    
+    @Column
+    private Long firstAndroidAmountCount;
+    
+    /**
+    * 首日Android付费人数
+    */    
+    @Column
+    private Long firstAndroidAmountNum;
+    
+    /**
+    * 首日Android付费金额
+    */    
+    @Column
+    private BigDecimal firstAndroidAmount;
+    
+    /**
+    * 首日IOS付费人数占比
+    */    
+    @Column
+    private BigDecimal firstIosAmountNumRate;
+    
+    /**
+    * 首日IOS付费金额占比
+    */    
+    @Column
+    private BigDecimal firstIosAmountRate;
+    
+    /**
+    * 首日IOS付费ROI
+    */    
+    @Column
+    private BigDecimal firstIosAmountRoi;
+    
+    /**
+    * 首日Android付费人数占比
+    */    
+    @Column
+    private BigDecimal firstAndroidAmountNumRate;
+    
+    /**
+    * 首日Android付费金额占比
+    */    
+    @Column
+    private BigDecimal firstAndroidAmountRate;
+    
+    /**
+    * 首日Android付费ROI
+    */    
+    @Column
+    private BigDecimal firstAndroidAmountRoi;
+    
+    /**
+    * 首日付费率
+    */    
+    @Column
+    private BigDecimal firstAmountRate;
+    
+    /**
+    * 新增客单价
+    */    
+    @Column
+    private BigDecimal firstNewUserAvgPrice;
+    
+    /**
+    * 至今客单价
+    */    
+    @Column
+    private BigDecimal newUserTotalAvgPrice;
+    
+    /**
+    * ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)
+    */    
+    @Column
+    private BigDecimal ltvDay1;
+    
+    /**
+    * 每日扣单数 (首日新用户付费次数 - 首日扣单数)
+    */    
+    @Column
+    private Long subOrderNum;
+    
+    /**
+    * 每日扣单金额  (首日新用户付费金额 - 首日扣单金额)
+    */    
+    @Column
+    private BigDecimal subOrderAmount;
+    
+    /**
+    * 广告ID,消耗时间的第1天新用户充值
+    */    
+    @Column
+    private BigDecimal d1;
+    
+    /**
+    * 广告ID,消耗时间的第2天新用户充值
+    */    
+    @Column
+    private BigDecimal d2;
+    
+    /**
+    * 广告ID,消耗时间的第3天新用户充值
+    */    
+    @Column
+    private BigDecimal d3;
+    
+    /**
+    * 广告ID,消耗时间的第4天新用户充值
+    */    
+    @Column
+    private BigDecimal d4;
+    
+    /**
+    * 广告ID,消耗时间的第5天新用户充值
+    */    
+    @Column
+    private BigDecimal d5;
+    
+    /**
+    * 广告ID,消耗时间的第6天新用户充值
+    */    
+    @Column
+    private BigDecimal d6;
+    
+    /**
+    * 广告ID,消耗时间的第7天新用户充值
+    */    
+    @Column
+    private BigDecimal d7;
+    
+    /**
+    * 广告ID,消耗时间的第8天新用户充值
+    */    
+    @Column
+    private BigDecimal d8;
+    
+    /**
+    * 广告ID,消耗时间的第9天新用户充值
+    */    
+    @Column
+    private BigDecimal d9;
+    
+    /**
+    * 广告ID,消耗时间的第10天新用户充值
+    */    
+    @Column
+    private BigDecimal d10;
+    
+    /**
+    * 广告ID,消耗时间的第11天新用户充值
+    */    
+    @Column
+    private BigDecimal d11;
+    
+    /**
+    * 广告ID,消耗时间的第12天新用户充值
+    */    
+    @Column
+    private BigDecimal d12;
+    
+    /**
+    * 广告ID,消耗时间的第13天新用户充值
+    */    
+    @Column
+    private BigDecimal d13;
+    
+    /**
+    * 广告ID,消耗时间的第14天新用户充值
+    */    
+    @Column
+    private BigDecimal d14;
+    
+    /**
+    * 广告ID,消耗时间的第15天新用户充值
+    */    
+    @Column
+    private BigDecimal d15;
+    
+    /**
+    * 广告ID,消耗时间的第16天新用户充值
+    */    
+    @Column
+    private BigDecimal d16;
+    
+    /**
+    * 广告ID,消耗时间的第17天新用户充值
+    */    
+    @Column
+    private BigDecimal d17;
+    
+    /**
+    * 广告ID,消耗时间的第18天新用户充值
+    */    
+    @Column
+    private BigDecimal d18;
+    
+    /**
+    * 广告ID,消耗时间的第19天新用户充值
+    */    
+    @Column
+    private BigDecimal d19;
+    
+    /**
+    * 广告ID,消耗时间的第20天新用户充值
+    */    
+    @Column
+    private BigDecimal d20;
+    
+    /**
+    * 广告ID,消耗时间的第21天新用户充值
+    */    
+    @Column
+    private BigDecimal d21;
+    
+    /**
+    * 广告ID,消耗时间的第22天新用户充值
+    */    
+    @Column
+    private BigDecimal d22;
+    
+    /**
+    * 广告ID,消耗时间的第23天新用户充值
+    */    
+    @Column
+    private BigDecimal d23;
+    
+    /**
+    * 广告ID,消耗时间的第24天新用户充值
+    */    
+    @Column
+    private BigDecimal d24;
+    
+    /**
+    * 广告ID,消耗时间的第25天新用户充值
+    */    
+    @Column
+    private BigDecimal d25;
+    
+    /**
+    * 广告ID,消耗时间的第26天新用户充值
+    */    
+    @Column
+    private BigDecimal d26;
+    
+    /**
+    * 广告ID,消耗时间的第27天新用户充值
+    */    
+    @Column
+    private BigDecimal d27;
+    
+    /**
+    * 广告ID,消耗时间的第28天新用户充值
+    */    
+    @Column
+    private BigDecimal d28;
+    
+    /**
+    * 广告ID,消耗时间的第29天新用户充值
+    */    
+    @Column
+    private BigDecimal d29;
+    
+    /**
+    * 广告ID,消耗时间的第30天新用户充值
+    */    
+    @Column
+    private BigDecimal d30;
+    
+    /**
+    * 付费趋势第1天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da1;
+    
+    /**
+    * 付费趋势第2天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da2;
+    
+    /**
+    * 付费趋势第3天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da3;
+    
+    /**
+    * 付费趋势第4天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da4;
+    
+    /**
+    * 付费趋势第5天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da5;
+    
+    /**
+    * 付费趋势第6天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da6;
+    
+    /**
+    * 付费趋势第7天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da7;
+    
+    /**
+    * 付费趋势第8天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da8;
+    
+    /**
+    * 付费趋势第9天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da9;
+    
+    /**
+    * 付费趋势第10天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da10;
+    
+    /**
+    * 付费趋势第11天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da11;
+    
+    /**
+    * 付费趋势第12天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da12;
+    
+    /**
+    * 付费趋势第13天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da13;
+    
+    /**
+    * 付费趋势第14天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da14;
+    
+    /**
+    * 付费趋势第15天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da15;
+    
+    /**
+    * 付费趋势第16天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da16;
+    
+    /**
+    * 付费趋势第17天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da17;
+    
+    /**
+    * 付费趋势第18天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da18;
+    
+    /**
+    * 付费趋势第19天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da19;
+    
+    /**
+    * 付费趋势第20天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da20;
+    
+    /**
+    * 付费趋势第21天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da21;
+    
+    /**
+    * 付费趋势第22天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da22;
+    
+    /**
+    * 付费趋势第23天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da23;
+    
+    /**
+    * 付费趋势第24天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da24;
+    
+    /**
+    * 付费趋势第25天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da25;
+    
+    /**
+    * 付费趋势第26天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da26;
+    
+    /**
+    * 付费趋势第27天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da27;
+    
+    /**
+    * 付费趋势第28天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da28;
+    
+    /**
+    * 付费趋势第29天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da29;
+    
+    /**
+    * 付费趋势第30天总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String da30;
+
+}
+
+

+ 1181 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsGamePitcherDay.java

@@ -0,0 +1,1181 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.Data;
+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;
+
+@Data
+@Table(AdsGamePitcherDay.TABLE_NAME)
+@PK({"dt", "sourceSystem", "pitcherId", "gameId"})
+public class AdsGamePitcherDay implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_game_pitcher_day";
+     
+    /**
+    * 日期(充值时间)
+    */
+    private LocalDate dt;
+    
+    /**
+    * SDK来源
+    */
+    private String sourceSystem;
+    
+    /**
+    * 投手ID
+    */
+    private Long pitcherId;
+    
+    /**
+    * 游戏ID
+    */
+    private String gameId;
+    
+    /**
+    * 投手
+    */    
+    @Column
+    private String pitcher;
+    
+    /**
+    * 游戏
+    */    
+    @Column
+    private String gameName;
+    
+    /**
+    * 游戏CP方
+    */    
+    @Column
+    private String gameCp;
+    
+    /**
+    * 游戏类型
+    */    
+    @Column
+    private Long gameType;
+    
+    /**
+    * 消耗
+    */    
+    @Column
+    private Double cost;
+    
+    /**
+    * 推广计划数量
+    */    
+    @Column
+    private Long planCount;
+    
+    /**
+    * 推广账号数量
+    */    
+    @Column
+    private Long accountCount;
+    
+    /**
+    * 推广渠道数量
+    */    
+    @Column
+    private Long agentCount;
+    
+    /**
+    * 注册人数-通过广告首次登录小游戏的独立用户数
+    */    
+    @Column
+    private Long registerNum;
+    
+    /**
+    * 新增付费次数
+    */    
+    @Column
+    private Long firstNewUserAmountCount;
+    
+    /**
+    * 新增付费人数
+    */    
+    @Column
+    private Long firstNewUserAmountNum;
+    
+    /**
+    * 新增付费金额
+    */    
+    @Column
+    private Double firstNewUserAmount;
+    
+    /**
+    * 账面充值次数
+    */    
+    @Column
+    private Long amountCount;
+    
+    /**
+    * 账面充值人数
+    */    
+    @Column
+    private Long amountNum;
+    
+    /**
+    * 账面充值金额
+    */    
+    @Column
+    private Double amount;
+    
+    /**
+    * 老用户充值次数(每日)
+    */    
+    @Column
+    private Long oldAmountCount;
+    
+    /**
+    * 老用户充值人数(每日)
+    */    
+    @Column
+    private Long oldAmountNum;
+    
+    /**
+    * 老用户充值金额(每日)
+    */    
+    @Column
+    private Double oldAmount;
+    
+    /**
+    * 至今充值次数
+    */    
+    @Column
+    private Long newUserTotalAmountCount;
+    
+    /**
+    * 至今充值人数
+    */    
+    @Column
+    private Long newUserTotalAmountNum;
+    
+    /**
+    * 至今充值金额
+    */    
+    @Column
+    private Double newUserTotalAmount;
+    
+    /**
+    * 单日付费100+人数
+    */    
+    @Column
+    private Long hundredUserNum;
+    
+    /**
+    * 买量新用户累计充值金额
+    */    
+    @Column
+    private Double buyNewUserTotalAmount;
+    
+    /**
+    * 买量新用户累计充值人数
+    */    
+    @Column
+    private Long buyNewUserTotalAmountNum;
+    
+    /**
+    * 买量新用户累计充值次数
+    */    
+    @Column
+    private Long buyNewUserTotalAmountCount;
+    
+    /**
+    * 复充人数
+    */    
+    @Column
+    private Long regOrderUserAgain;
+    
+    /**
+    * 首日创角人数
+    */    
+    @Column
+    private Long firstRoleNum;
+    
+    /**
+    * 新用户累计创角人数
+    */    
+    @Column
+    private Long newUserTotalRoleNum;
+    
+    /**
+    * 创角人数
+    */    
+    @Column
+    private Long roleNum;
+    
+    /**
+    * 注册成本=实际消耗/注册人数
+    */    
+    @Column
+    private Double registerCost;
+    
+    /**
+    * 首日回收率
+    */    
+    @Column
+    private Double firstRoi;
+    
+    /**
+    * 买量回收率
+    */    
+    @Column
+    private Double buyRoi;
+    
+    /**
+    * 当日回收率
+    */    
+    @Column
+    private Double todayRoi;
+    
+    /**
+    * 毛利额,毛利=新用户-实际消耗
+    */    
+    @Column
+    private Double grossProfit;
+    
+    /**
+    * 首日付费率
+    */    
+    @Column
+    private Double firstRate;
+    
+    /**
+    * 买量用户付费率
+    */    
+    @Column
+    private Double buyUserRate;
+    
+    /**
+    * 当天付费率
+    */    
+    @Column
+    private Double todayRate;
+    
+    /**
+    * 首日客单价
+    */    
+    @Column
+    private Double firstAvg;
+    
+    /**
+    * 买量客单价
+    */    
+    @Column
+    private Double buyAvg;
+    
+    /**
+    * 当天客单价
+    */    
+    @Column
+    private Double todayAvg;
+    
+    /**
+    * 账面客单价
+    */    
+    @Column
+    private Double paperAvg;
+    
+    /**
+    * 首日充值成本
+    */    
+    @Column
+    private Double firstAmountCost;
+    
+    /**
+    * 买量充值成本
+    */    
+    @Column
+    private Double buyAmountCost;
+    
+    /**
+    * 当天充值成本
+    */    
+    @Column
+    private Double todayAmountCost;
+    
+    /**
+    * 当天复充率
+    */    
+    @Column
+    private Double todayAgainRate;
+    
+    /**
+    * 新增注册ARPU
+    */    
+    @Column
+    private Double newRegArpu;
+    
+    /**
+    * 首日付费ARPU
+    */    
+    @Column
+    private Double firstArpu;
+    
+    /**
+    * 当天付费ARPU
+    */    
+    @Column
+    private Double todayArpu;
+    
+    /**
+    * 账面arpu
+    */    
+    @Column
+    private Double paperArpu;
+    
+    /**
+    * 单日付费100+成本
+    */    
+    @Column
+    private Double hundredUserNumCost;
+    
+    /**
+    * 1日roi
+    */    
+    @Column
+    private Double roi1;
+    
+    /**
+    * 2日roi
+    */    
+    @Column
+    private Double roi2;
+    
+    /**
+    * 3日roi
+    */    
+    @Column
+    private Double roi3;
+    
+    /**
+    * 4日roi
+    */    
+    @Column
+    private Double roi4;
+    
+    /**
+    * 5日roi
+    */    
+    @Column
+    private Double roi5;
+    
+    /**
+    * 6日roi
+    */    
+    @Column
+    private Double roi6;
+    
+    /**
+    * 7日roi
+    */    
+    @Column
+    private Double roi7;
+    
+    /**
+    * 8日roi
+    */    
+    @Column
+    private Double roi8;
+    
+    /**
+    * 9日roi
+    */    
+    @Column
+    private Double roi9;
+    
+    /**
+    * 10日roi
+    */    
+    @Column
+    private Double roi10;
+    
+    /**
+    * 11日roi
+    */    
+    @Column
+    private Double roi11;
+    
+    /**
+    * 12日roi
+    */    
+    @Column
+    private Double roi12;
+    
+    /**
+    * 13日roi
+    */    
+    @Column
+    private Double roi13;
+    
+    /**
+    * 14日roi
+    */    
+    @Column
+    private Double roi14;
+    
+    /**
+    * 15日roi
+    */    
+    @Column
+    private Double roi15;
+    
+    /**
+    * 16日roi
+    */    
+    @Column
+    private Double roi16;
+    
+    /**
+    * 17日roi
+    */    
+    @Column
+    private Double roi17;
+    
+    /**
+    * 18日roi
+    */    
+    @Column
+    private Double roi18;
+    
+    /**
+    * 19日roi
+    */    
+    @Column
+    private Double roi19;
+    
+    /**
+    * 20日roi
+    */    
+    @Column
+    private Double roi20;
+    
+    /**
+    * 21日roi
+    */    
+    @Column
+    private Double roi21;
+    
+    /**
+    * 22日roi
+    */    
+    @Column
+    private Double roi22;
+    
+    /**
+    * 23日roi
+    */    
+    @Column
+    private Double roi23;
+    
+    /**
+    * 24日roi
+    */    
+    @Column
+    private Double roi24;
+    
+    /**
+    * 25日roi
+    */    
+    @Column
+    private Double roi25;
+    
+    /**
+    * 26日roi
+    */    
+    @Column
+    private Double roi26;
+    
+    /**
+    * 27日roi
+    */    
+    @Column
+    private Double roi27;
+    
+    /**
+    * 28日roi
+    */    
+    @Column
+    private Double roi28;
+    
+    /**
+    * 29日roi
+    */    
+    @Column
+    private Double roi29;
+    
+    /**
+    * 30日roi
+    */    
+    @Column
+    private Double roi30;
+    
+    /**
+    * 60日ROI
+    */    
+    @Column
+    private Double roi60;
+    
+    /**
+    * 90日ROI
+    */    
+    @Column
+    private Double roi90;
+    
+    /**
+    * 180日ROI
+    */    
+    @Column
+    private Double roi180;
+    
+    /**
+    * 1年ROI
+    */    
+    @Column
+    private Double roi1yaer;
+    
+    /**
+    * 总ROI
+    */    
+    @Column
+    private Double roiTotal;
+    
+    /**
+    * 付费趋势第1日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD1;
+    
+    /**
+    * 付费趋势第2日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD2;
+    
+    /**
+    * 付费趋势第3日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD3;
+    
+    /**
+    * 付费趋势第4日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD4;
+    
+    /**
+    * 付费趋势第5日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD5;
+    
+    /**
+    * 付费趋势第6日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD6;
+    
+    /**
+    * 付费趋势第7日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD7;
+    
+    /**
+    * 付费趋势第8日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD8;
+    
+    /**
+    * 付费趋势第9日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD9;
+    
+    /**
+    * 付费趋势第10日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD10;
+    
+    /**
+    * 付费趋势第11日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD11;
+    
+    /**
+    * 付费趋势第12日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD12;
+    
+    /**
+    * 付费趋势第13日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD13;
+    
+    /**
+    * 付费趋势第14日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD14;
+    
+    /**
+    * 付费趋势第15日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD15;
+    
+    /**
+    * 付费趋势第16日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD16;
+    
+    /**
+    * 付费趋势第17日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD17;
+    
+    /**
+    * 付费趋势第18日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD18;
+    
+    /**
+    * 付费趋势第19日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD19;
+    
+    /**
+    * 付费趋势第20日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD20;
+    
+    /**
+    * 付费趋势第21日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD21;
+    
+    /**
+    * 付费趋势第22日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD22;
+    
+    /**
+    * 付费趋势第23日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD23;
+    
+    /**
+    * 付费趋势第24日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD24;
+    
+    /**
+    * 付费趋势第25日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD25;
+    
+    /**
+    * 付费趋势第26日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD26;
+    
+    /**
+    * 付费趋势第27日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD27;
+    
+    /**
+    * 付费趋势第28日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD28;
+    
+    /**
+    * 付费趋势第29日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD29;
+    
+    /**
+    * 付费趋势第30日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM1;
+    
+    /**
+    * 付费趋势第二月总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM2;
+    
+    /**
+    * 付费趋势第三月总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM3;
+    
+    /**
+    * 付费趋势六月总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM6;
+    
+    /**
+    * 付费趋势一年总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountY1;
+    
+    /**
+    * 付费趋势总:增/回/倍
+    */    
+    @Column
+    private String amountSum;
+    
+    /**
+    * 投手游戏第1天新用户充值
+    */    
+    @Column
+    private Double da1;
+    
+    /**
+    * 投手游戏第2天新用户充值
+    */    
+    @Column
+    private Double da2;
+    
+    /**
+    * 投手游戏第3天新用户充值
+    */    
+    @Column
+    private Double da3;
+    
+    /**
+    * 投手游戏第4天新用户充值
+    */    
+    @Column
+    private Double da4;
+    
+    /**
+    * 投手游戏第5天新用户充值
+    */    
+    @Column
+    private Double da5;
+    
+    /**
+    * 投手游戏第6天新用户充值
+    */    
+    @Column
+    private Double da6;
+    
+    /**
+    * 投手游戏第7天新用户充值
+    */    
+    @Column
+    private Double da7;
+    
+    /**
+    * 投手游戏第8天新用户充值
+    */    
+    @Column
+    private Double da8;
+    
+    /**
+    * 投手游戏第9天新用户充值
+    */    
+    @Column
+    private Double da9;
+    
+    /**
+    * 投手游戏第10天新用户充值
+    */    
+    @Column
+    private Double da10;
+    
+    /**
+    * 投手游戏第11天新用户充值
+    */    
+    @Column
+    private Double da11;
+    
+    /**
+    * 投手游戏第12天新用户充值
+    */    
+    @Column
+    private Double da12;
+    
+    /**
+    * 投手游戏第13天新用户充值
+    */    
+    @Column
+    private Double da13;
+    
+    /**
+    * 投手游戏第14天新用户充值
+    */    
+    @Column
+    private Double da14;
+    
+    /**
+    * 投手游戏第15天新用户充值
+    */    
+    @Column
+    private Double da15;
+    
+    /**
+    * 投手游戏第16天新用户充值
+    */    
+    @Column
+    private Double da16;
+    
+    /**
+    * 投手游戏第17天新用户充值
+    */    
+    @Column
+    private Double da17;
+    
+    /**
+    * 投手游戏第18天新用户充值
+    */    
+    @Column
+    private Double da18;
+    
+    /**
+    * 投手游戏第19天新用户充值
+    */    
+    @Column
+    private Double da19;
+    
+    /**
+    * 投手游戏第20天新用户充值
+    */    
+    @Column
+    private Double da20;
+    
+    /**
+    * 投手游戏第21天新用户充值
+    */    
+    @Column
+    private Double da21;
+    
+    /**
+    * 投手游戏第22天新用户充值
+    */    
+    @Column
+    private Double da22;
+    
+    /**
+    * 投手游戏第23天新用户充值
+    */    
+    @Column
+    private Double da23;
+    
+    /**
+    * 投手游戏第24天新用户充值
+    */    
+    @Column
+    private Double da24;
+    
+    /**
+    * 投手游戏第25天新用户充值
+    */    
+    @Column
+    private Double da25;
+    
+    /**
+    * 投手游戏第26天新用户充值
+    */    
+    @Column
+    private Double da26;
+    
+    /**
+    * 投手游戏第27天新用户充值
+    */    
+    @Column
+    private Double da27;
+    
+    /**
+    * 投手游戏第28天新用户充值
+    */    
+    @Column
+    private Double da28;
+    
+    /**
+    * 投手游戏第29天新用户充值
+    */    
+    @Column
+    private Double da29;
+    
+    /**
+    * 投手游戏第30天新用户充值
+    */    
+    @Column
+    private Double da30;
+    
+    /**
+    * 投手游戏第2月新用户充值
+    */    
+    @Column
+    private Double m2;
+    
+    /**
+    * 投手游戏第3月新用户充值
+    */    
+    @Column
+    private Double m3;
+    
+    /**
+    * 投手游戏第6月新用户充值
+    */    
+    @Column
+    private Double m6;
+    
+    /**
+    * 投手游戏第1年新用户充值
+    */    
+    @Column
+    private Double y1;
+    
+    /**
+    * 至今充值金额
+    */    
+    @Column
+    private Double total;
+    
+    /**
+    * 投手游戏第1天新用户人数
+    */    
+    @Column
+    private Long da1Num;
+    
+    /**
+    * 投手游戏第2天新用户人数
+    */    
+    @Column
+    private Long da2Num;
+    
+    /**
+    * 投手游戏第3天新用户人数
+    */    
+    @Column
+    private Long da3Num;
+    
+    /**
+    * 投手游戏第4天新用户人数
+    */    
+    @Column
+    private Long da4Num;
+    
+    /**
+    * 投手游戏第5天新用户人数
+    */    
+    @Column
+    private Long da5Num;
+    
+    /**
+    * 投手游戏第6天新用户人数
+    */    
+    @Column
+    private Long da6Num;
+    
+    /**
+    * 投手游戏第7天新用户人数
+    */    
+    @Column
+    private Long da7Num;
+    
+    /**
+    * 投手游戏第8天新用户人数
+    */    
+    @Column
+    private Long da8Num;
+    
+    /**
+    * 投手游戏第9天新用户人数
+    */    
+    @Column
+    private Long da9Num;
+    
+    /**
+    * 投手游戏第10天新用户人数
+    */    
+    @Column
+    private Long da10Num;
+    
+    /**
+    * 投手游戏第11天新用户人数
+    */    
+    @Column
+    private Long da11Num;
+    
+    /**
+    * 投手游戏第12天新用户人数
+    */    
+    @Column
+    private Long da12Num;
+    
+    /**
+    * 投手游戏第13天新用户人数
+    */    
+    @Column
+    private Long da13Num;
+    
+    /**
+    * 投手游戏第14天新用户人数
+    */    
+    @Column
+    private Long da14Num;
+    
+    /**
+    * 投手游戏第15天新用户人数
+    */    
+    @Column
+    private Long da15Num;
+    
+    /**
+    * 投手游戏第16天新用户人数
+    */    
+    @Column
+    private Long da16Num;
+    
+    /**
+    * 投手游戏第17天新用户人数
+    */    
+    @Column
+    private Long da17Num;
+    
+    /**
+    * 投手游戏第18天新用户人数
+    */    
+    @Column
+    private Long da18Num;
+    
+    /**
+    * 投手游戏第19天新用户人数
+    */    
+    @Column
+    private Long da19Num;
+    
+    /**
+    * 投手游戏第20天新用户人数
+    */    
+    @Column
+    private Long da20Num;
+    
+    /**
+    * 投手游戏第21天新用户人数
+    */    
+    @Column
+    private Long da21Num;
+    
+    /**
+    * 投手游戏第22天新用户人数
+    */    
+    @Column
+    private Long da22Num;
+    
+    /**
+    * 投手游戏第23天新用户人数
+    */    
+    @Column
+    private Long da23Num;
+    
+    /**
+    * 投手游戏第24天新用户人数
+    */    
+    @Column
+    private Long da24Num;
+    
+    /**
+    * 投手游戏第25天新用户人数
+    */    
+    @Column
+    private Long da25Num;
+    
+    /**
+    * 投手游戏第26天新用户人数
+    */    
+    @Column
+    private Long da26Num;
+    
+    /**
+    * 投手游戏第27天新用户人数
+    */    
+    @Column
+    private Long da27Num;
+    
+    /**
+    * 投手游戏第28天新用户人数
+    */    
+    @Column
+    private Long da28Num;
+    
+    /**
+    * 投手游戏第29天新用户人数
+    */    
+    @Column
+    private Long da29Num;
+    
+    /**
+    * 投手游戏第30天新用户人数
+    */    
+    @Column
+    private Long da30Num;
+    
+    /**
+    * 投手游戏第2月新用户人数
+    */    
+    @Column
+    private Long m2Num;
+    
+    /**
+    * 投手游戏第3月新用户人数
+    */    
+    @Column
+    private Long m3Num;
+    
+    /**
+    * 投手游戏第6月新用户人数
+    */    
+    @Column
+    private Long m6Num;
+    
+    /**
+    * 投手游戏第1年新用户人数
+    */    
+    @Column
+    private Long y1Num;
+    
+    /**
+    * 至今充值人数
+    */    
+    @Column
+    private Long totalNum;
+    
+
+}
+
+

+ 1158 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPitcherDay.java

@@ -0,0 +1,1158 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.Data;
+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;
+
+@Data
+@Table(AdsPitcherDay.TABLE_NAME)
+@PK({"dt", "sourceSystem", "pitcherId"})
+public class AdsPitcherDay implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_pitcher_day";
+     
+    /**
+    * 日期(充值时间)
+    */
+    private LocalDate dt;
+    
+    /**
+    * SDK来源
+    */
+    private String sourceSystem;
+    
+    /**
+    * 投手ID
+    */
+    private Long pitcherId;
+    
+    /**
+    * 投手
+    */    
+    @Column
+    private String pitcher;
+    
+    /**
+    * 消耗
+    */    
+    @Column
+    private Double cost;
+    
+    /**
+    * 推广计划数量
+    */    
+    @Column
+    private Long planCount;
+    
+    /**
+    * 推广账号数量
+    */    
+    @Column
+    private Long accountCount;
+    
+    /**
+    * 推广渠道数量
+    */    
+    @Column
+    private Long agentCount;
+    
+    /**
+    * 注册人数-通过广告首次登录小游戏的独立用户数
+    */    
+    @Column
+    private Long registerNum;
+    
+    /**
+    * 新增付费次数
+    */    
+    @Column
+    private Long firstNewUserAmountCount;
+    
+    /**
+    * 新增付费人数
+    */    
+    @Column
+    private Long firstNewUserAmountNum;
+    
+    /**
+    * 新增付费金额
+    */    
+    @Column
+    private Double firstNewUserAmount;
+    
+    /**
+    * 账面充值次数
+    */    
+    @Column
+    private Long amountCount;
+    
+    /**
+    * 账面充值人数
+    */    
+    @Column
+    private Long amountNum;
+    
+    /**
+    * 账面充值金额
+    */    
+    @Column
+    private Double amount;
+    
+    /**
+    * 老用户充值次数(每日)
+    */    
+    @Column
+    private Long oldAmountCount;
+    
+    /**
+    * 老用户充值人数(每日)
+    */    
+    @Column
+    private Long oldAmountNum;
+    
+    /**
+    * 老用户充值金额(每日)
+    */    
+    @Column
+    private Double oldAmount;
+    
+    /**
+    * 至今充值次数
+    */    
+    @Column
+    private Long newUserTotalAmountCount;
+    
+    /**
+    * 至今充值人数
+    */    
+    @Column
+    private Long newUserTotalAmountNum;
+    
+    /**
+    * 至今充值金额
+    */    
+    @Column
+    private Double newUserTotalAmount;
+    
+    /**
+    * 单日付费100+人数
+    */    
+    @Column
+    private Long hundredUserNum;
+    
+    /**
+    * 买量新用户累计充值金额
+    */    
+    @Column
+    private Double buyNewUserTotalAmount;
+    
+    /**
+    * 买量新用户累计充值人数
+    */    
+    @Column
+    private Long buyNewUserTotalAmountNum;
+    
+    /**
+    * 买量新用户累计充值次数
+    */    
+    @Column
+    private Long buyNewUserTotalAmountCount;
+    
+    /**
+    * 复充人数
+    */    
+    @Column
+    private Long regOrderUserAgain;
+    
+    /**
+    * 首日创角人数
+    */    
+    @Column
+    private Long firstRoleNum;
+    
+    /**
+    * 新用户累计创角人数
+    */    
+    @Column
+    private Long newUserTotalRoleNum;
+    
+    /**
+    * 创角人数
+    */    
+    @Column
+    private Long roleNum;
+    
+    /**
+    * 注册成本=实际消耗/注册人数
+    */    
+    @Column
+    private Double registerCost;
+    
+    /**
+    * 首日回收率
+    */    
+    @Column
+    private Double firstRoi;
+    
+    /**
+    * 买量回收率
+    */    
+    @Column
+    private Double buyRoi;
+    
+    /**
+    * 当日回收率
+    */    
+    @Column
+    private Double todayRoi;
+    
+    /**
+    * 毛利额,毛利=新用户-实际消耗
+    */    
+    @Column
+    private Double grossProfit;
+    
+    /**
+    * 首日付费率
+    */    
+    @Column
+    private Double firstRate;
+    
+    /**
+    * 买量用户付费率
+    */    
+    @Column
+    private Double buyUserRate;
+    
+    /**
+    * 当天付费率
+    */    
+    @Column
+    private Double todayRate;
+    
+    /**
+    * 首日客单价
+    */    
+    @Column
+    private Double firstAvg;
+    
+    /**
+    * 买量客单价
+    */    
+    @Column
+    private Double buyAvg;
+    
+    /**
+    * 当天客单价
+    */    
+    @Column
+    private Double todayAvg;
+    
+    /**
+    * 账面客单价
+    */    
+    @Column
+    private Double paperAvg;
+    
+    /**
+    * 首日充值成本
+    */    
+    @Column
+    private Double firstAmountCost;
+    
+    /**
+    * 买量充值成本
+    */    
+    @Column
+    private Double buyAmountCost;
+    
+    /**
+    * 当天充值成本
+    */    
+    @Column
+    private Double todayAmountCost;
+    
+    /**
+    * 当天复充率
+    */    
+    @Column
+    private Double todayAgainRate;
+    
+    /**
+    * 新增注册ARPU
+    */    
+    @Column
+    private Double newRegArpu;
+    
+    /**
+    * 首日付费ARPU
+    */    
+    @Column
+    private Double firstArpu;
+    
+    /**
+    * 当天付费ARPU
+    */    
+    @Column
+    private Double todayArpu;
+    
+    /**
+    * 账面arpu
+    */    
+    @Column
+    private Double paperArpu;
+    
+    /**
+    * 单日付费100+成本
+    */    
+    @Column
+    private Double hundredUserNumCost;
+    
+    /**
+    * 1日roi
+    */    
+    @Column
+    private Double roi1;
+    
+    /**
+    * 2日roi
+    */    
+    @Column
+    private Double roi2;
+    
+    /**
+    * 3日roi
+    */    
+    @Column
+    private Double roi3;
+    
+    /**
+    * 4日roi
+    */    
+    @Column
+    private Double roi4;
+    
+    /**
+    * 5日roi
+    */    
+    @Column
+    private Double roi5;
+    
+    /**
+    * 6日roi
+    */    
+    @Column
+    private Double roi6;
+    
+    /**
+    * 7日roi
+    */    
+    @Column
+    private Double roi7;
+    
+    /**
+    * 8日roi
+    */    
+    @Column
+    private Double roi8;
+    
+    /**
+    * 9日roi
+    */    
+    @Column
+    private Double roi9;
+    
+    /**
+    * 10日roi
+    */    
+    @Column
+    private Double roi10;
+    
+    /**
+    * 11日roi
+    */    
+    @Column
+    private Double roi11;
+    
+    /**
+    * 12日roi
+    */    
+    @Column
+    private Double roi12;
+    
+    /**
+    * 13日roi
+    */    
+    @Column
+    private Double roi13;
+    
+    /**
+    * 14日roi
+    */    
+    @Column
+    private Double roi14;
+    
+    /**
+    * 15日roi
+    */    
+    @Column
+    private Double roi15;
+    
+    /**
+    * 16日roi
+    */    
+    @Column
+    private Double roi16;
+    
+    /**
+    * 17日roi
+    */    
+    @Column
+    private Double roi17;
+    
+    /**
+    * 18日roi
+    */    
+    @Column
+    private Double roi18;
+    
+    /**
+    * 19日roi
+    */    
+    @Column
+    private Double roi19;
+    
+    /**
+    * 20日roi
+    */    
+    @Column
+    private Double roi20;
+    
+    /**
+    * 21日roi
+    */    
+    @Column
+    private Double roi21;
+    
+    /**
+    * 22日roi
+    */    
+    @Column
+    private Double roi22;
+    
+    /**
+    * 23日roi
+    */    
+    @Column
+    private Double roi23;
+    
+    /**
+    * 24日roi
+    */    
+    @Column
+    private Double roi24;
+    
+    /**
+    * 25日roi
+    */    
+    @Column
+    private Double roi25;
+    
+    /**
+    * 26日roi
+    */    
+    @Column
+    private Double roi26;
+    
+    /**
+    * 27日roi
+    */    
+    @Column
+    private Double roi27;
+    
+    /**
+    * 28日roi
+    */    
+    @Column
+    private Double roi28;
+    
+    /**
+    * 29日roi
+    */    
+    @Column
+    private Double roi29;
+    
+    /**
+    * 30日roi
+    */    
+    @Column
+    private Double roi30;
+    
+    /**
+    * 60日ROI
+    */    
+    @Column
+    private Double roi60;
+    
+    /**
+    * 90日ROI
+    */    
+    @Column
+    private Double roi90;
+    
+    /**
+    * 180日ROI
+    */    
+    @Column
+    private Double roi180;
+    
+    /**
+    * 1年ROI
+    */    
+    @Column
+    private Double roi1yaer;
+    
+    /**
+    * 总ROI
+    */    
+    @Column
+    private Double roiTotal;
+    
+    /**
+    * 付费趋势第1日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD1;
+    
+    /**
+    * 付费趋势第2日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD2;
+    
+    /**
+    * 付费趋势第3日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD3;
+    
+    /**
+    * 付费趋势第4日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD4;
+    
+    /**
+    * 付费趋势第5日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD5;
+    
+    /**
+    * 付费趋势第6日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD6;
+    
+    /**
+    * 付费趋势第7日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD7;
+    
+    /**
+    * 付费趋势第8日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD8;
+    
+    /**
+    * 付费趋势第9日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD9;
+    
+    /**
+    * 付费趋势第10日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD10;
+    
+    /**
+    * 付费趋势第11日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD11;
+    
+    /**
+    * 付费趋势第12日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD12;
+    
+    /**
+    * 付费趋势第13日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD13;
+    
+    /**
+    * 付费趋势第14日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD14;
+    
+    /**
+    * 付费趋势第15日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD15;
+    
+    /**
+    * 付费趋势第16日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD16;
+    
+    /**
+    * 付费趋势第17日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD17;
+    
+    /**
+    * 付费趋势第18日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD18;
+    
+    /**
+    * 付费趋势第19日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD19;
+    
+    /**
+    * 付费趋势第20日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD20;
+    
+    /**
+    * 付费趋势第21日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD21;
+    
+    /**
+    * 付费趋势第22日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD22;
+    
+    /**
+    * 付费趋势第23日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD23;
+    
+    /**
+    * 付费趋势第24日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD24;
+    
+    /**
+    * 付费趋势第25日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD25;
+    
+    /**
+    * 付费趋势第26日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD26;
+    
+    /**
+    * 付费趋势第27日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD27;
+    
+    /**
+    * 付费趋势第28日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD28;
+    
+    /**
+    * 付费趋势第29日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountD29;
+    
+    /**
+    * 付费趋势第30日总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM1;
+    
+    /**
+    * 付费趋势第二月总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM2;
+    
+    /**
+    * 付费趋势第三月总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM3;
+    
+    /**
+    * 付费趋势六月总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountM6;
+    
+    /**
+    * 付费趋势一年总:金额/人数/增/回/倍
+    */    
+    @Column
+    private String amountY1;
+    
+    /**
+    * 付费趋势总:增/回/倍
+    */    
+    @Column
+    private String amountSum;
+    
+    /**
+    * 投手游戏第1天新用户充值
+    */    
+    @Column
+    private Double da1;
+    
+    /**
+    * 投手游戏第2天新用户充值
+    */    
+    @Column
+    private Double da2;
+    
+    /**
+    * 投手游戏第3天新用户充值
+    */    
+    @Column
+    private Double da3;
+    
+    /**
+    * 投手游戏第4天新用户充值
+    */    
+    @Column
+    private Double da4;
+    
+    /**
+    * 投手游戏第5天新用户充值
+    */    
+    @Column
+    private Double da5;
+    
+    /**
+    * 投手游戏第6天新用户充值
+    */    
+    @Column
+    private Double da6;
+    
+    /**
+    * 投手游戏第7天新用户充值
+    */    
+    @Column
+    private Double da7;
+    
+    /**
+    * 投手游戏第8天新用户充值
+    */    
+    @Column
+    private Double da8;
+    
+    /**
+    * 投手游戏第9天新用户充值
+    */    
+    @Column
+    private Double da9;
+    
+    /**
+    * 投手游戏第10天新用户充值
+    */    
+    @Column
+    private Double da10;
+    
+    /**
+    * 投手游戏第11天新用户充值
+    */    
+    @Column
+    private Double da11;
+    
+    /**
+    * 投手游戏第12天新用户充值
+    */    
+    @Column
+    private Double da12;
+    
+    /**
+    * 投手游戏第13天新用户充值
+    */    
+    @Column
+    private Double da13;
+    
+    /**
+    * 投手游戏第14天新用户充值
+    */    
+    @Column
+    private Double da14;
+    
+    /**
+    * 投手游戏第15天新用户充值
+    */    
+    @Column
+    private Double da15;
+    
+    /**
+    * 投手游戏第16天新用户充值
+    */    
+    @Column
+    private Double da16;
+    
+    /**
+    * 投手游戏第17天新用户充值
+    */    
+    @Column
+    private Double da17;
+    
+    /**
+    * 投手游戏第18天新用户充值
+    */    
+    @Column
+    private Double da18;
+    
+    /**
+    * 投手游戏第19天新用户充值
+    */    
+    @Column
+    private Double da19;
+    
+    /**
+    * 投手游戏第20天新用户充值
+    */    
+    @Column
+    private Double da20;
+    
+    /**
+    * 投手游戏第21天新用户充值
+    */    
+    @Column
+    private Double da21;
+    
+    /**
+    * 投手游戏第22天新用户充值
+    */    
+    @Column
+    private Double da22;
+    
+    /**
+    * 投手游戏第23天新用户充值
+    */    
+    @Column
+    private Double da23;
+    
+    /**
+    * 投手游戏第24天新用户充值
+    */    
+    @Column
+    private Double da24;
+    
+    /**
+    * 投手游戏第25天新用户充值
+    */    
+    @Column
+    private Double da25;
+    
+    /**
+    * 投手游戏第26天新用户充值
+    */    
+    @Column
+    private Double da26;
+    
+    /**
+    * 投手游戏第27天新用户充值
+    */    
+    @Column
+    private Double da27;
+    
+    /**
+    * 投手游戏第28天新用户充值
+    */    
+    @Column
+    private Double da28;
+    
+    /**
+    * 投手游戏第29天新用户充值
+    */    
+    @Column
+    private Double da29;
+    
+    /**
+    * 投手游戏第30天新用户充值
+    */    
+    @Column
+    private Double da30;
+    
+    /**
+    * 投手游戏第2月新用户充值
+    */    
+    @Column
+    private Double m2;
+    
+    /**
+    * 投手游戏第3月新用户充值
+    */    
+    @Column
+    private Double m3;
+    
+    /**
+    * 投手游戏第6月新用户充值
+    */    
+    @Column
+    private Double m6;
+    
+    /**
+    * 投手游戏第1年新用户充值
+    */    
+    @Column
+    private Double y1;
+    
+    /**
+    * 至今充值金额
+    */    
+    @Column
+    private Double total;
+    
+    /**
+    * 投手游戏第1天新用户人数
+    */    
+    @Column
+    private Long da1Num;
+    
+    /**
+    * 投手游戏第2天新用户人数
+    */    
+    @Column
+    private Long da2Num;
+    
+    /**
+    * 投手游戏第3天新用户人数
+    */    
+    @Column
+    private Long da3Num;
+    
+    /**
+    * 投手游戏第4天新用户人数
+    */    
+    @Column
+    private Long da4Num;
+    
+    /**
+    * 投手游戏第5天新用户人数
+    */    
+    @Column
+    private Long da5Num;
+    
+    /**
+    * 投手游戏第6天新用户人数
+    */    
+    @Column
+    private Long da6Num;
+    
+    /**
+    * 投手游戏第7天新用户人数
+    */    
+    @Column
+    private Long da7Num;
+    
+    /**
+    * 投手游戏第8天新用户人数
+    */    
+    @Column
+    private Long da8Num;
+    
+    /**
+    * 投手游戏第9天新用户人数
+    */    
+    @Column
+    private Long da9Num;
+    
+    /**
+    * 投手游戏第10天新用户人数
+    */    
+    @Column
+    private Long da10Num;
+    
+    /**
+    * 投手游戏第11天新用户人数
+    */    
+    @Column
+    private Long da11Num;
+    
+    /**
+    * 投手游戏第12天新用户人数
+    */    
+    @Column
+    private Long da12Num;
+    
+    /**
+    * 投手游戏第13天新用户人数
+    */    
+    @Column
+    private Long da13Num;
+    
+    /**
+    * 投手游戏第14天新用户人数
+    */    
+    @Column
+    private Long da14Num;
+    
+    /**
+    * 投手游戏第15天新用户人数
+    */    
+    @Column
+    private Long da15Num;
+    
+    /**
+    * 投手游戏第16天新用户人数
+    */    
+    @Column
+    private Long da16Num;
+    
+    /**
+    * 投手游戏第17天新用户人数
+    */    
+    @Column
+    private Long da17Num;
+    
+    /**
+    * 投手游戏第18天新用户人数
+    */    
+    @Column
+    private Long da18Num;
+    
+    /**
+    * 投手游戏第19天新用户人数
+    */    
+    @Column
+    private Long da19Num;
+    
+    /**
+    * 投手游戏第20天新用户人数
+    */    
+    @Column
+    private Long da20Num;
+    
+    /**
+    * 投手游戏第21天新用户人数
+    */    
+    @Column
+    private Long da21Num;
+    
+    /**
+    * 投手游戏第22天新用户人数
+    */    
+    @Column
+    private Long da22Num;
+    
+    /**
+    * 投手游戏第23天新用户人数
+    */    
+    @Column
+    private Long da23Num;
+    
+    /**
+    * 投手游戏第24天新用户人数
+    */    
+    @Column
+    private Long da24Num;
+    
+    /**
+    * 投手游戏第25天新用户人数
+    */    
+    @Column
+    private Long da25Num;
+    
+    /**
+    * 投手游戏第26天新用户人数
+    */    
+    @Column
+    private Long da26Num;
+    
+    /**
+    * 投手游戏第27天新用户人数
+    */    
+    @Column
+    private Long da27Num;
+    
+    /**
+    * 投手游戏第28天新用户人数
+    */    
+    @Column
+    private Long da28Num;
+    
+    /**
+    * 投手游戏第29天新用户人数
+    */    
+    @Column
+    private Long da29Num;
+    
+    /**
+    * 投手游戏第30天新用户人数
+    */    
+    @Column
+    private Long da30Num;
+    
+    /**
+    * 投手游戏第2月新用户人数
+    */    
+    @Column
+    private Long m2Num;
+    
+    /**
+    * 投手游戏第3月新用户人数
+    */    
+    @Column
+    private Long m3Num;
+    
+    /**
+    * 投手游戏第6月新用户人数
+    */    
+    @Column
+    private Long m6Num;
+    
+    /**
+    * 投手游戏第1年新用户人数
+    */    
+    @Column
+    private Long y1Num;
+    
+    /**
+    * 至今充值人数
+    */    
+    @Column
+    private Long totalNum;
+    
+
+}
+
+

+ 42 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPitcherDayn.java

@@ -0,0 +1,42 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.Data;
+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;
+
+@Data
+@Table(AdsPitcherDayn.TABLE_NAME)
+@PK({"dt", "sourceSystem", "pitcherId"})
+public class AdsPitcherDayn implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_pitcher_dayn";
+     
+    /**
+    * 注册时间
+    */
+    private LocalDate dt;
+    
+    /**
+    * 投手ID
+    */
+    private String pitcherId;
+    
+    /**
+    * SDK来源
+    */
+    private String sourceSystem;
+    
+    /**
+    * 每一天的的充值金额,充值次数,充值人数
+    */    
+    @Column
+    private String dayn;
+    
+
+}
+
+

+ 50 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPitcherGameDayn.java

@@ -0,0 +1,50 @@
+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;
+
+@Data
+@Table(AdsPitcherGameDayn.TABLE_NAME)
+@PK({"dt", "sourceSystem", "pitcherId", "gameId"})
+public class AdsPitcherGameDayn implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_pitcher_game_dayn";
+     
+    /**
+    * 注册时间
+    */
+    private LocalDate dt;
+    
+    /**
+    * 投手ID
+    */
+    private String pitcherId;
+    
+    /**
+    * 游戏ID
+    */
+    private String gameId;
+    
+    /**
+    * SDK来源
+    */
+    private String sourceSystem;
+    
+    /**
+    * 每一天的的充值金额,充值次数,充值人数
+    */    
+    @Column
+    private String dayn;
+    
+
+}
+
+

+ 10 - 3
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsPromotionDay.java

@@ -11,6 +11,7 @@ import org.nutz.dao.entity.annotation.Table;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -47,7 +48,7 @@ public class AdsPromotionDay implements Serializable {
     private Long promotionId;
 
     /**
-     * 计划ID
+     * 项目ID
      */
     private Long projectId;
 
@@ -196,10 +197,16 @@ public class AdsPromotionDay implements Serializable {
     private String budget;
 
     /**
-     * 投放时间
+     * 投放开始时间
      */
     @Column
-    private String scheduleTime;
+    private LocalDateTime startTime;
+
+    /**
+     * 投放结束时间
+     */
+    @Column
+    private LocalDateTime endTime;
 
     /**
      * 今日消耗

+ 550 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameServerDayTotalVO.java

@@ -3,7 +3,7 @@ package com.zanxiang.game.data.serve.pojo.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDate;
+import java.math.BigDecimal;
 
 /**
  * @author tianhua
@@ -14,9 +14,555 @@ import java.time.LocalDate;
 public class GameServerDayTotalVO {
 
     /**
-     * 开服时间
+     * 滚服累计人数
      */
-    @ApiModelProperty(value = "开服时间")
-    private LocalDate dt;
+    @ApiModelProperty(value = "滚服累计人数")
+    private Long outTotalNum;
+
+    /**
+     * 滚服累计付费人数
+     */
+    @ApiModelProperty(value = "滚服累计付费人数")
+    private Long outTotalAmountNum;
+
+    /**
+     * 滚服累计付费金额
+     */
+    @ApiModelProperty(value = "滚服累计付费金额")
+    private BigDecimal outTotalAmount;
+
+    /**
+     * 滚服累计付费占比
+     */
+    @ApiModelProperty(value = "滚服累计付费占比")
+    private BigDecimal outTotalRate;
+
+    /**
+     * 创角累计人数
+     */
+    @ApiModelProperty(value = "创角累计人数")
+    private Long totalRoleNum;
+
+    /**
+     * 注册累计人数
+     */
+    @ApiModelProperty(value = "注册累计人数")
+    private Long totalRegNum;
+
+    /**
+     * 付费累计人数
+     */
+    @ApiModelProperty(value = "付费累计人数")
+    private Long totalAmountNum;
+
+    /**
+     * 付费累计金额
+     */
+    @ApiModelProperty(value = "付费累计金额")
+    private BigDecimal totalAmount;
+
+    /**
+     * 区服第1天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da1;
+
+    /**
+     * 区服在第2天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da2;
+
+    /**
+     * 区服在第3天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da3;
+
+    /**
+     * 区服在第4天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da4;
+
+    /**
+     * 区服在第5天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da5;
+
+    /**
+     * 区服在第6天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da6;
+
+    /**
+     * 区服在第7天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da7;
+
+    /**
+     * 区服在第8天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da8;
+
+    /**
+     * 区服在第9天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da9;
+
+    /**
+     * 区服在第10天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da10;
+
+    /**
+     * 区服在第11天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da11;
+
+    /**
+     * 区服在第12天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da12;
+
+    /**
+     * 区服在第13天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da13;
+
+    /**
+     * 区服在第14天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da14;
+
+    /**
+     * 区服在第15天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da15;
+
+    /**
+     * 区服在第16天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da16;
+
+    /**
+     * 区服在第17天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da17;
+
+    /**
+     * 区服在第18天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da18;
+
+    /**
+     * 区服在第19天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da19;
+
+    /**
+     * 区服在第20天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da20;
+
+    /**
+     * 区服在第21天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da21;
+
+    /**
+     * 区服在第22天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da22;
+
+    /**
+     * 区服在第23天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da23;
+
+    /**
+     * 区服在第24天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da24;
+
+    /**
+     * 区服在第25天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da25;
+
+    /**
+     * 区服在第26天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da26;
+
+    /**
+     * 区服在第27天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da27;
+
+    /**
+     * 区服在第28天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da28;
+
+    /**
+     * 区服在第29天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da29;
+
+    /**
+     * 区服在第30天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String da30;
+
+    /**
+     * 区服在第2月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m2;
+
+    /**
+     * 区服在第3月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m3;
+
+    /**
+     * 区服在第4月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m4;
+
+    /**
+     * 区服在第5月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m5;
+
+    /**
+     * 区服在第6月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m6;
+
+    /**
+     * 区服在第7月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m7;
+
+    /**
+     * 区服在第8月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m8;
+
+    /**
+     * 区服在第9月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m9;
+
+    /**
+     * 区服在第10月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m10;
+
+    /**
+     * 区服在第11月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String m11;
+
+    /**
+     * 区服在第1年:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String y1;
+
+    /**
+     * 区服至今:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "不展示")
+    private String total;
+
+    /**
+     * 区服第1天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第1天")
+    private GameServerTrendVO da1Trend;
+
+    /**
+     * 区服在第2天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第2天")
+    private GameServerTrendVO da2Trend;
+
+    /**
+     * 区服在第3天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第3天")
+    private GameServerTrendVO da3Trend;
+
+    /**
+     * 区服在第4天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第4天")
+    private GameServerTrendVO da4Trend;
+
+    /**
+     * 区服在第5天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第5天")
+    private GameServerTrendVO da5Trend;
+
+    /**
+     * 区服在第6天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第6天")
+    private GameServerTrendVO da6Trend;
+
+    /**
+     * 区服在第7天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第7天")
+    private GameServerTrendVO da7Trend;
+
+    /**
+     * 区服在第8天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第8天")
+    private GameServerTrendVO da8Trend;
+
+    /**
+     * 区服在第9天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第9天")
+    private GameServerTrendVO da9Trend;
+
+    /**
+     * 区服在第10天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第10天")
+    private GameServerTrendVO da10Trend;
+
+    /**
+     * 区服在第11天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第11天")
+    private GameServerTrendVO da11Trend;
+
+    /**
+     * 区服在第12天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第12天")
+    private GameServerTrendVO da12Trend;
+
+    /**
+     * 区服在第13天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第13天")
+    private GameServerTrendVO da13Trend;
+
+    /**
+     * 区服在第14天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第14天")
+    private GameServerTrendVO da14Trend;
+
+    /**
+     * 区服在第15天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第15天")
+    private GameServerTrendVO da15Trend;
+
+    /**
+     * 区服在第16天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第16天")
+    private GameServerTrendVO da16Trend;
+
+    /**
+     * 区服在第17天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第17天")
+    private GameServerTrendVO da17Trend;
+
+    /**
+     * 区服在第18天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第18天")
+    private GameServerTrendVO da18Trend;
+
+    /**
+     * 区服在第19天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第19天")
+    private GameServerTrendVO da19Trend;
+
+    /**
+     * 区服在第20天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第20天")
+    private GameServerTrendVO da20Trend;
+
+    /**
+     * 区服在第21天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第21天")
+    private GameServerTrendVO da21Trend;
+
+    /**
+     * 区服在第22天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第22天")
+    private GameServerTrendVO da22Trend;
+
+    /**
+     * 区服在第23天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第23天")
+    private GameServerTrendVO da23Trend;
+
+    /**
+     * 区服在第24天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第24天")
+    private GameServerTrendVO da24Trend;
+
+    /**
+     * 区服在第25天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第25天")
+    private GameServerTrendVO da25Trend;
+
+    /**
+     * 区服在第26天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第26天")
+    private GameServerTrendVO da26Trend;
+
+    /**
+     * 区服在第27天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第27天")
+    private GameServerTrendVO da27Trend;
+
+    /**
+     * 区服在第28天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第28天")
+    private GameServerTrendVO da28Trend;
+
+    /**
+     * 区服在第29天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第29天")
+    private GameServerTrendVO da29Trend;
+
+    /**
+     * 区服在第30天:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第30天")
+    private GameServerTrendVO da30Trend;
+
+    /**
+     * 区服在第2月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第2月")
+    private GameServerTrendVO m2Trend;
+
+    /**
+     * 区服在第3月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第3月")
+    private GameServerTrendVO m3Trend;
+
+    /**
+     * 区服在第4月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第4月")
+    private GameServerTrendVO m4Trend;
+
+    /**
+     * 区服在第5月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第5月")
+    private GameServerTrendVO m5Trend;
+
+    /**
+     * 区服在第6月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第6月")
+    private GameServerTrendVO m6Trend;
+
+    /**
+     * 区服在第7月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第7月")
+    private GameServerTrendVO m7Trend;
+
+    /**
+     * 区服在第8月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第8月")
+    private GameServerTrendVO m8Trend;
+
+    /**
+     * 区服在第9月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第9月")
+    private GameServerTrendVO m9Trend;
+
+    /**
+     * 区服在第10月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第10月")
+    private GameServerTrendVO m10Trend;
+
+    /**
+     * 区服在第11月:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第11月")
+    private GameServerTrendVO m11Trend;
+
+    /**
+     * 区服在第1年:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服第1年")
+    private GameServerTrendVO y1Trend;
+
+    /**
+     * 区服至今:注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/滚服付费占比
+     */
+    @ApiModelProperty(value = "区服至今总数据")
+    private GameServerTrendVO totalTrend;
 
 }

+ 16 - 16
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameServerDayVO.java

@@ -57,51 +57,51 @@ public class GameServerDayVO {
     private Long classify;
 
     /**
-     * 滚服人数
+     * 滚服累计人数
      */
-    @ApiModelProperty(value = "滚服人数")
+    @ApiModelProperty(value = "滚服累计人数")
     private Long outTotalNum;
 
     /**
-     * 滚服付费人数
+     * 滚服累计付费人数
      */
-    @ApiModelProperty(value = "滚服付费人数")
+    @ApiModelProperty(value = "滚服累计付费人数")
     private Long outTotalAmountNum;
 
     /**
-     * 滚服付费金额
+     * 滚服累计付费金额
      */
-    @ApiModelProperty(value = "滚服付费金额")
+    @ApiModelProperty(value = "滚服累计付费金额")
     private BigDecimal outTotalAmount;
 
     /**
-     * 滚服付费占比
+     * 滚服累计付费占比
      */
-    @ApiModelProperty(value = "滚服付费占比")
+    @ApiModelProperty(value = "滚服累计付费占比")
     private BigDecimal outTotalRate;
 
     /**
-     * 创角人数
+     * 创角累计人数
      */
-    @ApiModelProperty(value = "创角人数")
+    @ApiModelProperty(value = "创角累计人数")
     private Long totalRoleNum;
 
     /**
-     * 注册人数
+     * 注册累计人数
      */
-    @ApiModelProperty(value = "注册人数")
+    @ApiModelProperty(value = "注册累计人数")
     private Long totalRegNum;
 
     /**
-     * 付费人数
+     * 付费累计人数
      */
-    @ApiModelProperty(value = "付费人数")
+    @ApiModelProperty(value = "付费累计人数")
     private Long totalAmountNum;
 
     /**
-     * 付费金额
+     * 付费累计金额
      */
-    @ApiModelProperty(value = "付费金额")
+    @ApiModelProperty(value = "付费累计金额")
     private BigDecimal totalAmount;
 
     /**

+ 1384 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataDayTotalVO.java

@@ -0,0 +1,1384 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手每日数据总计实体
+ **/
+@Data
+public class PitcherDataDayTotalVO {
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+    /**
+     * 推广计划数量
+     */
+    @ApiModelProperty(value = "推广计划数量")
+    private Long planCount;
+
+    /**
+     * 推广账号数量
+     */
+    @ApiModelProperty(value = "推广账号数量")
+    private Long accountCount;
+
+    /**
+     * 推广渠道数量
+     */
+    @ApiModelProperty(value = "推广渠道数量")
+    private Long agentCount;
+
+    /**
+     * 注册人数-通过广告首次登录小游戏的独立用户数
+     */
+    @ApiModelProperty(value = "注册人数-通过广告首次登录小游戏的独立用户数")
+    private Long registerNum;
+
+    /**
+     * 新增付费次数
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 账面充值次数
+     */
+    @ApiModelProperty(value = "账面充值次数")
+    private Long amountCount;
+
+    /**
+     * 账面充值人数
+     */
+    @ApiModelProperty(value = "账面充值人数")
+    private Long amountNum;
+
+    /**
+     * 账面充值金额
+     */
+    @ApiModelProperty(value = "账面充值金额")
+    private BigDecimal amount;
+
+    /**
+     * 老用户充值次数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值次数(每日)")
+    private Long oldAmountCount;
+
+    /**
+     * 老用户充值人数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值人数(每日)")
+    private Long oldAmountNum;
+
+    /**
+     * 老用户充值金额(每日)
+     */
+    @ApiModelProperty(value = "老用户充值金额(每日)")
+    private BigDecimal oldAmount;
+
+    /**
+     * 至今充值次数
+     */
+    @ApiModelProperty(value = "至今充值次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 单日付费100+人数
+     */
+    @ApiModelProperty(value = "单日付费100+人数")
+    private Long hundredUserNum;
+
+    /**
+     * 买量新用户累计充值金额
+     */
+    @ApiModelProperty(value = "买量新用户累计充值金额")
+    private BigDecimal buyNewUserTotalAmount;
+
+    /**
+     * 买量新用户累计充值人数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值人数")
+    private Long buyNewUserTotalAmountNum;
+
+    /**
+     * 买量新用户累计充值次数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值次数")
+    private Long buyNewUserTotalAmountCount;
+
+    /**
+     * 复充人数
+     */
+    @ApiModelProperty(value = "复充人数")
+    private Long regOrderUserAgain;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 创角人数
+     */
+    @ApiModelProperty(value = "创角人数")
+    private Long roleNum;
+
+    /**
+     * 注册成本=实际消耗/注册人数
+     */
+    @ApiModelProperty(value = "注册成本=实际消耗/注册人数")
+    private BigDecimal registerCost;
+
+    /**
+     * 首日回收率
+     */
+    @ApiModelProperty(value = "首日回收率")
+    private BigDecimal firstRoi;
+
+    /**
+     * 买量回收率
+     */
+    @ApiModelProperty(value = "买量回收率")
+    private BigDecimal buyRoi;
+
+    /**
+     * 当日回收率
+     */
+    @ApiModelProperty(value = "当日回收率")
+    private BigDecimal todayRoi;
+
+    /**
+     * 毛利额,毛利=新用户-实际消耗
+     */
+    @ApiModelProperty(value = "毛利额,毛利=新用户-实际消耗")
+    private BigDecimal grossProfit;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstRate;
+
+    /**
+     * 买量用户付费率
+     */
+    @ApiModelProperty(value = "买量用户付费率")
+    private BigDecimal buyUserRate;
+
+    /**
+     * 当天付费率
+     */
+    @ApiModelProperty(value = "当天付费率")
+    private BigDecimal todayRate;
+
+    /**
+     * 首日客单价
+     */
+    @ApiModelProperty(value = "首日客单价")
+    private BigDecimal firstAvg;
+
+    /**
+     * 买量客单价
+     */
+    @ApiModelProperty(value = "买量客单价")
+    private BigDecimal buyAvg;
+
+    /**
+     * 当天客单价
+     */
+    @ApiModelProperty(value = "当天客单价")
+    private BigDecimal todayAvg;
+
+    /**
+     * 账面客单价
+     */
+    @ApiModelProperty(value = "账面客单价")
+    private BigDecimal paperAvg;
+
+    /**
+     * 首日充值成本
+     */
+    @ApiModelProperty(value = "首日充值成本")
+    private BigDecimal firstAmountCost;
+
+    /**
+     * 买量充值成本
+     */
+    @ApiModelProperty(value = "买量充值成本")
+    private BigDecimal buyAmountCost;
+
+    /**
+     * 当天充值成本
+     */
+    @ApiModelProperty(value = "当天充值成本")
+    private BigDecimal todayAmountCost;
+
+    /**
+     * 当天复充率
+     */
+    @ApiModelProperty(value = "当天复充率")
+    private BigDecimal todayAgainRate;
+
+    /**
+     * 新增注册ARPU
+     */
+    @ApiModelProperty(value = "新增注册ARPU")
+    private BigDecimal newRegArpu;
+
+    /**
+     * 首日付费ARPU
+     */
+    @ApiModelProperty(value = "首日付费ARPU")
+    private BigDecimal firstArpu;
+
+    /**
+     * 当天付费ARPU
+     */
+    @ApiModelProperty(value = "当天付费ARPU")
+    private BigDecimal todayArpu;
+
+    /**
+     * 账面arpu
+     */
+    @ApiModelProperty(value = "账面arpu")
+    private BigDecimal paperArpu;
+
+    /**
+     * 单日付费100+成本
+     */
+    @ApiModelProperty(value = "单日付费100+成本")
+    private BigDecimal hundredUserNumCost;
+
+    /**
+     * 1日roi
+     */
+    @ApiModelProperty(value = "1日roi")
+    private BigDecimal roi1;
+
+    /**
+     * 2日roi
+     */
+    @ApiModelProperty(value = "2日roi")
+    private BigDecimal roi2;
+
+    /**
+     * 3日roi
+     */
+    @ApiModelProperty(value = "3日roi")
+    private BigDecimal roi3;
+
+    /**
+     * 4日roi
+     */
+    @ApiModelProperty(value = "4日roi")
+    private BigDecimal roi4;
+
+    /**
+     * 5日roi
+     */
+    @ApiModelProperty(value = "5日roi")
+    private BigDecimal roi5;
+
+    /**
+     * 6日roi
+     */
+    @ApiModelProperty(value = "6日roi")
+    private BigDecimal roi6;
+
+    /**
+     * 7日roi
+     */
+    @ApiModelProperty(value = "7日roi")
+    private BigDecimal roi7;
+
+    /**
+     * 8日roi
+     */
+    @ApiModelProperty(value = "8日roi")
+    private BigDecimal roi8;
+
+    /**
+     * 9日roi
+     */
+    @ApiModelProperty(value = "9日roi")
+    private BigDecimal roi9;
+
+    /**
+     * 10日roi
+     */
+    @ApiModelProperty(value = "10日roi")
+    private BigDecimal roi10;
+
+    /**
+     * 11日roi
+     */
+    @ApiModelProperty(value = "11日roi")
+    private BigDecimal roi11;
+
+    /**
+     * 12日roi
+     */
+    @ApiModelProperty(value = "12日roi")
+    private BigDecimal roi12;
+
+    /**
+     * 13日roi
+     */
+    @ApiModelProperty(value = "13日roi")
+    private BigDecimal roi13;
+
+    /**
+     * 14日roi
+     */
+    @ApiModelProperty(value = "14日roi")
+    private BigDecimal roi14;
+
+    /**
+     * 15日roi
+     */
+    @ApiModelProperty(value = "15日roi")
+    private BigDecimal roi15;
+
+    /**
+     * 16日roi
+     */
+    @ApiModelProperty(value = "16日roi")
+    private BigDecimal roi16;
+
+    /**
+     * 17日roi
+     */
+    @ApiModelProperty(value = "17日roi")
+    private BigDecimal roi17;
+
+    /**
+     * 18日roi
+     */
+    @ApiModelProperty(value = "18日roi")
+    private BigDecimal roi18;
+
+    /**
+     * 19日roi
+     */
+    @ApiModelProperty(value = "19日roi")
+    private BigDecimal roi19;
+
+    /**
+     * 20日roi
+     */
+    @ApiModelProperty(value = "20日roi")
+    private BigDecimal roi20;
+
+    /**
+     * 21日roi
+     */
+    @ApiModelProperty(value = "21日roi")
+    private BigDecimal roi21;
+
+    /**
+     * 22日roi
+     */
+    @ApiModelProperty(value = "22日roi")
+    private BigDecimal roi22;
+
+    /**
+     * 23日roi
+     */
+    @ApiModelProperty(value = "23日roi")
+    private BigDecimal roi23;
+
+    /**
+     * 24日roi
+     */
+    @ApiModelProperty(value = "24日roi")
+    private BigDecimal roi24;
+
+    /**
+     * 25日roi
+     */
+    @ApiModelProperty(value = "25日roi")
+    private BigDecimal roi25;
+
+    /**
+     * 26日roi
+     */
+    @ApiModelProperty(value = "26日roi")
+    private BigDecimal roi26;
+
+    /**
+     * 27日roi
+     */
+    @ApiModelProperty(value = "27日roi")
+    private BigDecimal roi27;
+
+    /**
+     * 28日roi
+     */
+    @ApiModelProperty(value = "28日roi")
+    private BigDecimal roi28;
+
+    /**
+     * 29日roi
+     */
+    @ApiModelProperty(value = "29日roi")
+    private BigDecimal roi29;
+
+    /**
+     * 30日roi
+     */
+    @ApiModelProperty(value = "30日roi")
+    private BigDecimal roi30;
+
+    /**
+     * 60日ROI
+     */
+    @ApiModelProperty(value = "60日ROI")
+    private BigDecimal roi60;
+
+    /**
+     * 90日ROI
+     */
+    @ApiModelProperty(value = "90日ROI")
+    private BigDecimal roi90;
+
+    /**
+     * 180日ROI
+     */
+    @ApiModelProperty(value = "180日ROI")
+    private BigDecimal roi180;
+
+    /**
+     * 1年ROI
+     */
+    @ApiModelProperty(value = "1年ROI")
+    private BigDecimal roi1yaer;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal roiTotal;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private String amountD1;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private String amountD2;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private String amountD3;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private String amountD4;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private String amountD5;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private String amountD6;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private String amountD7;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private String amountD8;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private String amountD9;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private String amountD10;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private String amountD11;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private String amountD12;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private String amountD13;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private String amountD14;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private String amountD15;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private String amountD16;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private String amountD17;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private String amountD18;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private String amountD19;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private String amountD20;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private String amountD21;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private String amountD22;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private String amountD23;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private String amountD24;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private String amountD25;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private String amountD26;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private String amountD27;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private String amountD28;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private String amountD29;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private String amountM1;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private String amountM2;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private String amountM3;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private String amountM6;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private String amountY1;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private String amountSum;
+
+    /**
+     * 投手游戏第1天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户充值")
+    private BigDecimal da1;
+
+    /**
+     * 投手游戏第2天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户充值")
+    private BigDecimal da2;
+
+    /**
+     * 投手游戏第3天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户充值")
+    private BigDecimal da3;
+
+    /**
+     * 投手游戏第4天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户充值")
+    private BigDecimal da4;
+
+    /**
+     * 投手游戏第5天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户充值")
+    private BigDecimal da5;
+
+    /**
+     * 投手游戏第6天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户充值")
+    private BigDecimal da6;
+
+    /**
+     * 投手游戏第7天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户充值")
+    private BigDecimal da7;
+
+    /**
+     * 投手游戏第8天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户充值")
+    private BigDecimal da8;
+
+    /**
+     * 投手游戏第9天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户充值")
+    private BigDecimal da9;
+
+    /**
+     * 投手游戏第10天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户充值")
+    private BigDecimal da10;
+
+    /**
+     * 投手游戏第11天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户充值")
+    private BigDecimal da11;
+
+    /**
+     * 投手游戏第12天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户充值")
+    private BigDecimal da12;
+
+    /**
+     * 投手游戏第13天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户充值")
+    private BigDecimal da13;
+
+    /**
+     * 投手游戏第14天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户充值")
+    private BigDecimal da14;
+
+    /**
+     * 投手游戏第15天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户充值")
+    private BigDecimal da15;
+
+    /**
+     * 投手游戏第16天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户充值")
+    private BigDecimal da16;
+
+    /**
+     * 投手游戏第17天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户充值")
+    private BigDecimal da17;
+
+    /**
+     * 投手游戏第18天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户充值")
+    private BigDecimal da18;
+
+    /**
+     * 投手游戏第19天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户充值")
+    private BigDecimal da19;
+
+    /**
+     * 投手游戏第20天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户充值")
+    private BigDecimal da20;
+
+    /**
+     * 投手游戏第21天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户充值")
+    private BigDecimal da21;
+
+    /**
+     * 投手游戏第22天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户充值")
+    private BigDecimal da22;
+
+    /**
+     * 投手游戏第23天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户充值")
+    private BigDecimal da23;
+
+    /**
+     * 投手游戏第24天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户充值")
+    private BigDecimal da24;
+
+    /**
+     * 投手游戏第25天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户充值")
+    private BigDecimal da25;
+
+    /**
+     * 投手游戏第26天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户充值")
+    private BigDecimal da26;
+
+    /**
+     * 投手游戏第27天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户充值")
+    private BigDecimal da27;
+
+    /**
+     * 投手游戏第28天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户充值")
+    private BigDecimal da28;
+
+    /**
+     * 投手游戏第29天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户充值")
+    private BigDecimal da29;
+
+    /**
+     * 投手游戏第30天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户充值")
+    private BigDecimal da30;
+
+    /**
+     * 投手游戏第2月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户充值")
+    private BigDecimal m2;
+
+    /**
+     * 投手游戏第3月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户充值")
+    private BigDecimal m3;
+
+    /**
+     * 投手游戏第6月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户充值")
+    private BigDecimal m6;
+
+    /**
+     * 投手游戏第1年新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户充值")
+    private BigDecimal y1;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal total;
+
+    /**
+     * 投手游戏第1天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户人数")
+    private Long da1Num;
+
+    /**
+     * 投手游戏第2天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户人数")
+    private Long da2Num;
+
+    /**
+     * 投手游戏第3天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户人数")
+    private Long da3Num;
+
+    /**
+     * 投手游戏第4天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户人数")
+    private Long da4Num;
+
+    /**
+     * 投手游戏第5天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户人数")
+    private Long da5Num;
+
+    /**
+     * 投手游戏第6天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户人数")
+    private Long da6Num;
+
+    /**
+     * 投手游戏第7天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户人数")
+    private Long da7Num;
+
+    /**
+     * 投手游戏第8天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户人数")
+    private Long da8Num;
+
+    /**
+     * 投手游戏第9天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户人数")
+    private Long da9Num;
+
+    /**
+     * 投手游戏第10天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户人数")
+    private Long da10Num;
+
+    /**
+     * 投手游戏第11天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户人数")
+    private Long da11Num;
+
+    /**
+     * 投手游戏第12天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户人数")
+    private Long da12Num;
+
+    /**
+     * 投手游戏第13天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户人数")
+    private Long da13Num;
+
+    /**
+     * 投手游戏第14天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户人数")
+    private Long da14Num;
+
+    /**
+     * 投手游戏第15天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户人数")
+    private Long da15Num;
+
+    /**
+     * 投手游戏第16天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户人数")
+    private Long da16Num;
+
+    /**
+     * 投手游戏第17天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户人数")
+    private Long da17Num;
+
+    /**
+     * 投手游戏第18天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户人数")
+    private Long da18Num;
+
+    /**
+     * 投手游戏第19天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户人数")
+    private Long da19Num;
+
+    /**
+     * 投手游戏第20天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户人数")
+    private Long da20Num;
+
+    /**
+     * 投手游戏第21天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户人数")
+    private Long da21Num;
+
+    /**
+     * 投手游戏第22天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户人数")
+    private Long da22Num;
+
+    /**
+     * 投手游戏第23天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户人数")
+    private Long da23Num;
+
+    /**
+     * 投手游戏第24天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户人数")
+    private Long da24Num;
+
+    /**
+     * 投手游戏第25天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户人数")
+    private Long da25Num;
+
+    /**
+     * 投手游戏第26天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户人数")
+    private Long da26Num;
+
+    /**
+     * 投手游戏第27天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户人数")
+    private Long da27Num;
+
+    /**
+     * 投手游戏第28天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户人数")
+    private Long da28Num;
+
+    /**
+     * 投手游戏第29天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户人数")
+    private Long da29Num;
+
+    /**
+     * 投手游戏第30天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户人数")
+    private Long da30Num;
+
+    /**
+     * 投手游戏第2月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户人数")
+    private Long m2Num;
+
+    /**
+     * 投手游戏第3月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户人数")
+    private Long m3Num;
+
+    /**
+     * 投手游戏第6月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户人数")
+    private Long m6Num;
+
+    /**
+     * 投手游戏第1年新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户人数")
+    private Long y1Num;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long totalNum;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户累计创角成本
+     */
+    @ApiModelProperty(value = "新用户累计创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 创角成本
+     */
+    @ApiModelProperty(value = "创角成本")
+    private BigDecimal roleNumCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户累计创角率
+     */
+    @ApiModelProperty(value = "新用户累计创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 创角率
+     */
+    @ApiModelProperty(value = "创角率")
+    private BigDecimal roleNumRate;
+
+    /**
+     * 新用户付费比
+     */
+    @ApiModelProperty(value = "新用户付费比")
+    private BigDecimal newUserAmountRatio;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD1Trend;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD2Trend;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD3Trend;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD4Trend;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD5Trend;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD6Trend;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD7Trend;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD8Trend;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD9Trend;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD10Trend;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD11Trend;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD12Trend;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD13Trend;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD14Trend;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD15Trend;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD16Trend;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD17Trend;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD18Trend;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD19Trend;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD20Trend;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD21Trend;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD22Trend;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD23Trend;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD24Trend;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD25Trend;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD26Trend;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD27Trend;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD28Trend;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD29Trend;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM1Trend;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM2Trend;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM3Trend;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM6Trend;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountY1Trend;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private RechargeTrendVO amountSumTrend;
+
+}

+ 1409 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataDayVO.java

@@ -0,0 +1,1409 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手每日数据实体
+ **/
+@Data
+public class PitcherDataDayVO {
+
+    /**
+     * 日期(充值时间)
+     */
+    @ApiModelProperty(value = "日期(充值时间)")
+    private LocalDate dt;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 投手
+     */
+    @ApiModelProperty(value = "投手")
+    private String pitcher;
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+    /**
+     * 推广计划数量
+     */
+    @ApiModelProperty(value = "推广计划数量")
+    private Long planCount;
+
+    /**
+     * 推广账号数量
+     */
+    @ApiModelProperty(value = "推广账号数量")
+    private Long accountCount;
+
+    /**
+     * 推广渠道数量
+     */
+    @ApiModelProperty(value = "推广渠道数量")
+    private Long agentCount;
+
+    /**
+     * 注册人数-通过广告首次登录小游戏的独立用户数
+     */
+    @ApiModelProperty(value = "注册人数-通过广告首次登录小游戏的独立用户数")
+    private Long registerNum;
+
+    /**
+     * 新增付费次数
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 账面充值次数
+     */
+    @ApiModelProperty(value = "账面充值次数")
+    private Long amountCount;
+
+    /**
+     * 账面充值人数
+     */
+    @ApiModelProperty(value = "账面充值人数")
+    private Long amountNum;
+
+    /**
+     * 账面充值金额
+     */
+    @ApiModelProperty(value = "账面充值金额")
+    private BigDecimal amount;
+
+    /**
+     * 老用户充值次数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值次数(每日)")
+    private Long oldAmountCount;
+
+    /**
+     * 老用户充值人数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值人数(每日)")
+    private Long oldAmountNum;
+
+    /**
+     * 老用户充值金额(每日)
+     */
+    @ApiModelProperty(value = "老用户充值金额(每日)")
+    private BigDecimal oldAmount;
+
+    /**
+     * 至今充值次数
+     */
+    @ApiModelProperty(value = "至今充值次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 单日付费100+人数
+     */
+    @ApiModelProperty(value = "单日付费100+人数")
+    private Long hundredUserNum;
+
+    /**
+     * 买量新用户累计充值金额
+     */
+    @ApiModelProperty(value = "买量新用户累计充值金额")
+    private BigDecimal buyNewUserTotalAmount;
+
+    /**
+     * 买量新用户累计充值人数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值人数")
+    private Long buyNewUserTotalAmountNum;
+
+    /**
+     * 买量新用户累计充值次数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值次数")
+    private Long buyNewUserTotalAmountCount;
+
+    /**
+     * 复充人数
+     */
+    @ApiModelProperty(value = "复充人数")
+    private Long regOrderUserAgain;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 创角人数
+     */
+    @ApiModelProperty(value = "创角人数")
+    private Long roleNum;
+
+    /**
+     * 注册成本=实际消耗/注册人数
+     */
+    @ApiModelProperty(value = "注册成本=实际消耗/注册人数")
+    private BigDecimal registerCost;
+
+    /**
+     * 首日回收率
+     */
+    @ApiModelProperty(value = "首日回收率")
+    private BigDecimal firstRoi;
+
+    /**
+     * 买量回收率
+     */
+    @ApiModelProperty(value = "买量回收率")
+    private BigDecimal buyRoi;
+
+    /**
+     * 当日回收率
+     */
+    @ApiModelProperty(value = "当日回收率")
+    private BigDecimal todayRoi;
+
+    /**
+     * 毛利额,毛利=新用户-实际消耗
+     */
+    @ApiModelProperty(value = "毛利额,毛利=新用户-实际消耗")
+    private BigDecimal grossProfit;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstRate;
+
+    /**
+     * 买量用户付费率
+     */
+    @ApiModelProperty(value = "买量用户付费率")
+    private BigDecimal buyUserRate;
+
+    /**
+     * 当天付费率
+     */
+    @ApiModelProperty(value = "当天付费率")
+    private BigDecimal todayRate;
+
+    /**
+     * 首日客单价
+     */
+    @ApiModelProperty(value = "首日客单价")
+    private BigDecimal firstAvg;
+
+    /**
+     * 买量客单价
+     */
+    @ApiModelProperty(value = "买量客单价")
+    private BigDecimal buyAvg;
+
+    /**
+     * 当天客单价
+     */
+    @ApiModelProperty(value = "当天客单价")
+    private BigDecimal todayAvg;
+
+    /**
+     * 账面客单价
+     */
+    @ApiModelProperty(value = "账面客单价")
+    private BigDecimal paperAvg;
+
+    /**
+     * 首日充值成本
+     */
+    @ApiModelProperty(value = "首日充值成本")
+    private BigDecimal firstAmountCost;
+
+    /**
+     * 买量充值成本
+     */
+    @ApiModelProperty(value = "买量充值成本")
+    private BigDecimal buyAmountCost;
+
+    /**
+     * 当天充值成本
+     */
+    @ApiModelProperty(value = "当天充值成本")
+    private BigDecimal todayAmountCost;
+
+    /**
+     * 当天复充率
+     */
+    @ApiModelProperty(value = "当天复充率")
+    private BigDecimal todayAgainRate;
+
+    /**
+     * 新增注册ARPU
+     */
+    @ApiModelProperty(value = "新增注册ARPU")
+    private BigDecimal newRegArpu;
+
+    /**
+     * 首日付费ARPU
+     */
+    @ApiModelProperty(value = "首日付费ARPU")
+    private BigDecimal firstArpu;
+
+    /**
+     * 当天付费ARPU
+     */
+    @ApiModelProperty(value = "当天付费ARPU")
+    private BigDecimal todayArpu;
+
+    /**
+     * 账面arpu
+     */
+    @ApiModelProperty(value = "账面arpu")
+    private BigDecimal paperArpu;
+
+    /**
+     * 单日付费100+成本
+     */
+    @ApiModelProperty(value = "单日付费100+成本")
+    private BigDecimal hundredUserNumCost;
+
+    /**
+     * 1日roi
+     */
+    @ApiModelProperty(value = "1日roi")
+    private BigDecimal roi1;
+
+    /**
+     * 2日roi
+     */
+    @ApiModelProperty(value = "2日roi")
+    private BigDecimal roi2;
+
+    /**
+     * 3日roi
+     */
+    @ApiModelProperty(value = "3日roi")
+    private BigDecimal roi3;
+
+    /**
+     * 4日roi
+     */
+    @ApiModelProperty(value = "4日roi")
+    private BigDecimal roi4;
+
+    /**
+     * 5日roi
+     */
+    @ApiModelProperty(value = "5日roi")
+    private BigDecimal roi5;
+
+    /**
+     * 6日roi
+     */
+    @ApiModelProperty(value = "6日roi")
+    private BigDecimal roi6;
+
+    /**
+     * 7日roi
+     */
+    @ApiModelProperty(value = "7日roi")
+    private BigDecimal roi7;
+
+    /**
+     * 8日roi
+     */
+    @ApiModelProperty(value = "8日roi")
+    private BigDecimal roi8;
+
+    /**
+     * 9日roi
+     */
+    @ApiModelProperty(value = "9日roi")
+    private BigDecimal roi9;
+
+    /**
+     * 10日roi
+     */
+    @ApiModelProperty(value = "10日roi")
+    private BigDecimal roi10;
+
+    /**
+     * 11日roi
+     */
+    @ApiModelProperty(value = "11日roi")
+    private BigDecimal roi11;
+
+    /**
+     * 12日roi
+     */
+    @ApiModelProperty(value = "12日roi")
+    private BigDecimal roi12;
+
+    /**
+     * 13日roi
+     */
+    @ApiModelProperty(value = "13日roi")
+    private BigDecimal roi13;
+
+    /**
+     * 14日roi
+     */
+    @ApiModelProperty(value = "14日roi")
+    private BigDecimal roi14;
+
+    /**
+     * 15日roi
+     */
+    @ApiModelProperty(value = "15日roi")
+    private BigDecimal roi15;
+
+    /**
+     * 16日roi
+     */
+    @ApiModelProperty(value = "16日roi")
+    private BigDecimal roi16;
+
+    /**
+     * 17日roi
+     */
+    @ApiModelProperty(value = "17日roi")
+    private BigDecimal roi17;
+
+    /**
+     * 18日roi
+     */
+    @ApiModelProperty(value = "18日roi")
+    private BigDecimal roi18;
+
+    /**
+     * 19日roi
+     */
+    @ApiModelProperty(value = "19日roi")
+    private BigDecimal roi19;
+
+    /**
+     * 20日roi
+     */
+    @ApiModelProperty(value = "20日roi")
+    private BigDecimal roi20;
+
+    /**
+     * 21日roi
+     */
+    @ApiModelProperty(value = "21日roi")
+    private BigDecimal roi21;
+
+    /**
+     * 22日roi
+     */
+    @ApiModelProperty(value = "22日roi")
+    private BigDecimal roi22;
+
+    /**
+     * 23日roi
+     */
+    @ApiModelProperty(value = "23日roi")
+    private BigDecimal roi23;
+
+    /**
+     * 24日roi
+     */
+    @ApiModelProperty(value = "24日roi")
+    private BigDecimal roi24;
+
+    /**
+     * 25日roi
+     */
+    @ApiModelProperty(value = "25日roi")
+    private BigDecimal roi25;
+
+    /**
+     * 26日roi
+     */
+    @ApiModelProperty(value = "26日roi")
+    private BigDecimal roi26;
+
+    /**
+     * 27日roi
+     */
+    @ApiModelProperty(value = "27日roi")
+    private BigDecimal roi27;
+
+    /**
+     * 28日roi
+     */
+    @ApiModelProperty(value = "28日roi")
+    private BigDecimal roi28;
+
+    /**
+     * 29日roi
+     */
+    @ApiModelProperty(value = "29日roi")
+    private BigDecimal roi29;
+
+    /**
+     * 30日roi
+     */
+    @ApiModelProperty(value = "30日roi")
+    private BigDecimal roi30;
+
+    /**
+     * 60日ROI
+     */
+    @ApiModelProperty(value = "60日ROI")
+    private BigDecimal roi60;
+
+    /**
+     * 90日ROI
+     */
+    @ApiModelProperty(value = "90日ROI")
+    private BigDecimal roi90;
+
+    /**
+     * 180日ROI
+     */
+    @ApiModelProperty(value = "180日ROI")
+    private BigDecimal roi180;
+
+    /**
+     * 1年ROI
+     */
+    @ApiModelProperty(value = "1年ROI")
+    private BigDecimal roi1yaer;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal roiTotal;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private String amountD1;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private String amountD2;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private String amountD3;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private String amountD4;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private String amountD5;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private String amountD6;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private String amountD7;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private String amountD8;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private String amountD9;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private String amountD10;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private String amountD11;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private String amountD12;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private String amountD13;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private String amountD14;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private String amountD15;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private String amountD16;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private String amountD17;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private String amountD18;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private String amountD19;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private String amountD20;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private String amountD21;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private String amountD22;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private String amountD23;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private String amountD24;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private String amountD25;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private String amountD26;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private String amountD27;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private String amountD28;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private String amountD29;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private String amountM1;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private String amountM2;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private String amountM3;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private String amountM6;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private String amountY1;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private String amountSum;
+
+    /**
+     * 投手游戏第1天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户充值")
+    private BigDecimal da1;
+
+    /**
+     * 投手游戏第2天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户充值")
+    private BigDecimal da2;
+
+    /**
+     * 投手游戏第3天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户充值")
+    private BigDecimal da3;
+
+    /**
+     * 投手游戏第4天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户充值")
+    private BigDecimal da4;
+
+    /**
+     * 投手游戏第5天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户充值")
+    private BigDecimal da5;
+
+    /**
+     * 投手游戏第6天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户充值")
+    private BigDecimal da6;
+
+    /**
+     * 投手游戏第7天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户充值")
+    private BigDecimal da7;
+
+    /**
+     * 投手游戏第8天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户充值")
+    private BigDecimal da8;
+
+    /**
+     * 投手游戏第9天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户充值")
+    private BigDecimal da9;
+
+    /**
+     * 投手游戏第10天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户充值")
+    private BigDecimal da10;
+
+    /**
+     * 投手游戏第11天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户充值")
+    private BigDecimal da11;
+
+    /**
+     * 投手游戏第12天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户充值")
+    private BigDecimal da12;
+
+    /**
+     * 投手游戏第13天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户充值")
+    private BigDecimal da13;
+
+    /**
+     * 投手游戏第14天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户充值")
+    private BigDecimal da14;
+
+    /**
+     * 投手游戏第15天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户充值")
+    private BigDecimal da15;
+
+    /**
+     * 投手游戏第16天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户充值")
+    private BigDecimal da16;
+
+    /**
+     * 投手游戏第17天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户充值")
+    private BigDecimal da17;
+
+    /**
+     * 投手游戏第18天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户充值")
+    private BigDecimal da18;
+
+    /**
+     * 投手游戏第19天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户充值")
+    private BigDecimal da19;
+
+    /**
+     * 投手游戏第20天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户充值")
+    private BigDecimal da20;
+
+    /**
+     * 投手游戏第21天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户充值")
+    private BigDecimal da21;
+
+    /**
+     * 投手游戏第22天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户充值")
+    private BigDecimal da22;
+
+    /**
+     * 投手游戏第23天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户充值")
+    private BigDecimal da23;
+
+    /**
+     * 投手游戏第24天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户充值")
+    private BigDecimal da24;
+
+    /**
+     * 投手游戏第25天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户充值")
+    private BigDecimal da25;
+
+    /**
+     * 投手游戏第26天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户充值")
+    private BigDecimal da26;
+
+    /**
+     * 投手游戏第27天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户充值")
+    private BigDecimal da27;
+
+    /**
+     * 投手游戏第28天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户充值")
+    private BigDecimal da28;
+
+    /**
+     * 投手游戏第29天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户充值")
+    private BigDecimal da29;
+
+    /**
+     * 投手游戏第30天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户充值")
+    private BigDecimal da30;
+
+    /**
+     * 投手游戏第2月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户充值")
+    private BigDecimal m2;
+
+    /**
+     * 投手游戏第3月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户充值")
+    private BigDecimal m3;
+
+    /**
+     * 投手游戏第6月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户充值")
+    private BigDecimal m6;
+
+    /**
+     * 投手游戏第1年新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户充值")
+    private BigDecimal y1;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal total;
+
+    /**
+     * 投手游戏第1天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户人数")
+    private Long da1Num;
+
+    /**
+     * 投手游戏第2天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户人数")
+    private Long da2Num;
+
+    /**
+     * 投手游戏第3天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户人数")
+    private Long da3Num;
+
+    /**
+     * 投手游戏第4天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户人数")
+    private Long da4Num;
+
+    /**
+     * 投手游戏第5天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户人数")
+    private Long da5Num;
+
+    /**
+     * 投手游戏第6天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户人数")
+    private Long da6Num;
+
+    /**
+     * 投手游戏第7天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户人数")
+    private Long da7Num;
+
+    /**
+     * 投手游戏第8天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户人数")
+    private Long da8Num;
+
+    /**
+     * 投手游戏第9天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户人数")
+    private Long da9Num;
+
+    /**
+     * 投手游戏第10天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户人数")
+    private Long da10Num;
+
+    /**
+     * 投手游戏第11天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户人数")
+    private Long da11Num;
+
+    /**
+     * 投手游戏第12天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户人数")
+    private Long da12Num;
+
+    /**
+     * 投手游戏第13天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户人数")
+    private Long da13Num;
+
+    /**
+     * 投手游戏第14天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户人数")
+    private Long da14Num;
+
+    /**
+     * 投手游戏第15天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户人数")
+    private Long da15Num;
+
+    /**
+     * 投手游戏第16天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户人数")
+    private Long da16Num;
+
+    /**
+     * 投手游戏第17天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户人数")
+    private Long da17Num;
+
+    /**
+     * 投手游戏第18天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户人数")
+    private Long da18Num;
+
+    /**
+     * 投手游戏第19天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户人数")
+    private Long da19Num;
+
+    /**
+     * 投手游戏第20天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户人数")
+    private Long da20Num;
+
+    /**
+     * 投手游戏第21天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户人数")
+    private Long da21Num;
+
+    /**
+     * 投手游戏第22天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户人数")
+    private Long da22Num;
+
+    /**
+     * 投手游戏第23天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户人数")
+    private Long da23Num;
+
+    /**
+     * 投手游戏第24天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户人数")
+    private Long da24Num;
+
+    /**
+     * 投手游戏第25天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户人数")
+    private Long da25Num;
+
+    /**
+     * 投手游戏第26天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户人数")
+    private Long da26Num;
+
+    /**
+     * 投手游戏第27天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户人数")
+    private Long da27Num;
+
+    /**
+     * 投手游戏第28天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户人数")
+    private Long da28Num;
+
+    /**
+     * 投手游戏第29天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户人数")
+    private Long da29Num;
+
+    /**
+     * 投手游戏第30天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户人数")
+    private Long da30Num;
+
+    /**
+     * 投手游戏第2月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户人数")
+    private Long m2Num;
+
+    /**
+     * 投手游戏第3月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户人数")
+    private Long m3Num;
+
+    /**
+     * 投手游戏第6月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户人数")
+    private Long m6Num;
+
+    /**
+     * 投手游戏第1年新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户人数")
+    private Long y1Num;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long totalNum;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户累计创角成本
+     */
+    @ApiModelProperty(value = "新用户累计创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 创角成本
+     */
+    @ApiModelProperty(value = "创角成本")
+    private BigDecimal roleNumCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户累计创角率
+     */
+    @ApiModelProperty(value = "新用户累计创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 创角率
+     */
+    @ApiModelProperty(value = "创角率")
+    private BigDecimal roleNumRate;
+
+    /**
+     * 新用户付费比
+     */
+    @ApiModelProperty(value = "新用户付费比")
+    private BigDecimal newUserAmountRatio;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD1Trend;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD2Trend;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD3Trend;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD4Trend;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD5Trend;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD6Trend;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD7Trend;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD8Trend;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD9Trend;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD10Trend;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD11Trend;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD12Trend;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD13Trend;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD14Trend;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD15Trend;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD16Trend;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD17Trend;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD18Trend;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD19Trend;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD20Trend;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD21Trend;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD22Trend;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD23Trend;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD24Trend;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD25Trend;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD26Trend;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD27Trend;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD28Trend;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD29Trend;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM1Trend;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM2Trend;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM3Trend;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM6Trend;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountY1Trend;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private RechargeTrendVO amountSumTrend;
+
+}

+ 9 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataTotalSumVO.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手总数据总计实体
+ **/
+public class PitcherDataTotalSumVO {
+}

+ 9 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherDataTotalVO.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手总数据实体
+ **/
+public class PitcherDataTotalVO {
+}

+ 1386 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataDayTotalVO.java

@@ -0,0 +1,1386 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手游戏每日数据总计实体
+ **/
+@Data
+public class PitcherGameDataDayTotalVO {
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+    /**
+     * 推广计划数量
+     */
+    @ApiModelProperty(value = "推广计划数量")
+    private Long planCount;
+
+    /**
+     * 推广账号数量
+     */
+    @ApiModelProperty(value = "推广账号数量")
+    private Long accountCount;
+
+    /**
+     * 推广渠道数量
+     */
+    @ApiModelProperty(value = "推广渠道数量")
+    private Long agentCount;
+
+    /**
+     * 注册人数-通过广告首次登录小游戏的独立用户数
+     */
+    @ApiModelProperty(value = "注册人数-通过广告首次登录小游戏的独立用户数")
+    private Long registerNum;
+
+    /**
+     * 新增付费次数
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 账面充值次数
+     */
+    @ApiModelProperty(value = "账面充值次数")
+    private Long amountCount;
+
+    /**
+     * 账面充值人数
+     */
+    @ApiModelProperty(value = "账面充值人数")
+    private Long amountNum;
+
+    /**
+     * 账面充值金额
+     */
+    @ApiModelProperty(value = "账面充值金额")
+    private BigDecimal amount;
+
+    /**
+     * 老用户充值次数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值次数(每日)")
+    private Long oldAmountCount;
+
+    /**
+     * 老用户充值人数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值人数(每日)")
+    private Long oldAmountNum;
+
+    /**
+     * 老用户充值金额(每日)
+     */
+    @ApiModelProperty(value = "老用户充值金额(每日)")
+    private BigDecimal oldAmount;
+
+    /**
+     * 至今充值次数
+     */
+    @ApiModelProperty(value = "至今充值次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 单日付费100+人数
+     */
+    @ApiModelProperty(value = "单日付费100+人数")
+    private Long hundredUserNum;
+
+    /**
+     * 买量新用户累计充值金额
+     */
+    @ApiModelProperty(value = "买量新用户累计充值金额")
+    private BigDecimal buyNewUserTotalAmount;
+
+    /**
+     * 买量新用户累计充值人数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值人数")
+    private Long buyNewUserTotalAmountNum;
+
+    /**
+     * 买量新用户累计充值次数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值次数")
+    private Long buyNewUserTotalAmountCount;
+
+    /**
+     * 复充人数
+     */
+    @ApiModelProperty(value = "复充人数")
+    private Long regOrderUserAgain;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 创角人数
+     */
+    @ApiModelProperty(value = "创角人数")
+    private Long roleNum;
+
+    /**
+     * 注册成本=实际消耗/注册人数
+     */
+    @ApiModelProperty(value = "注册成本=实际消耗/注册人数")
+    private BigDecimal registerCost;
+
+    /**
+     * 首日回收率
+     */
+    @ApiModelProperty(value = "首日回收率")
+    private BigDecimal firstRoi;
+
+    /**
+     * 买量回收率
+     */
+    @ApiModelProperty(value = "买量回收率")
+    private BigDecimal buyRoi;
+
+    /**
+     * 当日回收率
+     */
+    @ApiModelProperty(value = "当日回收率")
+    private BigDecimal todayRoi;
+
+    /**
+     * 毛利额,毛利=新用户-实际消耗
+     */
+    @ApiModelProperty(value = "毛利额,毛利=新用户-实际消耗")
+    private BigDecimal grossProfit;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstRate;
+
+    /**
+     * 买量用户付费率
+     */
+    @ApiModelProperty(value = "买量用户付费率")
+    private BigDecimal buyUserRate;
+
+    /**
+     * 当天付费率
+     */
+    @ApiModelProperty(value = "当天付费率")
+    private BigDecimal todayRate;
+
+    /**
+     * 首日客单价
+     */
+    @ApiModelProperty(value = "首日客单价")
+    private BigDecimal firstAvg;
+
+    /**
+     * 买量客单价
+     */
+    @ApiModelProperty(value = "买量客单价")
+    private BigDecimal buyAvg;
+
+    /**
+     * 当天客单价
+     */
+    @ApiModelProperty(value = "当天客单价")
+    private BigDecimal todayAvg;
+
+    /**
+     * 账面客单价
+     */
+    @ApiModelProperty(value = "账面客单价")
+    private BigDecimal paperAvg;
+
+    /**
+     * 首日充值成本
+     */
+    @ApiModelProperty(value = "首日充值成本")
+    private BigDecimal firstAmountCost;
+
+    /**
+     * 买量充值成本
+     */
+    @ApiModelProperty(value = "买量充值成本")
+    private BigDecimal buyAmountCost;
+
+    /**
+     * 当天充值成本
+     */
+    @ApiModelProperty(value = "当天充值成本")
+    private BigDecimal todayAmountCost;
+
+    /**
+     * 当天复充率
+     */
+    @ApiModelProperty(value = "当天复充率")
+    private BigDecimal todayAgainRate;
+
+    /**
+     * 新增注册ARPU
+     */
+    @ApiModelProperty(value = "新增注册ARPU")
+    private BigDecimal newRegArpu;
+
+    /**
+     * 首日付费ARPU
+     */
+    @ApiModelProperty(value = "首日付费ARPU")
+    private BigDecimal firstArpu;
+
+    /**
+     * 当天付费ARPU
+     */
+    @ApiModelProperty(value = "当天付费ARPU")
+    private BigDecimal todayArpu;
+
+    /**
+     * 账面arpu
+     */
+    @ApiModelProperty(value = "账面arpu")
+    private BigDecimal paperArpu;
+
+    /**
+     * 单日付费100+成本
+     */
+    @ApiModelProperty(value = "单日付费100+成本")
+    private BigDecimal hundredUserNumCost;
+
+    /**
+     * 1日roi
+     */
+    @ApiModelProperty(value = "1日roi")
+    private BigDecimal roi1;
+
+    /**
+     * 2日roi
+     */
+    @ApiModelProperty(value = "2日roi")
+    private BigDecimal roi2;
+
+    /**
+     * 3日roi
+     */
+    @ApiModelProperty(value = "3日roi")
+    private BigDecimal roi3;
+
+    /**
+     * 4日roi
+     */
+    @ApiModelProperty(value = "4日roi")
+    private BigDecimal roi4;
+
+    /**
+     * 5日roi
+     */
+    @ApiModelProperty(value = "5日roi")
+    private BigDecimal roi5;
+
+    /**
+     * 6日roi
+     */
+    @ApiModelProperty(value = "6日roi")
+    private BigDecimal roi6;
+
+    /**
+     * 7日roi
+     */
+    @ApiModelProperty(value = "7日roi")
+    private BigDecimal roi7;
+
+    /**
+     * 8日roi
+     */
+    @ApiModelProperty(value = "8日roi")
+    private BigDecimal roi8;
+
+    /**
+     * 9日roi
+     */
+    @ApiModelProperty(value = "9日roi")
+    private BigDecimal roi9;
+
+    /**
+     * 10日roi
+     */
+    @ApiModelProperty(value = "10日roi")
+    private BigDecimal roi10;
+
+    /**
+     * 11日roi
+     */
+    @ApiModelProperty(value = "11日roi")
+    private BigDecimal roi11;
+
+    /**
+     * 12日roi
+     */
+    @ApiModelProperty(value = "12日roi")
+    private BigDecimal roi12;
+
+    /**
+     * 13日roi
+     */
+    @ApiModelProperty(value = "13日roi")
+    private BigDecimal roi13;
+
+    /**
+     * 14日roi
+     */
+    @ApiModelProperty(value = "14日roi")
+    private BigDecimal roi14;
+
+    /**
+     * 15日roi
+     */
+    @ApiModelProperty(value = "15日roi")
+    private BigDecimal roi15;
+
+    /**
+     * 16日roi
+     */
+    @ApiModelProperty(value = "16日roi")
+    private BigDecimal roi16;
+
+    /**
+     * 17日roi
+     */
+    @ApiModelProperty(value = "17日roi")
+    private BigDecimal roi17;
+
+    /**
+     * 18日roi
+     */
+    @ApiModelProperty(value = "18日roi")
+    private BigDecimal roi18;
+
+    /**
+     * 19日roi
+     */
+    @ApiModelProperty(value = "19日roi")
+    private BigDecimal roi19;
+
+    /**
+     * 20日roi
+     */
+    @ApiModelProperty(value = "20日roi")
+    private BigDecimal roi20;
+
+    /**
+     * 21日roi
+     */
+    @ApiModelProperty(value = "21日roi")
+    private BigDecimal roi21;
+
+    /**
+     * 22日roi
+     */
+    @ApiModelProperty(value = "22日roi")
+    private BigDecimal roi22;
+
+    /**
+     * 23日roi
+     */
+    @ApiModelProperty(value = "23日roi")
+    private BigDecimal roi23;
+
+    /**
+     * 24日roi
+     */
+    @ApiModelProperty(value = "24日roi")
+    private BigDecimal roi24;
+
+    /**
+     * 25日roi
+     */
+    @ApiModelProperty(value = "25日roi")
+    private BigDecimal roi25;
+
+    /**
+     * 26日roi
+     */
+    @ApiModelProperty(value = "26日roi")
+    private BigDecimal roi26;
+
+    /**
+     * 27日roi
+     */
+    @ApiModelProperty(value = "27日roi")
+    private BigDecimal roi27;
+
+    /**
+     * 28日roi
+     */
+    @ApiModelProperty(value = "28日roi")
+    private BigDecimal roi28;
+
+    /**
+     * 29日roi
+     */
+    @ApiModelProperty(value = "29日roi")
+    private BigDecimal roi29;
+
+    /**
+     * 30日roi
+     */
+    @ApiModelProperty(value = "30日roi")
+    private BigDecimal roi30;
+
+    /**
+     * 60日ROI
+     */
+    @ApiModelProperty(value = "60日ROI")
+    private BigDecimal roi60;
+
+    /**
+     * 90日ROI
+     */
+    @ApiModelProperty(value = "90日ROI")
+    private BigDecimal roi90;
+
+    /**
+     * 180日ROI
+     */
+    @ApiModelProperty(value = "180日ROI")
+    private BigDecimal roi180;
+
+    /**
+     * 1年ROI
+     */
+    @ApiModelProperty(value = "1年ROI")
+    private BigDecimal roi1yaer;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal roiTotal;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private String amountD1;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private String amountD2;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private String amountD3;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private String amountD4;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private String amountD5;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private String amountD6;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private String amountD7;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private String amountD8;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private String amountD9;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private String amountD10;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private String amountD11;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private String amountD12;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private String amountD13;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private String amountD14;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private String amountD15;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private String amountD16;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private String amountD17;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private String amountD18;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private String amountD19;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private String amountD20;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private String amountD21;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private String amountD22;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private String amountD23;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private String amountD24;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private String amountD25;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private String amountD26;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private String amountD27;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private String amountD28;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private String amountD29;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private String amountM1;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private String amountM2;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private String amountM3;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private String amountM6;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private String amountY1;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private String amountSum;
+
+    /**
+     * 投手游戏第1天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户充值")
+    private BigDecimal da1;
+
+    /**
+     * 投手游戏第2天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户充值")
+    private BigDecimal da2;
+
+    /**
+     * 投手游戏第3天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户充值")
+    private BigDecimal da3;
+
+    /**
+     * 投手游戏第4天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户充值")
+    private BigDecimal da4;
+
+    /**
+     * 投手游戏第5天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户充值")
+    private BigDecimal da5;
+
+    /**
+     * 投手游戏第6天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户充值")
+    private BigDecimal da6;
+
+    /**
+     * 投手游戏第7天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户充值")
+    private BigDecimal da7;
+
+    /**
+     * 投手游戏第8天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户充值")
+    private BigDecimal da8;
+
+    /**
+     * 投手游戏第9天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户充值")
+    private BigDecimal da9;
+
+    /**
+     * 投手游戏第10天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户充值")
+    private BigDecimal da10;
+
+    /**
+     * 投手游戏第11天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户充值")
+    private BigDecimal da11;
+
+    /**
+     * 投手游戏第12天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户充值")
+    private BigDecimal da12;
+
+    /**
+     * 投手游戏第13天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户充值")
+    private BigDecimal da13;
+
+    /**
+     * 投手游戏第14天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户充值")
+    private BigDecimal da14;
+
+    /**
+     * 投手游戏第15天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户充值")
+    private BigDecimal da15;
+
+    /**
+     * 投手游戏第16天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户充值")
+    private BigDecimal da16;
+
+    /**
+     * 投手游戏第17天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户充值")
+    private BigDecimal da17;
+
+    /**
+     * 投手游戏第18天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户充值")
+    private BigDecimal da18;
+
+    /**
+     * 投手游戏第19天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户充值")
+    private BigDecimal da19;
+
+    /**
+     * 投手游戏第20天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户充值")
+    private BigDecimal da20;
+
+    /**
+     * 投手游戏第21天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户充值")
+    private BigDecimal da21;
+
+    /**
+     * 投手游戏第22天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户充值")
+    private BigDecimal da22;
+
+    /**
+     * 投手游戏第23天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户充值")
+    private BigDecimal da23;
+
+    /**
+     * 投手游戏第24天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户充值")
+    private BigDecimal da24;
+
+    /**
+     * 投手游戏第25天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户充值")
+    private BigDecimal da25;
+
+    /**
+     * 投手游戏第26天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户充值")
+    private BigDecimal da26;
+
+    /**
+     * 投手游戏第27天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户充值")
+    private BigDecimal da27;
+
+    /**
+     * 投手游戏第28天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户充值")
+    private BigDecimal da28;
+
+    /**
+     * 投手游戏第29天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户充值")
+    private BigDecimal da29;
+
+    /**
+     * 投手游戏第30天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户充值")
+    private BigDecimal da30;
+
+    /**
+     * 投手游戏第2月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户充值")
+    private BigDecimal m2;
+
+    /**
+     * 投手游戏第3月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户充值")
+    private BigDecimal m3;
+
+    /**
+     * 投手游戏第6月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户充值")
+    private BigDecimal m6;
+
+    /**
+     * 投手游戏第1年新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户充值")
+    private BigDecimal y1;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal total;
+
+    /**
+     * 投手游戏第1天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户人数")
+    private Long da1Num;
+
+    /**
+     * 投手游戏第2天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户人数")
+    private Long da2Num;
+
+    /**
+     * 投手游戏第3天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户人数")
+    private Long da3Num;
+
+    /**
+     * 投手游戏第4天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户人数")
+    private Long da4Num;
+
+    /**
+     * 投手游戏第5天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户人数")
+    private Long da5Num;
+
+    /**
+     * 投手游戏第6天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户人数")
+    private Long da6Num;
+
+    /**
+     * 投手游戏第7天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户人数")
+    private Long da7Num;
+
+    /**
+     * 投手游戏第8天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户人数")
+    private Long da8Num;
+
+    /**
+     * 投手游戏第9天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户人数")
+    private Long da9Num;
+
+    /**
+     * 投手游戏第10天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户人数")
+    private Long da10Num;
+
+    /**
+     * 投手游戏第11天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户人数")
+    private Long da11Num;
+
+    /**
+     * 投手游戏第12天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户人数")
+    private Long da12Num;
+
+    /**
+     * 投手游戏第13天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户人数")
+    private Long da13Num;
+
+    /**
+     * 投手游戏第14天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户人数")
+    private Long da14Num;
+
+    /**
+     * 投手游戏第15天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户人数")
+    private Long da15Num;
+
+    /**
+     * 投手游戏第16天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户人数")
+    private Long da16Num;
+
+    /**
+     * 投手游戏第17天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户人数")
+    private Long da17Num;
+
+    /**
+     * 投手游戏第18天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户人数")
+    private Long da18Num;
+
+    /**
+     * 投手游戏第19天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户人数")
+    private Long da19Num;
+
+    /**
+     * 投手游戏第20天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户人数")
+    private Long da20Num;
+
+    /**
+     * 投手游戏第21天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户人数")
+    private Long da21Num;
+
+    /**
+     * 投手游戏第22天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户人数")
+    private Long da22Num;
+
+    /**
+     * 投手游戏第23天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户人数")
+    private Long da23Num;
+
+    /**
+     * 投手游戏第24天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户人数")
+    private Long da24Num;
+
+    /**
+     * 投手游戏第25天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户人数")
+    private Long da25Num;
+
+    /**
+     * 投手游戏第26天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户人数")
+    private Long da26Num;
+
+    /**
+     * 投手游戏第27天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户人数")
+    private Long da27Num;
+
+    /**
+     * 投手游戏第28天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户人数")
+    private Long da28Num;
+
+    /**
+     * 投手游戏第29天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户人数")
+    private Long da29Num;
+
+    /**
+     * 投手游戏第30天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户人数")
+    private Long da30Num;
+
+    /**
+     * 投手游戏第2月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户人数")
+    private Long m2Num;
+
+    /**
+     * 投手游戏第3月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户人数")
+    private Long m3Num;
+
+    /**
+     * 投手游戏第6月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户人数")
+    private Long m6Num;
+
+    /**
+     * 投手游戏第1年新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户人数")
+    private Long y1Num;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long totalNum;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户累计创角成本
+     */
+    @ApiModelProperty(value = "新用户累计创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 创角成本
+     */
+    @ApiModelProperty(value = "创角成本")
+    private BigDecimal roleNumCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户累计创角率
+     */
+    @ApiModelProperty(value = "新用户累计创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 创角率
+     */
+    @ApiModelProperty(value = "创角率")
+    private BigDecimal roleNumRate;
+
+    /**
+     * 新用户付费比
+     */
+    @ApiModelProperty(value = "新用户付费比")
+    private BigDecimal newUserAmountRatio;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD1Trend;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD2Trend;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD3Trend;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD4Trend;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD5Trend;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD6Trend;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD7Trend;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD8Trend;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD9Trend;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD10Trend;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD11Trend;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD12Trend;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD13Trend;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD14Trend;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD15Trend;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD16Trend;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD17Trend;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD18Trend;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD19Trend;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD20Trend;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD21Trend;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD22Trend;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD23Trend;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD24Trend;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD25Trend;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD26Trend;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD27Trend;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD28Trend;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD29Trend;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM1Trend;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM2Trend;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM3Trend;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM6Trend;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountY1Trend;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private RechargeTrendVO amountSumTrend;
+
+
+
+}

+ 1433 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataDayVO.java

@@ -0,0 +1,1433 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手游戏每日数据实体
+ **/
+@Data
+public class PitcherGameDataDayVO {
+
+    /**
+     * 日期(充值时间)
+     */
+    @ApiModelProperty(value = "日期(充值时间)")
+    private LocalDate dt;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private String gameId;
+
+    /**
+     * 投手
+     */
+    @ApiModelProperty(value = "投手")
+    private String pitcher;
+
+    /**
+     * 游戏
+     */
+    @ApiModelProperty(value = "游戏")
+    private String gameName;
+
+    /**
+     * 游戏CP方
+     */
+    @ApiModelProperty(value = "游戏CP方")
+    private String gameCp;
+
+    /**
+     * 游戏类型
+     */
+    @ApiModelProperty(value = "游戏类型")
+    private Long gameType;
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+    /**
+     * 推广计划数量
+     */
+    @ApiModelProperty(value = "推广计划数量")
+    private Long planCount;
+
+    /**
+     * 推广账号数量
+     */
+    @ApiModelProperty(value = "推广账号数量")
+    private Long accountCount;
+
+    /**
+     * 推广渠道数量
+     */
+    @ApiModelProperty(value = "推广渠道数量")
+    private Long agentCount;
+
+    /**
+     * 注册人数-通过广告首次登录小游戏的独立用户数
+     */
+    @ApiModelProperty(value = "注册人数-通过广告首次登录小游戏的独立用户数")
+    private Long registerNum;
+
+    /**
+     * 新增付费次数
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 账面充值次数
+     */
+    @ApiModelProperty(value = "账面充值次数")
+    private Long amountCount;
+
+    /**
+     * 账面充值人数
+     */
+    @ApiModelProperty(value = "账面充值人数")
+    private Long amountNum;
+
+    /**
+     * 账面充值金额
+     */
+    @ApiModelProperty(value = "账面充值金额")
+    private BigDecimal amount;
+
+    /**
+     * 老用户充值次数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值次数(每日)")
+    private Long oldAmountCount;
+
+    /**
+     * 老用户充值人数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值人数(每日)")
+    private Long oldAmountNum;
+
+    /**
+     * 老用户充值金额(每日)
+     */
+    @ApiModelProperty(value = "老用户充值金额(每日)")
+    private BigDecimal oldAmount;
+
+    /**
+     * 至今充值次数
+     */
+    @ApiModelProperty(value = "至今充值次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 单日付费100+人数
+     */
+    @ApiModelProperty(value = "单日付费100+人数")
+    private Long hundredUserNum;
+
+    /**
+     * 买量新用户累计充值金额
+     */
+    @ApiModelProperty(value = "买量新用户累计充值金额")
+    private BigDecimal buyNewUserTotalAmount;
+
+    /**
+     * 买量新用户累计充值人数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值人数")
+    private Long buyNewUserTotalAmountNum;
+
+    /**
+     * 买量新用户累计充值次数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值次数")
+    private Long buyNewUserTotalAmountCount;
+
+    /**
+     * 复充人数
+     */
+    @ApiModelProperty(value = "复充人数")
+    private Long regOrderUserAgain;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 创角人数
+     */
+    @ApiModelProperty(value = "创角人数")
+    private Long roleNum;
+
+    /**
+     * 注册成本=实际消耗/注册人数
+     */
+    @ApiModelProperty(value = "注册成本=实际消耗/注册人数")
+    private BigDecimal registerCost;
+
+    /**
+     * 首日回收率
+     */
+    @ApiModelProperty(value = "首日回收率")
+    private BigDecimal firstRoi;
+
+    /**
+     * 买量回收率
+     */
+    @ApiModelProperty(value = "买量回收率")
+    private BigDecimal buyRoi;
+
+    /**
+     * 当日回收率
+     */
+    @ApiModelProperty(value = "当日回收率")
+    private BigDecimal todayRoi;
+
+    /**
+     * 毛利额,毛利=新用户-实际消耗
+     */
+    @ApiModelProperty(value = "毛利额,毛利=新用户-实际消耗")
+    private BigDecimal grossProfit;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstRate;
+
+    /**
+     * 买量用户付费率
+     */
+    @ApiModelProperty(value = "买量用户付费率")
+    private BigDecimal buyUserRate;
+
+    /**
+     * 当天付费率
+     */
+    @ApiModelProperty(value = "当天付费率")
+    private BigDecimal todayRate;
+
+    /**
+     * 首日客单价
+     */
+    @ApiModelProperty(value = "首日客单价")
+    private BigDecimal firstAvg;
+
+    /**
+     * 买量客单价
+     */
+    @ApiModelProperty(value = "买量客单价")
+    private BigDecimal buyAvg;
+
+    /**
+     * 当天客单价
+     */
+    @ApiModelProperty(value = "当天客单价")
+    private BigDecimal todayAvg;
+
+    /**
+     * 账面客单价
+     */
+    @ApiModelProperty(value = "账面客单价")
+    private BigDecimal paperAvg;
+
+    /**
+     * 首日充值成本
+     */
+    @ApiModelProperty(value = "首日充值成本")
+    private BigDecimal firstAmountCost;
+
+    /**
+     * 买量充值成本
+     */
+    @ApiModelProperty(value = "买量充值成本")
+    private BigDecimal buyAmountCost;
+
+    /**
+     * 当天充值成本
+     */
+    @ApiModelProperty(value = "当天充值成本")
+    private BigDecimal todayAmountCost;
+
+    /**
+     * 当天复充率
+     */
+    @ApiModelProperty(value = "当天复充率")
+    private BigDecimal todayAgainRate;
+
+    /**
+     * 新增注册ARPU
+     */
+    @ApiModelProperty(value = "新增注册ARPU")
+    private BigDecimal newRegArpu;
+
+    /**
+     * 首日付费ARPU
+     */
+    @ApiModelProperty(value = "首日付费ARPU")
+    private BigDecimal firstArpu;
+
+    /**
+     * 当天付费ARPU
+     */
+    @ApiModelProperty(value = "当天付费ARPU")
+    private BigDecimal todayArpu;
+
+    /**
+     * 账面arpu
+     */
+    @ApiModelProperty(value = "账面arpu")
+    private BigDecimal paperArpu;
+
+    /**
+     * 单日付费100+成本
+     */
+    @ApiModelProperty(value = "单日付费100+成本")
+    private BigDecimal hundredUserNumCost;
+
+    /**
+     * 1日roi
+     */
+    @ApiModelProperty(value = "1日roi")
+    private BigDecimal roi1;
+
+    /**
+     * 2日roi
+     */
+    @ApiModelProperty(value = "2日roi")
+    private BigDecimal roi2;
+
+    /**
+     * 3日roi
+     */
+    @ApiModelProperty(value = "3日roi")
+    private BigDecimal roi3;
+
+    /**
+     * 4日roi
+     */
+    @ApiModelProperty(value = "4日roi")
+    private BigDecimal roi4;
+
+    /**
+     * 5日roi
+     */
+    @ApiModelProperty(value = "5日roi")
+    private BigDecimal roi5;
+
+    /**
+     * 6日roi
+     */
+    @ApiModelProperty(value = "6日roi")
+    private BigDecimal roi6;
+
+    /**
+     * 7日roi
+     */
+    @ApiModelProperty(value = "7日roi")
+    private BigDecimal roi7;
+
+    /**
+     * 8日roi
+     */
+    @ApiModelProperty(value = "8日roi")
+    private BigDecimal roi8;
+
+    /**
+     * 9日roi
+     */
+    @ApiModelProperty(value = "9日roi")
+    private BigDecimal roi9;
+
+    /**
+     * 10日roi
+     */
+    @ApiModelProperty(value = "10日roi")
+    private BigDecimal roi10;
+
+    /**
+     * 11日roi
+     */
+    @ApiModelProperty(value = "11日roi")
+    private BigDecimal roi11;
+
+    /**
+     * 12日roi
+     */
+    @ApiModelProperty(value = "12日roi")
+    private BigDecimal roi12;
+
+    /**
+     * 13日roi
+     */
+    @ApiModelProperty(value = "13日roi")
+    private BigDecimal roi13;
+
+    /**
+     * 14日roi
+     */
+    @ApiModelProperty(value = "14日roi")
+    private BigDecimal roi14;
+
+    /**
+     * 15日roi
+     */
+    @ApiModelProperty(value = "15日roi")
+    private BigDecimal roi15;
+
+    /**
+     * 16日roi
+     */
+    @ApiModelProperty(value = "16日roi")
+    private BigDecimal roi16;
+
+    /**
+     * 17日roi
+     */
+    @ApiModelProperty(value = "17日roi")
+    private BigDecimal roi17;
+
+    /**
+     * 18日roi
+     */
+    @ApiModelProperty(value = "18日roi")
+    private BigDecimal roi18;
+
+    /**
+     * 19日roi
+     */
+    @ApiModelProperty(value = "19日roi")
+    private BigDecimal roi19;
+
+    /**
+     * 20日roi
+     */
+    @ApiModelProperty(value = "20日roi")
+    private BigDecimal roi20;
+
+    /**
+     * 21日roi
+     */
+    @ApiModelProperty(value = "21日roi")
+    private BigDecimal roi21;
+
+    /**
+     * 22日roi
+     */
+    @ApiModelProperty(value = "22日roi")
+    private BigDecimal roi22;
+
+    /**
+     * 23日roi
+     */
+    @ApiModelProperty(value = "23日roi")
+    private BigDecimal roi23;
+
+    /**
+     * 24日roi
+     */
+    @ApiModelProperty(value = "24日roi")
+    private BigDecimal roi24;
+
+    /**
+     * 25日roi
+     */
+    @ApiModelProperty(value = "25日roi")
+    private BigDecimal roi25;
+
+    /**
+     * 26日roi
+     */
+    @ApiModelProperty(value = "26日roi")
+    private BigDecimal roi26;
+
+    /**
+     * 27日roi
+     */
+    @ApiModelProperty(value = "27日roi")
+    private BigDecimal roi27;
+
+    /**
+     * 28日roi
+     */
+    @ApiModelProperty(value = "28日roi")
+    private BigDecimal roi28;
+
+    /**
+     * 29日roi
+     */
+    @ApiModelProperty(value = "29日roi")
+    private BigDecimal roi29;
+
+    /**
+     * 30日roi
+     */
+    @ApiModelProperty(value = "30日roi")
+    private BigDecimal roi30;
+
+    /**
+     * 60日ROI
+     */
+    @ApiModelProperty(value = "60日ROI")
+    private BigDecimal roi60;
+
+    /**
+     * 90日ROI
+     */
+    @ApiModelProperty(value = "90日ROI")
+    private BigDecimal roi90;
+
+    /**
+     * 180日ROI
+     */
+    @ApiModelProperty(value = "180日ROI")
+    private BigDecimal roi180;
+
+    /**
+     * 1年ROI
+     */
+    @ApiModelProperty(value = "1年ROI")
+    private BigDecimal roi1yaer;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal roiTotal;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private String amountD1;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private String amountD2;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private String amountD3;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private String amountD4;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private String amountD5;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private String amountD6;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private String amountD7;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private String amountD8;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private String amountD9;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private String amountD10;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private String amountD11;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private String amountD12;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private String amountD13;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private String amountD14;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private String amountD15;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private String amountD16;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private String amountD17;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private String amountD18;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private String amountD19;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private String amountD20;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private String amountD21;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private String amountD22;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private String amountD23;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private String amountD24;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private String amountD25;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private String amountD26;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private String amountD27;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private String amountD28;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private String amountD29;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private String amountM1;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private String amountM2;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private String amountM3;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private String amountM6;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private String amountY1;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private String amountSum;
+
+    /**
+     * 投手游戏第1天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户充值")
+    private BigDecimal da1;
+
+    /**
+     * 投手游戏第2天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户充值")
+    private BigDecimal da2;
+
+    /**
+     * 投手游戏第3天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户充值")
+    private BigDecimal da3;
+
+    /**
+     * 投手游戏第4天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户充值")
+    private BigDecimal da4;
+
+    /**
+     * 投手游戏第5天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户充值")
+    private BigDecimal da5;
+
+    /**
+     * 投手游戏第6天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户充值")
+    private BigDecimal da6;
+
+    /**
+     * 投手游戏第7天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户充值")
+    private BigDecimal da7;
+
+    /**
+     * 投手游戏第8天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户充值")
+    private BigDecimal da8;
+
+    /**
+     * 投手游戏第9天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户充值")
+    private BigDecimal da9;
+
+    /**
+     * 投手游戏第10天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户充值")
+    private BigDecimal da10;
+
+    /**
+     * 投手游戏第11天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户充值")
+    private BigDecimal da11;
+
+    /**
+     * 投手游戏第12天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户充值")
+    private BigDecimal da12;
+
+    /**
+     * 投手游戏第13天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户充值")
+    private BigDecimal da13;
+
+    /**
+     * 投手游戏第14天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户充值")
+    private BigDecimal da14;
+
+    /**
+     * 投手游戏第15天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户充值")
+    private BigDecimal da15;
+
+    /**
+     * 投手游戏第16天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户充值")
+    private BigDecimal da16;
+
+    /**
+     * 投手游戏第17天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户充值")
+    private BigDecimal da17;
+
+    /**
+     * 投手游戏第18天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户充值")
+    private BigDecimal da18;
+
+    /**
+     * 投手游戏第19天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户充值")
+    private BigDecimal da19;
+
+    /**
+     * 投手游戏第20天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户充值")
+    private BigDecimal da20;
+
+    /**
+     * 投手游戏第21天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户充值")
+    private BigDecimal da21;
+
+    /**
+     * 投手游戏第22天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户充值")
+    private BigDecimal da22;
+
+    /**
+     * 投手游戏第23天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户充值")
+    private BigDecimal da23;
+
+    /**
+     * 投手游戏第24天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户充值")
+    private BigDecimal da24;
+
+    /**
+     * 投手游戏第25天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户充值")
+    private BigDecimal da25;
+
+    /**
+     * 投手游戏第26天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户充值")
+    private BigDecimal da26;
+
+    /**
+     * 投手游戏第27天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户充值")
+    private BigDecimal da27;
+
+    /**
+     * 投手游戏第28天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户充值")
+    private BigDecimal da28;
+
+    /**
+     * 投手游戏第29天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户充值")
+    private BigDecimal da29;
+
+    /**
+     * 投手游戏第30天新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户充值")
+    private BigDecimal da30;
+
+    /**
+     * 投手游戏第2月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户充值")
+    private BigDecimal m2;
+
+    /**
+     * 投手游戏第3月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户充值")
+    private BigDecimal m3;
+
+    /**
+     * 投手游戏第6月新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户充值")
+    private BigDecimal m6;
+
+    /**
+     * 投手游戏第1年新用户充值
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户充值")
+    private BigDecimal y1;
+
+    /**
+     * 至今充值金额
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal total;
+
+    /**
+     * 投手游戏第1天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1天新用户人数")
+    private Long da1Num;
+
+    /**
+     * 投手游戏第2天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2天新用户人数")
+    private Long da2Num;
+
+    /**
+     * 投手游戏第3天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3天新用户人数")
+    private Long da3Num;
+
+    /**
+     * 投手游戏第4天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第4天新用户人数")
+    private Long da4Num;
+
+    /**
+     * 投手游戏第5天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第5天新用户人数")
+    private Long da5Num;
+
+    /**
+     * 投手游戏第6天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6天新用户人数")
+    private Long da6Num;
+
+    /**
+     * 投手游戏第7天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第7天新用户人数")
+    private Long da7Num;
+
+    /**
+     * 投手游戏第8天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第8天新用户人数")
+    private Long da8Num;
+
+    /**
+     * 投手游戏第9天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第9天新用户人数")
+    private Long da9Num;
+
+    /**
+     * 投手游戏第10天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第10天新用户人数")
+    private Long da10Num;
+
+    /**
+     * 投手游戏第11天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第11天新用户人数")
+    private Long da11Num;
+
+    /**
+     * 投手游戏第12天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第12天新用户人数")
+    private Long da12Num;
+
+    /**
+     * 投手游戏第13天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第13天新用户人数")
+    private Long da13Num;
+
+    /**
+     * 投手游戏第14天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第14天新用户人数")
+    private Long da14Num;
+
+    /**
+     * 投手游戏第15天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第15天新用户人数")
+    private Long da15Num;
+
+    /**
+     * 投手游戏第16天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第16天新用户人数")
+    private Long da16Num;
+
+    /**
+     * 投手游戏第17天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第17天新用户人数")
+    private Long da17Num;
+
+    /**
+     * 投手游戏第18天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第18天新用户人数")
+    private Long da18Num;
+
+    /**
+     * 投手游戏第19天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第19天新用户人数")
+    private Long da19Num;
+
+    /**
+     * 投手游戏第20天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第20天新用户人数")
+    private Long da20Num;
+
+    /**
+     * 投手游戏第21天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第21天新用户人数")
+    private Long da21Num;
+
+    /**
+     * 投手游戏第22天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第22天新用户人数")
+    private Long da22Num;
+
+    /**
+     * 投手游戏第23天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第23天新用户人数")
+    private Long da23Num;
+
+    /**
+     * 投手游戏第24天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第24天新用户人数")
+    private Long da24Num;
+
+    /**
+     * 投手游戏第25天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第25天新用户人数")
+    private Long da25Num;
+
+    /**
+     * 投手游戏第26天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第26天新用户人数")
+    private Long da26Num;
+
+    /**
+     * 投手游戏第27天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第27天新用户人数")
+    private Long da27Num;
+
+    /**
+     * 投手游戏第28天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第28天新用户人数")
+    private Long da28Num;
+
+    /**
+     * 投手游戏第29天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第29天新用户人数")
+    private Long da29Num;
+
+    /**
+     * 投手游戏第30天新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第30天新用户人数")
+    private Long da30Num;
+
+    /**
+     * 投手游戏第2月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第2月新用户人数")
+    private Long m2Num;
+
+    /**
+     * 投手游戏第3月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第3月新用户人数")
+    private Long m3Num;
+
+    /**
+     * 投手游戏第6月新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第6月新用户人数")
+    private Long m6Num;
+
+    /**
+     * 投手游戏第1年新用户人数
+     */
+    @ApiModelProperty(value = "投手游戏第1年新用户人数")
+    private Long y1Num;
+
+    /**
+     * 至今充值人数
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long totalNum;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户累计创角成本
+     */
+    @ApiModelProperty(value = "新用户累计创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 创角成本
+     */
+    @ApiModelProperty(value = "创角成本")
+    private BigDecimal roleNumCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户累计创角率
+     */
+    @ApiModelProperty(value = "新用户累计创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 创角率
+     */
+    @ApiModelProperty(value = "创角率")
+    private BigDecimal roleNumRate;
+
+    /**
+     * 新用户付费比
+     */
+    @ApiModelProperty(value = "新用户付费比")
+    private BigDecimal newUserAmountRatio;
+
+    /**
+     * 付费趋势第1日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第1日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD1Trend;
+
+    /**
+     * 付费趋势第2日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第2日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD2Trend;
+
+    /**
+     * 付费趋势第3日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第3日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD3Trend;
+
+    /**
+     * 付费趋势第4日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第4日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD4Trend;
+
+    /**
+     * 付费趋势第5日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第5日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD5Trend;
+
+    /**
+     * 付费趋势第6日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第6日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD6Trend;
+
+    /**
+     * 付费趋势第7日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第7日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD7Trend;
+
+    /**
+     * 付费趋势第8日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第8日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD8Trend;
+
+    /**
+     * 付费趋势第9日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第9日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD9Trend;
+
+    /**
+     * 付费趋势第10日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第10日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD10Trend;
+
+    /**
+     * 付费趋势第11日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第11日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD11Trend;
+
+    /**
+     * 付费趋势第12日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第12日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD12Trend;
+
+    /**
+     * 付费趋势第13日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第13日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD13Trend;
+
+    /**
+     * 付费趋势第14日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第14日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD14Trend;
+
+    /**
+     * 付费趋势第15日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第15日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD15Trend;
+
+    /**
+     * 付费趋势第16日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第16日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD16Trend;
+
+    /**
+     * 付费趋势第17日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第17日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD17Trend;
+
+    /**
+     * 付费趋势第18日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第18日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD18Trend;
+
+    /**
+     * 付费趋势第19日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第19日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD19Trend;
+
+    /**
+     * 付费趋势第20日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第20日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD20Trend;
+
+    /**
+     * 付费趋势第21日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第21日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD21Trend;
+
+    /**
+     * 付费趋势第22日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第22日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD22Trend;
+
+    /**
+     * 付费趋势第23日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第23日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD23Trend;
+
+    /**
+     * 付费趋势第24日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第24日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD24Trend;
+
+    /**
+     * 付费趋势第25日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第25日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD25Trend;
+
+    /**
+     * 付费趋势第26日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第26日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD26Trend;
+
+    /**
+     * 付费趋势第27日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第27日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD27Trend;
+
+    /**
+     * 付费趋势第28日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第28日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD28Trend;
+
+    /**
+     * 付费趋势第29日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第29日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountD29Trend;
+
+    /**
+     * 付费趋势第30日总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第30日总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM1Trend;
+
+    /**
+     * 付费趋势第二月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第二月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM2Trend;
+
+    /**
+     * 付费趋势第三月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势第三月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM3Trend;
+
+    /**
+     * 付费趋势六月总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势六月总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountM6Trend;
+
+    /**
+     * 付费趋势一年总:金额/人数/增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势一年总:金额/人数/增/回/倍")
+    private RechargeTrendVO amountY1Trend;
+
+    /**
+     * 付费趋势总:增/回/倍
+     */
+    @ApiModelProperty(value = "付费趋势总:增/回/倍")
+    private RechargeTrendVO amountSumTrend;
+
+}

+ 604 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataTotalSumVO.java

@@ -0,0 +1,604 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手游戏总数据总计实体
+ **/
+@Data
+public class PitcherGameDataTotalSumVO {
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+    /**
+     * 推广计划数量
+     */
+    @ApiModelProperty(value = "推广计划数量")
+    private Long planCount;
+
+    /**
+     * 推广账号数量
+     */
+    @ApiModelProperty(value = "推广账号数量")
+    private Long accountCount;
+
+    /**
+     * 推广渠道数量
+     */
+    @ApiModelProperty(value = "推广渠道数量")
+    private Long agentCount;
+
+    /**
+     * 注册人数-通过广告首次登录小游戏的独立用户数
+     */
+    @ApiModelProperty(value = "注册人数-通过广告首次登录小游戏的独立用户数")
+    private Long registerNum;
+
+    /**
+     * 注册成本=实际消耗/注册人数
+     */
+    @ApiModelProperty(value = "注册成本=实际消耗/注册人数")
+    private BigDecimal registerCost;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 创角人数
+     */
+    @ApiModelProperty(value = "创角人数")
+    private Long roleNum;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户累计创角成本
+     */
+    @ApiModelProperty(value = "新用户累计创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 创角成本
+     */
+    @ApiModelProperty(value = "创角成本")
+    private BigDecimal roleNumCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户累计创角率
+     */
+    @ApiModelProperty(value = "新用户累计创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 创角率
+     */
+    @ApiModelProperty(value = "创角率")
+    private BigDecimal roleNumRate;
+
+    /**
+     * 新用户充值次数
+     */
+    @ApiModelProperty(value = "新用户充值次数")
+    private Long newUserAmountCount;
+
+    /**
+     * 新用户充值人数
+     */
+    @ApiModelProperty(value = "新用户充值人数")
+    private Long newUserAmountNum;
+
+    /**
+     * 新用户充值金额
+     */
+    @ApiModelProperty(value = "新用户充值金额")
+    private BigDecimal newUserAmount;
+
+    /**
+     * 新增付费次数(首日新用户充值次数)
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数(首日新用户充值人数)
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额(首日新用户充值金额)
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 账面充值次数
+     */
+    @ApiModelProperty(value = "账面充值次数")
+    private Long amountCount;
+
+    /**
+     * 账面充值人数
+     */
+    @ApiModelProperty(value = "账面充值人数")
+    private Long amountNum;
+
+    /**
+     * 账面充值金额
+     */
+    @ApiModelProperty(value = "账面充值金额")
+    private BigDecimal amount;
+
+    /**
+     * 老用户充值次数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值次数(每日)")
+    private Long oldAmountCount;
+
+    /**
+     * 老用户充值人数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值人数(每日)")
+    private Long oldAmountNum;
+
+    /**
+     * 老用户充值金额(每日)
+     */
+    @ApiModelProperty(value = "老用户充值金额(每日)")
+    private BigDecimal oldAmount;
+
+    /**
+     * 至今充值次数(新用户累积充值次数)
+     */
+    @ApiModelProperty(value = "至今充值次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今充值人数(新用户累积充值人数)
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今充值金额(新用户累积充值金额)
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 单日付费100+人数
+     */
+    @ApiModelProperty(value = "单日付费100+人数")
+    private Long hundredUserNum;
+
+    /**
+     * 单日付费100+成本
+     */
+    @ApiModelProperty(value = "单日付费100+成本")
+    private BigDecimal hundredUserNumCost;
+
+    /**
+     * 买量新用户累计充值金额
+     */
+    @ApiModelProperty(value = "买量新用户累计充值金额")
+    private BigDecimal buyNewUserTotalAmount;
+
+    /**
+     * 买量新用户累计充值人数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值人数")
+    private Long buyNewUserTotalAmountNum;
+
+    /**
+     * 买量新用户累计充值次数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值次数")
+    private Long buyNewUserTotalAmountCount;
+
+    /**
+     * 首日回收率
+     */
+    @ApiModelProperty(value = "首日回收率")
+    private BigDecimal firstRoi;
+
+    /**
+     * 买量回收率
+     */
+    @ApiModelProperty(value = "买量回收率")
+    private BigDecimal buyRoi;
+
+    /**
+     * 当日回收率(至今回收率)
+     */
+    @ApiModelProperty(value = "当日回收率")
+    private BigDecimal todayRoi;
+
+    /**
+     * 毛利额,毛利=新用户-实际消耗
+     */
+    @ApiModelProperty(value = "毛利额,毛利=新用户-实际消耗")
+    private BigDecimal grossProfit;
+
+    /**
+     * 新用户回收率
+     */
+    @ApiModelProperty(value = "新用户回收率")
+    private BigDecimal newUserRoi;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstRate;
+
+    /**
+     * 新用户付费率
+     */
+    @ApiModelProperty(value = "新用户付费率")
+    private BigDecimal newUserAmountRate;
+
+    /**
+     * 买量用户付费率
+     */
+    @ApiModelProperty(value = "买量用户付费率")
+    private BigDecimal buyUserRate;
+
+    /**
+     * 当天付费率
+     */
+    @ApiModelProperty(value = "当天付费率")
+    private BigDecimal todayRate;
+
+    /**
+     * 新用户付费比
+     */
+    @ApiModelProperty(value = "新用户付费比")
+    private BigDecimal newUserAmountRatio;
+
+    /**
+     * 首日客单价
+     */
+    @ApiModelProperty(value = "首日客单价")
+    private BigDecimal firstAvg;
+
+    /**
+     * 新用户客单价
+     */
+    @ApiModelProperty(value = "新用户客单价")
+    private BigDecimal newUserAvg;
+
+    /**
+     * 买量客单价
+     */
+    @ApiModelProperty(value = "买量客单价")
+    private BigDecimal buyAvg;
+
+    /**
+     * 当天客单价
+     */
+    @ApiModelProperty(value = "当天客单价")
+    private BigDecimal todayAvg;
+
+    /**
+     * 账面客单价
+     */
+    @ApiModelProperty(value = "账面客单价")
+    private BigDecimal paperAvg;
+
+    /**
+     * 首日充值成本
+     */
+    @ApiModelProperty(value = "首日充值成本")
+    private BigDecimal firstAmountCost;
+
+    /**
+     * 新用户充值成本
+     */
+    @ApiModelProperty(value = "新用户充值成本")
+    private BigDecimal newUserAmountCost;
+
+    /**
+     * 买量充值成本
+     */
+    @ApiModelProperty(value = "买量充值成本")
+    private BigDecimal buyAmountCost;
+
+    /**
+     * 当天充值成本
+     */
+    @ApiModelProperty(value = "当天充值成本")
+    private BigDecimal todayAmountCost;
+
+    /**
+     * 复充人数
+     */
+    @ApiModelProperty(value = "复充人数")
+    private Long regOrderUserAgain;
+
+    /**
+     * 当天复充率
+     */
+    @ApiModelProperty(value = "当天复充率")
+    private BigDecimal todayAgainRate;
+
+    /**
+     * 新用户复充人数
+     */
+    @ApiModelProperty(value = "新用户复充人数")
+    private Long newUserOrderAgain;
+
+    /**
+     * 新用户复充率
+     */
+    @ApiModelProperty(value = "新用户复充率")
+    private BigDecimal newUserAgainRate;
+
+    /**
+     * 新增注册ARPU
+     */
+    @ApiModelProperty(value = "新增注册ARPU")
+    private BigDecimal newRegArpu;
+
+    /**
+     * 首日付费ARPU
+     */
+    @ApiModelProperty(value = "首日付费ARPU")
+    private BigDecimal firstArpu;
+
+    /**
+     * 新用户付费ARPU
+     */
+    @ApiModelProperty(value = "新用户付费ARPU")
+    private BigDecimal newUserArpu;
+
+    /**
+     * 当天付费ARPU
+     */
+    @ApiModelProperty(value = "当天付费ARPU")
+    private BigDecimal todayArpu;
+
+    /**
+     * 账面arpu
+     */
+    @ApiModelProperty(value = "账面arpu")
+    private BigDecimal paperArpu;
+
+    /**
+     * 1日roi
+     */
+    @ApiModelProperty(value = "1日roi")
+    private BigDecimal roi1;
+
+    /**
+     * 2日roi
+     */
+    @ApiModelProperty(value = "2日roi")
+    private BigDecimal roi2;
+
+    /**
+     * 3日roi
+     */
+    @ApiModelProperty(value = "3日roi")
+    private BigDecimal roi3;
+
+    /**
+     * 4日roi
+     */
+    @ApiModelProperty(value = "4日roi")
+    private BigDecimal roi4;
+
+    /**
+     * 5日roi
+     */
+    @ApiModelProperty(value = "5日roi")
+    private BigDecimal roi5;
+
+    /**
+     * 6日roi
+     */
+    @ApiModelProperty(value = "6日roi")
+    private BigDecimal roi6;
+
+    /**
+     * 7日roi
+     */
+    @ApiModelProperty(value = "7日roi")
+    private BigDecimal roi7;
+
+    /**
+     * 8日roi
+     */
+    @ApiModelProperty(value = "8日roi")
+    private BigDecimal roi8;
+
+    /**
+     * 9日roi
+     */
+    @ApiModelProperty(value = "9日roi")
+    private BigDecimal roi9;
+
+    /**
+     * 10日roi
+     */
+    @ApiModelProperty(value = "10日roi")
+    private BigDecimal roi10;
+
+    /**
+     * 11日roi
+     */
+    @ApiModelProperty(value = "11日roi")
+    private BigDecimal roi11;
+
+    /**
+     * 12日roi
+     */
+    @ApiModelProperty(value = "12日roi")
+    private BigDecimal roi12;
+
+    /**
+     * 13日roi
+     */
+    @ApiModelProperty(value = "13日roi")
+    private BigDecimal roi13;
+
+    /**
+     * 14日roi
+     */
+    @ApiModelProperty(value = "14日roi")
+    private BigDecimal roi14;
+
+    /**
+     * 15日roi
+     */
+    @ApiModelProperty(value = "15日roi")
+    private BigDecimal roi15;
+
+    /**
+     * 16日roi
+     */
+    @ApiModelProperty(value = "16日roi")
+    private BigDecimal roi16;
+
+    /**
+     * 17日roi
+     */
+    @ApiModelProperty(value = "17日roi")
+    private BigDecimal roi17;
+
+    /**
+     * 18日roi
+     */
+    @ApiModelProperty(value = "18日roi")
+    private BigDecimal roi18;
+
+    /**
+     * 19日roi
+     */
+    @ApiModelProperty(value = "19日roi")
+    private BigDecimal roi19;
+
+    /**
+     * 20日roi
+     */
+    @ApiModelProperty(value = "20日roi")
+    private BigDecimal roi20;
+
+    /**
+     * 21日roi
+     */
+    @ApiModelProperty(value = "21日roi")
+    private BigDecimal roi21;
+
+    /**
+     * 22日roi
+     */
+    @ApiModelProperty(value = "22日roi")
+    private BigDecimal roi22;
+
+    /**
+     * 23日roi
+     */
+    @ApiModelProperty(value = "23日roi")
+    private BigDecimal roi23;
+
+    /**
+     * 24日roi
+     */
+    @ApiModelProperty(value = "24日roi")
+    private BigDecimal roi24;
+
+    /**
+     * 25日roi
+     */
+    @ApiModelProperty(value = "25日roi")
+    private BigDecimal roi25;
+
+    /**
+     * 26日roi
+     */
+    @ApiModelProperty(value = "26日roi")
+    private BigDecimal roi26;
+
+    /**
+     * 27日roi
+     */
+    @ApiModelProperty(value = "27日roi")
+    private BigDecimal roi27;
+
+    /**
+     * 28日roi
+     */
+    @ApiModelProperty(value = "28日roi")
+    private BigDecimal roi28;
+
+    /**
+     * 29日roi
+     */
+    @ApiModelProperty(value = "29日roi")
+    private BigDecimal roi29;
+
+    /**
+     * 30日roi
+     */
+    @ApiModelProperty(value = "30日roi")
+    private BigDecimal roi30;
+
+    /**
+     * 60日ROI
+     */
+    @ApiModelProperty(value = "60日ROI")
+    private BigDecimal roi60;
+
+    /**
+     * 90日ROI
+     */
+    @ApiModelProperty(value = "90日ROI")
+    private BigDecimal roi90;
+
+    /**
+     * 180日ROI
+     */
+    @ApiModelProperty(value = "180日ROI")
+    private BigDecimal roi180;
+
+    /**
+     * 1年ROI
+     */
+    @ApiModelProperty(value = "1年ROI")
+    private BigDecimal roi1yaer;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal roiTotal;
+
+}

+ 640 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PitcherGameDataTotalVO.java

@@ -0,0 +1,640 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手游戏总数据实体
+ **/
+@Data
+public class PitcherGameDataTotalVO {
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private String gameId;
+
+    /**
+     * 投手
+     */
+    @ApiModelProperty(value = "投手")
+    private String pitcher;
+
+    /**
+     * 游戏
+     */
+    @ApiModelProperty(value = "游戏")
+    private String gameName;
+
+    /**
+     * 游戏CP方
+     */
+    @ApiModelProperty(value = "游戏CP方")
+    private String gameCp;
+
+    /**
+     * 游戏类型
+     */
+    @ApiModelProperty(value = "游戏类型")
+    private Long gameType;
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+    /**
+     * 推广计划数量
+     */
+    @ApiModelProperty(value = "推广计划数量")
+    private Long planCount;
+
+    /**
+     * 推广账号数量
+     */
+    @ApiModelProperty(value = "推广账号数量")
+    private Long accountCount;
+
+    /**
+     * 推广渠道数量
+     */
+    @ApiModelProperty(value = "推广渠道数量")
+    private Long agentCount;
+
+    /**
+     * 注册人数-通过广告首次登录小游戏的独立用户数
+     */
+    @ApiModelProperty(value = "注册人数-通过广告首次登录小游戏的独立用户数")
+    private Long registerNum;
+
+    /**
+     * 注册成本=实际消耗/注册人数
+     */
+    @ApiModelProperty(value = "注册成本=实际消耗/注册人数")
+    private BigDecimal registerCost;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 创角人数
+     */
+    @ApiModelProperty(value = "创角人数")
+    private Long roleNum;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户累计创角成本
+     */
+    @ApiModelProperty(value = "新用户累计创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 创角成本
+     */
+    @ApiModelProperty(value = "创角成本")
+    private BigDecimal roleNumCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户累计创角率
+     */
+    @ApiModelProperty(value = "新用户累计创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 创角率
+     */
+    @ApiModelProperty(value = "创角率")
+    private BigDecimal roleNumRate;
+
+    /**
+     * 新用户充值次数
+     */
+    @ApiModelProperty(value = "新用户充值次数")
+    private Long newUserAmountCount;
+
+    /**
+     * 新用户充值人数
+     */
+    @ApiModelProperty(value = "新用户充值人数")
+    private Long newUserAmountNum;
+
+    /**
+     * 新用户充值金额
+     */
+    @ApiModelProperty(value = "新用户充值金额")
+    private BigDecimal newUserAmount;
+
+    /**
+     * 新增付费次数(首日新用户充值次数)
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数(首日新用户充值人数)
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额(首日新用户充值金额)
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 账面充值次数
+     */
+    @ApiModelProperty(value = "账面充值次数")
+    private Long amountCount;
+
+    /**
+     * 账面充值人数
+     */
+    @ApiModelProperty(value = "账面充值人数")
+    private Long amountNum;
+
+    /**
+     * 账面充值金额
+     */
+    @ApiModelProperty(value = "账面充值金额")
+    private BigDecimal amount;
+
+    /**
+     * 老用户充值次数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值次数(每日)")
+    private Long oldAmountCount;
+
+    /**
+     * 老用户充值人数(每日)
+     */
+    @ApiModelProperty(value = "老用户充值人数(每日)")
+    private Long oldAmountNum;
+
+    /**
+     * 老用户充值金额(每日)
+     */
+    @ApiModelProperty(value = "老用户充值金额(每日)")
+    private BigDecimal oldAmount;
+
+    /**
+     * 至今充值次数(新用户累积充值次数)
+     */
+    @ApiModelProperty(value = "至今充值次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今充值人数(新用户累积充值人数)
+     */
+    @ApiModelProperty(value = "至今充值人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今充值金额(新用户累积充值金额)
+     */
+    @ApiModelProperty(value = "至今充值金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 单日付费100+人数
+     */
+    @ApiModelProperty(value = "单日付费100+人数")
+    private Long hundredUserNum;
+
+    /**
+     * 单日付费100+成本
+     */
+    @ApiModelProperty(value = "单日付费100+成本")
+    private BigDecimal hundredUserNumCost;
+
+    /**
+     * 买量新用户累计充值金额
+     */
+    @ApiModelProperty(value = "买量新用户累计充值金额")
+    private BigDecimal buyNewUserTotalAmount;
+
+    /**
+     * 买量新用户累计充值人数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值人数")
+    private Long buyNewUserTotalAmountNum;
+
+    /**
+     * 买量新用户累计充值次数
+     */
+    @ApiModelProperty(value = "买量新用户累计充值次数")
+    private Long buyNewUserTotalAmountCount;
+
+    /**
+     * 首日回收率
+     */
+    @ApiModelProperty(value = "首日回收率")
+    private BigDecimal firstRoi;
+
+    /**
+     * 买量回收率
+     */
+    @ApiModelProperty(value = "买量回收率")
+    private BigDecimal buyRoi;
+
+    /**
+     * 当日回收率(至今回收率)
+     */
+    @ApiModelProperty(value = "当日回收率")
+    private BigDecimal todayRoi;
+
+    /**
+     * 毛利额,毛利=新用户-实际消耗
+     */
+    @ApiModelProperty(value = "毛利额,毛利=新用户-实际消耗")
+    private BigDecimal grossProfit;
+
+    /**
+     * 新用户回收率
+     */
+    @ApiModelProperty(value = "新用户回收率")
+    private BigDecimal newUserRoi;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstRate;
+
+    /**
+     * 新用户付费率
+     */
+    @ApiModelProperty(value = "新用户付费率")
+    private BigDecimal newUserAmountRate;
+
+    /**
+     * 买量用户付费率
+     */
+    @ApiModelProperty(value = "买量用户付费率")
+    private BigDecimal buyUserRate;
+
+    /**
+     * 当天付费率
+     */
+    @ApiModelProperty(value = "当天付费率")
+    private BigDecimal todayRate;
+
+    /**
+     * 新用户付费比
+     */
+    @ApiModelProperty(value = "新用户付费比")
+    private BigDecimal newUserAmountRatio;
+
+    /**
+     * 首日客单价
+     */
+    @ApiModelProperty(value = "首日客单价")
+    private BigDecimal firstAvg;
+
+    /**
+     * 新用户客单价
+     */
+    @ApiModelProperty(value = "新用户客单价")
+    private BigDecimal newUserAvg;
+
+    /**
+     * 买量客单价
+     */
+    @ApiModelProperty(value = "买量客单价")
+    private BigDecimal buyAvg;
+
+    /**
+     * 当天客单价
+     */
+    @ApiModelProperty(value = "当天客单价")
+    private BigDecimal todayAvg;
+
+    /**
+     * 账面客单价
+     */
+    @ApiModelProperty(value = "账面客单价")
+    private BigDecimal paperAvg;
+
+    /**
+     * 首日充值成本
+     */
+    @ApiModelProperty(value = "首日充值成本")
+    private BigDecimal firstAmountCost;
+
+    /**
+     * 新用户充值成本
+     */
+    @ApiModelProperty(value = "新用户充值成本")
+    private BigDecimal newUserAmountCost;
+
+    /**
+     * 买量充值成本
+     */
+    @ApiModelProperty(value = "买量充值成本")
+    private BigDecimal buyAmountCost;
+
+    /**
+     * 当天充值成本
+     */
+    @ApiModelProperty(value = "当天充值成本")
+    private BigDecimal todayAmountCost;
+
+    /**
+     * 复充人数
+     */
+    @ApiModelProperty(value = "复充人数")
+    private Long regOrderUserAgain;
+
+    /**
+     * 当天复充率
+     */
+    @ApiModelProperty(value = "当天复充率")
+    private BigDecimal todayAgainRate;
+
+    /**
+     * 新用户复充人数
+     */
+    @ApiModelProperty(value = "新用户复充人数")
+    private Long newUserOrderAgain;
+
+    /**
+     * 新用户复充率
+     */
+    @ApiModelProperty(value = "新用户复充率")
+    private BigDecimal newUserAgainRate;
+
+    /**
+     * 新增注册ARPU
+     */
+    @ApiModelProperty(value = "新增注册ARPU")
+    private BigDecimal newRegArpu;
+
+    /**
+     * 首日付费ARPU
+     */
+    @ApiModelProperty(value = "首日付费ARPU")
+    private BigDecimal firstArpu;
+
+    /**
+     * 新用户付费ARPU
+     */
+    @ApiModelProperty(value = "新用户付费ARPU")
+    private BigDecimal newUserArpu;
+
+    /**
+     * 当天付费ARPU
+     */
+    @ApiModelProperty(value = "当天付费ARPU")
+    private BigDecimal todayArpu;
+
+    /**
+     * 账面arpu
+     */
+    @ApiModelProperty(value = "账面arpu")
+    private BigDecimal paperArpu;
+
+    /**
+     * 1日roi
+     */
+    @ApiModelProperty(value = "1日roi")
+    private BigDecimal roi1;
+
+    /**
+     * 2日roi
+     */
+    @ApiModelProperty(value = "2日roi")
+    private BigDecimal roi2;
+
+    /**
+     * 3日roi
+     */
+    @ApiModelProperty(value = "3日roi")
+    private BigDecimal roi3;
+
+    /**
+     * 4日roi
+     */
+    @ApiModelProperty(value = "4日roi")
+    private BigDecimal roi4;
+
+    /**
+     * 5日roi
+     */
+    @ApiModelProperty(value = "5日roi")
+    private BigDecimal roi5;
+
+    /**
+     * 6日roi
+     */
+    @ApiModelProperty(value = "6日roi")
+    private BigDecimal roi6;
+
+    /**
+     * 7日roi
+     */
+    @ApiModelProperty(value = "7日roi")
+    private BigDecimal roi7;
+
+    /**
+     * 8日roi
+     */
+    @ApiModelProperty(value = "8日roi")
+    private BigDecimal roi8;
+
+    /**
+     * 9日roi
+     */
+    @ApiModelProperty(value = "9日roi")
+    private BigDecimal roi9;
+
+    /**
+     * 10日roi
+     */
+    @ApiModelProperty(value = "10日roi")
+    private BigDecimal roi10;
+
+    /**
+     * 11日roi
+     */
+    @ApiModelProperty(value = "11日roi")
+    private BigDecimal roi11;
+
+    /**
+     * 12日roi
+     */
+    @ApiModelProperty(value = "12日roi")
+    private BigDecimal roi12;
+
+    /**
+     * 13日roi
+     */
+    @ApiModelProperty(value = "13日roi")
+    private BigDecimal roi13;
+
+    /**
+     * 14日roi
+     */
+    @ApiModelProperty(value = "14日roi")
+    private BigDecimal roi14;
+
+    /**
+     * 15日roi
+     */
+    @ApiModelProperty(value = "15日roi")
+    private BigDecimal roi15;
+
+    /**
+     * 16日roi
+     */
+    @ApiModelProperty(value = "16日roi")
+    private BigDecimal roi16;
+
+    /**
+     * 17日roi
+     */
+    @ApiModelProperty(value = "17日roi")
+    private BigDecimal roi17;
+
+    /**
+     * 18日roi
+     */
+    @ApiModelProperty(value = "18日roi")
+    private BigDecimal roi18;
+
+    /**
+     * 19日roi
+     */
+    @ApiModelProperty(value = "19日roi")
+    private BigDecimal roi19;
+
+    /**
+     * 20日roi
+     */
+    @ApiModelProperty(value = "20日roi")
+    private BigDecimal roi20;
+
+    /**
+     * 21日roi
+     */
+    @ApiModelProperty(value = "21日roi")
+    private BigDecimal roi21;
+
+    /**
+     * 22日roi
+     */
+    @ApiModelProperty(value = "22日roi")
+    private BigDecimal roi22;
+
+    /**
+     * 23日roi
+     */
+    @ApiModelProperty(value = "23日roi")
+    private BigDecimal roi23;
+
+    /**
+     * 24日roi
+     */
+    @ApiModelProperty(value = "24日roi")
+    private BigDecimal roi24;
+
+    /**
+     * 25日roi
+     */
+    @ApiModelProperty(value = "25日roi")
+    private BigDecimal roi25;
+
+    /**
+     * 26日roi
+     */
+    @ApiModelProperty(value = "26日roi")
+    private BigDecimal roi26;
+
+    /**
+     * 27日roi
+     */
+    @ApiModelProperty(value = "27日roi")
+    private BigDecimal roi27;
+
+    /**
+     * 28日roi
+     */
+    @ApiModelProperty(value = "28日roi")
+    private BigDecimal roi28;
+
+    /**
+     * 29日roi
+     */
+    @ApiModelProperty(value = "29日roi")
+    private BigDecimal roi29;
+
+    /**
+     * 30日roi
+     */
+    @ApiModelProperty(value = "30日roi")
+    private BigDecimal roi30;
+
+    /**
+     * 60日ROI
+     */
+    @ApiModelProperty(value = "60日ROI")
+    private BigDecimal roi60;
+
+    /**
+     * 90日ROI
+     */
+    @ApiModelProperty(value = "90日ROI")
+    private BigDecimal roi90;
+
+    /**
+     * 180日ROI
+     */
+    @ApiModelProperty(value = "180日ROI")
+    private BigDecimal roi180;
+
+    /**
+     * 1年ROI
+     */
+    @ApiModelProperty(value = "1年ROI")
+    private BigDecimal roi1yaer;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal roiTotal;
+
+}

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

@@ -44,8 +44,8 @@ public class RechargeTrendVO {
     private BigDecimal multiples;
 
     /**
-     * 总充值金额
+     * 总充值金额 d1-dn 的总充值金额
      */
-    @ApiModelProperty(notes = "总充值金额")
+    @ApiModelProperty(notes = "总充值金额(不展示)")
     private BigDecimal rechargeMoneyTotal;
 }

+ 886 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayTotalVO.java

@@ -0,0 +1,886 @@
+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/27
+ * @Description 广告监控数据总计前端显示对象(腾讯广告)
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class TencentPromotionDayTotalVO {
+
+    /**
+     * 今日消耗
+     */
+    @ApiModelProperty(value = "今日消耗")
+    private BigDecimal todayCost;
+
+    /**
+     * 广告总消耗
+     */
+    @ApiModelProperty(value = "广告总消耗")
+    private BigDecimal promotionTotalCost;
+
+    /**
+     * 曝光量
+     */
+    @ApiModelProperty(value = "曝光量")
+    private Long showCount;
+
+    /**
+     * 千次曝光成本
+     */
+    @ApiModelProperty(value = "千次曝光成本")
+    private BigDecimal thousandDisplayPrice;
+
+    /**
+     * 点击量
+     */
+    @ApiModelProperty(value = "点击量")
+    private Long clickCount;
+
+    /**
+     * 点击均价
+     */
+    @ApiModelProperty(value = "点击均价")
+    private BigDecimal avgClickCost;
+
+    /**
+     * 点击率
+     */
+    @ApiModelProperty(value = "点击率")
+    private BigDecimal ctr;
+
+    /**
+     * 转化目标量
+     */
+    @ApiModelProperty(value = "转化目标量")
+    private Long convertCount;
+
+    /**
+     * 转化目标成本
+     */
+    @ApiModelProperty(value = "转化目标成本")
+    private BigDecimal convertCost;
+
+    /**
+     * 目标转化率
+     */
+    @ApiModelProperty(value = "目标转化率")
+    private BigDecimal convertRate;
+
+    /**
+     * 新增用户数
+     */
+    @ApiModelProperty(value = "新增用户数")
+    private Long regNum;
+
+    /**
+     * 广告总注册人数
+     */
+    @ApiModelProperty(value = "广告总注册人数")
+    private Long regTotalNum;
+
+    /**
+     * 总创角人数
+     */
+    @ApiModelProperty(value = "总创角人数")
+    private Long roleTotalNum;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 注册成本
+     */
+    @ApiModelProperty(value = "注册成本")
+    private BigDecimal regCost;
+
+    /**
+     * 总注册成本
+     */
+    @ApiModelProperty(value = "总注册成本")
+    private BigDecimal regTotalCost;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户创角成本
+     */
+    @ApiModelProperty(value = "新用户创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 总创角成本
+     */
+    @ApiModelProperty(value = "总创角成本")
+    private BigDecimal roleTotalCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户创角率
+     */
+    @ApiModelProperty(value = "新用户创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 总创角率
+     */
+    @ApiModelProperty(value = "总创角率")
+    private BigDecimal roleTotalRate;
+
+    /**
+     * 新增付费次数
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 至今付费次数
+     */
+    @ApiModelProperty(value = "至今付费次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今付费人数
+     */
+    @ApiModelProperty(value = "至今付费人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今付费金额
+     */
+    @ApiModelProperty(value = "至今付费金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 总充值次数
+     */
+    @ApiModelProperty(value = "总充值次数")
+    private Long totalAmountCount;
+
+    /**
+     * 总充值人数
+     */
+    @ApiModelProperty(value = "总充值人数")
+    private Long totalAmountNum;
+
+    /**
+     * 总充值金额
+     */
+    @ApiModelProperty(value = "总充值金额")
+    private BigDecimal totalAmount;
+
+    /**
+     * 首日ROI
+     */
+    @ApiModelProperty(value = "首日ROI")
+    private BigDecimal firstRoi;
+
+    /**
+     * 新用户24小时充值金额
+     */
+    @ApiModelProperty(value = "新用户24小时充值金额")
+    private BigDecimal twentyFourHoursAmount;
+
+    /**
+     * 新用户24小时ROI
+     */
+    @ApiModelProperty(value = "新用户24小时ROI")
+    private BigDecimal twentyFourHoursRoi;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal totalRoi;
+
+    /**
+     * 广告总ROI
+     */
+    @ApiModelProperty(value = "广告总ROI")
+    private BigDecimal promotionTotalRoi;
+
+    /**
+     * 新增付费成本
+     */
+    @ApiModelProperty(value = "新增付费成本")
+    private BigDecimal firstNewUserRechargeCost;
+
+    /**
+     * 至今付费成本
+     */
+    @ApiModelProperty(value = "至今付费成本")
+    private BigDecimal newUserTotalRechargeCost;
+
+    /**
+     * 广告总付费成本
+     */
+    @ApiModelProperty(value = "广告总付费成本")
+    private BigDecimal totalRechargeCost;
+
+    /**
+     * 新增付费次数成本
+     */
+    @ApiModelProperty(value = "新增付费次数成本 = 消耗 / 新增付费次数")
+    private BigDecimal firstNewUserAmountCountCost;
+
+    /**
+     * 至今付费次数成本
+     */
+    @ApiModelProperty(value = "至今付费次数成本 = 消耗 / 至今付费数")
+    private BigDecimal newUserTotalAmountCountCost;
+
+    /**
+     * 总充值次数成本
+     */
+    @ApiModelProperty(value = "总充值次数成本 = 消耗 / 总充值次数")
+    private BigDecimal totalAmountCountCost;
+
+    /**
+     * 新增付费ARPPU
+     */
+    @ApiModelProperty(value = "新增付费ARPPU")
+    private BigDecimal firstNewUserArppu;
+
+    /**
+     * 至今付费ARPPU
+     */
+    @ApiModelProperty(value = "至今付费ARPPU")
+    private BigDecimal newUserTotalAmountArppu;
+
+    /**
+     * 新增付费100+用户数
+     */
+    @ApiModelProperty(value = "新增付费100+用户数")
+    private Long firstNewUserHundredUserNum;
+
+    /**
+     * 新增付费200+用户数
+     */
+    @ApiModelProperty(value = "新增付费200+用户数")
+    private Long firstNewUserTwoHundredUserNum;
+
+    /**
+     * 至今付费100+用户数
+     */
+    @ApiModelProperty(value = "至今付费100+用户数")
+    private Long newUserTotalHundredUserNum;
+
+    /**
+     * 首充50~100元用户数
+     */
+    @ApiModelProperty(value = "首充50~100元用户数")
+    private Long firstRechargeFiftyHundredNum;
+
+    /**
+     * 新增付费100+用户付费成本
+     */
+    @ApiModelProperty(value = "新增付费100+用户付费成本")
+    private BigDecimal firstNewUserHundredUserCost;
+
+    /**
+     * 新增付费200+用户付费成本
+     */
+    @ApiModelProperty(value = "新增付费200+用户付费成本")
+    private BigDecimal firstNewUserTwoHundredUserCost;
+
+    /**
+     * 至今付费100+用户付费成本
+     */
+    @ApiModelProperty(value = "至今付费100+用户付费成本")
+    private BigDecimal newUserTotalHundredUserCost;
+
+    /**
+     * 首充50~100元占比
+     */
+    @ApiModelProperty(value = "首充50~100元占比")
+    private BigDecimal firstRechargeFiftyHundredRate;
+
+    /**
+     * 首日IOS付费次数
+     */
+    @ApiModelProperty(value = "首日IOS付费次数")
+    private Long firstIosAmountCount;
+
+    /**
+     * 首日IOS付费人数
+     */
+    @ApiModelProperty(value = "首日IOS付费人数")
+    private Long firstIosAmountNum;
+
+    /**
+     * 首日IOS付费金额
+     */
+    @ApiModelProperty(value = "首日IOS付费金额")
+    private BigDecimal firstIosAmount;
+
+    /**
+     * 首日Android付费次数
+     */
+    @ApiModelProperty(value = "首日Android付费次数")
+    private Long firstAndroidAmountCount;
+
+    /**
+     * 首日Android付费人数
+     */
+    @ApiModelProperty(value = "首日Android付费人数")
+    private Long firstAndroidAmountNum;
+
+    /**
+     * 首日Android付费金额
+     */
+    @ApiModelProperty(value = "首日Android付费金额")
+    private BigDecimal firstAndroidAmount;
+
+    /**
+     * 首日IOS付费人数占比
+     */
+    @ApiModelProperty(value = "首日IOS付费人数占比")
+    private BigDecimal firstIosAmountNumRate;
+
+    /**
+     * 首日IOS付费金额占比
+     */
+    @ApiModelProperty(value = "首日IOS付费金额占比")
+    private BigDecimal firstIosAmountRate;
+
+    /**
+     * 首日IOS付费ROI
+     */
+    @ApiModelProperty(value = "首日IOS付费ROI")
+    private BigDecimal firstIosAmountRoi;
+
+    /**
+     * 首日Android付费人数占比
+     */
+    @ApiModelProperty(value = "首日Android付费人数占比")
+    private BigDecimal firstAndroidAmountNumRate;
+
+    /**
+     * 首日Android付费金额占比
+     */
+    @ApiModelProperty(value = "首日Android付费金额占比")
+    private BigDecimal firstAndroidAmountRate;
+
+    /**
+     * 首日Android付费ROI
+     */
+    @ApiModelProperty(value = "首日Android付费ROI")
+    private BigDecimal firstAndroidAmountRoi;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstAmountRate;
+
+    /**
+     * 新增客单价
+     */
+    @ApiModelProperty(value = "新增客单价")
+    private BigDecimal firstNewUserAvgPrice;
+
+    /**
+     * 至今客单价
+     */
+    @ApiModelProperty(value = "至今客单价")
+    private BigDecimal newUserTotalAvgPrice;
+
+    /**
+     * 计划ID,消耗时间的第1天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第1天新用户充值(不显示)")
+    private BigDecimal d1;
+
+    /**
+     * 计划ID,消耗时间的第2天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第2天新用户充值(不显示)")
+    private BigDecimal d2;
+
+    /**
+     * 计划ID,消耗时间的第3天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第3天新用户充值(不显示)")
+    private BigDecimal d3;
+
+    /**
+     * 计划ID,消耗时间的第4天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第4天新用户充值(不显示)")
+    private BigDecimal d4;
+
+    /**
+     * 计划ID,消耗时间的第5天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第5天新用户充值(不显示)")
+    private BigDecimal d5;
+
+    /**
+     * 计划ID,消耗时间的第6天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第6天新用户充值(不显示)")
+    private BigDecimal d6;
+
+    /**
+     * 计划ID,消耗时间的第7天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第7天新用户充值(不显示)")
+    private BigDecimal d7;
+
+    /**
+     * 计划ID,消耗时间的第8天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第8天新用户充值(不显示)")
+    private BigDecimal d8;
+
+    /**
+     * 计划ID,消耗时间的第9天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第9天新用户充值(不显示)")
+    private BigDecimal d9;
+
+    /**
+     * 计划ID,消耗时间的第10天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第10天新用户充值(不显示)")
+    private BigDecimal d10;
+
+    /**
+     * 计划ID,消耗时间的第11天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第11天新用户充值(不显示)")
+    private BigDecimal d11;
+
+    /**
+     * 计划ID,消耗时间的第12天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第12天新用户充值(不显示)")
+    private BigDecimal d12;
+
+    /**
+     * 计划ID,消耗时间的第13天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第13天新用户充值(不显示)")
+    private BigDecimal d13;
+
+    /**
+     * 计划ID,消耗时间的第14天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第14天新用户充值(不显示)")
+    private BigDecimal d14;
+
+    /**
+     * 计划ID,消耗时间的第15天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第15天新用户充值(不显示)")
+    private BigDecimal d15;
+
+    /**
+     * 计划ID,消耗时间的第16天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第16天新用户充值(不显示)")
+    private BigDecimal d16;
+
+    /**
+     * 计划ID,消耗时间的第17天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第17天新用户充值(不显示)")
+    private BigDecimal d17;
+
+    /**
+     * 计划ID,消耗时间的第18天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第18天新用户充值(不显示)")
+    private BigDecimal d18;
+
+    /**
+     * 计划ID,消耗时间的第19天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第19天新用户充值(不显示)")
+    private BigDecimal d19;
+
+    /**
+     * 计划ID,消耗时间的第20天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第20天新用户充值(不显示)")
+    private BigDecimal d20;
+
+    /**
+     * 计划ID,消耗时间的第21天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第21天新用户充值(不显示)")
+    private BigDecimal d21;
+
+    /**
+     * 计划ID,消耗时间的第22天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第22天新用户充值(不显示)")
+    private BigDecimal d22;
+
+    /**
+     * 计划ID,消耗时间的第23天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第23天新用户充值(不显示)")
+    private BigDecimal d23;
+
+    /**
+     * 计划ID,消耗时间的第24天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第24天新用户充值(不显示)")
+    private BigDecimal d24;
+
+    /**
+     * 计划ID,消耗时间的第25天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第25天新用户充值(不显示)")
+    private BigDecimal d25;
+
+    /**
+     * 计划ID,消耗时间的第26天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第26天新用户充值(不显示)")
+    private BigDecimal d26;
+
+    /**
+     * 计划ID,消耗时间的第27天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第27天新用户充值(不显示)")
+    private BigDecimal d27;
+
+    /**
+     * 计划ID,消耗时间的第28天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第28天新用户充值(不显示)")
+    private BigDecimal d28;
+
+    /**
+     * 计划ID,消耗时间的第29天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第29天新用户充值(不显示)")
+    private BigDecimal d29;
+
+    /**
+     * 计划ID,消耗时间的第30天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第30天新用户充值(不显示)")
+    private BigDecimal d30;
+
+    /**
+     * 付费趋势第1天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第1天总:金额/人数/增/回/倍(不显示)")
+    private String da1;
+
+    /**
+     * 付费趋势第2天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第2天总:金额/人数/增/回/倍(不显示)")
+    private String da2;
+
+    /**
+     * 付费趋势第3天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第3天总:金额/人数/增/回/倍(不显示)")
+    private String da3;
+
+    /**
+     * 付费趋势第4天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第4天总:金额/人数/增/回/倍(不显示)")
+    private String da4;
+
+    /**
+     * 付费趋势第5天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第5天总:金额/人数/增/回/倍(不显示)")
+    private String da5;
+
+    /**
+     * 付费趋势第6天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第6天总:金额/人数/增/回/倍(不显示)")
+    private String da6;
+
+    /**
+     * 付费趋势第7天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第7天总:金额/人数/增/回/倍(不显示)")
+    private String da7;
+
+    /**
+     * 付费趋势第8天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第8天总:金额/人数/增/回/倍(不显示)")
+    private String da8;
+
+    /**
+     * 付费趋势第9天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第9天总:金额/人数/增/回/倍(不显示)")
+    private String da9;
+
+    /**
+     * 付费趋势第10天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第10天总:金额/人数/增/回/倍(不显示)")
+    private String da10;
+
+    /**
+     * 付费趋势第11天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第11天总:金额/人数/增/回/倍(不显示)")
+    private String da11;
+
+    /**
+     * 付费趋势第12天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第12天总:金额/人数/增/回/倍(不显示)")
+    private String da12;
+
+    /**
+     * 付费趋势第13天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第13天总:金额/人数/增/回/倍(不显示)")
+    private String da13;
+
+    /**
+     * 付费趋势第14天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第14天总:金额/人数/增/回/倍(不显示)")
+    private String da14;
+
+    /**
+     * 付费趋势第15天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第15天总:金额/人数/增/回/倍(不显示)")
+    private String da15;
+
+    /**
+     * 付费趋势第16天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第16天总:金额/人数/增/回/倍(不显示)")
+    private String da16;
+
+    /**
+     * 付费趋势第17天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第17天总:金额/人数/增/回/倍(不显示)")
+    private String da17;
+
+    /**
+     * 付费趋势第18天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第18天总:金额/人数/增/回/倍(不显示)")
+    private String da18;
+
+    /**
+     * 付费趋势第19天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第19天总:金额/人数/增/回/倍(不显示)")
+    private String da19;
+
+    /**
+     * 付费趋势第20天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第20天总:金额/人数/增/回/倍(不显示)")
+    private String da20;
+
+    /**
+     * 付费趋势第21天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第21天总:金额/人数/增/回/倍(不显示)")
+    private String da21;
+
+    /**
+     * 付费趋势第22天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第22天总:金额/人数/增/回/倍(不显示)")
+    private String da22;
+
+    /**
+     * 付费趋势第23天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第23天总:金额/人数/增/回/倍(不显示)")
+    private String da23;
+
+    /**
+     * 付费趋势第24天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第24天总:金额/人数/增/回/倍(不显示)")
+    private String da24;
+
+    /**
+     * 付费趋势第25天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第25天总:金额/人数/增/回/倍(不显示)")
+    private String da25;
+
+    /**
+     * 付费趋势第26天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第26天总:金额/人数/增/回/倍(不显示)")
+    private String da26;
+
+    /**
+     * 付费趋势第27天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第27天总:金额/人数/增/回/倍(不显示)")
+    private String da27;
+
+    /**
+     * 付费趋势第28天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第28天总:金额/人数/增/回/倍(不显示)")
+    private String da28;
+
+    /**
+     * 付费趋势第29天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第29天总:金额/人数/增/回/倍(不显示)")
+    private String da29;
+
+    /**
+     * 付费趋势第30天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第30天总:金额/人数/增/回/倍(不显示)")
+    private String da30;
+
+    /**
+     * 次日数据
+     */
+    @ApiModelProperty(value = "次日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d2Trend;
+
+    /**
+     * 3日数据
+     */
+    @ApiModelProperty(value = "3日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d3Trend;
+
+    /**
+     * 7日数据
+     */
+    @ApiModelProperty(value = "7日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d7Trend;
+
+    /**
+     * 15日数据
+     */
+    @ApiModelProperty(value = "15日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d15Trend;
+
+    /**
+     * 注册人数 (应用下载广告数据-激活数)
+     */
+    @ApiModelProperty(value = "注册人数 (应用下载广告数据-激活数)")
+    private Long active;
+
+    /**
+     * 注册成本 (应用下载广告数据-激活成本)
+     */
+    @ApiModelProperty(value = "注册成本 (应用下载广告数据-激活成本)")
+    private BigDecimal activeCost;
+
+    /**
+     * 首日转化数 (转化数据-转化数)
+     */
+    @ApiModelProperty(value = "首日转化数 (转化数据-转化数)")
+    private Long firstConvertCount;
+
+    /**
+     * 首日转化成本 (转化数据-转化成本)
+     */
+    @ApiModelProperty(value = "首日转化成本 (转化数据-转化成本)")
+    private BigDecimal firstConvertCost;
+
+    /**
+     * 首次付费率 (应用下载广告数据-首次付费率)
+     */
+    @ApiModelProperty(value = "首次付费率 (应用下载广告数据-首次付费率)")
+    private BigDecimal firstActivePayRate;
+
+    /**
+     * 首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)
+     */
+    @ApiModelProperty(value = "首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)")
+    private BigDecimal firstAttributionGameInAppLtv1day;
+
+    /**
+     * 首日付费ROI (当日付费ROI)
+     */
+    @ApiModelProperty(value = "首日付费ROI (当日付费ROI)")
+    private BigDecimal firstAttributionGameInAppRoi1day;
+
+    /**
+     * 付费次数 (应用下载广告数据-付费次数)
+     */
+    @ApiModelProperty(value = "付费次数 (应用下载广告数据-付费次数)")
+    private Long gamePayCount;
+
+    /**
+     * 付费次数成本
+     */
+    @ApiModelProperty(value = "付费次数成本 = 消耗 / 付费次数")
+    private BigDecimal gamePayCountCost;
+
+    /**
+     * ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)
+     */
+    @ApiModelProperty(value = "ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)")
+    private BigDecimal ltvDay1;
+
+    /**
+     * 每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))
+     */
+    @ApiModelProperty(value = "每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))")
+    private Long subOrderNum;
+
+    /**
+     * 每日扣单金额  (广告首日总金额 - 当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额(attribution_game_in_app_ltv1day) )
+     */
+    @ApiModelProperty(value = "每日扣单金额  (广告首日总金额 - 当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额(attribution_game_in_app_ltv1day) )")
+    private BigDecimal subOrderAmount;
+
+}

+ 1062 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayVO.java

@@ -0,0 +1,1062 @@
+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;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/27
+ * @Description 广告监控数据前端显示实体对象(腾讯广告)
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class TencentPromotionDayVO {
+
+    /**
+     * 时间
+     */
+    @ApiModelProperty(value = "时间")
+    private LocalDate dt;
+
+    /**
+     * 广告ID
+     */
+    @ApiModelProperty(value = "广告ID")
+    private String promotionId;
+
+    /**
+     * 广告名称
+     */
+    @ApiModelProperty(value = "广告名称")
+    private String promotionName;
+
+    /**
+     * 计划ID
+     */
+    @ApiModelProperty(value = "计划ID")
+    private String projectId;
+
+    /**
+     * 计划名称
+     */
+    @ApiModelProperty(value = "计划名称")
+    private String projectName;
+
+    /**
+     * 推广账号ID
+     */
+    @ApiModelProperty(value = "推广账号ID")
+    private Long accountId;
+
+    /**
+     * 推广账号名称
+     */
+    @ApiModelProperty(value = "推广账号名称")
+    private String accountName;
+
+    /**
+     * 投放媒体
+     */
+    @ApiModelProperty(value = "投放媒体")
+    private String accountType;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手ID")
+    private Long pitcherId;
+
+    /**
+     * 投手名称
+     */
+    @ApiModelProperty(value = "投手名称")
+    private String pitcherName;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "备注")
+    private String notes;
+
+    /**
+     * 服务商
+     */
+    @ApiModelProperty(value = "服务商")
+    private String service;
+
+    /**
+     * 余额
+     */
+    @ApiModelProperty(value = "余额")
+    private String balance;
+
+    /**
+     * 渠道ID
+     */
+    @ApiModelProperty(value = "渠道ID")
+    private Long agentId;
+
+    /**
+     * 渠道名称
+     */
+    @ApiModelProperty(value = "渠道名称")
+    private String agentName;
+
+    /**
+     * 渠道标识
+     */
+    @ApiModelProperty(value = "渠道标识")
+    private String agentKey;
+
+    /**
+     * cp名称
+     */
+    @ApiModelProperty(value = "cp名称")
+    private String cpName;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private Long gameId;
+
+    /**
+     * 游戏名称
+     */
+    @ApiModelProperty(value = "游戏名称")
+    private String gameName;
+
+    /**
+     * 游戏应用类型
+     */
+    @ApiModelProperty(value = "游戏应用类型")
+    private Long classify;
+
+    /**
+     * 广告状态
+     */
+    @ApiModelProperty(value = "广告状态")
+    private String status;
+
+    /**
+     * 创意预览
+     */
+    @ApiModelProperty(value = "创意预览")
+    private String creativePreview;
+
+    /**
+     * 推广目标
+     */
+    @ApiModelProperty(value = "推广目标")
+    private String landingType;
+
+    /**
+     * 出价方式
+     */
+    @ApiModelProperty(value = "出价方式")
+    private String pricing;
+
+    /**
+     * 当前出价
+     */
+    @ApiModelProperty(value = "当前出价")
+    private String cpaBid;
+
+    /**
+     * 深度转化ROI系数
+     */
+    @ApiModelProperty(value = "深度转化ROI系数")
+    private String roiGoal;
+
+    /**
+     * 日预算
+     */
+    @ApiModelProperty(value = "日预算")
+    private String budget;
+
+    /**
+     * 投放时间
+     */
+    @ApiModelProperty(value = "投放时间")
+    private String scheduleTime;
+
+    /**
+     * 今日消耗
+     */
+    @ApiModelProperty(value = "今日消耗")
+    private BigDecimal todayCost;
+
+    /**
+     * 广告总消耗
+     */
+    @ApiModelProperty(value = "广告总消耗")
+    private BigDecimal promotionTotalCost;
+
+    /**
+     * 曝光量
+     */
+    @ApiModelProperty(value = "曝光量")
+    private Long showCount;
+
+    /**
+     * 千次曝光成本
+     */
+    @ApiModelProperty(value = "千次曝光成本")
+    private BigDecimal thousandDisplayPrice;
+
+    /**
+     * 点击量
+     */
+    @ApiModelProperty(value = "点击量")
+    private Long clickCount;
+
+    /**
+     * 点击均价
+     */
+    @ApiModelProperty(value = "点击均价")
+    private BigDecimal avgClickCost;
+
+    /**
+     * 点击率
+     */
+    @ApiModelProperty(value = "点击率")
+    private BigDecimal ctr;
+
+    /**
+     * 转化目标
+     */
+    @ApiModelProperty(value = "转化目标")
+    private String convertTarget;
+
+    /**
+     * 转化目标量
+     */
+    @ApiModelProperty(value = "转化目标量")
+    private Long convertCount;
+
+    /**
+     * 转化目标成本
+     */
+    @ApiModelProperty(value = "转化目标成本")
+    private BigDecimal convertCost;
+
+    /**
+     * 目标转化率
+     */
+    @ApiModelProperty(value = "目标转化率")
+    private BigDecimal convertRate;
+
+    /**
+     * 新增用户数
+     */
+    @ApiModelProperty(value = "新增用户数")
+    private Long regNum;
+
+    /**
+     * 广告总注册人数
+     */
+    @ApiModelProperty(value = "广告总注册人数")
+    private Long regTotalNum;
+
+    /**
+     * 总创角人数
+     */
+    @ApiModelProperty(value = "总创角人数")
+    private Long roleTotalNum;
+
+    /**
+     * 首日创角人数
+     */
+    @ApiModelProperty(value = "首日创角人数")
+    private Long firstRoleNum;
+
+    /**
+     * 新用户累计创角人数
+     */
+    @ApiModelProperty(value = "新用户累计创角人数")
+    private Long newUserTotalRoleNum;
+
+    /**
+     * 注册成本
+     */
+    @ApiModelProperty(value = "注册成本")
+    private BigDecimal regCost;
+
+    /**
+     * 总注册成本
+     */
+    @ApiModelProperty(value = "总注册成本")
+    private BigDecimal regTotalCost;
+
+    /**
+     * 首日创角成本
+     */
+    @ApiModelProperty(value = "首日创角成本")
+    private BigDecimal firstRoleCost;
+
+    /**
+     * 新用户创角成本
+     */
+    @ApiModelProperty(value = "新用户创角成本")
+    private BigDecimal newUserTotalRoleCost;
+
+    /**
+     * 总创角成本
+     */
+    @ApiModelProperty(value = "总创角成本")
+    private BigDecimal roleTotalCost;
+
+    /**
+     * 首日创角率
+     */
+    @ApiModelProperty(value = "首日创角率")
+    private BigDecimal firstRoleRate;
+
+    /**
+     * 新用户创角率
+     */
+    @ApiModelProperty(value = "新用户创角率")
+    private BigDecimal newUserTotalRoleRate;
+
+    /**
+     * 总创角率
+     */
+    @ApiModelProperty(value = "总创角率")
+    private BigDecimal roleTotalRate;
+
+    /**
+     * 新增付费次数
+     */
+    @ApiModelProperty(value = "新增付费次数")
+    private Long firstNewUserAmountCount;
+
+    /**
+     * 新增付费人数
+     */
+    @ApiModelProperty(value = "新增付费人数")
+    private Long firstNewUserAmountNum;
+
+    /**
+     * 新增付费金额
+     */
+    @ApiModelProperty(value = "新增付费金额")
+    private BigDecimal firstNewUserAmount;
+
+    /**
+     * 至今付费次数
+     */
+    @ApiModelProperty(value = "至今付费次数")
+    private Long newUserTotalAmountCount;
+
+    /**
+     * 至今付费人数
+     */
+    @ApiModelProperty(value = "至今付费人数")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 至今付费金额
+     */
+    @ApiModelProperty(value = "至今付费金额")
+    private BigDecimal newUserTotalAmount;
+
+    /**
+     * 总充值次数
+     */
+    @ApiModelProperty(value = "总充值次数")
+    private Long totalAmountCount;
+
+    /**
+     * 总充值人数
+     */
+    @ApiModelProperty(value = "总充值人数")
+    private Long totalAmountNum;
+
+    /**
+     * 总充值金额
+     */
+    @ApiModelProperty(value = "总充值金额")
+    private BigDecimal totalAmount;
+
+    /**
+     * 首日ROI
+     */
+    @ApiModelProperty(value = "首日ROI")
+    private BigDecimal firstRoi;
+
+    /**
+     * 新用户24小时充值金额
+     */
+    @ApiModelProperty(value = "新用户24小时充值金额")
+    private BigDecimal twentyFourHoursAmount;
+
+    /**
+     * 新用户24小时ROI
+     */
+    @ApiModelProperty(value = "新用户24小时ROI")
+    private BigDecimal twentyFourHoursRoi;
+
+    /**
+     * 总ROI
+     */
+    @ApiModelProperty(value = "总ROI")
+    private BigDecimal totalRoi;
+
+    /**
+     * 广告总ROI
+     */
+    @ApiModelProperty(value = "广告总ROI")
+    private BigDecimal promotionTotalRoi;
+
+    /**
+     * 新增付费成本
+     */
+    @ApiModelProperty(value = "新增付费成本")
+    private BigDecimal firstNewUserRechargeCost;
+
+    /**
+     * 至今付费成本
+     */
+    @ApiModelProperty(value = "至今付费成本")
+    private BigDecimal newUserTotalRechargeCost;
+
+    /**
+     * 广告总付费成本
+     */
+    @ApiModelProperty(value = "广告总付费成本")
+    private BigDecimal totalRechargeCost;
+
+    /**
+     * 新增付费次数成本
+     */
+    @ApiModelProperty(value = "新增付费次数成本 = 消耗 / 新增付费次数")
+    private BigDecimal firstNewUserAmountCountCost;
+
+    /**
+     * 至今付费次数成本
+     */
+    @ApiModelProperty(value = "至今付费次数成本 = 消耗 / 至今付费数")
+    private BigDecimal newUserTotalAmountCountCost;
+
+    /**
+     * 总充值次数成本
+     */
+    @ApiModelProperty(value = "总充值次数成本 = 消耗 / 总充值次数")
+    private BigDecimal totalAmountCountCost;
+
+    /**
+     * 新增付费ARPPU
+     */
+    @ApiModelProperty(value = "新增付费ARPPU")
+    private BigDecimal firstNewUserArppu;
+
+    /**
+     * 至今付费ARPPU
+     */
+    @ApiModelProperty(value = "至今付费ARPPU")
+    private BigDecimal newUserTotalAmountArppu;
+
+    /**
+     * 新增付费100+用户数
+     */
+    @ApiModelProperty(value = "新增付费100+用户数")
+    private Long firstNewUserHundredUserNum;
+
+    /**
+     * 新增付费200+用户数
+     */
+    @ApiModelProperty(value = "新增付费200+用户数")
+    private Long firstNewUserTwoHundredUserNum;
+
+    /**
+     * 至今付费100+用户数
+     */
+    @ApiModelProperty(value = "至今付费100+用户数")
+    private Long newUserTotalHundredUserNum;
+
+    /**
+     * 首充50~100元用户数
+     */
+    @ApiModelProperty(value = "首充50~100元用户数")
+    private Long firstRechargeFiftyHundredNum;
+
+    /**
+     * 新增付费100+用户付费成本
+     */
+    @ApiModelProperty(value = "新增付费100+用户付费成本")
+    private BigDecimal firstNewUserHundredUserCost;
+
+    /**
+     * 新增付费200+用户付费成本
+     */
+    @ApiModelProperty(value = "新增付费200+用户付费成本")
+    private BigDecimal firstNewUserTwoHundredUserCost;
+
+    /**
+     * 至今付费100+用户付费成本
+     */
+    @ApiModelProperty(value = "至今付费100+用户付费成本")
+    private BigDecimal newUserTotalHundredUserCost;
+
+    /**
+     * 首充50~100元占比
+     */
+    @ApiModelProperty(value = "首充50~100元占比")
+    private BigDecimal firstRechargeFiftyHundredRate;
+
+    /**
+     * 首日IOS付费次数
+     */
+    @ApiModelProperty(value = "首日IOS付费次数")
+    private Long firstIosAmountCount;
+
+    /**
+     * 首日IOS付费人数
+     */
+    @ApiModelProperty(value = "首日IOS付费人数")
+    private Long firstIosAmountNum;
+
+    /**
+     * 首日IOS付费金额
+     */
+    @ApiModelProperty(value = "首日IOS付费金额")
+    private BigDecimal firstIosAmount;
+
+    /**
+     * 首日Android付费次数
+     */
+    @ApiModelProperty(value = "首日Android付费次数")
+    private Long firstAndroidAmountCount;
+
+    /**
+     * 首日Android付费人数
+     */
+    @ApiModelProperty(value = "首日Android付费人数")
+    private Long firstAndroidAmountNum;
+
+    /**
+     * 首日Android付费金额
+     */
+    @ApiModelProperty(value = "首日Android付费金额")
+    private BigDecimal firstAndroidAmount;
+
+    /**
+     * 首日IOS付费人数占比
+     */
+    @ApiModelProperty(value = "首日IOS付费人数占比")
+    private BigDecimal firstIosAmountNumRate;
+
+    /**
+     * 首日IOS付费金额占比
+     */
+    @ApiModelProperty(value = "首日IOS付费金额占比")
+    private BigDecimal firstIosAmountRate;
+
+    /**
+     * 首日IOS付费ROI
+     */
+    @ApiModelProperty(value = "首日IOS付费ROI")
+    private BigDecimal firstIosAmountRoi;
+
+    /**
+     * 首日Android付费人数占比
+     */
+    @ApiModelProperty(value = "首日Android付费人数占比")
+    private BigDecimal firstAndroidAmountNumRate;
+
+    /**
+     * 首日Android付费金额占比
+     */
+    @ApiModelProperty(value = "首日Android付费金额占比")
+    private BigDecimal firstAndroidAmountRate;
+
+    /**
+     * 首日Android付费ROI
+     */
+    @ApiModelProperty(value = "首日Android付费ROI")
+    private BigDecimal firstAndroidAmountRoi;
+
+    /**
+     * 首日付费率
+     */
+    @ApiModelProperty(value = "首日付费率")
+    private BigDecimal firstAmountRate;
+
+    /**
+     * 新增客单价
+     */
+    @ApiModelProperty(value = "新增客单价")
+    private BigDecimal firstNewUserAvgPrice;
+
+    /**
+     * 至今客单价
+     */
+    @ApiModelProperty(value = "至今客单价")
+    private BigDecimal newUserTotalAvgPrice;
+
+    /**
+     * 计划ID,消耗时间的第1天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第1天新用户充值(不显示)")
+    private BigDecimal d1;
+
+    /**
+     * 计划ID,消耗时间的第2天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第2天新用户充值(不显示)")
+    private BigDecimal d2;
+
+    /**
+     * 计划ID,消耗时间的第3天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第3天新用户充值(不显示)")
+    private BigDecimal d3;
+
+    /**
+     * 计划ID,消耗时间的第4天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第4天新用户充值(不显示)")
+    private BigDecimal d4;
+
+    /**
+     * 计划ID,消耗时间的第5天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第5天新用户充值(不显示)")
+    private BigDecimal d5;
+
+    /**
+     * 计划ID,消耗时间的第6天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第6天新用户充值(不显示)")
+    private BigDecimal d6;
+
+    /**
+     * 计划ID,消耗时间的第7天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第7天新用户充值(不显示)")
+    private BigDecimal d7;
+
+    /**
+     * 计划ID,消耗时间的第8天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第8天新用户充值(不显示)")
+    private BigDecimal d8;
+
+    /**
+     * 计划ID,消耗时间的第9天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第9天新用户充值(不显示)")
+    private BigDecimal d9;
+
+    /**
+     * 计划ID,消耗时间的第10天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第10天新用户充值(不显示)")
+    private BigDecimal d10;
+
+    /**
+     * 计划ID,消耗时间的第11天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第11天新用户充值(不显示)")
+    private BigDecimal d11;
+
+    /**
+     * 计划ID,消耗时间的第12天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第12天新用户充值(不显示)")
+    private BigDecimal d12;
+
+    /**
+     * 计划ID,消耗时间的第13天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第13天新用户充值(不显示)")
+    private BigDecimal d13;
+
+    /**
+     * 计划ID,消耗时间的第14天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第14天新用户充值(不显示)")
+    private BigDecimal d14;
+
+    /**
+     * 计划ID,消耗时间的第15天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第15天新用户充值(不显示)")
+    private BigDecimal d15;
+
+    /**
+     * 计划ID,消耗时间的第16天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第16天新用户充值(不显示)")
+    private BigDecimal d16;
+
+    /**
+     * 计划ID,消耗时间的第17天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第17天新用户充值(不显示)")
+    private BigDecimal d17;
+
+    /**
+     * 计划ID,消耗时间的第18天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第18天新用户充值(不显示)")
+    private BigDecimal d18;
+
+    /**
+     * 计划ID,消耗时间的第19天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第19天新用户充值(不显示)")
+    private BigDecimal d19;
+
+    /**
+     * 计划ID,消耗时间的第20天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第20天新用户充值(不显示)")
+    private BigDecimal d20;
+
+    /**
+     * 计划ID,消耗时间的第21天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第21天新用户充值(不显示)")
+    private BigDecimal d21;
+
+    /**
+     * 计划ID,消耗时间的第22天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第22天新用户充值(不显示)")
+    private BigDecimal d22;
+
+    /**
+     * 计划ID,消耗时间的第23天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第23天新用户充值(不显示)")
+    private BigDecimal d23;
+
+    /**
+     * 计划ID,消耗时间的第24天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第24天新用户充值(不显示)")
+    private BigDecimal d24;
+
+    /**
+     * 计划ID,消耗时间的第25天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第25天新用户充值(不显示)")
+    private BigDecimal d25;
+
+    /**
+     * 计划ID,消耗时间的第26天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第26天新用户充值(不显示)")
+    private BigDecimal d26;
+
+    /**
+     * 计划ID,消耗时间的第27天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第27天新用户充值(不显示)")
+    private BigDecimal d27;
+
+    /**
+     * 计划ID,消耗时间的第28天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第28天新用户充值(不显示)")
+    private BigDecimal d28;
+
+    /**
+     * 计划ID,消耗时间的第29天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第29天新用户充值(不显示)")
+    private BigDecimal d29;
+
+    /**
+     * 计划ID,消耗时间的第30天新用户充值(不显示)
+     */
+    @ApiModelProperty(value = "计划ID,消耗时间的第30天新用户充值(不显示)")
+    private BigDecimal d30;
+
+    /**
+     * 付费趋势第1天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第1天总:金额/人数/增/回/倍(不显示)")
+    private String da1;
+
+    /**
+     * 付费趋势第2天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第2天总:金额/人数/增/回/倍(不显示)")
+    private String da2;
+
+    /**
+     * 付费趋势第3天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第3天总:金额/人数/增/回/倍(不显示)")
+    private String da3;
+
+    /**
+     * 付费趋势第4天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第4天总:金额/人数/增/回/倍(不显示)")
+    private String da4;
+
+    /**
+     * 付费趋势第5天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第5天总:金额/人数/增/回/倍(不显示)")
+    private String da5;
+
+    /**
+     * 付费趋势第6天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第6天总:金额/人数/增/回/倍(不显示)")
+    private String da6;
+
+    /**
+     * 付费趋势第7天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第7天总:金额/人数/增/回/倍(不显示)")
+    private String da7;
+
+    /**
+     * 付费趋势第8天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第8天总:金额/人数/增/回/倍(不显示)")
+    private String da8;
+
+    /**
+     * 付费趋势第9天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第9天总:金额/人数/增/回/倍(不显示)")
+    private String da9;
+
+    /**
+     * 付费趋势第10天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第10天总:金额/人数/增/回/倍(不显示)")
+    private String da10;
+
+    /**
+     * 付费趋势第11天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第11天总:金额/人数/增/回/倍(不显示)")
+    private String da11;
+
+    /**
+     * 付费趋势第12天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第12天总:金额/人数/增/回/倍(不显示)")
+    private String da12;
+
+    /**
+     * 付费趋势第13天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第13天总:金额/人数/增/回/倍(不显示)")
+    private String da13;
+
+    /**
+     * 付费趋势第14天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第14天总:金额/人数/增/回/倍(不显示)")
+    private String da14;
+
+    /**
+     * 付费趋势第15天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第15天总:金额/人数/增/回/倍(不显示)")
+    private String da15;
+
+    /**
+     * 付费趋势第16天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第16天总:金额/人数/增/回/倍(不显示)")
+    private String da16;
+
+    /**
+     * 付费趋势第17天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第17天总:金额/人数/增/回/倍(不显示)")
+    private String da17;
+
+    /**
+     * 付费趋势第18天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第18天总:金额/人数/增/回/倍(不显示)")
+    private String da18;
+
+    /**
+     * 付费趋势第19天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第19天总:金额/人数/增/回/倍(不显示)")
+    private String da19;
+
+    /**
+     * 付费趋势第20天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第20天总:金额/人数/增/回/倍(不显示)")
+    private String da20;
+
+    /**
+     * 付费趋势第21天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第21天总:金额/人数/增/回/倍(不显示)")
+    private String da21;
+
+    /**
+     * 付费趋势第22天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第22天总:金额/人数/增/回/倍(不显示)")
+    private String da22;
+
+    /**
+     * 付费趋势第23天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第23天总:金额/人数/增/回/倍(不显示)")
+    private String da23;
+
+    /**
+     * 付费趋势第24天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第24天总:金额/人数/增/回/倍(不显示)")
+    private String da24;
+
+    /**
+     * 付费趋势第25天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第25天总:金额/人数/增/回/倍(不显示)")
+    private String da25;
+
+    /**
+     * 付费趋势第26天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第26天总:金额/人数/增/回/倍(不显示)")
+    private String da26;
+
+    /**
+     * 付费趋势第27天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第27天总:金额/人数/增/回/倍(不显示)")
+    private String da27;
+
+    /**
+     * 付费趋势第28天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第28天总:金额/人数/增/回/倍(不显示)")
+    private String da28;
+
+    /**
+     * 付费趋势第29天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第29天总:金额/人数/增/回/倍(不显示)")
+    private String da29;
+
+    /**
+     * 付费趋势第30天总:金额/人数/增/回/倍(不显示)
+     */
+    @ApiModelProperty(value = "付费趋势第30天总:金额/人数/增/回/倍(不显示)")
+    private String da30;
+
+    /**
+     * 次日数据
+     */
+    @ApiModelProperty(value = "次日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d2Trend;
+
+    /**
+     * 3日数据
+     */
+    @ApiModelProperty(value = "3日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d3Trend;
+
+    /**
+     * 7日数据
+     */
+    @ApiModelProperty(value = "7日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d7Trend;
+
+    /**
+     * 15日数据
+     */
+    @ApiModelProperty(value = "15日:ROI/付费/倍数")
+    private PromotionRechargeTrendVO d15Trend;
+
+
+    /**
+     * 注册人数 (应用下载广告数据-激活数)
+     */
+    @ApiModelProperty(value = "注册人数 (应用下载广告数据-激活数)")
+    private Long active;
+
+    /**
+     * 注册成本 (应用下载广告数据-激活成本)
+     */
+    @ApiModelProperty(value = "注册成本 (应用下载广告数据-激活成本)")
+    private BigDecimal activeCost;
+
+    /**
+     * 首日转化数 (转化数据-转化数)
+     */
+    @ApiModelProperty(value = "首日转化数 (转化数据-转化数)")
+    private Long firstConvertCount;
+
+    /**
+     * 首日转化成本 (转化数据-转化成本)
+     */
+    @ApiModelProperty(value = "首日转化成本 (转化数据-转化成本)")
+    private BigDecimal firstConvertCost;
+
+    /**
+     * 首次付费率 (应用下载广告数据-首次付费率)
+     */
+    @ApiModelProperty(value = "首次付费率 (应用下载广告数据-首次付费率)")
+    private BigDecimal firstActivePayRate;
+
+    /**
+     * 首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)
+     */
+    @ApiModelProperty(value = "首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)")
+    private BigDecimal firstAttributionGameInAppLtv1day;
+
+    /**
+     * 首日付费ROI (当日付费ROI)
+     */
+    @ApiModelProperty(value = "首日付费ROI (当日付费ROI)")
+    private BigDecimal firstAttributionGameInAppRoi1day;
+
+    /**
+     * 付费次数 (应用下载广告数据-付费次数)
+     */
+    @ApiModelProperty(value = "付费次数 (应用下载广告数据-付费次数)")
+    private Long gamePayCount;
+
+    /**
+     * 付费次数成本
+     */
+    @ApiModelProperty(value = "付费次数成本 = 消耗 / 付费次数")
+    private BigDecimal gamePayCountCost;
+
+    /**
+     * ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)
+     */
+    @ApiModelProperty(value = "ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)")
+    private BigDecimal ltvDay1;
+
+    /**
+     * 每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))
+     */
+    @ApiModelProperty(value = "每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))")
+    private Long subOrderNum;
+
+    /**
+     * 每日扣单金额  (广告首日总金额 - 当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额(attribution_game_in_app_ltv1day) )
+     */
+    @ApiModelProperty(value = "每日扣单金额  (广告首日总金额 - 当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额(attribution_game_in_app_ltv1day) )")
+    private BigDecimal subOrderAmount;
+    
+}

+ 25 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IAdsPromotionDayService.java

@@ -2,8 +2,12 @@ package com.zanxiang.game.data.serve.service;
 
 import com.zanxiang.game.data.serve.pojo.dto.PromotionDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.PromotionDayTotalDTO;
+import com.zanxiang.game.data.serve.pojo.dto.TencentPromotionDayDTO;
+import com.zanxiang.game.data.serve.pojo.dto.TencentPromotionDayTotalDTO;
 import com.zanxiang.game.data.serve.pojo.vo.PromotionDayTotalVO;
 import com.zanxiang.game.data.serve.pojo.vo.PromotionDayVO;
+import com.zanxiang.game.data.serve.pojo.vo.TencentPromotionDayTotalVO;
+import com.zanxiang.game.data.serve.pojo.vo.TencentPromotionDayVO;
 import com.zanxiang.game.data.serve.utils.Page;
 
 public interface IAdsPromotionDayService {
@@ -29,4 +33,25 @@ public interface IAdsPromotionDayService {
      */
     Page<PromotionDayVO> getPromotionDayListData(PromotionDayDTO dto);
 
+    /**
+     * 广告监控数据(腾讯广告)
+     * @param dto
+     * @return
+     */
+    Page<TencentPromotionDayVO> getTencentPromotionDayData(TencentPromotionDayDTO dto);
+
+    /**
+     * 广告监控数据总计(腾讯广告)
+     * @param dto
+     * @return
+     */
+    TencentPromotionDayTotalVO getTencentPromotionDayTotalData(TencentPromotionDayTotalDTO dto);
+
+    /**
+     * 广告监控每日数据(腾讯广告)
+     * @param dto
+     * @return
+     */
+    Page<TencentPromotionDayVO> getTencentPromotionDayListData(TencentPromotionDayDTO dto);
+
 }

+ 49 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IPitcherDataService.java

@@ -0,0 +1,49 @@
+package com.zanxiang.game.data.serve.service;
+
+import com.zanxiang.game.data.serve.pojo.dto.*;
+import com.zanxiang.game.data.serve.pojo.vo.*;
+import com.zanxiang.game.data.serve.utils.Page;
+
+public interface IPitcherDataService {
+
+    /**
+     * 投手每日数据
+     */
+    Page<PitcherDataDayVO> getPitcherDataDay(PitcherDataDayDTO dto);
+
+    /**
+     * 投手每日数据总计
+     */
+    PitcherDataDayTotalVO getPitcherDataDayTotal(PitcherDataDayTotalDTO dto);
+
+    /**
+     * 投手总数据
+     */
+    Page<PitcherDataTotalVO> getPitcherDataTotal(PitcherDataTotalDTO dto);
+
+    /**
+     * 投手总数据总计
+     */
+    PitcherDataTotalSumVO getPitcherDataTotalSum(PitcherDataTotalSumDTO dto);
+
+    /**
+     * 投手游戏每日数据
+     */
+    Page<PitcherGameDataDayVO> getPitcherGameDataDay(PitcherGameDataDayDTO dto);
+
+    /**
+     * 投手游戏每日数据总计
+     */
+    PitcherGameDataDayTotalVO getPitcherGameDataDayTotal(PitcherGameDataDayTotalDTO dto);
+
+    /**
+     * 投手游戏总数据
+     */
+    Page<PitcherGameDataTotalVO> getPitcherGameDataTotal(PitcherGameDataTotalDTO dto);
+
+    /**
+     * 投手游戏总数据总计
+     */
+    PitcherGameDataTotalSumVO getPitcherGameDataTotalSum(PitcherGameDataTotalSumDTO dto);
+
+}

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

@@ -1313,7 +1313,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                          CONCAT(SUM(CAST(SPLIT_PART(amount_sum , '/', 1) AS DECIMAL(10, 2))),'/',SUM(CAST(SPLIT_PART(amount_sum, '/', 6) AS DECIMAL(10, 2))),'/',SUM(CAST(SPLIT_PART(amount_sum, '/', 2) AS BIGINT))) AS trend_total,
                     round(if(sum(register_num) > 0, sum(first_new_user_amount_num) / sum(register_num), 0), 4) as first_recharge_rate,
                     round(if(sum(register_num) > 0, sum(buy_new_user_total_amount_num) / sum(register_num), 0), 4) as buy_user_recharge_rate,
-                    round(if(sum(register_num) > 0, sum(first_new_user_amount_num) / sum(amount_num), 0), 4) as new_user_recharge_rate,
+                    round(if(sum(amount_num) > 0, sum(first_new_user_amount_num) / sum(amount_num), 0), 4) as new_user_recharge_rate,
                     round(if(sum(first_new_user_amount_count) > 0, sum(first_new_user_amount) / sum(first_new_user_amount_count), 0), 4) as avg_first_user_recharge,
                     round(if(sum(buy_new_user_total_amount_count) > 0, sum(buy_new_user_total_amount) / sum(buy_new_user_total_amount_count), 0), 4) as avg_buy_user_recharge,
                     round(if(sum(amount_count) > 0, sum(amount) / sum(amount_count), 0), 4) as avg_show_user_recharge,

Разница между файлами не показана из-за своего большого размера
+ 108 - 948
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java


+ 255 - 19
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameServerServiceImpl.java

@@ -20,13 +20,17 @@ import org.nutz.dao.sql.Criteria;
 import org.nutz.dao.sql.Sql;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import reactor.util.function.Tuple2;
 import reactor.util.function.Tuples;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author tianhua
@@ -39,7 +43,7 @@ public class GameServerServiceImpl implements IGameServerService {
 
     //存储映射的List
     private static final List<Tuple2<Field,Field>> dayNFieldMapList;
-    //private static final List<Tuple2<Field,Field>> dayNTotalFieldMapList;
+    private static final List<Tuple2<Field,Field>> dayNTotalFieldMapList;
 
     static {
         //解析游戏区服的dayN映射
@@ -75,8 +79,41 @@ public class GameServerServiceImpl implements IGameServerService {
                 }
             }
         }
-    }
 
+        //游戏区服总计dayN映射
+        Map<String, Field> fieldTotalMap = new HashMap<>();
+        List<Field> dayNTotalFieldList = new ArrayList<>();
+        Class<?> tempTotalClazz = GameServerDayTotalVO.class;
+        while (tempTotalClazz != null) {
+            //得到所有的field
+            Field[] fields = tempTotalClazz.getDeclaredFields();
+            for (Field field : fields) {
+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
+                    continue;
+                }
+                //map里面存储了所有的field
+                fieldTotalMap.put(field.getName(), field);
+                if (field.getType() == GameServerTrendVO.class) {
+                    //list里面只存储了 Trend 相关的field
+                    dayNTotalFieldList.add(field);
+                }
+            }
+            tempTotalClazz = tempTotalClazz.getSuperclass();
+        }
+        if (dayNTotalFieldList.isEmpty()) {
+            dayNTotalFieldMapList = Collections.emptyList();
+        } else {
+            dayNTotalFieldMapList = new ArrayList<>(dayNTotalFieldList.size());
+            for (Field dayNTotalField : dayNTotalFieldList) {
+                dayNTotalField.setAccessible(true);
+                Field sourceField = fieldTotalMap.get(dayNTotalField.getName().replace("Trend", ""));
+                sourceField.setAccessible(true);
+                if (sourceField != null) {
+                    dayNTotalFieldMapList.add(Tuples.of(sourceField, dayNTotalField));
+                }
+            }
+        }
+    }
 
     @Autowired
     private Dao dao;
@@ -90,19 +127,7 @@ public class GameServerServiceImpl implements IGameServerService {
     @Override
     public Page<GameServerDayVO> getGameServerDataDay(GameServerDayDTO dto) {
 
-        //不传递时间,默认查询当天数据
-        if (dto.getBeginDate() == null || dto.getEndDate() == null) {
-            dto.setBeginDate(LocalDate.now());
-            dto.setEndDate(LocalDate.now());
-        }
-        //默认排序字段 开服时间 降序
-        if (StringUtils.isBlank(dto.getSortFiled())) {
-            dto.setSortFiled("dt");
-        }
-        if (StringUtils.isBlank(dto.getSortType())) {
-            dto.setSortType(OrderByEnum.DESC.getOrderType());
-        }
-        //创建查询条件、
+        //创建查询条件
         Criteria cri = Cnd.cri();
         if (dto.getGameId() != null) {
             //拼接游戏ID查询条件
@@ -120,9 +145,21 @@ public class GameServerServiceImpl implements IGameServerService {
             //拼接开服时间查询条件
             cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
         }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接sdk来源
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
         //添加排序条件
-        //拼接排序条件
-        cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        //拼接排序条件,如果没有排序条件给默认值
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isBlank(dto.getSortFiled())) {
+            cri.getOrderBy().orderBy("dt", dto.getSortType());
+            cri.getOrderBy().orderBy("server_id", dto.getSortType());
+        } else {
+            cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        }
         //创建sql语句查询数据
         Sql sql = Sqls.create(gameServerDaySql() + cri);
         //设置自定义回传对象
@@ -135,8 +172,13 @@ public class GameServerServiceImpl implements IGameServerService {
         dao.execute(sql);
         //设置总记录数
         pager.setRecordCount(dao.count(AdsGameServerDay.class, cri));
+        List<GameServerDayVO> tempList = sql.getList(GameServerDayVO.class);
+        List<GameServerDayVO> list = tempList.stream().map(vo -> {
+                formatDayN(vo);
+                return vo;
+        }).collect(Collectors.toList());
         //返回结果
-        return new Page<>(sql.getList(GameServerDayVO.class), pager);
+        return new Page<>(list, pager);
     }
 
     /**
@@ -147,7 +189,179 @@ public class GameServerServiceImpl implements IGameServerService {
      */
     @Override
     public GameServerDayTotalVO getGameServerDataDayTotal(GameServerDayTotalDTO dto) {
-        return null;
+        //不传递时间,默认查询当天数据
+        if (dto.getBeginDate() == null || dto.getEndDate() == null) {
+            dto.setBeginDate(LocalDate.now());
+            dto.setEndDate(LocalDate.now());
+        }
+        //创建查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getGameId() != null) {
+            //拼接游戏ID查询条件
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (dto.getServerId() != null) {
+            //拼接区服ID查询条件
+            cri.where().andEquals("server_id", dto.getServerId());
+        }
+        if (StringUtils.isNotBlank(dto.getServerName())) {
+            //拼接区服名称查询条件
+            cri.where().andLike("server_name", dto.getServerName());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //拼接开服时间查询条件
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接sdk来源
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //创建sql语句查询数据
+        Sql sql = Sqls.create(gameServerDayTotalSql() + cri);
+        //设置自定义回传对象
+        sql.setCallback(Sqls.callback.entity());
+        sql.setEntity(dao.getEntity(GameServerDayTotalVO.class));
+        //执行sql
+        dao.execute(sql);
+        //得到查询的结果
+        GameServerDayTotalVO vo = sql.getObject(GameServerDayTotalVO.class);
+        if (StringUtils.isNotBlank(vo.getDa1())) {
+            formatTotalDayN(vo);
+        }
+        //返回结果
+        return vo;
+    }
+
+    /**
+     * 将vo中的原始String数据修改为一个对象
+     * @param vo 展示给前端的游戏区服数据
+     */
+    private void formatDayN(GameServerDayVO vo) {
+        if (CollectionUtils.isEmpty(dayNFieldMapList)) {
+            return;
+        }
+        dayNFieldMapList.forEach(dayNFieldMap -> {
+            try {
+                String[] temps = ((String) dayNFieldMap.getT1().get(vo)).split("/");
+                dayNFieldMap.getT2().set(vo, GameServerTrendVO.builder()
+                        .regNum(Long.parseLong(temps[0]))
+                        .roleNum(Long.parseLong(temps[1]))
+                        .activeNum(Long.parseLong(temps[2]))
+                        .amountNum(Long.parseLong(temps[3]))
+                        .amount(new BigDecimal(temps[4]))
+                        .rollServerNum(Long.parseLong(temps[5]))
+                        .rollServerAmountNum(Long.parseLong(temps[6]))
+                        .rollServerAmount(new BigDecimal(temps[7]))
+                        .rollServerAmountRate(new BigDecimal(temps[8]))
+                        .build()
+                );
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+
+        });
+    }
+
+    /**
+     * 将vo中的原始String数据修改为一个对象
+     * @param vo 展示给前端的游戏区服数据总计
+     */
+    private void formatTotalDayN(GameServerDayTotalVO vo) {
+        if (CollectionUtils.isEmpty(dayNTotalFieldMapList)) {
+            return;
+        }
+        dayNTotalFieldMapList.forEach(dayNTotalFieldMap -> {
+            try {
+                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/");
+                //付费金额
+                BigDecimal amount = new BigDecimal(temps[4]);
+                //滚服付费金额
+                BigDecimal rollServerAmount = new BigDecimal(temps[7]);
+                //设置trend对象
+                dayNTotalFieldMap.getT2().set(vo, GameServerTrendVO.builder()
+                        .regNum(Long.parseLong(temps[0]))
+                        .roleNum(Long.parseLong(temps[1]))
+                        .activeNum(Long.parseLong(temps[2]))
+                        .amountNum(Long.parseLong(temps[3]))
+                        .amount(amount)
+                        .rollServerNum(Long.parseLong(temps[5]))
+                        .rollServerAmountNum(Long.parseLong(temps[6]))
+                        .rollServerAmount(rollServerAmount)
+                        .rollServerAmountRate(amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                rollServerAmount.divide(amount, 4, RoundingMode.HALF_UP))
+                        .build()
+                );
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+
+        });
+    }
+
+    /**
+     * 计算总计一栏的daN数据
+     * @return String
+     */
+    private String trendDay() {
+        StringBuilder daySql = new StringBuilder(StringUtils.EMPTY);
+        //拼接da1-da30 sql
+        for (int i = 1; i < 31; i++) {
+            daySql.append("""
+                    CONCAT(
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 1) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 2) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 3) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 4) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 5) AS DECIMAL(10,2))), '/',
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 6) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 7) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(da%s, '/', 8) AS DECIMAL(10,2)))
+                    ) as da%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i));
+        }
+        //拼接m2-m11 sql
+        for (int i = 2; i < 12; i++) {
+            daySql.append("""
+                    CONCAT(
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 1) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 2) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 3) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 4) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 5) AS DECIMAL(10,2))), '/',
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 6) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 7) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(m%s, '/', 8) AS DECIMAL(10,2)))
+                    ) as m%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i));
+        }
+        //拼接y1
+        daySql.append("""
+                    CONCAT(
+                    	SUM(CAST (SPLIT_PART(y1, '/', 1) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(y1, '/', 2) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(y1, '/', 3) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(y1, '/', 4) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(y1, '/', 5) AS DECIMAL(10,2))), '/',
+                    	SUM(CAST (SPLIT_PART(y1, '/', 6) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(y1, '/', 7) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(y1, '/', 8) AS DECIMAL(10,2)))
+                    ) as y1 ,
+                    """);
+        //拼接total
+        daySql.append("""
+                    CONCAT(
+                    	SUM(CAST (SPLIT_PART(total, '/', 1) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(total, '/', 2) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(total, '/', 3) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(total, '/', 4) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(total, '/', 5) AS DECIMAL(10,2))), '/',
+                    	SUM(CAST (SPLIT_PART(total, '/', 6) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(total, '/', 7) AS BIGINT(20))), '/',
+                    	SUM(CAST (SPLIT_PART(total, '/', 8) AS DECIMAL(10,2)))
+                    ) as total
+                    """);
+
+        return daySql.toString();
     }
 
     /**
@@ -219,5 +433,27 @@ public class GameServerServiceImpl implements IGameServerService {
                 """;
     }
 
+    /**
+     * 游戏区服数据总计SQL
+     * @return String
+     */
+    private String gameServerDayTotalSql() {
+        return """
+                SELECT
+                    IFNULL(SUM(out_total_num), 0) as out_total_num,
+                    IFNULL(SUM(out_total_amount_num), 0) as out_total_amount_num,
+                    IFNULL(SUM(out_total_amount), 0) as out_total_amount,
+                    ROUND(IF(SUM(total_amount) > 0, SUM(out_total_amount) / SUM(total_amount), 0), 4) as out_total_rate,
+                    IFNULL(SUM(total_role_num), 0) as total_role_num,
+                    IFNULL(SUM(total_reg_num), 0) as total_reg_num,
+                    IFNULL(SUM(total_amount_num), 0) as total_amount_num,
+                    IFNULL(SUM(total_amount), 0) as total_amount,
+                """ + trendDay() +
+                """
+                FROM
+                    game_ads.ads_game_server_day
+                """;
+    }
+
 
 }

+ 2284 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java

@@ -0,0 +1,2284 @@
+package com.zanxiang.game.data.serve.service.impl;
+
+import com.google.common.base.CaseFormat;
+import com.google.gson.Gson;
+import com.zanxiang.game.data.serve.pojo.dto.*;
+import com.zanxiang.game.data.serve.pojo.entity.AdsGamePitcherDay;
+import com.zanxiang.game.data.serve.pojo.entity.AdsPitcherDay;
+import com.zanxiang.game.data.serve.pojo.entity.AdsPitcherGameDayn;
+import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
+import com.zanxiang.game.data.serve.pojo.vo.*;
+import com.zanxiang.game.data.serve.service.IPitcherDataService;
+import com.zanxiang.game.data.serve.utils.Page;
+import com.zanxiang.module.util.DateUtil;
+import com.zanxiang.module.util.exception.BaseException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.common.utils.CollectionUtils;
+import org.nutz.dao.Cnd;
+import org.nutz.dao.Dao;
+import org.nutz.dao.Sqls;
+import org.nutz.dao.pager.Pager;
+import org.nutz.dao.sql.Criteria;
+import org.nutz.dao.sql.Sql;
+import org.nutz.dao.util.Daos;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.BeanWrapperImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
+import reactor.util.function.Tuples;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author tianhua
+ * @time 2023/8/15
+ * @Description 投手数据接口逻辑处理
+ **/
+@Service
+@Slf4j
+public class PitcherDataServiceImpl implements IPitcherDataService {
+    //存储PitcherGameDataDayVO的映射
+    private static final List<Tuple2<Field, Field>> pitcherGameDayNFieldMapList;
+    //存储PitcherGameDataDayTotalVO的映射
+    private static final List<Tuple2<Field, Field>> pitcherGameDayNTotalFieldMapList;
+    //存储PitcherDataDayVO的映射
+    private static final List<Tuple2<Field, Field>> pitcherDayNFieldMapList;
+    //存储PitcherDataDayTotalVO的映射
+    private static final List<Tuple2<Field, Field>> pitcherDayNTotalFieldMapList;
+    
+    //解析投手游戏每日数据及总计一栏相关的映射
+    static {
+        //解析PitcherGameDataDayVO的映射
+        Map<String, Field> fieldMap = new HashMap<>();
+        List<Field> dayNFieldList = new ArrayList<>();
+        Class<?> tempClazz = PitcherGameDataDayVO.class;
+        while (tempClazz != null) {
+            Field[] fields = tempClazz.getDeclaredFields();
+            for (Field field : fields) {
+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
+                    //属性前面的修饰符为static或final不加入map中
+                    continue;
+                }
+                fieldMap.put(field.getName(), field);
+                if (field.getType() == RechargeTrendVO.class) {
+                    //存储所有类型为RechargeTrendVO属性的映射 以Trend为结尾的
+                    dayNFieldList.add(field);
+                }
+            }
+            tempClazz = tempClazz.getSuperclass();
+        }
+        if (dayNFieldList.isEmpty()) {
+            pitcherGameDayNFieldMapList = Collections.emptyList();
+        } else {
+            pitcherGameDayNFieldMapList = new ArrayList<>(dayNFieldList.size());
+            for (Field field : dayNFieldList) {
+                field.setAccessible(true);
+                Field sourceField = fieldMap.get(field.getName().replace("Trend", ""));
+                sourceField.setAccessible(true);
+                if (sourceField != null) {
+                    pitcherGameDayNFieldMapList.add(Tuples.of(sourceField, field));
+                }
+            }
+        }
+
+        //解析PitcherGameDataDayTotalVO映射
+        Map<String, Field> fieldTotalMap = new HashMap<>();
+        List<Field> dayNTotalFieldList = new ArrayList<>();
+        Class<?> tempTotalClazz = PitcherGameDataDayTotalVO.class;
+        while (tempTotalClazz != null) {
+            Field[] fields = tempTotalClazz.getDeclaredFields();
+            for (Field field : fields) {
+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
+                    //属性为static或final的不加入map
+                    continue;
+                }
+                fieldTotalMap.put(field.getName(), field);
+                if (field.getType() == RechargeTrendVO.class) {
+                    //只存储属性值类型为RechargeTrendVO的属性
+                    dayNTotalFieldList.add(field);
+                }
+            }
+            tempTotalClazz = tempTotalClazz.getSuperclass();
+        }
+        if (dayNTotalFieldList.isEmpty()) {
+            pitcherGameDayNTotalFieldMapList = Collections.emptyList();
+        } else {
+            pitcherGameDayNTotalFieldMapList = new ArrayList<>(dayNTotalFieldList.size());
+            for (Field field : dayNTotalFieldList) {
+                field.setAccessible(true);
+                Field sourceField = fieldTotalMap.get(field.getName().replace("Trend", ""));
+                sourceField.setAccessible(true);
+                if (sourceField != null) {
+                    pitcherGameDayNTotalFieldMapList.add(Tuples.of(sourceField, field));
+                }
+            }
+        }
+
+    }
+    //解析投手每日数据及总计一栏相关的的映射
+    static {
+        //解析PitcherDataDayVO映射
+        Map<String, Field> pitcherDayFieldMap = new HashMap<>();
+        List<Field> pitcherDayDayNList = new ArrayList<>();
+        Class<?> pitcherDayClazz = PitcherDataDayVO.class;
+        while (pitcherDayClazz != null) {
+            Field[] fields = pitcherDayClazz.getDeclaredFields();
+            for (Field field : fields) {
+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
+                    continue;
+                }
+                pitcherDayFieldMap.put(field.getName(), field);
+                if (field.getType() == RechargeTrendVO.class) {
+                    pitcherDayDayNList.add(field);
+                }
+            }
+            pitcherDayClazz = pitcherDayClazz.getSuperclass();
+        }
+        if (pitcherDayDayNList.isEmpty()) {
+            pitcherDayNFieldMapList = Collections.emptyList();
+        } else {
+            pitcherDayNFieldMapList = new ArrayList<>(pitcherDayDayNList.size());
+            for (Field field : pitcherDayDayNList) {
+                field.setAccessible(true);
+                Field soureField = pitcherDayFieldMap.get(field.getName().replace("Trend", ""));
+                soureField.setAccessible(true);
+                pitcherDayNFieldMapList.add(Tuples.of(soureField, field));
+            }
+        }
+
+        //解析PitcherDataDayTotalVO映射
+        Map<String, Field> pitcherDayTotalMap = new HashMap<>();
+        List<Field> pitcherDayTotalList = new ArrayList<>();
+        Class<?> pitcherDayTotalClazz = PitcherDataDayTotalVO.class;
+        while (pitcherDayTotalClazz != null) {
+            Field[] fields = pitcherDayTotalClazz.getDeclaredFields();
+            for (Field field : fields) {
+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
+                    continue;
+                }
+                pitcherDayTotalMap.put(field.getName(), field);
+                if (field.getType() == RechargeTrendVO.class) {
+                    pitcherDayTotalList.add(field);
+                }
+            }
+            pitcherDayTotalClazz = pitcherDayTotalClazz.getSuperclass();
+        }
+        if (pitcherDayTotalList.isEmpty()) {
+            pitcherDayNTotalFieldMapList = Collections.emptyList();
+        } else {
+            pitcherDayNTotalFieldMapList = new ArrayList<>(pitcherDayTotalList.size());
+            for (Field field : pitcherDayTotalList) {
+                field.setAccessible(true);
+                Field sourceField = pitcherDayTotalMap.get(field.getName().replace("Trend", ""));
+                sourceField.setAccessible(true);
+                pitcherDayNTotalFieldMapList.add(Tuples.of(sourceField, field));
+            }
+        }
+    }
+
+    @Autowired
+    private Dao dao;
+
+    /**
+     * 投手每日数据
+     * @param dto PitcherDataDayDTO
+     * @return Page<PitcherDataDayVO>
+     */
+    @Override
+    public Page<PitcherDataDayVO> getPitcherDataDay(PitcherDataDayDTO dto) {
+        //不传递时间,默认查询当天
+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) {
+            dto.setBeginDate(LocalDate.now());
+            dto.setEndDate(LocalDate.now());
+        }
+        //创建查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getPitcherId() != null) {
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        //拼接排序条件,如果没有排序条件给默认值
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isBlank(dto.getSortFiled())) {
+            cri.getOrderBy().orderBy("dt", dto.getSortType());
+            cri.getOrderBy().orderBy("cost", dto.getSortType());
+        } else {
+            cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        }
+        //Pager对象
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        //sql语句
+        Sql sql = Sqls.create(pitcherDataDaySql() + cri);
+        //设置回传对象
+        sql.setCallback(Sqls.callback.entities());
+        sql.setEntity(dao.getEntity(PitcherDataDayVO.class));
+        //设置pager
+        sql.setPager(pager);
+        //执行sql
+        dao.execute(sql);
+        //设置总记录数
+        pager.setRecordCount(dao.count(AdsPitcherDay.class, cri));
+        //处理dayN数据
+        List<PitcherDataDayVO> tempList = sql.getList(PitcherDataDayVO.class);
+        List<PitcherDataDayVO> list = tempList.stream().map(vo -> {
+            formatPitcherDataDayDayN(vo);
+            return vo;
+        }).collect(Collectors.toList());
+        //返回结果
+        return new Page<>(list, pager);
+    }
+
+    /**
+     * 投手每日数据总计
+     * @param dto PitcherDataDayTotalDTO
+     * @return PitcherDataDayTotalVO
+     */
+    @Override
+    public PitcherDataDayTotalVO getPitcherDataDayTotal(PitcherDataDayTotalDTO dto) {
+        //不传递时间,默认查询当天
+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) {
+            dto.setBeginDate(LocalDate.now());
+            dto.setEndDate(LocalDate.now());
+        }
+        //创建查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getPitcherId() != null) {
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        //sql语句
+        Sql sql = Sqls.create(pitcherDataDayTotalSql() + cri);
+        //设置回传对象
+        sql.setCallback(Sqls.callback.entity());
+        sql.setEntity(dao.getEntity(PitcherDataDayTotalVO.class));
+        //执行sql
+        dao.execute(sql);
+        PitcherDataDayTotalVO vo = sql.getObject(PitcherDataDayTotalVO.class);
+        if (StringUtils.isNotBlank(vo.getAmountD1())) {
+            //处理dayN数据
+            formatPitcherDataDayTotalDayN(vo);
+        }
+
+        return vo;
+    }
+
+    /**
+     * 投手总数据
+     * @param dto PitcherDataTotalDTO
+     * @return Page<PitcherDataTotalVO>
+     */
+    @Override
+    public Page<PitcherDataTotalVO> getPitcherDataTotal(PitcherDataTotalDTO dto) {
+        return null;
+    }
+
+    /**
+     * 投手总数据总计
+     * @param dto PitcherDataTotalSumDTO
+     * @return PitcherDataTotalSumVO
+     */
+    @Override
+    public PitcherDataTotalSumVO getPitcherDataTotalSum(PitcherDataTotalSumDTO dto) {
+        return null;
+    }
+
+    /**
+     * 投手游戏每日数据
+     * @param dto PitcherGameDataDayDTO
+     * @return Page<PitcherGameDataDayVO>
+     */
+    @Override
+    public Page<PitcherGameDataDayVO> getPitcherGameDataDay(PitcherGameDataDayDTO dto) {
+        //不传递时间,默认查询当天
+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) {
+            dto.setBeginDate(LocalDate.now());
+            dto.setEndDate(LocalDate.now());
+        }
+        //创建查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getPitcherId() != null) {
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        if (StringUtils.isNotBlank(dto.getGameId())) {
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (StringUtils.isNotBlank(dto.getGameCp())) {
+            cri.where().andEquals("game_cp", dto.getGameCp());
+        }
+        if (dto.getGameType() != null) {
+            cri.where().andEquals("game_type", dto.getGameType());
+        }
+        //排序条件
+        //拼接排序条件,如果没有排序条件给默认值
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isBlank(dto.getSortFiled())) {
+            cri.getOrderBy().orderBy("dt", dto.getSortType());
+            cri.getOrderBy().orderBy("cost", dto.getSortType());
+        } else {
+            cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        }
+        //Pager对象
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        //sql语句
+        Sql sql = Sqls.create(pitcherGameDataDaySql() + cri);
+        //设置回传对象
+        sql.setCallback(Sqls.callback.entities());
+        sql.setEntity(dao.getEntity(PitcherGameDataDayVO.class));
+        //设置pager
+        sql.setPager(pager);
+        //执行sql
+        dao.execute(sql);
+        //设置总记录数
+        pager.setRecordCount(dao.count(AdsGamePitcherDay.class, cri));
+        //处理dayN数据
+        List<PitcherGameDataDayVO> tempList = sql.getList(PitcherGameDataDayVO.class);
+        List<PitcherGameDataDayVO> list = tempList.stream().map(vo -> {
+                formatPitcherGameDataDayDayN(vo);
+                return vo;
+        }).collect(Collectors.toList());
+        //返回结果
+        return new Page<>(list, pager);
+    }
+
+    /**
+     * 投手游戏每日数据总计
+     * @param dto PitcherGameDataDayTotalDTO
+     * @return PitcherGameDataDayTotalVO
+     */
+    @Override
+    public PitcherGameDataDayTotalVO getPitcherGameDataDayTotal(PitcherGameDataDayTotalDTO dto) {
+        //不传递时间,默认查询当天
+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) {
+            dto.setBeginDate(LocalDate.now());
+            dto.setEndDate(LocalDate.now());
+        }
+        //创建查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getPitcherId() != null) {
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        if (StringUtils.isNotBlank(dto.getGameId())) {
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (StringUtils.isNotBlank(dto.getGameCp())) {
+            cri.where().andEquals("game_cp", dto.getGameCp());
+        }
+        if (dto.getGameType() != null) {
+            cri.where().andEquals("game_type", dto.getGameType());
+        }
+        //sql语句
+        Sql sql = Sqls.create(pitcherGameDataDayTotalSql() + cri);
+        //设置回传对象
+        sql.setCallback(Sqls.callback.entity());
+        sql.setEntity(dao.getEntity(PitcherGameDataDayTotalVO.class));
+        //执行sql
+        dao.execute(sql);
+        PitcherGameDataDayTotalVO vo = sql.getObject(PitcherGameDataDayTotalVO.class);
+        if (StringUtils.isNotBlank(vo.getAmountD1())) {
+            //处理dayN数据
+            formatPitcherGameDataDayTotalDayN(vo);
+        }
+
+        return vo;
+    }
+
+    /**
+     * 投手游戏总数据
+     * @param dto PitcherGameDataTotalDTO
+     * @return Page<PitcherGameDataTotalVO>
+     */
+    @Override
+    public Page<PitcherGameDataTotalVO> getPitcherGameDataTotal(PitcherGameDataTotalDTO dto) {
+        //如果注册时间参数为空,默认设置查询当天数据
+        if (dto.getBeginDate() == null || dto.getEndDate() == null) {
+            dto.setBeginDate(LocalDate.now());
+            dto.setEndDate(LocalDate.now());
+        }
+        //如果充值时间参数为空,默认设置查询当天数据
+        if (dto.getAmountBeginDate() == null || dto.getAmountEndDate() == null) {
+            dto.setAmountBeginDate(LocalDate.now());
+            dto.setAmountEndDate(LocalDate.now());
+        }
+        //主表查询条件
+        Criteria criA = myCri(dto, "criA", true);
+        //账面相关查询条件 时间条件只和充值时间相关
+        Criteria criB = myCri(dto, "criB", true);
+        //账面人数相关 时间只需要充值时间条件,不需要注册时间条件
+        Criteria criAmount = myCriRecharge(dto, false);
+        //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间
+        Criteria criNewUser = myCriRecharge(dto, true);
+        //创角人数查询条件
+        Criteria criRoleNum = myCriRole(dto);
+        //拼接排序条件
+        Criteria orderByCri = Cnd.cri();
+        //如果没有排序条件给默认值
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isBlank(dto.getSortFiled())) {
+            orderByCri.getOrderBy().orderBy("pitcher_id", dto.getSortType());
+            orderByCri.getOrderBy().orderBy("cost", dto.getSortType());
+        } else {
+            orderByCri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        }
+        //创建sql语句 执行sql
+        Sql sql = Sqls.create(pitcherGameDataTotalSql(criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri);
+        //设置自定义回显对象
+        sql.setCallback(Sqls.callback.entities());
+        sql.setEntity(dao.getEntity(PitcherGameDataTotalVO.class));
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        sql.setPager(pager);
+        //执行sql
+        dao.execute(sql);
+        //得到结果集list
+        List<PitcherGameDataTotalVO> list = sql.getList(PitcherGameDataTotalVO.class);
+        //设置查询总数
+        Sql sqlCount = Sqls.queryEntity("select count(*) from game_ads.ads_game_pitcher_day" + criA);
+        pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
+
+        //获取所有筛选条件内的dayN数据
+        Map<String, Map<String, String>> pitcherGameDataTotalDayNMap = tempDayNData(dto);
+        //根据充值时间修改值
+        List<PitcherGameDataTotalVO> pitcherGameDataTotalVOList = list.stream().map(vo -> {
+            //包含pitcher下所有的游戏的dayn数据
+            Map<String, String> gameIDToDayNData = pitcherGameDataTotalDayNMap.get(vo.getPitcherId().toString());
+            //取到dayN数据
+            String dayNStr;
+            if (CollectionUtils.isEmptyMap(gameIDToDayNData)) {
+                dayNStr = "0.00-0";
+            } else {
+                dayNStr = gameIDToDayNData.get(vo.getGameId());
+            }
+            if (StringUtils.isBlank(dayNStr)) {
+                dayNStr = "0.00-0";
+            }
+            //新用户充值金额
+            vo.setNewUserAmount(new BigDecimal(dayNStr.split("-")[0]));
+            //新用户充值次数
+            vo.setNewUserAmountCount(Long.parseLong(dayNStr.split("-")[1]));
+            //老用户充值人数、次数、金额
+            vo.setOldAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
+            vo.setOldAmountCount(vo.getAmountCount() - vo.getNewUserAmountCount());
+            vo.setOldAmountNum(vo.getAmountNum() - vo.getNewUserAmountNum());
+            //新用户回收率
+            vo.setNewUserRoi(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                    vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
+            //新用户客单价
+            vo.setNewUserAvg(vo.getNewUserAmountCount() == 0L ? BigDecimal.ZERO :
+                    vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountCount()), 4, RoundingMode.HALF_UP));
+            //新用户ARPU
+            vo.setNewUserArpu(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO :
+                    vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP));
+
+            return vo;
+        }).collect(Collectors.toList());
+
+        //返回list结果封装到page对象里
+        return new Page<>(pitcherGameDataTotalVOList, pager);
+    }
+
+    /**
+     * 投手游戏总数据总计
+     * @param dto PitcherGameDataTotalSumDTO
+     * @return PitcherGameDataTotalSumVO
+     */
+    @Override
+    public PitcherGameDataTotalSumVO getPitcherGameDataTotalSum(PitcherGameDataTotalSumDTO dto) {
+        //如果注册时间参数为空,默认设置查询当天数据
+        if (dto.getBeginDate() == null || dto.getEndDate() == null) {
+            dto.setBeginDate(LocalDate.now());
+            dto.setEndDate(LocalDate.now());
+        }
+        //如果充值时间参数为空,默认设置查询当天数据
+        if (dto.getAmountBeginDate() == null || dto.getAmountEndDate() == null) {
+            dto.setAmountBeginDate(LocalDate.now());
+            dto.setAmountEndDate(LocalDate.now());
+        }
+        //复制PitcherGameDataTotalSumDTO 到PitcherGameDataTotalDTO
+        PitcherGameDataTotalDTO totalDTO = new PitcherGameDataTotalDTO();
+        copyNullProperties(dto, totalDTO);
+        //主表查询条件
+        Criteria criA = myCri(totalDTO, "criA", false);
+        //账面相关查询条件 时间条件只和充值时间相关
+        Criteria criB = myCri(totalDTO, "criB", false);
+        //账面人数相关 时间只需要充值时间条件,不需要注册时间条件
+        Criteria criAmount = myCriRecharge(totalDTO, false);
+        //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间
+        Criteria criNewUser = myCriRecharge(totalDTO, true);
+        //创角人数查询条件
+        Criteria criRoleNum = myCriRole(totalDTO);
+        //创建sql语句 执行sql
+        Sql sql = Sqls.create(pitcherGameDataTotalSumSql() + criA);
+        //设置自定义回显对象
+        sql.setCallback(Sqls.callback.entity());
+        sql.setEntity(dao.getEntity(PitcherGameDataTotalSumVO.class));
+        //执行sql
+        dao.execute(sql);
+        //得到结果
+        PitcherGameDataTotalSumVO vo = sql.getObject(PitcherGameDataTotalSumVO.class);
+        //得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据
+        PitcherGameDataTotalSumVO tempVO = getPitcherGameDataTotalSumAmountData(criB, criAmount, criNewUser, criRoleNum);
+        //合并两个对象
+        copyNullProperties(tempVO, vo);
+
+        //计算相关指标
+        //新用户充值成本
+        vo.setNewUserAmountCost(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO :
+                vo.getCost().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 2, RoundingMode.HALF_UP));
+        //新用户付费率
+        vo.setNewUserAmountRate(vo.getRegisterNum() == 0L ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegisterNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户付费比
+        vo.setNewUserAmountRatio(vo.getAmountNum() == 0L ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户复充率
+        vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum() == 0L ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserOrderAgain().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //创角率
+        vo.setRoleNumRate(vo.getRegisterNum() == 0L ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getRoleNum().doubleValue() / vo.getRegisterNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //创角成本
+        vo.setRoleNumCost(vo.getRoleNum() == 0L ? BigDecimal.ZERO :
+                vo.getCost().divide(BigDecimal.valueOf(vo.getRoleNum()), 2, RoundingMode.HALF_UP));
+
+        //获取所有筛选条件内的dayN数据
+        String dayNStr = tempDayNDataTotal(totalDTO);
+        //新用户充值金额
+        vo.setNewUserAmount(new BigDecimal(dayNStr.split("-")[0]));
+        //新用户充值次数
+        vo.setNewUserAmountCount(Long.parseLong(dayNStr.split("-")[1]));
+        //老用户充值人数、次数、金额
+        vo.setOldAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
+        vo.setOldAmountCount(vo.getAmountCount() - vo.getNewUserAmountCount());
+        vo.setOldAmountNum(vo.getAmountNum() - vo.getNewUserAmountNum());
+        //新用户回收率
+        vo.setNewUserRoi(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
+        //新用户客单价
+        vo.setNewUserAvg(vo.getNewUserAmountCount() == 0L ? BigDecimal.ZERO :
+                vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountCount()), 4, RoundingMode.HALF_UP));
+        //新用户ARPU
+        vo.setNewUserArpu(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO :
+                vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP));
+
+        //结果
+        return vo;
+    }
+
+    /**
+     * 得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据
+     * @param criAmount 账面数据相关查询条件
+     * @return PitcherGameDataTotalSumVO
+     */
+    private PitcherGameDataTotalSumVO getPitcherGameDataTotalSumAmountData(Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
+        //得到账面相关数据
+        Sql sqlAmountData = Sqls.create("""
+                SELECT
+                    IFNULL(SUM(amount), 0) as amount,
+                    IFNULL(SUM(amount_count), 0) as amount_count,
+                    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
+                FROM
+                    game_ads.ads_game_pitcher_day
+                """ + criB);
+        //设置回传对象
+        sqlAmountData.setCallback(Sqls.callback.entity());
+        sqlAmountData.setEntity(dao.getEntity(PitcherGameDataTotalSumVO.class));
+        //执行sql
+        dao.execute(sqlAmountData);
+        PitcherGameDataTotalSumVO vo = sqlAmountData.getObject(PitcherGameDataTotalSumVO.class);
+
+        //账面人数数据
+        Sql sqlAmountNum = Sqls.create("""
+                SELECT
+                    IFNULL(COUNT(DISTINCT user_id), 0) amount_num
+                FROM
+                    game_ads.ads_information
+                """ + criAmount +
+                """
+                AND NOT agent_id = 0
+                """);
+        //设置回传对象
+        sqlAmountNum.setCallback(Sqls.callback.longValue());
+        //执行sql
+        dao.execute(sqlAmountNum);
+        //设置账面充值人数
+        vo.setAmountNum(sqlAmountNum.getLong());
+        //账面ARPU
+        vo.setPaperArpu(vo.getAmountNum() == 0L ? BigDecimal.ZERO :
+                vo.getAmount().divide(BigDecimal.valueOf(vo.getAmountNum()), 2, RoundingMode.HALF_UP));
+
+        //新用户充值人数
+        Sql sqlNewUserNum = Sqls.create("""
+                SELECT
+                    COUNT(DISTINCT user_id) new_user_amount_num
+                FROM
+                    game_ads.ads_information
+                """ + criNewUser +
+                """
+                AND NOT agent_id = 0
+                """);
+        //设置回传对象
+        sqlNewUserNum.setCallback(Sqls.callback.longValue());
+        //执行sql
+        dao.execute(sqlNewUserNum);
+        //设置新用户充值人数
+        vo.setNewUserAmountNum(sqlNewUserNum.getLong());
+
+        //新用户复充人数
+        Sql sqlNewUserAgainNum = Sqls.create("""
+                SELECT
+                    COUNT(tempA.num) as new_user_order_again
+                FROM (
+                    SELECT
+                        COUNT(user_id) num
+                    FROM
+                        game_ads.ads_information
+                    """ + criNewUser +
+                    """
+                    AND NOT agent_id = 0
+                    GROUP BY user_id
+                    HAVING
+                        COUNT(user_id) > 1 ) tempA
+                """);
+        //设置回传对象
+        sqlNewUserAgainNum.setCallback(Sqls.callback.longValue());
+        //执行sql
+        dao.execute(sqlNewUserAgainNum);
+        //设置新用户充值人数
+        vo.setNewUserOrderAgain(sqlNewUserAgainNum.getLong());
+
+        //创角人数
+        Sql sqlRoleNum = Sqls.create("""
+                SELECT
+                    COUNT(DISTINCT role_user_id) as role_num
+                FROM
+                    dw_create_role_detail
+                """ + criRoleNum +
+                """
+                AND NOT user_agent_id = 0
+                """);
+        //设置回传对象
+        sqlRoleNum.setCallback(Sqls.callback.longValue());
+        //执行sql
+        dao.execute(sqlRoleNum);
+        //设置创角人数
+        vo.setRoleNum(sqlRoleNum.getLong());
+
+        return vo;
+    }
+
+    /**
+     * 所有为空值的属性都不copy
+     *
+     * @param source 原数据
+     * @param target 目标数据
+     */
+    private void copyNullProperties(Object source, Object target) {
+        BeanUtils.copyProperties(source, target, getNullField(source));
+    }
+
+    /**
+     * 获取属性中为空的字段
+     *
+     * @param target 目标对象
+     * @return 不需要替换的字段数组
+     */
+    private static String[] getNullField(Object target) {
+        BeanWrapper beanWrapper = new BeanWrapperImpl(target);
+        PropertyDescriptor[] propertyDescriptors = beanWrapper.getPropertyDescriptors();
+        Set<String> notNullFieldSet = new HashSet<>();
+        if (propertyDescriptors.length > 0) {
+            for (PropertyDescriptor p : propertyDescriptors) {
+                String name = p.getName();
+                Object value = beanWrapper.getPropertyValue(name);
+                if (Objects.isNull(value)) {
+                    notNullFieldSet.add(name);
+                }
+            }
+        }
+        String[] notNullField = new String[notNullFieldSet.size()];
+
+        return notNullFieldSet.toArray(notNullField);
+    }
+
+    /**
+     * 主表 账面相关 查询条件
+     *
+     * @param dto  前端传递的查询条件
+     * @param type criA 查询主表  criB 查询账面相关
+     * @param needGroupBy 是否需要分组条件
+     * @return 查询条件
+     */
+    private Criteria myCri(PitcherGameDataTotalDTO dto, String type, Boolean needGroupBy) {
+        //根据传入的dto拼接查询参数
+        Criteria cri = Cnd.cri();
+        if (StringUtils.isNotBlank(dto.getGameId())) {
+            //拼接游戏id查询条件
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getGameCp())) {
+            //拼接游戏cp方
+            cri.where().andEquals("game_cp", dto.getGameCp());
+        }
+        if (dto.getGameType() != null) {
+            //拼接游戏类型查询条件
+            cri.where().andEquals("game_type", dto.getGameType());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接SDK来源
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getPitcherId() != null) {
+            //拼接投手ID
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        //根据type拼接不同的时间查询条件
+        if (type.equals("criA")) {
+            if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+                //拼接注册日期查询条件
+                cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+            }
+        } else if (type.equals("criB")) {
+            if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) {
+                //拼接充值日期查询条件
+                cri.where().andBetween("dt", dto.getAmountBeginDate(), dto.getAmountEndDate());
+            }
+        }
+        //拼接分组条件
+        if (needGroupBy) {
+            cri.getGroupBy().groupBy("game_id", "pitcher_id");
+        }
+
+        return cri;
+    }
+
+    /**
+     * 账面充值人数、新用户充值人数、新用户复充人数的查询条件
+     *
+     * @param dto         前端传递的查询条件参数实体
+     * @param needRegTime 是否需要拼接注册时间
+     * @return 查询条件
+     */
+    private Criteria myCriRecharge(PitcherGameDataTotalDTO dto, Boolean needRegTime) {
+        //根据传入的dto拼接查询参数
+        Criteria cri = Cnd.cri();
+        if (StringUtils.isNotBlank(dto.getGameId())) {
+            //拼接游戏id查询条件
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getGameCp())) {
+            //拼接游戏cp方
+            cri.where().andEquals("cp_name", dto.getGameCp());
+        }
+        if (dto.getGameType() != null) {
+            //拼接游戏类型查询条件
+            cri.where().andEquals("classify", dto.getGameType());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接SDK来源
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getPitcherId() != null) {
+            //拼接投手ID
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        //拼接不同的时间查询条件
+        if (needRegTime && dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //拼接注册日期查询条件
+            cri.where().andBetween("reg_time", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) {
+            //拼接充值日期查询条件
+            cri.where().andBetween("order_time", dto.getAmountBeginDate(), dto.getAmountEndDate());
+        }
+
+        return cri;
+    }
+
+    /**
+     * 创角人数相关查询条件
+     *
+     * @param dto 前端传递的查询条件
+     * @return 查询条件
+     */
+    private Criteria myCriRole(PitcherGameDataTotalDTO dto) {
+        //根据传入的dto拼接查询参数
+        Criteria cri = Cnd.cri();
+        if (StringUtils.isNotBlank(dto.getGameId())) {
+            //拼接游戏id查询条件
+            cri.where().andEquals("user_game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getGameCp())) {
+            //拼接游戏cp方
+            cri.where().andEquals("cp_name", dto.getGameCp());
+        }
+        if (dto.getGameType() != null) {
+            //拼接游戏类型查询条件
+            cri.where().andEquals("user_game_classify", dto.getGameType());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接SDK来源
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getPitcherId() != null) {
+            //拼接投手ID
+            cri.where().andEquals("user_zx_pitcher_id", dto.getPitcherId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //拼接注册日期查询条件
+            cri.where().andBetween("user_dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) {
+            //拼接充值日期查询条件 在充值时间内创角
+            cri.where().andBetween("DATE(role_create_time)", dto.getAmountBeginDate(), dto.getAmountEndDate());
+        }
+
+        return cri;
+    }
+
+    /**
+     * 生成DayN数据方法
+     *
+     * @param dto       前端查询参数
+     * @return Map
+     */
+    private Map<String, Map<String, String>> tempDayNData(PitcherGameDataTotalDTO dto) {
+
+        //创建查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //拼接注册时间查询条件
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (StringUtils.isNotBlank(dto.getGameId())) {
+            //拼接游戏ID查询条件
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接SDK来源查询条件
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getPitcherId() != null) {
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        Sql dayNSql = Sqls.create("""
+                SELECT
+                    dt,
+                    game_id,
+                    pitcher_id,
+                    source_system,
+                    dayN
+                FROM
+                    game_ads.ads_pitcher_game_dayn
+                """ + cri);
+
+        //设置回传
+        dayNSql.setCallback(Sqls.callback.entities());
+        dayNSql.setEntity(dao.getEntity(AdsPitcherGameDayn.class));
+        //执行sql 获取数据到list中
+        dao.execute(dayNSql);
+
+        //将数据库中获取的所有结果封装到一个List中
+        List<AdsPitcherGameDayn> list = dayNSql.getList(AdsPitcherGameDayn.class);
+        // pitcherId - <gameId, dayN>
+        Map<String, Map<String, String>> tempMap = new HashMap<>();
+
+        //循环遍历 list 按照 gameId 进行存储
+        for (AdsPitcherGameDayn adsPitcherGameDayn : list) {
+            if (!tempMap.containsKey(adsPitcherGameDayn.getPitcherId())) {
+                //Map中没有该投手的相关数据,初始化dayNMap
+                Map<String, String> resMap = new HashMap<>();
+                //保存初始化结果
+                tempMap.put(adsPitcherGameDayn.getPitcherId(), resMap);
+            }
+            //解析 dayN
+            Map<String, String> resMap = tempMap.get(adsPitcherGameDayn.getPitcherId());
+            if (!resMap.containsKey(adsPitcherGameDayn.getGameId())) {
+                //不含有该游戏信息,初始化数据
+                resMap.put(adsPitcherGameDayn.getGameId(), "0.00-0");
+            }
+            //解析每个 adsPitcherGameDayn 的 dayN
+            parseJsonData(adsPitcherGameDayn, resMap, dto);
+            //将解析的结果保存
+            tempMap.put(adsPitcherGameDayn.getPitcherId(), resMap);
+        }
+
+        return tempMap;
+    }
+
+    /**
+     * 计算所有的dayN
+     *
+     * @param dto       前端查询参数
+     * @return Map
+     */
+    private String tempDayNDataTotal(PitcherGameDataTotalDTO dto) {
+        //创建查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //拼接注册时间查询条件
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (StringUtils.isNotBlank(dto.getGameId())) {
+            //拼接游戏ID查询条件
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接SDK来源查询条件
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getPitcherId() != null) {
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        Sql dayNSql = Sqls.create("""
+                SELECT
+                    dt,
+                    game_id,
+                    pitcher_id,
+                    source_system,
+                    dayN
+                FROM
+                    game_ads.ads_pitcher_game_dayn
+                """ + cri);
+
+        //设置回传
+        dayNSql.setCallback(Sqls.callback.entities());
+        dayNSql.setEntity(dao.getEntity(AdsPitcherGameDayn.class));
+        //执行sql 获取数据到list中
+        dao.execute(dayNSql);
+
+        //将数据库中获取的所有结果封装到一个List中
+        List<AdsPitcherGameDayn> list = dayNSql.getList(AdsPitcherGameDayn.class);
+        //初始化dayN结果
+        Map<String, String> resMap = new HashMap<>();
+        resMap.put("dayN", "0.00-0");
+
+        //循环遍历 list 按照 gameId 进行存储
+        for (AdsPitcherGameDayn adsPitcherGameDayn : list) {
+            //解析每个 adsPitcherGameDayn 的 dayN
+            parseJsonData(adsPitcherGameDayn, resMap, dto);
+        }
+        //返回结果
+        return resMap.get("dayN");
+    }
+
+    /**
+     * 解析dayN json字符串数据
+     *
+     * @param adsPitcherGameDayn 对象
+     * @param resMap      记录最终结果Map
+     * @param dto         前端查询条件
+     */
+    private void parseJsonData(AdsPitcherGameDayn adsPitcherGameDayn, Map<String, String> resMap, PitcherGameDataTotalDTO dto) {
+        //将每一个adsDaynGame中的dayN属性值 由json转为 Map 型
+        Gson gson = new Gson();
+        Map<String, String> jsonList = gson.fromJson(adsPitcherGameDayn.getDayn(), Map.class);
+        //解析 jsonList
+        for (Map.Entry<String, String> entry : jsonList.entrySet()) {
+            //key是充值日期
+            String key = entry.getKey();
+            String value = entry.getValue();
+            //将value按“-”分割
+            String[] resValues = value.split("-");
+            //判断充值日期 在充值日期内的数据进行计算
+            if (DateUtil.parseLocalDate(key).compareTo(dto.getAmountBeginDate()) >= 0
+                    && DateUtil.parseLocalDate(key).compareTo(dto.getAmountEndDate()) <= 0) {
+                //获取原先的dayN的值
+                String[] oldValues;
+                if (resMap.containsKey("dayN")) {
+                    oldValues = resMap.get("dayN").split("-");
+                } else {
+                    oldValues = resMap.get(adsPitcherGameDayn.getGameId()).split("-");
+                }
+                //充值的金额
+                BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0])).setScale(2, RoundingMode.HALF_UP);
+                //充值的次数
+                long count = Long.parseLong(oldValues[1]) + Long.parseLong(resValues[1]);
+                //合并成字符串 更新dayN的值
+                String newValue = chargeMoney + "-" + count;
+                if (resMap.containsKey("dayN")) {
+                    resMap.put("dayN", newValue);
+                } else {
+                    resMap.put(adsPitcherGameDayn.getGameId(), newValue);
+                }
+            }
+        }
+    }
+
+    /**
+     * 处理投手游戏每日的DayN
+     *
+     * @param vo PitcherGameDataDayVO
+     */
+    private void formatPitcherDataDayDayN(PitcherDataDayVO vo) {
+        if (CollectionUtils.isEmpty(pitcherDayNFieldMapList)) {
+            return;
+        }
+        pitcherDayNFieldMapList.forEach(dayNFieldMap -> {
+            try {
+                String[] temps = ((String) dayNFieldMap.getT1().get(vo)).split("/");
+                dayNFieldMap.getT2().set(vo, RechargeTrendVO.builder()
+                        .rechargeMoney(new BigDecimal(temps[0]))
+                        .rechargeUserCount(Long.valueOf(temps[1]))
+                        .increase(new BigDecimal(temps[2]))
+                        .back(new BigDecimal(temps[3]))
+                        .multiples(new BigDecimal(temps[4]))
+                        .build());
+            } catch (Exception e) {
+                throw new BaseException("映射出错");
+            }
+        });
+    }
+    
+    /**
+     * 处理投手游戏每日的DayN
+     *
+     * @param vo PitcherGameDataDayVO
+     */
+    private void formatPitcherGameDataDayDayN(PitcherGameDataDayVO vo) {
+        if (CollectionUtils.isEmpty(pitcherGameDayNFieldMapList)) {
+            return;
+        }
+        pitcherGameDayNFieldMapList.forEach(dayNFieldMap -> {
+            try {
+                String[] temps = ((String) dayNFieldMap.getT1().get(vo)).split("/");
+                dayNFieldMap.getT2().set(vo, RechargeTrendVO.builder()
+                        .rechargeMoney(new BigDecimal(temps[0]))
+                        .rechargeUserCount(Long.valueOf(temps[1]))
+                        .increase(new BigDecimal(temps[2]))
+                        .back(new BigDecimal(temps[3]))
+                        .multiples(new BigDecimal(temps[4]))
+                        .build());
+            } catch (Exception e) {
+                throw new BaseException("映射出错");
+            }
+        });
+    }
+
+    /**
+     * 处理投手每日总计的DayN
+     *
+     * @param vo PitcherDataDayTotalVO
+     */
+    private void formatPitcherDataDayTotalDayN(PitcherDataDayTotalVO vo) {
+        if (CollectionUtils.isEmpty(pitcherDayNTotalFieldMapList)) {
+            return;
+        }
+        pitcherDayNTotalFieldMapList.forEach(dayNTotalFieldMap -> {
+            try {
+                //得到需要计算的值
+                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/");
+                //dn的金额总计
+                BigDecimal dNAmount = new BigDecimal(temps[0]);
+                //d1-dn的金额总计
+                BigDecimal d1ToDNTotalAmount = new BigDecimal(temps[1]);
+                //d1-dn的消耗总计(排除了未到时间的cost)
+                BigDecimal d1ToDNTotalCost = new BigDecimal(temps[3]);
+                //d1的金额总计(排除了未到时间的d1)
+                BigDecimal d1Amount = new BigDecimal(temps[4]);
+                //赋值
+                dayNTotalFieldMap.getT2().set(vo, RechargeTrendVO.builder()
+                        .rechargeMoney(dNAmount)
+                        .rechargeUserCount(Long.valueOf(temps[2]))
+                        .increase(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                dNAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .back(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .multiples(d1Amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1Amount, 4, RoundingMode.HALF_UP))
+                        .build());
+            } catch (Exception e) {
+                throw new BaseException("映射出错");
+            }
+        });
+    }
+
+    /**
+     * 处理投手游戏每日总计的DayN
+     *
+     * @param vo PitcherGameDataDayTotalVO
+     */
+    private void formatPitcherGameDataDayTotalDayN(PitcherGameDataDayTotalVO vo) {
+        if (CollectionUtils.isEmpty(pitcherGameDayNTotalFieldMapList)) {
+            return;
+        }
+        pitcherGameDayNTotalFieldMapList.forEach(dayNTotalFieldMap -> {
+            try {
+                //得到需要计算的值
+                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/");
+                //dn的金额总计
+                BigDecimal dNAmount = new BigDecimal(temps[0]);
+                //d1-dn的金额总计
+                BigDecimal d1ToDNTotalAmount = new BigDecimal(temps[1]);
+                //d1-dn的消耗总计(排除了未到时间的cost)
+                BigDecimal d1ToDNTotalCost = new BigDecimal(temps[3]);
+                //d1的金额总计(排除了未到时间的d1)
+                BigDecimal d1Amount = new BigDecimal(temps[4]);
+                //赋值
+                dayNTotalFieldMap.getT2().set(vo, RechargeTrendVO.builder()
+                        .rechargeMoney(dNAmount)
+                        .rechargeUserCount(Long.valueOf(temps[2]))
+                        .increase(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                dNAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .back(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .multiples(d1Amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1Amount, 4, RoundingMode.HALF_UP))
+                        .build());
+            } catch (Exception e) {
+                throw new BaseException("映射出错");
+            }
+        });
+    }
+
+    /**
+     * 查询投手每日数据SQL
+     * @return String
+     */
+    private String pitcherDataDaySql() {
+        return """
+                SELECT
+                    dt,
+                    source_system,
+                    pitcher_id,
+                    pitcher,
+                    cost,
+                    plan_count,
+                    account_count,
+                    agent_count,
+                    register_num,
+                    first_new_user_amount_count,
+                    first_new_user_amount_num,
+                    first_new_user_amount,
+                    amount_count,
+                    amount_num,
+                    amount,
+                    old_amount_count,
+                    old_amount_num,
+                    old_amount,
+                    new_user_total_amount_count,
+                    new_user_total_amount_num,
+                    new_user_total_amount,
+                    hundred_user_num,
+                    buy_new_user_total_amount,
+                    buy_new_user_total_amount_num,
+                    buy_new_user_total_amount_count,
+                    reg_order_user_again,
+                    first_role_num,
+                    new_user_total_role_num,
+                    role_num,
+                    register_cost,
+                    first_roi,
+                    buy_roi,
+                    today_roi,
+                    gross_profit,
+                    first_rate,
+                    buy_user_rate,
+                    today_rate,
+                    first_avg,
+                    buy_avg,
+                    today_avg,
+                    paper_avg,
+                    first_amount_cost,
+                    buy_amount_cost,
+                    today_amount_cost,
+                    today_again_rate,
+                    new_reg_arpu,
+                    first_arpu,
+                    today_arpu,
+                    paper_arpu,
+                    hundred_user_num_cost,
+                    roi1,
+                    roi2,
+                    roi3,
+                    roi4,
+                    roi5,
+                    roi6,
+                    roi7,
+                    roi8,
+                    roi9,
+                    roi10,
+                    roi11,
+                    roi12,
+                    roi13,
+                    roi14,
+                    roi15,
+                    roi16,
+                    roi17,
+                    roi18,
+                    roi19,
+                    roi20,
+                    roi21,
+                    roi22,
+                    roi23,
+                    roi24,
+                    roi25,
+                    roi26,
+                    roi27,
+                    roi28,
+                    roi29,
+                    roi30,
+                    roi60,
+                    roi90,
+                    roi180,
+                    roi1yaer,
+                    roi_total,
+                    amount_d1,
+                    amount_d2,
+                    amount_d3,
+                    amount_d4,
+                    amount_d5,
+                    amount_d6,
+                    amount_d7,
+                    amount_d8,
+                    amount_d9,
+                    amount_d10,
+                    amount_d11,
+                    amount_d12,
+                    amount_d13,
+                    amount_d14,
+                    amount_d15,
+                    amount_d16,
+                    amount_d17,
+                    amount_d18,
+                    amount_d19,
+                    amount_d20,
+                    amount_d21,
+                    amount_d22,
+                    amount_d23,
+                    amount_d24,
+                    amount_d25,
+                    amount_d26,
+                    amount_d27,
+                    amount_d28,
+                    amount_d29,
+                    amount_m1,
+                    amount_m2,
+                    amount_m3,
+                    amount_m6,
+                    amount_y1,
+                    amount_sum,
+                    da1,
+                    da2,
+                    da3,
+                    da4,
+                    da5,
+                    da6,
+                    da7,
+                    da8,
+                    da9,
+                    da10,
+                    da11,
+                    da12,
+                    da13,
+                    da14,
+                    da15,
+                    da16,
+                    da17,
+                    da18,
+                    da19,
+                    da20,
+                    da21,
+                    da22,
+                    da23,
+                    da24,
+                    da25,
+                    da26,
+                    da27,
+                    da28,
+                    da29,
+                    da30,
+                    m2,
+                    m3,
+                    m6,
+                    y1,
+                    total,
+                    da1_num,
+                    da2_num,
+                    da3_num,
+                    da4_num,
+                    da5_num,
+                    da6_num,
+                    da7_num,
+                    da8_num,
+                    da9_num,
+                    da10_num,
+                    da11_num,
+                    da12_num,
+                    da13_num,
+                    da14_num,
+                    da15_num,
+                    da16_num,
+                    da17_num,
+                    da18_num,
+                    da19_num,
+                    da20_num,
+                    da21_num,
+                    da22_num,
+                    da23_num,
+                    da24_num,
+                    da25_num,
+                    da26_num,
+                    da27_num,
+                    da28_num,
+                    da29_num,
+                    da30_num,
+                    m2_num,
+                    m3_num,
+                    m6_num,
+                    y1_num,
+                    total_num,
+                    first_role_cost,
+                    new_user_total_role_cost,
+                    role_num_cost,
+                    first_role_rate,
+                    new_user_total_role_rate,
+                    role_num_rate,
+                    new_user_amount_ratio
+                FROM
+                    game_ads.ads_pitcher_day
+                """;
+    }
+    
+    /**
+     * 查询投手游戏每日数据SQL
+     * @return String
+     */
+    private String pitcherGameDataDaySql() {
+        return """
+                SELECT
+                    dt,
+                    source_system,
+                    pitcher_id,
+                    game_id,
+                    pitcher,
+                    game_name,
+                    game_cp,
+                    game_type,
+                    cost,
+                    plan_count,
+                    account_count,
+                    agent_count,
+                    register_num,
+                    first_new_user_amount_count,
+                    first_new_user_amount_num,
+                    first_new_user_amount,
+                    amount_count,
+                    amount_num,
+                    amount,
+                    old_amount_count,
+                    old_amount_num,
+                    old_amount,
+                    new_user_total_amount_count,
+                    new_user_total_amount_num,
+                    new_user_total_amount,
+                    hundred_user_num,
+                    buy_new_user_total_amount,
+                    buy_new_user_total_amount_num,
+                    buy_new_user_total_amount_count,
+                    reg_order_user_again,
+                    first_role_num,
+                    new_user_total_role_num,
+                    role_num,
+                    register_cost,
+                    first_roi,
+                    buy_roi,
+                    today_roi,
+                    gross_profit,
+                    first_rate,
+                    buy_user_rate,
+                    today_rate,
+                    first_avg,
+                    buy_avg,
+                    today_avg,
+                    paper_avg,
+                    first_amount_cost,
+                    buy_amount_cost,
+                    today_amount_cost,
+                    today_again_rate,
+                    new_reg_arpu,
+                    first_arpu,
+                    today_arpu,
+                    paper_arpu,
+                    hundred_user_num_cost,
+                    roi1,
+                    roi2,
+                    roi3,
+                    roi4,
+                    roi5,
+                    roi6,
+                    roi7,
+                    roi8,
+                    roi9,
+                    roi10,
+                    roi11,
+                    roi12,
+                    roi13,
+                    roi14,
+                    roi15,
+                    roi16,
+                    roi17,
+                    roi18,
+                    roi19,
+                    roi20,
+                    roi21,
+                    roi22,
+                    roi23,
+                    roi24,
+                    roi25,
+                    roi26,
+                    roi27,
+                    roi28,
+                    roi29,
+                    roi30,
+                    roi60,
+                    roi90,
+                    roi180,
+                    roi1yaer,
+                    roi_total,
+                    amount_d1,
+                    amount_d2,
+                    amount_d3,
+                    amount_d4,
+                    amount_d5,
+                    amount_d6,
+                    amount_d7,
+                    amount_d8,
+                    amount_d9,
+                    amount_d10,
+                    amount_d11,
+                    amount_d12,
+                    amount_d13,
+                    amount_d14,
+                    amount_d15,
+                    amount_d16,
+                    amount_d17,
+                    amount_d18,
+                    amount_d19,
+                    amount_d20,
+                    amount_d21,
+                    amount_d22,
+                    amount_d23,
+                    amount_d24,
+                    amount_d25,
+                    amount_d26,
+                    amount_d27,
+                    amount_d28,
+                    amount_d29,
+                    amount_m1,
+                    amount_m2,
+                    amount_m3,
+                    amount_m6,
+                    amount_y1,
+                    amount_sum,
+                    da1,
+                    da2,
+                    da3,
+                    da4,
+                    da5,
+                    da6,
+                    da7,
+                    da8,
+                    da9,
+                    da10,
+                    da11,
+                    da12,
+                    da13,
+                    da14,
+                    da15,
+                    da16,
+                    da17,
+                    da18,
+                    da19,
+                    da20,
+                    da21,
+                    da22,
+                    da23,
+                    da24,
+                    da25,
+                    da26,
+                    da27,
+                    da28,
+                    da29,
+                    da30,
+                    m2,
+                    m3,
+                    m6,
+                    y1,
+                    total,
+                    da1_num,
+                    da2_num,
+                    da3_num,
+                    da4_num,
+                    da5_num,
+                    da6_num,
+                    da7_num,
+                    da8_num,
+                    da9_num,
+                    da10_num,
+                    da11_num,
+                    da12_num,
+                    da13_num,
+                    da14_num,
+                    da15_num,
+                    da16_num,
+                    da17_num,
+                    da18_num,
+                    da19_num,
+                    da20_num,
+                    da21_num,
+                    da22_num,
+                    da23_num,
+                    da24_num,
+                    da25_num,
+                    da26_num,
+                    da27_num,
+                    da28_num,
+                    da29_num,
+                    da30_num,
+                    m2_num,
+                    m3_num,
+                    m6_num,
+                    y1_num,
+                    total_num,
+                    first_role_cost,
+                    new_user_total_role_cost,
+                    role_num_cost,
+                    first_role_rate,
+                    new_user_total_role_rate,
+                    role_num_rate,
+                    new_user_amount_ratio
+                FROM
+                    game_ads.ads_game_pitcher_day
+                """;
+    }
+
+    /**
+     * 查询投手每日数据总计SQL
+     * @return String
+     */
+    private String pitcherDataDayTotalSql() {
+        return """
+                SELECT
+                    SUM(cost) as cost,
+                    SUM(plan_count) as plan_count,
+                    SUM(account_count) as account_count,
+                    SUM(agent_count) as agent_count,
+                    SUM(register_num) as register_num,
+                    ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost,
+                    SUM(first_role_num) as first_role_num,
+                    SUM(new_user_total_role_num) as new_user_total_role_num,
+                    SUM(role_num) as role_num,
+                    ROUND(IF(SUM(role_num) > 0 , SUM(cost) / SUM(role_num), 0), 2) as role_num_cost,
+                    ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost,
+                    ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(role_num) / SUM(register_num), 0), 4) as role_num_rate,
+                    SUM(first_new_user_amount_count) as first_new_user_amount_count,
+                    SUM(first_new_user_amount_num) as first_new_user_amount_num,
+                    SUM(first_new_user_amount) as first_new_user_amount,
+                    SUM(amount_count) as amount_count,
+                    SUM(amount_num) as amount_num,
+                    SUM(amount) as amount,
+                    SUM(old_amount_count) as old_amount_count,
+                    SUM(old_amount_num) as old_amount_num,
+                    SUM(old_amount) as old_amount,
+                    SUM(new_user_total_amount_count) as new_user_total_amount_count,
+                    SUM(new_user_total_amount_num) as new_user_total_amount_num,
+                    SUM(new_user_total_amount) as new_user_total_amount,
+                    SUM(buy_new_user_total_amount) as buy_new_user_total_amount,
+                    SUM(buy_new_user_total_amount_num) as buy_new_user_total_amount_num,
+                    SUM(buy_new_user_total_amount_count) as buy_new_user_total_amount_count,
+                    ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi,
+                    ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi,
+                    ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi,
+                    (SUM(new_user_total_amount) - SUM(cost)) as gross_profit,
+                    ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate,
+                    ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate,
+                    ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate,
+                    ROUND(IF(SUM(amount_num) > 0, SUM(first_new_user_amount_num) / SUM(amount_num), 0), 4) as new_user_amount_ratio,
+                    ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg,
+                    ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg,
+                    ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg,
+                    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg,
+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost,
+                    ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost,
+                    SUM(reg_order_user_again) as reg_order_user_again,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu,
+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu,
+                    ROUND(IF(SUM(amount_num) > 0 , SUM(amount) / SUM(amount_num), 0), 2) as paper_arpu,
+                    SUM(hundred_user_num) as hundred_user_num,
+                    ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180,
+                    ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer,
+                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total,
+                    SUM(da1) as da1,
+                    SUM(da2) as da2,
+                    SUM(da3) as da3,
+                    SUM(da4) as da4,
+                    SUM(da5) as da5,
+                    SUM(da6) as da6,
+                    SUM(da7) as da7,
+                    SUM(da8) as da8,
+                    SUM(da9) as da9,
+                    SUM(da10) as da10,
+                    SUM(da11) as da11,
+                    SUM(da12) as da12,
+                    SUM(da13) as da13,
+                    SUM(da14) as da14,
+                    SUM(da15) as da15,
+                    SUM(da16) as da16,
+                    SUM(da17) as da17,
+                    SUM(da18) as da18,
+                    SUM(da19) as da19,
+                    SUM(da20) as da20,
+                    SUM(da21) as da21,
+                    SUM(da22) as da22,
+                    SUM(da23) as da23,
+                    SUM(da24) as da24,
+                    SUM(da25) as da25,
+                    SUM(da26) as da26,
+                    SUM(da27) as da27,
+                    SUM(da28) as da28,
+                    SUM(da29) as da29,
+                    SUM(da30) as da30,
+                    SUM(m2) as m2,
+                    SUM(m3) as m3,
+                    SUM(m6) as m6,
+                    SUM(y1) as y1,
+                    SUM(total) as total,
+                    SUM(da1_num) as da1_num,
+                    SUM(da2_num) as da2_num,
+                    SUM(da3_num) as da3_num,
+                    SUM(da4_num) as da4_num,
+                    SUM(da5_num) as da5_num,
+                    SUM(da6_num) as da6_num,
+                    SUM(da7_num) as da7_num,
+                    SUM(da8_num) as da8_num,
+                    SUM(da9_num) as da9_num,
+                    SUM(da10_num) as da10_num,
+                    SUM(da11_num) as da11_num,
+                    SUM(da12_num) as da12_num,
+                    SUM(da13_num) as da13_num,
+                    SUM(da14_num) as da14_num,
+                    SUM(da15_num) as da15_num,
+                    SUM(da16_num) as da16_num,
+                    SUM(da17_num) as da17_num,
+                    SUM(da18_num) as da18_num,
+                    SUM(da19_num) as da19_num,
+                    SUM(da20_num) as da20_num,
+                    SUM(da21_num) as da21_num,
+                    SUM(da22_num) as da22_num,
+                    SUM(da23_num) as da23_num,
+                    SUM(da24_num) as da24_num,
+                    SUM(da25_num) as da25_num,
+                    SUM(da26_num) as da26_num,
+                    SUM(da27_num) as da27_num,
+                    SUM(da28_num) as da28_num,
+                    SUM(da29_num) as da29_num,
+                    SUM(da30_num) as da30_num,
+                    SUM(m2_num) as m2_num,
+                    SUM(m3_num) as m3_num,
+                    SUM(m6_num) as m6_num,
+                    SUM(y1_num) as y1_num,
+                    SUM(total_num) as total_num,
+                """ + getPitcherGameDataDayTotalDayNsql() +
+                """
+                FROM
+                    game_ads.ads_pitcher_day
+                """;
+    }
+
+    /**
+     * 查询投手游戏每日数据总计SQL
+     * @return String
+     */
+    private String pitcherGameDataDayTotalSql() {
+        return """
+                SELECT
+                    SUM(cost) as cost,
+                    SUM(plan_count) as plan_count,
+                    SUM(account_count) as account_count,
+                    SUM(agent_count) as agent_count,
+                    SUM(register_num) as register_num,
+                    ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost,
+                    SUM(first_role_num) as first_role_num,
+                    SUM(new_user_total_role_num) as new_user_total_role_num,
+                    SUM(role_num) as role_num,
+                    ROUND(IF(SUM(role_num) > 0 , SUM(cost) / SUM(role_num), 0), 2) as role_num_cost,
+                    ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost,
+                    ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(role_num) / SUM(register_num), 0), 4) as role_num_rate,
+                    SUM(first_new_user_amount_count) as first_new_user_amount_count,
+                    SUM(first_new_user_amount_num) as first_new_user_amount_num,
+                    SUM(first_new_user_amount) as first_new_user_amount,
+                    SUM(amount_count) as amount_count,
+                    SUM(amount_num) as amount_num,
+                    SUM(amount) as amount,
+                    SUM(old_amount_count) as old_amount_count,
+                    SUM(old_amount_num) as old_amount_num,
+                    SUM(old_amount) as old_amount,
+                    SUM(new_user_total_amount_count) as new_user_total_amount_count,
+                    SUM(new_user_total_amount_num) as new_user_total_amount_num,
+                    SUM(new_user_total_amount) as new_user_total_amount,
+                    SUM(buy_new_user_total_amount) as buy_new_user_total_amount,
+                    SUM(buy_new_user_total_amount_num) as buy_new_user_total_amount_num,
+                    SUM(buy_new_user_total_amount_count) as buy_new_user_total_amount_count,
+                    ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi,
+                    ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi,
+                    ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi,
+                    (SUM(new_user_total_amount) - SUM(cost)) as gross_profit,
+                    ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate,
+                    ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate,
+                    ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate,
+                    ROUND(IF(SUM(amount_num) > 0, SUM(first_new_user_amount_num) / SUM(amount_num), 0), 4) as new_user_amount_ratio,
+                    ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg,
+                    ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg,
+                    ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg,
+                    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg,
+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost,
+                    ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost,
+                    SUM(reg_order_user_again) as reg_order_user_again,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu,
+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu,
+                    ROUND(IF(SUM(amount_num) > 0 , SUM(amount) / SUM(amount_num), 0), 2) as paper_arpu,
+                    SUM(hundred_user_num) as hundred_user_num,
+                    ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180,
+                    ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer,
+                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total,
+                    SUM(da1) as da1,
+                    SUM(da2) as da2,
+                    SUM(da3) as da3,
+                    SUM(da4) as da4,
+                    SUM(da5) as da5,
+                    SUM(da6) as da6,
+                    SUM(da7) as da7,
+                    SUM(da8) as da8,
+                    SUM(da9) as da9,
+                    SUM(da10) as da10,
+                    SUM(da11) as da11,
+                    SUM(da12) as da12,
+                    SUM(da13) as da13,
+                    SUM(da14) as da14,
+                    SUM(da15) as da15,
+                    SUM(da16) as da16,
+                    SUM(da17) as da17,
+                    SUM(da18) as da18,
+                    SUM(da19) as da19,
+                    SUM(da20) as da20,
+                    SUM(da21) as da21,
+                    SUM(da22) as da22,
+                    SUM(da23) as da23,
+                    SUM(da24) as da24,
+                    SUM(da25) as da25,
+                    SUM(da26) as da26,
+                    SUM(da27) as da27,
+                    SUM(da28) as da28,
+                    SUM(da29) as da29,
+                    SUM(da30) as da30,
+                    SUM(m2) as m2,
+                    SUM(m3) as m3,
+                    SUM(m6) as m6,
+                    SUM(y1) as y1,
+                    SUM(total) as total,
+                    SUM(da1_num) as da1_num,
+                    SUM(da2_num) as da2_num,
+                    SUM(da3_num) as da3_num,
+                    SUM(da4_num) as da4_num,
+                    SUM(da5_num) as da5_num,
+                    SUM(da6_num) as da6_num,
+                    SUM(da7_num) as da7_num,
+                    SUM(da8_num) as da8_num,
+                    SUM(da9_num) as da9_num,
+                    SUM(da10_num) as da10_num,
+                    SUM(da11_num) as da11_num,
+                    SUM(da12_num) as da12_num,
+                    SUM(da13_num) as da13_num,
+                    SUM(da14_num) as da14_num,
+                    SUM(da15_num) as da15_num,
+                    SUM(da16_num) as da16_num,
+                    SUM(da17_num) as da17_num,
+                    SUM(da18_num) as da18_num,
+                    SUM(da19_num) as da19_num,
+                    SUM(da20_num) as da20_num,
+                    SUM(da21_num) as da21_num,
+                    SUM(da22_num) as da22_num,
+                    SUM(da23_num) as da23_num,
+                    SUM(da24_num) as da24_num,
+                    SUM(da25_num) as da25_num,
+                    SUM(da26_num) as da26_num,
+                    SUM(da27_num) as da27_num,
+                    SUM(da28_num) as da28_num,
+                    SUM(da29_num) as da29_num,
+                    SUM(da30_num) as da30_num,
+                    SUM(m2_num) as m2_num,
+                    SUM(m3_num) as m3_num,
+                    SUM(m6_num) as m6_num,
+                    SUM(y1_num) as y1_num,
+                    SUM(total_num) as total_num,
+                """ + getPitcherGameDataDayTotalDayNsql() +
+                """
+                FROM
+                    game_ads.ads_game_pitcher_day
+                """;
+    }
+
+    /**
+     * 投手游戏每日数据总计付费趋势sql
+     * @return String : Dn的充值金额 / D1-Dn的充值总金额 / Dn的充值人数 /当前消耗(剔除不存在的天数数据) /D1充值金额总和(剔除不存在的天数数据)
+     */
+    private String getPitcherGameDataDayTotalDayNsql() {
+        StringBuilder totalDayN = new StringBuilder(StringUtils.EMPTY);
+        for (int day = 1; day <= 29 ; day++) {
+            totalDayN.append("""
+                    CONCAT(
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now() , CAST(SPLIT_PART(amount_d%s , '/', 1) AS DECIMAL(10, 2)), 0 )),'/',
+                        SUM(CAST(SPLIT_PART(amount_d%s, '/', 6) AS DECIMAL(10, 2))),'/',
+                        SUM(CAST(SPLIT_PART(amount_d%s, '/', 2) AS BIGINT)),'/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now(),  cost, 0)),'/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now(),  CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                    ) AS amount_d%s ,
+                       """.formatted(day - 1, day, day, day, day - 1, day - 1, day));
+        }
+        totalDayN.append("""
+                CONCAT(
+                    SUM(IF(DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
+                    SUM(CAST(SPLIT_PART(amount_m1, '/', 6) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(amount_m1, '/', 2) AS BIGINT)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now(), cost, 0)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                ) AS amount_m1,
+                CONCAT(
+                    SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m2 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
+                    SUM(CAST(SPLIT_PART(amount_m2, '/', 6) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(amount_m2, '/', 2) AS BIGINT)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                    ) AS amount_m2,
+                CONCAT(
+                    SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m3 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
+                    SUM(CAST(SPLIT_PART(amount_m3, '/', 6) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(amount_m3, '/', 2) AS BIGINT)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                    ) AS amount_m3,
+                CONCAT(
+                    SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m6 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
+                    SUM(CAST(SPLIT_PART(amount_m6, '/', 6) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(amount_m6, '/', 2) AS BIGINT)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                    ) AS amount_m6,
+                CONCAT(
+                    SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now() , CAST(SPLIT_PART(amount_y1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
+                    SUM(CAST(SPLIT_PART(amount_y1, '/', 6) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(amount_y1, '/', 2) AS BIGINT)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), '/',
+                    SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                    ) AS amount_y1,
+                CONCAT(
+                    SUM(CAST(SPLIT_PART(amount_sum , '/', 1) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(amount_sum, '/', 6) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(amount_sum, '/', 2) AS BIGINT)), '/',
+                    SUM(cost), '/',
+                    SUM(CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)))
+                    ) AS amount_sum
+                """);
+        //返回结果
+        return totalDayN.toString();
+    }
+
+    /**
+     * 查询投手游戏总数据SQL
+     * @param criA       主表查询条件
+     * @param criB       账面相关查询条件
+     * @param criAmount  账面充值人数查询条件
+     * @param criNewUser 新用户相关查询条件
+     * @param criRoleNum 创角人数相关查询条件
+     * @return String
+     */
+    private String pitcherGameDataTotalSql(Criteria criA, Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
+        return """
+                SELECT
+                	a.*,
+                	IFNULL(amount, 0) as amount,
+                	IFNULL(amount_count, 0) as amount_count,
+                	IFNULL(amount_num, 0) as amount_num,
+                	IFNULL(paper_avg, 0) as paper_avg,
+                	ROUND(IF(amount_num > 0 , IFNULL(amount, 0) / amount_num, 0), 2) as paper_arpu,
+                	IFNULL(new_user_amount_num, 0) as new_user_amount_num,
+                	ROUND(IF(new_user_amount_num > 0, IFNULL(cost, 0) / new_user_amount_num, 0), 2) as new_user_amount_cost,
+                	ROUND(IF(register_num > 0, IFNULL(new_user_amount_num, 0) / register_num, 0), 4) as new_user_amount_rate,
+                	ROUND(IF(amount_num > 0, IFNULL(new_user_amount_num, 0) / amount_num, 0), 4) as new_user_amount_ratio,
+                	IFNULL(new_user_order_again, 0) as new_user_order_again,
+                	ROUND(IF(new_user_total_amount_num > 0, IFNULL(new_user_order_again, 0) / new_user_total_amount_num, 0), 4) as new_user_again_rate,
+                	IFNULL(role_num, 0) as role_num,
+                	ROUND(IF(register_num > 0, IFNULL(role_num, 0) / register_num, 0), 4) as role_num_rate,
+                	ROUND(IF(role_num > 0, IFNULL(cost, 0) / role_num, 0), 2) as role_num_cost
+                FROM (
+                	SELECT
+                		pitcher_id,
+                		game_id,
+                		MAX(pitcher) as pitcher,
+                		MAX(game_name) as game_name,
+                		MAX(game_cp) as game_cp,
+                		MAX(game_type) as game_type,
+                		SUM(cost) as cost,
+                		SUM(plan_count) as plan_count,
+                		SUM(account_count) as account_count,
+                		SUM(agent_count) as agent_count,
+                		SUM(register_num) as register_num,
+                		ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost,
+                		SUM(first_role_num) as first_role_num,
+                		SUM(new_user_total_role_num) as new_user_total_role_num,
+                		ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost,
+                		ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost,
+                		ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate,
+                		ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate,
+                		SUM(first_new_user_amount_count) as first_new_user_amount_count,
+                		SUM(first_new_user_amount_num) as first_new_user_amount_num,
+                		SUM(first_new_user_amount) as first_new_user_amount,
+                		SUM(new_user_total_amount_count) as new_user_total_amount_count,
+                		SUM(new_user_total_amount_num) as new_user_total_amount_num,
+                		SUM(new_user_total_amount) as new_user_total_amount,
+                		SUM(buy_new_user_total_amount) as buy_new_user_total_amount,
+                		SUM(buy_new_user_total_amount_num) as buy_new_user_total_amount_num,
+                		SUM(buy_new_user_total_amount_count) as buy_new_user_total_amount_count,
+                		ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi,
+                		ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi,
+                		ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi,
+                		(SUM(new_user_total_amount) - SUM(cost)) as gross_profit,
+                		ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate,
+                		ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate,
+                		ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate,
+                		ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg,
+                		ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg,
+                		ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg,
+                		ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost,
+                		ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost,
+                		ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost,
+                		SUM(reg_order_user_again) as reg_order_user_again,
+                		ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate,
+                		ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu,
+                		ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu,
+                		ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu,
+                		SUM(hundred_user_num) as hundred_user_num,
+                		ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29,
+                		ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30,
+                		ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60,
+                		ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90,
+                		ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180,
+                		ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer,
+                		ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
+                	FROM
+                		game_ads.ads_game_pitcher_day
+                	""" + criA +
+                    """
+                ) a
+                LEFT JOIN (
+                	SELECT
+                	    pitcher_id as b_pitcher_id,
+                	    game_id as b_game_id,
+                	    IFNULL(SUM(amount), 0) as amount,
+                	    IFNULL(SUM(amount_count), 0) as amount_count,
+                	    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
+                	FROM
+                	    game_ads.ads_game_pitcher_day
+                	""" + criB +
+                    """
+                ) b ON a.pitcher_id = b.b_pitcher_id AND a.game_id = b.b_game_id
+                LEFT JOIN (
+                	SELECT
+                		pitcher_id as c_pitcher_id,
+                		game_id as c_game_id,
+                		IFNULL(COUNT(DISTINCT user_id), 0) amount_num
+                	FROM
+                		game_ads.ads_information
+                	""" + criAmount +
+                    """
+                	    AND NOT agent_id = 0
+                	GROUP BY pitcher_id , game_id
+                ) c ON a.pitcher_id = c.c_pitcher_id AND a.game_id = c.c_game_id
+                LEFT JOIN (
+                	SELECT
+                		pitcher_id as d_pitcher_id,
+                		game_id as d_game_id,
+                		COUNT(DISTINCT user_id) new_user_amount_num
+                	FROM
+                		game_ads.ads_information
+                	""" + criNewUser +
+                    """
+                		AND NOT agent_id = 0
+                	GROUP BY
+                		pitcher_id , game_id
+                ) d ON a.pitcher_id = d.d_pitcher_id AND a.game_id = d.d_game_id
+                LEFT JOIN (
+                	SELECT
+                		game_id as e_game_id,
+                		pitcher_id as e_pitcher_id,
+                		COUNT(tempA.num) as new_user_order_again
+                	FROM (
+                		SELECT
+                			game_id,
+                			pitcher_id,
+                			COUNT(user_id) num
+                		FROM
+                			game_ads.ads_information
+                		""" + criNewUser +
+                        """
+                			AND NOT agent_id = 0
+                		GROUP BY
+                			user_id,
+                			pitcher_id,
+                			game_id
+                		HAVING
+                			COUNT(user_id) > 1 ) tempA
+                	GROUP BY
+                		tempA.game_id, tempA.pitcher_id
+                ) e ON a.game_id = e.e_game_id AND a.pitcher_id = e.e_pitcher_id
+                LEFT JOIN (
+                	SELECT
+                		user_game_id as f_game_id,
+                		user_zx_pitcher_id as f_pitcher_id,
+                		COUNT(DISTINCT role_user_id) as role_num
+                	FROM
+                		dw_create_role_detail
+                	""" + criRoleNum +
+                    """
+                		AND NOT user_agent_id = 0
+                	GROUP BY
+                		user_game_id, user_zx_pitcher_id
+                ) f ON a.game_id = f.f_game_id AND a.pitcher_id = f.f_pitcher_id
+                """;
+    }
+
+    /**
+     * 查询投手游戏总数据总计SQL
+     *
+     * @return String
+     */
+    private String pitcherGameDataTotalSumSql() {
+        return """
+                SELECT
+                    IFNULL(SUM(cost), 0) as cost,
+                    IFNULL(SUM(plan_count), 0) as plan_count,
+                    IFNULL(SUM(account_count), 0) as account_count,
+                    IFNULL(SUM(agent_count), 0) as agent_count,
+                    IFNULL(SUM(register_num), 0) as register_num,
+                    ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost,
+                    IFNULL(SUM(first_role_num), 0) as first_role_num,
+                    IFNULL(SUM(new_user_total_role_num), 0) as new_user_total_role_num,
+                    ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost,
+                    ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate,
+                    IFNULL(SUM(first_new_user_amount_count), 0) as first_new_user_amount_count,
+                    IFNULL(SUM(first_new_user_amount_num), 0) as first_new_user_amount_num,
+                    IFNULL(SUM(first_new_user_amount), 0) as first_new_user_amount,
+                    IFNULL(SUM(new_user_total_amount_count), 0) as new_user_total_amount_count,
+                    IFNULL(SUM(new_user_total_amount_num), 0) as new_user_total_amount_num,
+                    IFNULL(SUM(new_user_total_amount), 0) as new_user_total_amount,
+                    IFNULL(SUM(buy_new_user_total_amount), 0) as buy_new_user_total_amount,
+                    IFNULL(SUM(buy_new_user_total_amount_num), 0) as buy_new_user_total_amount_num,
+                    IFNULL(SUM(buy_new_user_total_amount_count), 0) as buy_new_user_total_amount_count,
+                    ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi,
+                    ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi,
+                    ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi,
+                    IFNULL((SUM(new_user_total_amount) - SUM(cost)), 0) as gross_profit,
+                    ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate,
+                    ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate,
+                    ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate,
+                    ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg,
+                    ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg,
+                    ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg,
+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost,
+                    ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost,
+                    IFNULL(SUM(reg_order_user_again), 0) as reg_order_user_again,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate,
+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu,
+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu,
+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu,
+                    IFNULL(SUM(hundred_user_num), 0) as hundred_user_num,
+                    ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29,
+                    ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90,
+                    ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180,
+                    ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer,
+                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
+                FROM
+                    game_ads.ads_game_pitcher_day
+                """;
+    }
+
+
+}

Разница между файлами не показана из-за своего большого размера
+ 914 - 89
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PromotionDayServiceImpl.java


+ 66 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/GameAuthEnum.java

@@ -0,0 +1,66 @@
+package com.zanxiang.game.module.base.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum GameAuthEnum {
+
+    /**
+     * 运营
+     */
+    PITCHER("PITCHER", "运营"),
+
+    /**
+     * 投手
+     */
+    OPERATE("OPERATE", "投手");
+
+    /**
+     * 角色
+     */
+    private String value;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 根据值获取枚举对象
+     *
+     * @param value 价值
+     * @return {@link GameAuthEnum}
+     */
+    public static GameAuthEnum getByValue(String value) {
+        for (GameAuthEnum gameAuthEnum : GameAuthEnum.values()) {
+            if (Objects.equals(value, gameAuthEnum.getValue())) {
+                return gameAuthEnum;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 获取枚举映射
+     *
+     * @return {@link Map}<{@link String}, {@link String}>
+     */
+    public static Map<String, String> getGameAuthMap() {
+        Map<String, String> gameAuthMap = new HashMap<>(GameAuthEnum.values().length);
+        for (GameAuthEnum gameAuthEnum : GameAuthEnum.values()) {
+            gameAuthMap.put(gameAuthEnum.getValue(), gameAuthEnum.getName());
+        }
+        return gameAuthMap;
+    }
+}

+ 34 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/vo/GameAuthUserVO.java

@@ -0,0 +1,34 @@
+package com.zanxiang.game.module.base.pojo.vo;
+
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权用户
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class GameAuthUserVO {
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 授权类型
+     */
+    private GameAuthEnum gameAuthEnum;
+}

+ 21 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/rpc/GameAuthRpc.java

@@ -0,0 +1,21 @@
+package com.zanxiang.game.module.base.rpc;
+
+import com.zanxiang.game.module.base.pojo.vo.GameAuthUserVO;
+
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权
+ */
+public interface GameAuthRpc {
+
+    /**
+     * 让游戏authby用户id
+     *
+     * @param userIds 用户id
+     * @return {@link List}<{@link GameAuthUserVO}>
+     */
+    List<GameAuthUserVO> getGameAuthByUserIds(List<Long> userIds);
+}

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java

@@ -21,7 +21,7 @@ public class ManageApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
-        System.out.println("赞象Manage服务启动成功 <dubbo升级3.0, 解决ip封禁未指定游戏得问题> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 <dubbo升级3.0, 角色权限2> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 119 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameAuthController.java

@@ -0,0 +1,119 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import com.zanxiang.game.module.manage.pojo.params.*;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthRoleVO;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthVO;
+import com.zanxiang.game.module.manage.service.IGameAuthRoleService;
+import com.zanxiang.game.module.manage.service.IGameAuthService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权
+ */
+@Api(tags = {"游戏授权接口"})
+@RestController
+@RequestMapping("/game/auth")
+@Slf4j
+public class GameAuthController {
+
+    @Autowired
+    private IGameAuthService gameAuthService;
+
+    @Autowired
+    private IGameAuthRoleService gameAuthRoleService;
+
+    @ApiOperation(value = "新增用户授权")
+    @PostMapping(value = "/add")
+    @PreAuthorize(permissionKey = "manage:gameAuth:add")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> gameAuthAdd(@Validated @RequestBody GameAuthAddParam param) {
+        return ResultVO.ok(gameAuthService.gameAuthAdd(param));
+    }
+
+    @ApiOperation(value = "更新用户授权")
+    @PostMapping(value = "/update")
+    @PreAuthorize(permissionKey = "manage:gameAuth:update")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> gameAuthUpdate(@Validated @RequestBody GameAuthUpdateParam param) {
+        return ResultVO.ok(gameAuthService.gameAuthUpdate(param));
+    }
+
+    @ApiOperation(value = "游戏授权用户列表")
+    @PostMapping(value = "/list")
+    @PreAuthorize(permissionKey = "manage:gameAuth:list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameAuthVO.class)})
+    public ResultVO<IPage<GameAuthVO>> listOfPage(@Validated @RequestBody GameAuthListParam param) {
+        return ResultVO.ok(gameAuthService.listOfPage(param));
+    }
+
+    @ApiOperation(value = "游戏授权用户删除")
+    @DeleteMapping(value = "/delete")
+    @PreAuthorize(permissionKey = "manage:gameServer:delete")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> deleteById(@RequestParam Long id) {
+        return ResultVO.ok(gameAuthService.deleteById(id));
+    }
+
+    @ApiOperation(value = "新增用户角色")
+    @PostMapping(value = "/add/role")
+    @PreAuthorize(permissionKey = "manage:gameAuth:addRole")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> gameAuthRoleAdd(@Validated @RequestBody GameAuthRoleAddParam param) {
+        return ResultVO.ok(gameAuthRoleService.gameAuthRoleAdd(param));
+    }
+
+    @ApiOperation(value = "更新用户角色")
+    @PostMapping(value = "/update/role")
+    @PreAuthorize(permissionKey = "manage:gameAuth:updateRole")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> gameAuthRoleUpdate(@Validated @RequestBody GameAuthRoleUpdateParam param) {
+        return ResultVO.ok(gameAuthRoleService.gameAuthRoleUpdate(param));
+    }
+
+    @ApiOperation(value = "删除用户角色")
+    @DeleteMapping(value = "/delete/role")
+    @PreAuthorize(permissionKey = "manage:gameServer:deleteRole")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> roleDeleteById(@RequestParam Long id) {
+        return ResultVO.ok(gameAuthRoleService.deleteById(id));
+    }
+
+    @ApiOperation(value = "用户授权角色列表")
+    @PostMapping(value = "/list/role")
+    @PreAuthorize(permissionKey = "manage:gameAuth:listRole")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameAuthRoleVO.class)})
+    public ResultVO<IPage<GameAuthRoleVO>> roleListOfPage(@Validated @RequestBody GameAuthRoleListParam param) {
+        return ResultVO.ok(gameAuthRoleService.listOfPage(param));
+    }
+
+    @ApiOperation(value = "获取权限类型枚举")
+    @GetMapping(value = "/role/auth/type")
+    @PreAuthorize(permissionKey = "manage:gameServer:roleAuthType")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Map<String, String>> getGameAuthMap() {
+        return ResultVO.ok(GameAuthEnum.getGameAuthMap());
+    }
+
+    @ApiOperation(value = "获取权限类型相关用户")
+    @GetMapping(value = "/role/auth/user")
+    @PreAuthorize(permissionKey = "manage:gameServer:roleAuthUser")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Map<Long, String>> getUserByAuthType(@RequestParam String authType) {
+        return ResultVO.ok(gameAuthRoleService.getUserByAuthType(authType));
+    }
+}

+ 38 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthAddParam.java

@@ -0,0 +1,38 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权添加
+ */
+@Data
+public class GameAuthAddParam {
+
+    /**
+     * 权限类型
+     */
+    @NotNull(message = "权限类型不可为空")
+    @ApiModelProperty(notes = "权限类型, 调接口, 获取权限类型枚举")
+    private GameAuthEnum gameAuthEnum;
+
+    /**
+     * 用户id列表
+     */
+    @NotNull(message = "用户id列表不可为空")
+    @ApiModelProperty(notes = "用户id列表, 调接口, 从接口中给的人中选择")
+    private List<Long> userIdList;
+
+    /**
+     * 游戏id列表
+     */
+    @NotNull(message = "游戏id列表不可为空")
+    @ApiModelProperty(notes = "游戏id列表, 所有游戏下拉选择")
+    private List<Long> gameIdList;
+}

+ 27 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthListParam.java

@@ -0,0 +1,27 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.GameAuth;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权查询
+ */
+@Data
+public class GameAuthListParam extends BaseListDTO<GameAuth> {
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty(notes = "游戏id")
+    private Long gameId;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(notes = "用户id")
+    private Long userId;
+}

+ 25 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleAddParam.java

@@ -0,0 +1,25 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色新增或者修改
+ */
+@Data
+public class GameAuthRoleAddParam {
+
+    /**
+     * 授权类型
+     */
+    private GameAuthEnum authType;
+
+    /**
+     * 用户id列表
+     */
+    private List<Long> userIdList;
+}

+ 25 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleListParam.java

@@ -0,0 +1,25 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRole;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色
+ */
+@Data
+public class GameAuthRoleListParam extends BaseListDTO<GameAuthRole> {
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 授权类型
+     */
+    private GameAuthEnum authType;
+}

+ 30 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleUpdateParam.java

@@ -0,0 +1,30 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色更新
+ */
+@Data
+public class GameAuthRoleUpdateParam {
+
+    /**
+     * 主键id
+     */
+    @NotNull(message = "主键id不可为空")
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * 授权类型
+     */
+    @NotNull(message = "授权类型不可为空")
+    @ApiModelProperty(notes = "授权类型")
+    private GameAuthEnum authType;
+}

+ 36 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthUpdateParam.java

@@ -0,0 +1,36 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权更新
+ */
+@Data
+public class GameAuthUpdateParam {
+
+    /**
+     * 主键id
+     */
+    @NotNull(message = "主键id不可为空")
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    @NotNull(message = "游戏id不可为空")
+    @ApiModelProperty(notes = "用户id")
+    private Long gameId;
+
+    /**
+     * 用户id
+     */
+    @NotNull(message = "用户id不可为空")
+    @ApiModelProperty(notes = "用户id")
+    private Long userId;
+}

+ 52 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthRoleVO.java

@@ -0,0 +1,52 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色
+ */
+@Data
+public class GameAuthRoleVO {
+
+    /**
+     * 主键id
+     */
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(notes = "用户id")
+    private Long userId;
+
+    /**
+     * 用户名称
+     */
+    @ApiModelProperty(notes = "用户名称")
+    private String userName;
+
+    /**
+     * 权限类型
+     */
+    @ApiModelProperty(notes = "权限类型")
+    private GameAuthEnum authType;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(notes = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(notes = "更新时间")
+    private LocalDateTime updateTime;
+}

+ 64 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthVO.java

@@ -0,0 +1,64 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权
+ */
+@Data
+public class GameAuthVO {
+
+    /**
+     * 主键id
+     */
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty(notes = "游戏id")
+    private Long gameId;
+
+    /**
+     * 游戏名称
+     */
+    @ApiModelProperty(notes = "游戏名称")
+    private String gameName;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(notes = "用户id")
+    private Long userId;
+
+    /**
+     * 用户名称
+     */
+    @ApiModelProperty(notes = "用户名称")
+    private String userName;
+
+    /**
+     * 权限类型
+     */
+    @ApiModelProperty(notes = "权限类型")
+    private GameAuthEnum authType;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(notes = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(notes = "更新时间")
+    private LocalDateTime updateTime;
+}

+ 52 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/rpc/impl/GameAuthRpcImpl.java

@@ -0,0 +1,52 @@
+package com.zanxiang.game.module.manage.rpc.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import com.zanxiang.game.module.base.pojo.vo.GameAuthUserVO;
+import com.zanxiang.game.module.base.rpc.GameAuthRpc;
+import com.zanxiang.game.module.manage.service.IGameAuthRoleService;
+import com.zanxiang.game.module.manage.service.IGameAuthService;
+import com.zanxiang.game.module.mybatis.entity.GameAuth;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRole;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权
+ */
+@DubboService
+public class GameAuthRpcImpl implements GameAuthRpc {
+
+    @Autowired
+    private IGameAuthRoleService gameAuthRoleService;
+
+    @Autowired
+    private IGameAuthService gameAuthService;
+
+    @Override
+    public List<GameAuthUserVO> getGameAuthByUserIds(List<Long> userIds) {
+        List<GameAuthUserVO> list = new ArrayList<>();
+        userIds.forEach(userId -> {
+            GameAuthRole gameAuthRole = gameAuthRoleService.getOne(new LambdaQueryWrapper<GameAuthRole>()
+                    .eq(GameAuthRole::getUserId, userId));
+            List<GameAuth> gameAuthList = gameAuthService.list(new LambdaUpdateWrapper<GameAuth>()
+                    .eq(GameAuth::getUserId, userId));
+            gameAuthList.forEach(gameAuth -> list.add(this.transform(gameAuth, gameAuthRole.getAuthType())));
+        });
+        return list;
+    }
+
+    private GameAuthUserVO transform(GameAuth gameAuth, String authType) {
+        return GameAuthUserVO.builder()
+                .userId(gameAuth.getUserId())
+                .gameId(gameAuth.getGameId())
+                .gameAuthEnum(GameAuthEnum.getByValue(authType))
+                .build();
+    }
+}

+ 59 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthRoleService.java

@@ -0,0 +1,59 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthRoleVO;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRole;
+
+import java.util.Map;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色
+ */
+public interface IGameAuthRoleService extends IService<GameAuthRole> {
+
+    /**
+     * 获取用户身份验证类型
+     *
+     * @param authType 身份验证类型
+     * @return {@link Map}<{@link Long}, {@link String}>
+     */
+    Map<Long, String> getUserByAuthType(String authType);
+
+    /**
+     * 游戏身份验证角色添加
+     *
+     * @param param 参数
+     * @return boolean
+     */
+    boolean gameAuthRoleAdd(GameAuthRoleAddParam param);
+
+    /**
+     * 游戏更新认证作用
+     *
+     * @param param 参数
+     * @return boolean
+     */
+    boolean gameAuthRoleUpdate(GameAuthRoleUpdateParam param);
+
+    /**
+     * 删除通过id
+     *
+     * @param id id
+     * @return boolean
+     */
+    boolean deleteById(Long id);
+
+    /**
+     * 列表页面
+     *
+     * @param param 参数
+     * @return {@link IPage}<{@link GameAuthRoleVO}>
+     */
+    IPage<GameAuthRoleVO> listOfPage(GameAuthRoleListParam param);
+}

+ 49 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthService.java

@@ -0,0 +1,49 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthVO;
+import com.zanxiang.game.module.mybatis.entity.GameAuth;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权
+ */
+public interface IGameAuthService extends IService<GameAuth> {
+
+    /**
+     * 游戏身份验证添加
+     *
+     * @param param 参数
+     * @return boolean
+     */
+    boolean gameAuthAdd(GameAuthAddParam param);
+
+    /**
+     * 游戏身份验证更新
+     *
+     * @param param 参数
+     * @return boolean
+     */
+    boolean gameAuthUpdate(GameAuthUpdateParam param);
+
+    /**
+     * 列表页面
+     *
+     * @param param 参数
+     * @return {@link IPage}<{@link GameAuthVO}>
+     */
+    IPage<GameAuthVO> listOfPage(GameAuthListParam param);
+
+    /**
+     * 删除通过id
+     *
+     * @param id id
+     * @return boolean
+     */
+    boolean deleteById(Long id);
+}

+ 122 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthRoleServiceImpl.java

@@ -0,0 +1,122 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.base.pojo.enums.DeleteEnum;
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthRoleVO;
+import com.zanxiang.game.module.manage.service.IGameAuthRoleService;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRole;
+import com.zanxiang.game.module.mybatis.mapper.GameAuthRoleMapper;
+import com.zanxiang.module.util.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色
+ */
+@Slf4j
+@Service
+public class GameAuthRoleServiceImpl extends ServiceImpl<GameAuthRoleMapper, GameAuthRole> implements IGameAuthRoleService {
+
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Override
+    public Map<Long, String> getUserByAuthType(String authType) {
+        List<GameAuthRole> authRoleList = super.list(new LambdaQueryWrapper<GameAuthRole>()
+                .eq(GameAuthRole::getAuthType, authType));
+        if (CollectionUtils.isEmpty(authRoleList)) {
+            return Collections.emptyMap();
+        }
+        //查询相关人得名字
+        return sysUserRpc.getUserNameByIds(authRoleList.stream()
+                .map(GameAuthRole::getUserId).collect(Collectors.toList())).getData();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean gameAuthRoleAdd(GameAuthRoleAddParam param) {
+        //游戏id
+        List<Long> userIdList = param.getUserIdList();
+        List<GameAuthRole> addList = new ArrayList<>();
+        userIdList.forEach(userId -> {
+            //判断提交的参数数据是否已经存在
+            if (super.count(new LambdaQueryWrapper<GameAuthRole>()
+                    .eq(GameAuthRole::getUserId, userId)
+            ) > 0) {
+                return;
+            }
+            addList.add(this.transform(userId, param.getAuthType().getValue()));
+        });
+        if (addList.isEmpty()) {
+            return Boolean.FALSE;
+        }
+        return super.saveBatch(addList);
+    }
+
+    private GameAuthRole transform(Long userId, String authType) {
+        return GameAuthRole.builder()
+                .authType(authType)
+                .userId(userId)
+                .isDelete(DeleteEnum.NO.getCode())
+                .createBy(SecurityUtil.getUserId())
+                .createTime(LocalDateTime.now())
+                .updateBy(SecurityUtil.getUserId())
+                .updateTime(LocalDateTime.now())
+                .build();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean gameAuthRoleUpdate(GameAuthRoleUpdateParam param) {
+        return super.update(new LambdaUpdateWrapper<GameAuthRole>()
+                .set(GameAuthRole::getAuthType, param.getAuthType().getValue())
+                .eq(GameAuthRole::getId, param.getId()));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteById(Long id) {
+        return super.removeById(id);
+    }
+
+    @Override
+    public IPage<GameAuthRoleVO> listOfPage(GameAuthRoleListParam param) {
+        return page(param.toPage(), new QueryWrapper<GameAuthRole>().lambda()
+                .eq(param.getUserId() != null, GameAuthRole::getUserId, param.getUserId())
+                .eq(param.getAuthType() != null, GameAuthRole::getAuthType, param.getAuthType() == null ? null : param.getAuthType().getValue())
+                .orderByDesc(GameAuthRole::getUpdateTime)
+        ).convert(this::toVo);
+    }
+
+    private GameAuthRoleVO toVo(GameAuthRole gameAuthRole) {
+        if (Objects.isNull(gameAuthRole)) {
+            return null;
+        }
+        GameAuthRoleVO gameAuthRoleVO = BeanUtil.copy(gameAuthRole, GameAuthRoleVO.class);
+        Map<Long, String> userMap = sysUserRpc.getUserNameByIds(Collections.singletonList(gameAuthRoleVO.getUserId())).getData();
+        gameAuthRoleVO.setUserName(userMap.get(gameAuthRoleVO.getUserId()));
+        gameAuthRoleVO.setAuthType(GameAuthEnum.getByValue(gameAuthRole.getAuthType()));
+        return gameAuthRoleVO;
+    }
+
+}

+ 144 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthServiceImpl.java

@@ -0,0 +1,144 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.base.pojo.enums.DeleteEnum;
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthVO;
+import com.zanxiang.game.module.manage.service.IGameAuthRoleService;
+import com.zanxiang.game.module.manage.service.IGameAuthService;
+import com.zanxiang.game.module.manage.service.IGameService;
+import com.zanxiang.game.module.mybatis.entity.GameAuth;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRole;
+import com.zanxiang.game.module.mybatis.mapper.GameAuthMapper;
+import com.zanxiang.module.util.bean.BeanUtil;
+import com.zanxiang.module.util.exception.BaseException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权
+ */
+@Slf4j
+@Service
+public class GameAuthServiceImpl extends ServiceImpl<GameAuthMapper, GameAuth> implements IGameAuthService {
+
+    @Autowired
+    private IGameService gameService;
+
+    @Autowired
+    private IGameAuthRoleService gameAuthRoleService;
+
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean gameAuthAdd(GameAuthAddParam param) {
+        List<Long> userIdList = param.getUserIdList();
+        List<Long> gameIdList = param.getGameIdList();
+        List<GameAuth> addList = new ArrayList<>();
+        userIdList.forEach(userId -> {
+            //判断角色是否正确
+            if (gameAuthRoleService.count(new LambdaQueryWrapper<GameAuthRole>()
+                    .eq(GameAuthRole::getUserId, userId)
+                    .eq(GameAuthRole::getAuthType, param.getGameAuthEnum().getValue())
+            ) <= 0) {
+                throw new BaseException("参数错误, 提交得用户存在权限不匹配");
+            }
+            //循环添加
+            gameIdList.forEach(gameId -> {
+                //判断提交的参数数据是否已经存在
+                if (super.count(new LambdaQueryWrapper<GameAuth>()
+                        .eq(GameAuth::getGameId, gameId)
+                        .eq(GameAuth::getUserId, userId)
+                ) > 0) {
+                    throw new BaseException("参数错误, 提交的用户存在重复权限");
+                }
+                addList.add(this.transform(gameId, userId));
+            });
+        });
+        if (addList.isEmpty()) {
+            return Boolean.FALSE;
+        }
+        return super.saveBatch(addList);
+    }
+
+    private GameAuth transform(Long gameId, Long userId) {
+        return GameAuth.builder()
+                .gameId(gameId)
+                .userId(userId)
+                .isDelete(DeleteEnum.NO.getCode())
+                .createBy(SecurityUtil.getUserId())
+                .createTime(LocalDateTime.now())
+                .updateBy(SecurityUtil.getUserId())
+                .updateTime(LocalDateTime.now())
+                .build();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean gameAuthUpdate(GameAuthUpdateParam param) {
+        //判断提交的参数数据是否已经存在
+        if (super.count(new LambdaQueryWrapper<GameAuth>()
+                .eq(GameAuth::getGameId, param.getGameId())
+                .eq(GameAuth::getUserId, param.getUserId())
+        ) > 0) {
+            throw new BaseException("参数错误, 要修改的数据已经存在相同数据");
+        }
+        //修改
+        return super.update(new LambdaUpdateWrapper<GameAuth>()
+                .set(GameAuth::getGameId, param.getGameId())
+                .set(GameAuth::getUpdateBy, SecurityUtil.getUserId())
+                .set(GameAuth::getUpdateTime, LocalDateTime.now())
+                .eq(GameAuth::getId, param.getId()));
+    }
+
+    @Override
+    public IPage<GameAuthVO> listOfPage(GameAuthListParam param) {
+        return page(param.toPage(), new QueryWrapper<GameAuth>().lambda()
+                .eq(param.getGameId() != null, GameAuth::getGameId, param.getGameId())
+                .eq(param.getUserId() != null, GameAuth::getUserId, param.getUserId())
+                .orderByDesc(GameAuth::getUpdateTime)
+        ).convert(this::toVo);
+    }
+
+    private GameAuthVO toVo(GameAuth gameAuth) {
+        if (Objects.isNull(gameAuth)) {
+            return null;
+        }
+        GameAuthVO gameAuthVO = BeanUtil.copy(gameAuth, GameAuthVO.class);
+        GameDTO gameDTO = gameService.getById(gameAuthVO.getGameId());
+        gameAuthVO.setGameName(gameDTO == null ? null : gameDTO.getName());
+        Map<Long, String> userMap = sysUserRpc.getUserNameByIds(Collections.singletonList(gameAuthVO.getUserId())).getData();
+        gameAuthVO.setUserName(userMap.get(gameAuthVO.getUserId()));
+        GameAuthRole gameAuthRole = gameAuthRoleService.getOne(new LambdaQueryWrapper<GameAuthRole>()
+                .eq(GameAuthRole::getUserId, gameAuthVO.getUserId()));
+        gameAuthVO.setAuthType(GameAuthEnum.getByValue(gameAuthRole.getAuthType()));
+        return gameAuthVO;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteById(Long id) {
+        return super.removeById(id);
+    }
+}

+ 68 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuth.java

@@ -0,0 +1,68 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_auth")
+public class GameAuth implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long gameId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 1 删除  0 正常
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 68 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuthRole.java

@@ -0,0 +1,68 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_auth_role")
+public class GameAuthRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 授权类型
+     */
+    private String authType;
+
+    /**
+     * 1 删除  0 正常
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 48 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameShellLog.java

@@ -0,0 +1,48 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏壳包进入日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_shell_log")
+public class GameShellLog {
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 版本
+     */
+    private String version;
+
+    /**
+     * 访问ip
+     */
+    private String ip;
+
+    /**
+     * 日志内容
+     */
+    private String data;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

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

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameAuth;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-16
+ * @description : 游戏授权
+ */
+public interface GameAuthMapper extends BaseMapper<GameAuth> {
+}

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

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRole;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏授权角色
+ */
+public interface GameAuthRoleMapper extends BaseMapper<GameAuthRole> {
+}

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

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameShellLog;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏壳包日志
+ */
+public interface GameShellLogMapper extends BaseMapper<GameShellLog> {
+}

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <新增用户角色活跃信息上报接口2> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <米大师支付增加兑换比例, 增加壳包进入监听埋点> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 1 - 5
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/PayController.java

@@ -7,7 +7,6 @@ import com.zanxiang.game.module.sdk.pojo.param.ProductPayParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.pojo.vo.PayParamVO;
 import com.zanxiang.game.module.sdk.service.IOrderPayService;
-import com.zanxiang.game.module.sdk.service.pay.MiPayService;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
 import io.swagger.annotations.Api;
@@ -38,9 +37,6 @@ public class PayController {
     @Autowired
     private IOrderPayService orderPayService;
 
-    @Autowired
-    private MiPayService miPayService;
-
     @UnSignCheck
     @ApiOperation(value = "获取客服支付参数")
     @GetMapping(value = "/param/applet")
@@ -82,7 +78,7 @@ public class PayController {
         return orderPayService.notify(request, response, PayWayEnum.WX_PAY.getPayWayId());
     }
 
-    @ApiOperation(value = "米大师支付异步回调")
+    @ApiOperation(value = "米大师支付异步回调<接口已弃用>")
     @RequestMapping(value = "/miPayNotify", method = RequestMethod.GET)
     public ResultVO<Map> miPayNotify(@RequestParam String orderId, @ValidLogin UserData userData) {
         //返回参数

+ 14 - 4
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/UserController.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.module.sdk.controller;
 
 
+import com.zanxiang.game.module.sdk.annotation.UnSignCheck;
 import com.zanxiang.game.module.sdk.annotation.ValidLogin;
 import com.zanxiang.game.module.sdk.enums.DataTypeEnum;
 import com.zanxiang.game.module.sdk.pojo.param.*;
@@ -8,10 +9,7 @@ import com.zanxiang.game.module.sdk.pojo.vo.CustomerVO;
 import com.zanxiang.game.module.sdk.pojo.vo.GameShareVO;
 import com.zanxiang.game.module.sdk.pojo.vo.UserLoginVO;
 import com.zanxiang.game.module.sdk.pojo.vo.UserVO;
-import com.zanxiang.game.module.sdk.service.IGameUserRoleService;
-import com.zanxiang.game.module.sdk.service.IUserCardService;
-import com.zanxiang.game.module.sdk.service.IUserService;
-import com.zanxiang.game.module.sdk.service.IUserShareService;
+import com.zanxiang.game.module.sdk.service.*;
 import com.zanxiang.module.util.pojo.ResultVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.Objects;
 
 /**
@@ -45,6 +44,9 @@ public class UserController {
     @Autowired
     private IUserShareService userShareService;
 
+    @Autowired
+    private IGameShellLogService gameShellLogService;
+
     @ApiOperation(value = "游戏分享信息")
     @GetMapping("/share/game")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameShareVO.class)})
@@ -113,4 +115,12 @@ public class UserController {
         return ResultVO.ok(gameUserRoleService.gameRoleActiveCall(userData, param));
     }
 
+    @UnSignCheck
+    @ApiOperation(value = "用户进入壳包上报")
+    @PostMapping("/game/shell/call")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> gameShellLogAdd(@Validated @RequestBody GameShellLogParam param, HttpServletRequest request) {
+        return ResultVO.ok(gameShellLogService.gameShellLogAdd(param, request));
+    }
+
 }

+ 5 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/GameAppletDTO.java

@@ -119,6 +119,11 @@ public class GameAppletDTO {
          * 米大师沙箱AppKey
          */
         private String appKeyDev;
+
+        /**
+         * 兑换比例
+         */
+        private Integer scale;
     }
 
     @Data

+ 5 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/MiPayConfigDTO.java

@@ -53,6 +53,11 @@ public class MiPayConfigDTO {
      */
     private String appKeyDev;
 
+    /**
+     * 兑换比例
+     */
+    private Integer scale;
+
     /**
      * 根据环境返回对应的密钥
      *

+ 29 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/param/GameShellLogParam.java

@@ -0,0 +1,29 @@
+package com.zanxiang.game.module.sdk.pojo.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏壳包日志提交参数
+ */
+@Data
+public class GameShellLogParam {
+
+    /**
+     * 前端当前版本
+     */
+    @NotBlank(message = "前端当前版本不可为空")
+    @ApiModelProperty(notes = "前端当前版本")
+    private String version;
+
+    /**
+     * 日志内容
+     */
+    @NotBlank(message = "日志内容不可为空")
+    @ApiModelProperty(notes = "日志内容")
+    private String data;
+}

+ 24 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IGameShellLogService.java

@@ -0,0 +1,24 @@
+package com.zanxiang.game.module.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.GameShellLog;
+import com.zanxiang.game.module.sdk.pojo.param.GameShellLogParam;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏壳包日志
+ */
+public interface IGameShellLogService extends IService<GameShellLog> {
+
+    /**
+     * 添加
+     *
+     * @param param   参数
+     * @param request 请求
+     * @return boolean
+     */
+    boolean gameShellLogAdd(GameShellLogParam param, HttpServletRequest request);
+}

+ 33 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameShellLogServiceImpl.java

@@ -0,0 +1,33 @@
+package com.zanxiang.game.module.sdk.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.mybatis.entity.GameShellLog;
+import com.zanxiang.game.module.mybatis.mapper.GameShellLogMapper;
+import com.zanxiang.game.module.sdk.pojo.param.GameShellLogParam;
+import com.zanxiang.game.module.sdk.service.IGameShellLogService;
+import com.zanxiang.module.web.util.IpUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-08-17
+ * @description : 游戏壳包日志
+ */
+@Slf4j
+@Service
+public class GameShellLogServiceImpl extends ServiceImpl<GameShellLogMapper, GameShellLog> implements IGameShellLogService {
+
+    @Override
+    public boolean gameShellLogAdd(GameShellLogParam param, HttpServletRequest request) {
+        return super.save(GameShellLog.builder()
+                .version(param.getVersion())
+                .ip(IpUtil.getRealIp(request))
+                .data(param.getData())
+                .createTime(LocalDateTime.now())
+                .build());
+    }
+}

+ 18 - 8
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/MiPayService.java

@@ -103,7 +103,7 @@ public class MiPayService extends PayBaseService {
         payParamMap.put("zoneId", "1");
         payParamMap.put("offerId", config.getOfferId());
         payParamMap.put("env", String.valueOf(this.isSand));
-        payParamMap.put("buyQuantity", orderInfo.getAmount().intValue());
+        payParamMap.put("buyQuantity", this.getOrderAmount(orderInfo.getAmount()));
         payParamMap.put("status", "1");
         payParamMap.put("balance", String.valueOf(balance));
         payParamMap.put("orderId", product.getOutTradeNo());
@@ -143,7 +143,7 @@ public class MiPayService extends PayBaseService {
         return Long.valueOf(resultMap.get("balance"));
     }
 
-    private Tuple2<Long, String> midasPay(String openId, String sessionKey, BigDecimal amount, String orderId) {
+    private Tuple2<Long, String> midasPay(String openId, String sessionKey, long amount, String orderId) {
         //接口参数
         Map<String, Object> postBodyMap = new HashMap<>(7);
         postBodyMap.put("openid", openId);
@@ -151,7 +151,7 @@ public class MiPayService extends PayBaseService {
         postBodyMap.put("ts", System.currentTimeMillis() / 1000);
         postBodyMap.put("zone_id", "1");
         postBodyMap.put("env", this.isSand);
-        postBodyMap.put("amount", amount.intValue());
+        postBodyMap.put("amount", amount);
         postBodyMap.put("bill_no", orderId);
         String postBody = JsonUtil.toString(postBodyMap);
         //接口token
@@ -210,6 +210,7 @@ public class MiPayService extends PayBaseService {
                 .offerId(miPayConfigBean.getAppId())
                 .appKey(miPayConfigBean.getAppKey())
                 .appKeyDev(miPayConfigBean.getAppKeyDev())
+                .scale(miPayConfigBean.getScale())
                 .build();
     }
 
@@ -254,17 +255,19 @@ public class MiPayService extends PayBaseService {
         this.configInit(platformOrderDTO.getGameId());
         //获取用户openId
         UserDTO userDTO = userService.getUserByUserId(platformOrderDTO.getUserId());
-        String openId = userDTO.getOpenId();
         String sessionKey = userDTO.getSessionKey();
+        String openId = userDTO.getOpenId();
         //获取米大师钱包余额
         Long balance = this.midasGetBalance(openId, sessionKey);
+        //订单代币金额
+        long orderAmount = this.getOrderAmount(platformOrderDTO.getAmount());
         //余额不足, 无法扣除
-        if (balance < platformOrderDTO.getAmount().longValue()) {
+        if (balance < orderAmount) {
             log.error("米大师游戏币不足, 无法扣除! balance : {}, orderId : {}", balance, orderId);
             throw new BaseException("米大师游戏币不足, 无法扣除!");
         }
         //余额充足, 直接扣除
-        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, platformOrderDTO.getAmount(), platformOrderDTO.getOrderId());
+        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, orderAmount, platformOrderDTO.getOrderId());
         //支付成功
         this.paySuccess(platformOrderDTO.getOrderId(), platformOrderDTO.getAmount().toString(), tuple2.getT2());
         //返回参数
@@ -292,13 +295,15 @@ public class MiPayService extends PayBaseService {
         String sessionKey = userDTO.getSessionKey();
         //获取米大师钱包余额
         Long balance = this.midasGetBalance(openId, sessionKey);
+        //订单代币金额
+        long orderAmount = this.getOrderAmount(platformOrderDTO.getAmount());
         //余额不足, 无法扣除
-        if (balance < platformOrderDTO.getAmount().longValue()) {
+        if (balance < orderAmount) {
             log.error("米大师游戏币不足, 无法扣除! balance : {}, orderId : {}", balance, orderId);
             return Boolean.FALSE;
         }
         //余额充足, 直接扣除
-        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, platformOrderDTO.getAmount(), platformOrderDTO.getOrderId());
+        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, orderAmount, platformOrderDTO.getOrderId());
         log.error("米大师余额扣除返回, orderId : {}, tuple2 : {}", orderId, JsonUtil.toString(tuple2));
         //支付成功逻辑
         this.miPaySuccess(platformOrderDTO.getOrderId(), platformOrderDTO.getAmount().toString(), weChatPayInfoTuple2);
@@ -339,4 +344,9 @@ public class MiPayService extends PayBaseService {
                 .set(Order::getUpdateTime, LocalDateTime.now())
                 .eq(Order::getOrderId, orderId));
     }
+
+    private long getOrderAmount(BigDecimal amount) {
+        int scale = this.config.getScale() == null ? 1 : this.config.getScale();
+        return amount.longValue() * scale;
+    }
 }

Некоторые файлы не были показаны из-за большого количества измененных файлов