Parcourir la source

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

zhimo il y a 1 an
Parent
commit
f292c6afcd
26 fichiers modifiés avec 6719 ajouts et 958 suppressions
  1. 2 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameDataController.java
  2. 128 32
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAdgroupDay.java
  3. 1829 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsGameActiveRoleDay.java
  4. 30 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/ActiveDataTrendVO.java
  5. 1302 132
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayTotalVO.java
  6. 1312 127
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayVO.java
  7. 477 20
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataFirstNewUserAgainTotalVO.java
  8. 477 19
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataFirstNewUserAgainVO.java
  9. 6 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PromotionDayTotalVO.java
  10. 6 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PromotionDayVO.java
  11. 123 27
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayTotalVO.java
  12. 122 27
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayVO.java
  13. 1 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java
  14. 591 303
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java
  15. 108 23
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/IActiveDataServiceImpl.java
  16. 64 145
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java
  17. 85 34
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PromotionDayServiceImpl.java
  18. 1 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java
  19. 1 2
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameRemitLogServiceImpl.java
  20. 5 5
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java
  21. 9 3
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserCardServiceImpl.java
  22. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java
  23. 5 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/WxPayConfigDTO.java
  24. 10 19
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/AliPayService.java
  25. 0 11
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/PayBaseService.java
  26. 24 25
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/WxPayService.java

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

@@ -126,14 +126,14 @@ public class GameDataController {
     }
 
     @ApiOperation(value = "留存数据")
-    //@PreAuthorize(permissionKey = "gameData:activeDay:activeDay")
+    @PreAuthorize(permissionKey = "gameData:activeDay:activeDay")
     @PostMapping("/activeData/day")
     public ResultVO<Page<ActiveDataDayVO>> getActiveDataDay(@RequestBody ActiveDataDayDTO dto) {
         return ResultVO.ok(activeDataService.getActiveDataDay(dto));
     }
 
     @ApiOperation(value = "留存数据总计")
-    //@PreAuthorize(permissionKey = "gameData:activeDay:activeTotal")
+    @PreAuthorize(permissionKey = "gameData:activeDay:activeTotal")
     @PostMapping("/activeData/total")
     public ResultVO<ActiveDataTotalVO> getActiveDataTotal(@RequestBody ActiveDataTotalDTO dto) {
         return ResultVO.ok(activeDataService.getActiveDataTotal(dto));

+ 128 - 32
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAdgroupDay.java

@@ -193,54 +193,150 @@ public class AdsAdgroupDay implements Serializable {
     */    
     @Column
     private String balance;
-    
+
     /**
-    * 注册人数 (应用下载广告数据-激活数)
-    */    
+     * 小游戏注册人数
+     */
     @Column
-    private Long active;
-    
+    private Long miniGameRegisterUsers;
+
     /**
-    * 注册成本 (应用下载广告数据-激活成本)
-    */    
+     * 小游戏注册成本
+     */
     @Column
-    private BigDecimal activeCost;
-    
+    private BigDecimal miniGameRegisterCost;
+
     /**
-    * 首日转化数 (转化数据-转化数)
-    */    
+     * 小游戏注册率
+     */
     @Column
-    private Long firstConvertCount;
-    
+    private BigDecimal miniGameRegisterRate;
+
     /**
-    * 首日转化成本 (转化数据-转化成本)
-    */    
+     * 小游戏付费次数
+     */
     @Column
-    private BigDecimal firstConvertCost;
-    
+    private Long miniGamePayingCount;
+
     /**
-    * 首次付费率 (应用下载广告数据-首次付费率)
-    */    
+     * 小游戏付费金额
+     */
     @Column
-    private BigDecimal firstActivePayRate;
-    
+    private BigDecimal miniGamePayingAmount;
+
     /**
-    * 首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)
-    */    
+     * 小游戏首日付费人数
+     */
     @Column
-    private BigDecimal firstAttributionGameInAppLtv1day;
-    
+    private Long miniGamePayingUsersD1;
+
     /**
-    * 首日付费ROI (当日付费ROI)
-    */    
+     * 小游戏首日付费金额
+     */
     @Column
-    private BigDecimal firstAttributionGameInAppRoi1day;
-    
+    private BigDecimal miniGamePayingAmountD1;
+
     /**
-    * 付费次数 (应用下载广告数据-付费次数)
-    */    
+     * 小游戏3日付费金额
+     */
+    @Column
+    private BigDecimal miniGamePayingAmountD3;
+
+    /**
+     * 小游戏7日付费金额
+     */
+    @Column
+    private BigDecimal miniGamePayingAmountD7;
+
+    /**
+     * 小游戏14日付费金额
+     */
+    @Column
+    private BigDecimal miniGamePayingAmountD14;
+
+    /**
+     * 小游戏30日付费金额
+     */
+    @Column
+    private BigDecimal miniGamePayingAmountD30;
+
+    /**
+     * 小游戏首次付费人数
+     */
+    @Column
+    private Long miniGameFirstPayingUsers;
+
+    /**
+     * 小游戏首日付费ROI
+     */
+    @Column
+    private BigDecimal miniGameFirstDayPayingRoi;
+
+    /**
+     * 小游戏付费ROI
+     */
+    @Column
+    private BigDecimal miniGamePayingRoi;
+
+    /**
+     * 小游戏付费ARPU
+     */
+    @Column
+    private BigDecimal miniGamePayingArpu;
+
+    /**
+     * 小游戏3日付费ROI
+     */
+    @Column
+    private BigDecimal miniGamePayD3Roi;
+
+    /**
+     * 小游戏7日付费ROI
+     */
+    @Column
+    private BigDecimal miniGamePayD7Roi;
+
+    /**
+     * 小游戏14日付费ROI
+     */
+    @Column
+    private BigDecimal miniGamePayD14Roi;
+
+    /**
+     * 小游戏30日付费ROI
+     */
+    @Column
+    private BigDecimal miniGamePayD30Roi;
+
+    /**
+     * 小游戏首日付费次数
+     */
+    @Column
+    private Long minigame1dPayCount;
+
+    /**
+     * 小游戏首24小时付费人数
+     */
+    @Column
+    private Long minigame24hPayUv;
+
+    /**
+     * 小游戏首24小时付费金额
+     */
+    @Column
+    private BigDecimal minigame24hPayAmount;
+
+    /**
+     * 小游戏首24小时付费ROI
+     */
+    @Column
+    private BigDecimal minigame24hPayRoi;
+
+    /**
+     * 小游戏首24小时付费ARPU
+     */
     @Column
-    private Long gamePayCount;
+    private BigDecimal minigame24hPayArpu;
     
     /**
     * 今日消耗

+ 1829 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsGameActiveRoleDay.java

@@ -0,0 +1,1829 @@
+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(AdsGameActiveRoleDay.TABLE_NAME)
+@PK({"dt", "gameId", "sourceSystem"})
+public class AdsGameActiveRoleDay implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_game_active_role_day";
+     
+    /**
+    * 用户注册时间
+    */
+    private LocalDate dt;
+    
+    /**
+    * SDK来源
+    */
+    private String sourceSystem;
+    
+    /**
+    * 游戏ID
+    */
+    private Long gameId;
+    
+    /**
+    * 游戏名称
+    */    
+    @Column
+    private String gameName;
+    
+    /**
+    * 游戏类别
+    */    
+    @Column
+    private Long gameClassify;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da1;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da2;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da3;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da4;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da5;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da6;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da7;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da8;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da9;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da10;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da11;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da12;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da13;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da14;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da15;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da16;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da17;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da18;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da19;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da20;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da21;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da22;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da23;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da24;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da25;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da26;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da27;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da28;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da29;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da30;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da31;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da32;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da33;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da34;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da35;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da36;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da37;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da38;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da39;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da40;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da41;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da42;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da43;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da44;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da45;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da46;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da47;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da48;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da49;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da50;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da51;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da52;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da53;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da54;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da55;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da56;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da57;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da58;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da59;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da60;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da61;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da62;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da63;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da64;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da65;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da66;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da67;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da68;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da69;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da70;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da71;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da72;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da73;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da74;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da75;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da76;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da77;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da78;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da79;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da80;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da81;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da82;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da83;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da84;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da85;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da86;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da87;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da88;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da89;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String da90;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m4;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m5;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m6;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m7;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m8;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m9;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m10;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m11;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String m12;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa1;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa2;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa3;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa4;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa5;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa6;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa7;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa8;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa9;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa10;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa11;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa12;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa13;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa14;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa15;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa16;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa17;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa18;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa19;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa20;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa21;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa22;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa23;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa24;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa25;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa26;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa27;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa28;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa29;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa30;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa31;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa32;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa33;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa34;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa35;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa36;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa37;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa38;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa39;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa40;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa41;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa42;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa43;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa44;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa45;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa46;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa47;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa48;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa49;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa50;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa51;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa52;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa53;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa54;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa55;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa56;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa57;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa58;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa59;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa60;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa61;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa62;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa63;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa64;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa65;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa66;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa67;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa68;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa69;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa70;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa71;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa72;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa73;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa74;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa75;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa76;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa77;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa78;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa79;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa80;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa81;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa82;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa83;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa84;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa85;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa86;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa87;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa88;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa89;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyDa90;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM4;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM5;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM6;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM7;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM8;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM9;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM10;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM11;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String buyM12;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa1;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa2;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa3;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa4;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa5;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa6;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa7;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa8;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa9;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa10;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa11;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa12;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa13;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa14;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa15;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa16;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa17;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa18;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa19;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa20;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa21;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa22;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa23;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa24;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa25;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa26;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa27;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa28;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa29;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa30;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa31;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa32;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa33;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa34;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa35;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa36;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa37;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa38;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa39;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa40;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa41;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa42;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa43;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa44;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa45;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa46;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa47;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa48;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa49;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa50;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa51;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa52;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa53;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa54;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa55;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa56;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa57;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa58;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa59;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa60;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa61;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa62;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa63;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa64;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa65;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa66;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa67;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa68;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa69;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa70;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa71;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa72;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa73;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa74;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa75;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa76;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa77;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa78;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa79;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa80;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa81;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa82;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa83;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa84;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa85;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa86;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa87;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa88;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa89;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureDa90;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM4;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM5;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM6;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM7;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM8;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM9;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM10;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM11;
+    
+    /**
+    * 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+    */    
+    @Column
+    private String natureM12;
+
+}
+
+

+ 30 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/ActiveDataTrendVO.java

@@ -56,4 +56,34 @@ public class ActiveDataTrendVO {
     @ApiModelProperty(notes = "付费留存率(付费留存数据)")
     private BigDecimal amountActiveRate;
 
+    /**
+     * 第N天的新增创角用户数(创角留存数据)
+     */
+    @ApiModelProperty(notes = "第N天的新增创角用户数(创角留存数据)")
+    private Long roleNewUserNum;
+
+    /**
+     * 第N天的老活跃用户数(创角留存数据)
+     */
+    @ApiModelProperty(notes = "第N天的老活跃用户数(创角留存数据)")
+    private Long roleOldActiveUserNum;
+
+    /**
+     * 累计到第N天的创角用户数(创角留存数据)
+     */
+    @ApiModelProperty(notes = "累计到第N天的创角用户数(创角留存数据)")
+    private Long roleNewUserTotalNum;
+
+    /**
+     * 累计到第N天的活跃用户数(创角留存数据)
+     */
+    @ApiModelProperty(notes = "累计到第N天的活跃用户数(创角留存数据)")
+    private Long roleNewActiveUserTotalNum;
+
+    /**
+     * 创角留存率(创角留存数据)
+     */
+    @ApiModelProperty(notes = "创角留存率(创角留存数据)")
+    private BigDecimal roleActiveRate;
+
 }

Fichier diff supprimé car celui-ci est trop grand
+ 1302 - 132
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayTotalVO.java


Fichier diff supprimé car celui-ci est trop grand
+ 1312 - 127
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayVO.java


+ 477 - 20
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataFirstNewUserAgainTotalVO.java

@@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
 
 /**
  * @author tianhua
@@ -383,23 +382,133 @@ public class GameDataFirstNewUserAgainTotalVO {
     @ApiModelProperty(value = "不展示")
     private String da29;
 
-    /**
-     * 首日注册且充值用户复充趋势在第30天:充值金额,充值人数,充值占比
-     */
     @ApiModelProperty(value = "不展示")
     private String da30;
+    @ApiModelProperty(value = "不展示")
+    private String da31;
+    @ApiModelProperty(value = "不展示")
+    private String da32;
+    @ApiModelProperty(value = "不展示")
+    private String da33;
+    @ApiModelProperty(value = "不展示")
+    private String da34;
+    @ApiModelProperty(value = "不展示")
+    private String da35;
+    @ApiModelProperty(value = "不展示")
+    private String da36;
+    @ApiModelProperty(value = "不展示")
+    private String da37;
+    @ApiModelProperty(value = "不展示")
+    private String da38;
+    @ApiModelProperty(value = "不展示")
+    private String da39;
 
-    /**
-     * 首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比
-     */
     @ApiModelProperty(value = "不展示")
-    private String m2;
+    private String da40;
+    @ApiModelProperty(value = "不展示")
+    private String da41;
+    @ApiModelProperty(value = "不展示")
+    private String da42;
+    @ApiModelProperty(value = "不展示")
+    private String da43;
+    @ApiModelProperty(value = "不展示")
+    private String da44;
+    @ApiModelProperty(value = "不展示")
+    private String da45;
+    @ApiModelProperty(value = "不展示")
+    private String da46;
+    @ApiModelProperty(value = "不展示")
+    private String da47;
+    @ApiModelProperty(value = "不展示")
+    private String da48;
+    @ApiModelProperty(value = "不展示")
+    private String da49;
 
-    /**
-     * 首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比
-     */
     @ApiModelProperty(value = "不展示")
-    private String m3;
+    private String da50;
+    @ApiModelProperty(value = "不展示")
+    private String da51;
+    @ApiModelProperty(value = "不展示")
+    private String da52;
+    @ApiModelProperty(value = "不展示")
+    private String da53;
+    @ApiModelProperty(value = "不展示")
+    private String da54;
+    @ApiModelProperty(value = "不展示")
+    private String da55;
+    @ApiModelProperty(value = "不展示")
+    private String da56;
+    @ApiModelProperty(value = "不展示")
+    private String da57;
+    @ApiModelProperty(value = "不展示")
+    private String da58;
+    @ApiModelProperty(value = "不展示")
+    private String da59;
+
+    @ApiModelProperty(value = "不展示")
+    private String da60;
+    @ApiModelProperty(value = "不展示")
+    private String da61;
+    @ApiModelProperty(value = "不展示")
+    private String da62;
+    @ApiModelProperty(value = "不展示")
+    private String da63;
+    @ApiModelProperty(value = "不展示")
+    private String da64;
+    @ApiModelProperty(value = "不展示")
+    private String da65;
+    @ApiModelProperty(value = "不展示")
+    private String da66;
+    @ApiModelProperty(value = "不展示")
+    private String da67;
+    @ApiModelProperty(value = "不展示")
+    private String da68;
+    @ApiModelProperty(value = "不展示")
+    private String da69;
+
+    @ApiModelProperty(value = "不展示")
+    private String da70;
+    @ApiModelProperty(value = "不展示")
+    private String da71;
+    @ApiModelProperty(value = "不展示")
+    private String da72;
+    @ApiModelProperty(value = "不展示")
+    private String da73;
+    @ApiModelProperty(value = "不展示")
+    private String da74;
+    @ApiModelProperty(value = "不展示")
+    private String da75;
+    @ApiModelProperty(value = "不展示")
+    private String da76;
+    @ApiModelProperty(value = "不展示")
+    private String da77;
+    @ApiModelProperty(value = "不展示")
+    private String da78;
+    @ApiModelProperty(value = "不展示")
+    private String da79;
+
+    @ApiModelProperty(value = "不展示")
+    private String da80;
+    @ApiModelProperty(value = "不展示")
+    private String da81;
+    @ApiModelProperty(value = "不展示")
+    private String da82;
+    @ApiModelProperty(value = "不展示")
+    private String da83;
+    @ApiModelProperty(value = "不展示")
+    private String da84;
+    @ApiModelProperty(value = "不展示")
+    private String da85;
+    @ApiModelProperty(value = "不展示")
+    private String da86;
+    @ApiModelProperty(value = "不展示")
+    private String da87;
+    @ApiModelProperty(value = "不展示")
+    private String da88;
+    @ApiModelProperty(value = "不展示")
+    private String da89;
+    @ApiModelProperty(value = "不展示")
+    private String da90;
 
     /**
      * 首日注册且充值用户复充趋势在第4月:充值金额,充值人数,充值占比
@@ -453,7 +562,7 @@ public class GameDataFirstNewUserAgainTotalVO {
      * 首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String y1;
+    private String m12;
 
     /**
      * 首日注册且充值的用户至今:充值金额,充值人数,充值占比
@@ -642,16 +751,364 @@ public class GameDataFirstNewUserAgainTotalVO {
     private FirstNewUserAgainTrendVO da30Trend;
 
     /**
-     * 首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比
+     * 首日注册且充值用户复充趋势第31天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势第31天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da31Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第32天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第32天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da32Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第33天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第33天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da33Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第34天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第34天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da34Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第35天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第35天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da35Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第36天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第36天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da36Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第37天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第37天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da37Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第38天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第38天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da38Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第39天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第39天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da39Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第40天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第40天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da40Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第41天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第41天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da41Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第42天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第42天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da42Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第43天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第43天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da43Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第44天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第44天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da44Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第45天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第45天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da45Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第46天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第46天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da46Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第47天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第47天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da47Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第48天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第48天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da48Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第49天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在49天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da49Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第50天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第50天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da50Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第51天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第51天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da51Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第52天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第52天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da52Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第53天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第53天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da53Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第54天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第54天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da54Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第55天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第55天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da55Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第56天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第56天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da56Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第57天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第57天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da57Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第58天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第58天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da58Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第59天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第59天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da59Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第60天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第60天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da60Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势第61天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势第61天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da61Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第62天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第62天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da62Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第63天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第63天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da63Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第64天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第64天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da64Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第65天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第65天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da65Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第66天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第66天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da66Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第67天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第67天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da67Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第68天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第68天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da68Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第69天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第69天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da69Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第70天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第70天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da70Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第71天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第71天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da71Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第72天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第72天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da72Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第73天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第73天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da73Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第74天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第74天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da74Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第75天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第75天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da75Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第76天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第76天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da76Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第77天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第77天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da77Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第78天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第78天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da78Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第79天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在79天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da79Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第80天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第80天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da80Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第81天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第81天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da81Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第82天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第82天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da82Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第83天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第83天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da83Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第84天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第84天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da84Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第85天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第85天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da85Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第86天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第86天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da86Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第87天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第87天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da87Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第88天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第88天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da88Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第89天:充值金额,充值人数,充值占比
      */
-    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO m2Trend;
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第89天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da89Trend;
 
     /**
-     * 首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比
+     * 首日注册且充值用户复充趋势在第90天:充值金额,充值人数,充值占比
      */
-    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO m3Trend;
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第90天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da90Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第4月:充值金额,充值人数,充值占比
@@ -705,7 +1162,7 @@ public class GameDataFirstNewUserAgainTotalVO {
      * 首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO y1Trend;
+    private FirstNewUserAgainTrendVO m12Trend;
 
     /**
      * 首日注册且充值的用户至今:充值金额,充值人数,充值占比

+ 477 - 19
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataFirstNewUserAgainVO.java

@@ -413,23 +413,133 @@ public class GameDataFirstNewUserAgainVO {
     @ApiModelProperty(value = "不展示")
     private String da29;
 
-    /**
-     * 首日注册且充值用户复充趋势在第30天:充值金额,充值人数,充值占比
-     */
     @ApiModelProperty(value = "不展示")
     private String da30;
+    @ApiModelProperty(value = "不展示")
+    private String da31;
+    @ApiModelProperty(value = "不展示")
+    private String da32;
+    @ApiModelProperty(value = "不展示")
+    private String da33;
+    @ApiModelProperty(value = "不展示")
+    private String da34;
+    @ApiModelProperty(value = "不展示")
+    private String da35;
+    @ApiModelProperty(value = "不展示")
+    private String da36;
+    @ApiModelProperty(value = "不展示")
+    private String da37;
+    @ApiModelProperty(value = "不展示")
+    private String da38;
+    @ApiModelProperty(value = "不展示")
+    private String da39;
 
-    /**
-     * 首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比
-     */
     @ApiModelProperty(value = "不展示")
-    private String m2;
+    private String da40;
+    @ApiModelProperty(value = "不展示")
+    private String da41;
+    @ApiModelProperty(value = "不展示")
+    private String da42;
+    @ApiModelProperty(value = "不展示")
+    private String da43;
+    @ApiModelProperty(value = "不展示")
+    private String da44;
+    @ApiModelProperty(value = "不展示")
+    private String da45;
+    @ApiModelProperty(value = "不展示")
+    private String da46;
+    @ApiModelProperty(value = "不展示")
+    private String da47;
+    @ApiModelProperty(value = "不展示")
+    private String da48;
+    @ApiModelProperty(value = "不展示")
+    private String da49;
 
-    /**
-     * 首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比
-     */
     @ApiModelProperty(value = "不展示")
-    private String m3;
+    private String da50;
+    @ApiModelProperty(value = "不展示")
+    private String da51;
+    @ApiModelProperty(value = "不展示")
+    private String da52;
+    @ApiModelProperty(value = "不展示")
+    private String da53;
+    @ApiModelProperty(value = "不展示")
+    private String da54;
+    @ApiModelProperty(value = "不展示")
+    private String da55;
+    @ApiModelProperty(value = "不展示")
+    private String da56;
+    @ApiModelProperty(value = "不展示")
+    private String da57;
+    @ApiModelProperty(value = "不展示")
+    private String da58;
+    @ApiModelProperty(value = "不展示")
+    private String da59;
+
+    @ApiModelProperty(value = "不展示")
+    private String da60;
+    @ApiModelProperty(value = "不展示")
+    private String da61;
+    @ApiModelProperty(value = "不展示")
+    private String da62;
+    @ApiModelProperty(value = "不展示")
+    private String da63;
+    @ApiModelProperty(value = "不展示")
+    private String da64;
+    @ApiModelProperty(value = "不展示")
+    private String da65;
+    @ApiModelProperty(value = "不展示")
+    private String da66;
+    @ApiModelProperty(value = "不展示")
+    private String da67;
+    @ApiModelProperty(value = "不展示")
+    private String da68;
+    @ApiModelProperty(value = "不展示")
+    private String da69;
+
+    @ApiModelProperty(value = "不展示")
+    private String da70;
+    @ApiModelProperty(value = "不展示")
+    private String da71;
+    @ApiModelProperty(value = "不展示")
+    private String da72;
+    @ApiModelProperty(value = "不展示")
+    private String da73;
+    @ApiModelProperty(value = "不展示")
+    private String da74;
+    @ApiModelProperty(value = "不展示")
+    private String da75;
+    @ApiModelProperty(value = "不展示")
+    private String da76;
+    @ApiModelProperty(value = "不展示")
+    private String da77;
+    @ApiModelProperty(value = "不展示")
+    private String da78;
+    @ApiModelProperty(value = "不展示")
+    private String da79;
+
+    @ApiModelProperty(value = "不展示")
+    private String da80;
+    @ApiModelProperty(value = "不展示")
+    private String da81;
+    @ApiModelProperty(value = "不展示")
+    private String da82;
+    @ApiModelProperty(value = "不展示")
+    private String da83;
+    @ApiModelProperty(value = "不展示")
+    private String da84;
+    @ApiModelProperty(value = "不展示")
+    private String da85;
+    @ApiModelProperty(value = "不展示")
+    private String da86;
+    @ApiModelProperty(value = "不展示")
+    private String da87;
+    @ApiModelProperty(value = "不展示")
+    private String da88;
+    @ApiModelProperty(value = "不展示")
+    private String da89;
+    @ApiModelProperty(value = "不展示")
+    private String da90;
 
     /**
      * 首日注册且充值用户复充趋势在第4月:充值金额,充值人数,充值占比
@@ -483,7 +593,7 @@ public class GameDataFirstNewUserAgainVO {
      * 首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String y1;
+    private String m12;
 
     /**
      * 首日注册且充值的用户至今:充值金额,充值人数,充值占比
@@ -672,16 +782,364 @@ public class GameDataFirstNewUserAgainVO {
     private FirstNewUserAgainTrendVO da30Trend;
 
     /**
-     * 首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比
+     * 首日注册且充值用户复充趋势第31天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势第31天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da31Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第32天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第32天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da32Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第33天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第33天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da33Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第34天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第34天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da34Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第35天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第35天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da35Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第36天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第36天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da36Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第37天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第37天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da37Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第38天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第38天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da38Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第39天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第39天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da39Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第40天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第40天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da40Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第41天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第41天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da41Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第42天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第42天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da42Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第43天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第43天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da43Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第44天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第44天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da44Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第45天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第45天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da45Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第46天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第46天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da46Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第47天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第47天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da47Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第48天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第48天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da48Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第49天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在49天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da49Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第50天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第50天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da50Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第51天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第51天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da51Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第52天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第52天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da52Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第53天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第53天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da53Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第54天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第54天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da54Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第55天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第55天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da55Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第56天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第56天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da56Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第57天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第57天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da57Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第58天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第58天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da58Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第59天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第59天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da59Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第60天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第60天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da60Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势第61天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势第61天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da61Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第62天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第62天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da62Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第63天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第63天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da63Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第64天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第64天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da64Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第65天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第65天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da65Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第66天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第66天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da66Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第67天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第67天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da67Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第68天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第68天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da68Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第69天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第69天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da69Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第70天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第70天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da70Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第71天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第71天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da71Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第72天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第72天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da72Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第73天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第73天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da73Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第74天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第74天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da74Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第75天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第75天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da75Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第76天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第76天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da76Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第77天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第77天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da77Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第78天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第78天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da78Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第79天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在79天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da79Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第80天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第80天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da80Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第81天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第81天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da81Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第82天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第82天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da82Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第83天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第83天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da83Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第84天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第84天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da84Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第85天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第85天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da85Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第86天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第86天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da86Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第87天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第87天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da87Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第88天:充值金额,充值人数,充值占比
+     */
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第88天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da88Trend;
+
+    /**
+     * 首日注册且充值用户复充趋势在第89天:充值金额,充值人数,充值占比
      */
-    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO m2Trend;
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第89天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da89Trend;
 
     /**
-     * 首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比
+     * 首日注册且充值用户复充趋势在第90天:充值金额,充值人数,充值占比
      */
-    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO m3Trend;
+    @ApiModelProperty(value = "首日注册且充值用户复充趋势在第90天:充值金额,充值人数,充值占比")
+    private FirstNewUserAgainTrendVO da90Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第4月:充值金额,充值人数,充值占比
@@ -735,7 +1193,7 @@ public class GameDataFirstNewUserAgainVO {
      * 首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO y1Trend;
+    private FirstNewUserAgainTrendVO m12Trend;
 
     /**
      * 首日注册且充值的用户至今:充值金额,充值人数,充值占比

+ 6 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PromotionDayTotalVO.java

@@ -871,6 +871,12 @@ public class PromotionDayTotalVO {
     @ApiModelProperty(value = "ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)")
     private BigDecimal ltvDay1;
 
+    /**
+     * ltv1(实际数据) (首日新用户充值金额 / 注册人数)
+     */
+    @ApiModelProperty(value = "ltv1(实际数据) (首日新用户充值金额 / 注册人数)")
+    private BigDecimal ltvDay1ActualData;
+
     /**
      * 每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))
      */

+ 6 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PromotionDayVO.java

@@ -1047,6 +1047,12 @@ public class PromotionDayVO {
     @ApiModelProperty(value = "ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)")
     private BigDecimal ltvDay1;
 
+    /**
+     * ltv1(实际数据) (首日新用户充值金额 / 注册人数)
+     */
+    @ApiModelProperty(value = "ltv1(实际数据) (首日新用户充值金额 / 注册人数)")
+    private BigDecimal ltvDay1ActualData;
+
     /**
      * 每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))
      */

+ 123 - 27
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayTotalVO.java

@@ -812,58 +812,148 @@ public class TencentPromotionDayTotalVO {
     private PromotionRechargeTrendVO d15Trend;
 
     /**
-     * 注册人数 (应用下载广告数据-激活数)
+     * 小游戏注册人数
      */
-    @ApiModelProperty(value = "注册人数 (应用下载广告数据-激活数)")
-    private Long active;
+    @ApiModelProperty(value = "小游戏注册人数")
+    private Long miniGameRegisterUsers;
 
     /**
-     * 注册成本 (应用下载广告数据-激活成本)
+     * 小游戏注册成本
      */
-    @ApiModelProperty(value = "注册成本 (应用下载广告数据-激活成本)")
-    private BigDecimal activeCost;
+    @ApiModelProperty(value = "小游戏注册成本")
+    private BigDecimal miniGameRegisterCost;
 
     /**
-     * 首日转化数 (转化数据-转化数)
+     * 小游戏注册率
      */
-    @ApiModelProperty(value = "首日转化数 (转化数据-转化数)")
-    private Long firstConvertCount;
+    @ApiModelProperty(value = "小游戏注册率")
+    private BigDecimal miniGameRegisterRate;
 
     /**
-     * 首日转化成本 (转化数据-转化成本)
+     * 小游戏付费次数
      */
-    @ApiModelProperty(value = "首日转化成本 (转化数据-转化成本)")
-    private BigDecimal firstConvertCost;
+    @ApiModelProperty(value = "小游戏付费次数")
+    private Long miniGamePayingCount;
 
     /**
-     * 首次付费率 (应用下载广告数据-首次付费率)
+     * 小游戏付费金额
      */
-    @ApiModelProperty(value = "首次付费率 (应用下载广告数据-首次付费率)")
-    private BigDecimal firstActivePayRate;
+    @ApiModelProperty(value = "小游戏付费金额")
+    private BigDecimal miniGamePayingAmount;
 
     /**
-     * 首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)
+     * 小游戏首日付费人数
      */
-    @ApiModelProperty(value = "首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)")
-    private BigDecimal firstAttributionGameInAppLtv1day;
+    @ApiModelProperty(value = "小游戏首日付费人数")
+    private Long miniGamePayingUsersD1;
 
     /**
-     * 首日付费ROI (当日付费ROI)
+     * 小游戏首日付费金额
      */
-    @ApiModelProperty(value = "首日付费ROI (当日付费ROI)")
-    private BigDecimal firstAttributionGameInAppRoi1day;
+    @ApiModelProperty(value = "小游戏首日付费金额")
+    private BigDecimal miniGamePayingAmountD1;
 
     /**
-     * 付费次数 (应用下载广告数据-付费次数)
+     * 小游戏3日付费金额
      */
-    @ApiModelProperty(value = "付费次数 (应用下载广告数据-付费次数)")
-    private Long gamePayCount;
+    @ApiModelProperty(value = "小游戏3日付费金额")
+    private BigDecimal miniGamePayingAmountD3;
 
     /**
-     * 付费次数成本
+     * 小游戏7日付费金额
      */
-    @ApiModelProperty(value = "付费次数成本 = 消耗 / 付费次数")
-    private BigDecimal gamePayCountCost;
+    @ApiModelProperty(value = "小游戏7日付费金额")
+    private BigDecimal miniGamePayingAmountD7;
+
+    /**
+     * 小游戏14日付费金额
+     */
+    @ApiModelProperty(value = "小游戏14日付费金额")
+    private BigDecimal miniGamePayingAmountD14;
+
+    /**
+     * 小游戏30日付费金额
+     */
+    @ApiModelProperty(value = "小游戏30日付费金额")
+    private BigDecimal miniGamePayingAmountD30;
+
+    /**
+     * 小游戏首次付费人数
+     */
+    @ApiModelProperty(value = "小游戏首次付费人数")
+    private Long miniGameFirstPayingUsers;
+
+    /**
+     * 小游戏首日付费ROI
+     */
+    @ApiModelProperty(value = "小游戏首日付费ROI")
+    private BigDecimal miniGameFirstDayPayingRoi;
+
+    /**
+     * 小游戏付费ROI
+     */
+    @ApiModelProperty(value = "小游戏付费ROI")
+    private BigDecimal miniGamePayingRoi;
+
+    /**
+     * 小游戏付费ARPU
+     */
+    @ApiModelProperty(value = "小游戏付费ARPU")
+    private BigDecimal miniGamePayingArpu;
+
+    /**
+     * 小游戏3日付费ROI
+     */
+    @ApiModelProperty(value = "小游戏3日付费ROI")
+    private BigDecimal miniGamePayD3Roi;
+
+    /**
+     * 小游戏7日付费ROI
+     */
+    @ApiModelProperty(value = "小游戏7日付费ROI")
+    private BigDecimal miniGamePayD7Roi;
+
+    /**
+     * 小游戏14日付费ROI
+     */
+    @ApiModelProperty(value = "小游戏14日付费ROI")
+    private BigDecimal miniGamePayD14Roi;
+
+    /**
+     * 小游戏30日付费ROI
+     */
+    @ApiModelProperty(value = "小游戏30日付费ROI")
+    private BigDecimal miniGamePayD30Roi;
+
+    /**
+     * 小游戏首日付费次数
+     */
+    @ApiModelProperty(value = "小游戏首日付费次数")
+    private Long minigame1dPayCount;
+
+    /**
+     * 小游戏首24小时付费人数
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费人数")
+    private Long minigame24hPayUv;
+
+    /**
+     * 小游戏首24小时付费金额
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费金额")
+    private BigDecimal minigame24hPayAmount;
+
+    /**
+     * 小游戏首24小时付费ROI
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费ROI")
+    private BigDecimal minigame24hPayRoi;
+
+    /**
+     * 小游戏首24小时付费ARPU
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费ARPU")
+    private BigDecimal minigame24hPayArpu;
 
     /**
      * ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)
@@ -871,6 +961,12 @@ public class TencentPromotionDayTotalVO {
     @ApiModelProperty(value = "ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)")
     private BigDecimal ltvDay1;
 
+    /**
+     * ltv1(实际数据) (首日新用户充值金额 / 注册人数)
+     */
+    @ApiModelProperty(value = "ltv1(实际数据) (首日新用户充值金额 / 注册人数)")
+    private BigDecimal ltvDay1ActualData;
+
     /**
      * 每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))
      */

+ 122 - 27
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/TencentPromotionDayVO.java

@@ -986,60 +986,149 @@ public class TencentPromotionDayVO {
     @ApiModelProperty(value = "15日:ROI/付费/倍数")
     private PromotionRechargeTrendVO d15Trend;
 
+    /**
+     * 小游戏注册人数
+     */
+    @ApiModelProperty(value = "小游戏注册人数")
+    private Long miniGameRegisterUsers;
+
+    /**
+     * 小游戏注册成本
+     */
+    @ApiModelProperty(value = "小游戏注册成本")
+    private BigDecimal miniGameRegisterCost;
+
+    /**
+     * 小游戏注册率
+     */
+    @ApiModelProperty(value = "小游戏注册率")
+    private BigDecimal miniGameRegisterRate;
+
+    /**
+     * 小游戏付费次数
+     */
+    @ApiModelProperty(value = "小游戏付费次数")
+    private Long miniGamePayingCount;
+
+    /**
+     * 小游戏付费金额
+     */
+    @ApiModelProperty(value = "小游戏付费金额")
+    private BigDecimal miniGamePayingAmount;
+
+    /**
+     * 小游戏首日付费人数
+     */
+    @ApiModelProperty(value = "小游戏首日付费人数")
+    private Long miniGamePayingUsersD1;
+
+    /**
+     * 小游戏首日付费金额
+     */
+    @ApiModelProperty(value = "小游戏首日付费金额")
+    private BigDecimal miniGamePayingAmountD1;
+
+    /**
+     * 小游戏3日付费金额
+     */
+    @ApiModelProperty(value = "小游戏3日付费金额")
+    private BigDecimal miniGamePayingAmountD3;
 
     /**
-     * 注册人数 (应用下载广告数据-激活数)
+     * 小游戏7日付费金额
      */
-    @ApiModelProperty(value = "注册人数 (应用下载广告数据-激活数)")
-    private Long active;
+    @ApiModelProperty(value = "小游戏7日付费金额")
+    private BigDecimal miniGamePayingAmountD7;
 
     /**
-     * 注册成本 (应用下载广告数据-激活成本)
+     * 小游戏14日付费金额
      */
-    @ApiModelProperty(value = "注册成本 (应用下载广告数据-激活成本)")
-    private BigDecimal activeCost;
+    @ApiModelProperty(value = "小游戏14日付费金额")
+    private BigDecimal miniGamePayingAmountD14;
 
     /**
-     * 首日转化数 (转化数据-转化数)
+     * 小游戏30日付费金额
      */
-    @ApiModelProperty(value = "首日转化数 (转化数据-转化数)")
-    private Long firstConvertCount;
+    @ApiModelProperty(value = "小游戏30日付费金额")
+    private BigDecimal miniGamePayingAmountD30;
 
     /**
-     * 首日转化成本 (转化数据-转化成本)
+     * 小游戏首次付费人数
      */
-    @ApiModelProperty(value = "首日转化成本 (转化数据-转化成本)")
-    private BigDecimal firstConvertCost;
+    @ApiModelProperty(value = "小游戏首次付费人数")
+    private Long miniGameFirstPayingUsers;
 
     /**
-     * 首次付费率 (应用下载广告数据-首次付费率)
+     * 小游戏首日付费ROI
      */
-    @ApiModelProperty(value = "首次付费率 (应用下载广告数据-首次付费率)")
-    private BigDecimal firstActivePayRate;
+    @ApiModelProperty(value = "小游戏首日付费ROI")
+    private BigDecimal miniGameFirstDayPayingRoi;
 
     /**
-     * 首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)
+     * 小游戏付费ROI
      */
-    @ApiModelProperty(value = "首日付费金额(当日付费金额-所选时间范围内的激活用户,激活当日在APP内的付费金额)")
-    private BigDecimal firstAttributionGameInAppLtv1day;
+    @ApiModelProperty(value = "小游戏付费ROI")
+    private BigDecimal miniGamePayingRoi;
 
     /**
-     * 首日付费ROI (当日付费ROI)
+     * 小游戏付费ARPU
      */
-    @ApiModelProperty(value = "首日付费ROI (当日付费ROI)")
-    private BigDecimal firstAttributionGameInAppRoi1day;
+    @ApiModelProperty(value = "小游戏付费ARPU")
+    private BigDecimal miniGamePayingArpu;
 
     /**
-     * 付费次数 (应用下载广告数据-付费次数)
+     * 小游戏3日付费ROI
      */
-    @ApiModelProperty(value = "付费次数 (应用下载广告数据-付费次数)")
-    private Long gamePayCount;
+    @ApiModelProperty(value = "小游戏3日付费ROI")
+    private BigDecimal miniGamePayD3Roi;
 
     /**
-     * 付费次数成本
+     * 小游戏7日付费ROI
      */
-    @ApiModelProperty(value = "付费次数成本 = 消耗 / 付费次数")
-    private BigDecimal gamePayCountCost;
+    @ApiModelProperty(value = "小游戏7日付费ROI")
+    private BigDecimal miniGamePayD7Roi;
+
+    /**
+     * 小游戏14日付费ROI
+     */
+    @ApiModelProperty(value = "小游戏14日付费ROI")
+    private BigDecimal miniGamePayD14Roi;
+
+    /**
+     * 小游戏30日付费ROI
+     */
+    @ApiModelProperty(value = "小游戏30日付费ROI")
+    private BigDecimal miniGamePayD30Roi;
+
+    /**
+     * 小游戏首日付费次数
+     */
+    @ApiModelProperty(value = "小游戏首日付费次数")
+    private Long minigame1dPayCount;
+
+    /**
+     * 小游戏首24小时付费人数
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费人数")
+    private Long minigame24hPayUv;
+
+    /**
+     * 小游戏首24小时付费金额
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费金额")
+    private BigDecimal minigame24hPayAmount;
+
+    /**
+     * 小游戏首24小时付费ROI
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费ROI")
+    private BigDecimal minigame24hPayRoi;
+
+    /**
+     * 小游戏首24小时付费ARPU
+     */
+    @ApiModelProperty(value = "小游戏首24小时付费ARPU")
+    private BigDecimal minigame24hPayArpu;
 
     /**
      * ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)
@@ -1047,6 +1136,12 @@ public class TencentPromotionDayVO {
     @ApiModelProperty(value = "ltv1 (首日付费金额(attribution_game_in_app_ltv1day) / 注册人数)")
     private BigDecimal ltvDay1;
 
+    /**
+     * ltv1(实际数据) (首日新用户充值金额 / 注册人数)
+     */
+    @ApiModelProperty(value = "ltv1(实际数据) (首日新用户充值金额 / 注册人数)")
+    private BigDecimal ltvDay1ActualData;
+
     /**
      * 每日扣单数 (广告首日总订单数 - 应用下载广告数据-付费次数(game_pay_count))
      */

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

@@ -1170,7 +1170,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                         roi90 AS roi_day90,
                         roi180 AS roi_day180,
                         roi1yaer AS roi_year1,
-                        roi_total AS roiTotal,
+                        roi_total AS roi_total,
                 	first_rate AS first_recharge_rate,
                 	buy_user_rate AS buy_user_recharge_rate,
                 	today_rate AS new_user_recharge_rate,

+ 591 - 303
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -1948,11 +1948,76 @@ public class GameDataServiceImpl implements IGameDataService {
                     buy_amount_d27,
                     buy_amount_d28,
                     buy_amount_d29,
-                    buy_amount_m1,
-                    buy_amount_m2,
-                    buy_amount_m3,
+                    buy_amount_d30,
+                    buy_amount_d31,
+                    buy_amount_d32,
+                    buy_amount_d33,
+                    buy_amount_d34,
+                    buy_amount_d35,
+                    buy_amount_d36,
+                    buy_amount_d37,
+                    buy_amount_d38,
+                    buy_amount_d39,
+                    buy_amount_d40,
+                    buy_amount_d41,
+                    buy_amount_d42,
+                    buy_amount_d43,
+                    buy_amount_d44,
+                    buy_amount_d45,
+                    buy_amount_d46,
+                    buy_amount_d47,
+                    buy_amount_d48,
+                    buy_amount_d49,
+                    buy_amount_d50,
+                    buy_amount_d51,
+                    buy_amount_d52,
+                    buy_amount_d53,
+                    buy_amount_d54,
+                    buy_amount_d55,
+                    buy_amount_d56,
+                    buy_amount_d57,
+                    buy_amount_d58,
+                    buy_amount_d59,
+                    buy_amount_d60,
+                    buy_amount_d61,
+                    buy_amount_d62,
+                    buy_amount_d63,
+                    buy_amount_d64,
+                    buy_amount_d65,
+                    buy_amount_d66,
+                    buy_amount_d67,
+                    buy_amount_d68,
+                    buy_amount_d69,
+                    buy_amount_d70,
+                    buy_amount_d71,
+                    buy_amount_d72,
+                    buy_amount_d73,
+                    buy_amount_d74,
+                    buy_amount_d75,
+                    buy_amount_d76,
+                    buy_amount_d77,
+                    buy_amount_d78,
+                    buy_amount_d79,
+                    buy_amount_d80,
+                    buy_amount_d81,
+                    buy_amount_d82,
+                    buy_amount_d83,
+                    buy_amount_d84,
+                    buy_amount_d85,
+                    buy_amount_d86,
+                    buy_amount_d87,
+                    buy_amount_d88,
+                    buy_amount_d89,
+                    buy_amount_d90,
+                    buy_amount_m4,
+                    buy_amount_m5,
                     buy_amount_m6,
-                    buy_amount_y1,
+                    buy_amount_m7,
+                    buy_amount_m8,
+                    buy_amount_m9,
+                    buy_amount_m10,
+                    buy_amount_m11,
+                    buy_amount_m12,
                     buy_amount_sum,
                     buy_reg_cost,
                     buy_first_amount_cost as buy_first_new_user_recharge_cost,
@@ -2023,11 +2088,76 @@ public class GameDataServiceImpl implements IGameDataService {
                     nature_amount_d27,
                     nature_amount_d28,
                     nature_amount_d29,
-                    nature_amount_m1,
-                    nature_amount_m2,
-                    nature_amount_m3,
+                    nature_amount_d30,
+                    nature_amount_d31,
+                    nature_amount_d32,
+                    nature_amount_d33,
+                    nature_amount_d34,
+                    nature_amount_d35,
+                    nature_amount_d36,
+                    nature_amount_d37,
+                    nature_amount_d38,
+                    nature_amount_d39,
+                    nature_amount_d40,
+                    nature_amount_d41,
+                    nature_amount_d42,
+                    nature_amount_d43,
+                    nature_amount_d44,
+                    nature_amount_d45,
+                    nature_amount_d46,
+                    nature_amount_d47,
+                    nature_amount_d48,
+                    nature_amount_d49,
+                    nature_amount_d50,
+                    nature_amount_d51,
+                    nature_amount_d52,
+                    nature_amount_d53,
+                    nature_amount_d54,
+                    nature_amount_d55,
+                    nature_amount_d56,
+                    nature_amount_d57,
+                    nature_amount_d58,
+                    nature_amount_d59,
+                    nature_amount_d60,
+                    nature_amount_d61,
+                    nature_amount_d62,
+                    nature_amount_d63,
+                    nature_amount_d64,
+                    nature_amount_d65,
+                    nature_amount_d66,
+                    nature_amount_d67,
+                    nature_amount_d68,
+                    nature_amount_d69,
+                    nature_amount_d70,
+                    nature_amount_d71,
+                    nature_amount_d72,
+                    nature_amount_d73,
+                    nature_amount_d74,
+                    nature_amount_d75,
+                    nature_amount_d76,
+                    nature_amount_d77,
+                    nature_amount_d78,
+                    nature_amount_d79,
+                    nature_amount_d80,
+                    nature_amount_d81,
+                    nature_amount_d82,
+                    nature_amount_d83,
+                    nature_amount_d84,
+                    nature_amount_d85,
+                    nature_amount_d86,
+                    nature_amount_d87,
+                    nature_amount_d88,
+                    nature_amount_d89,
+                    nature_amount_d90,
+                    nature_amount_m4,
+                    nature_amount_m5,
                     nature_amount_m6,
-                    nature_amount_y1,
+                    nature_amount_m7,
+                    nature_amount_m8,
+                    nature_amount_m9,
+                    nature_amount_m10,
+                    nature_amount_m11,
+                    nature_amount_m12,
                     nature_amount_sum,
                     nature_reg_cost,
                     nature_first_amount_cost as nature_first_new_user_recharge_cost,
@@ -2098,11 +2228,76 @@ public class GameDataServiceImpl implements IGameDataService {
                     amount_d27,
                     amount_d28,
                     amount_d29,
-                    amount_m1,
-                    amount_m2,
-                    amount_m3,
+                    amount_d30,
+                    amount_d31,
+                    amount_d32,
+                    amount_d33,
+                    amount_d34,
+                    amount_d35,
+                    amount_d36,
+                    amount_d37,
+                    amount_d38,
+                    amount_d39,
+                    amount_d40,
+                    amount_d41,
+                    amount_d42,
+                    amount_d43,
+                    amount_d44,
+                    amount_d45,
+                    amount_d46,
+                    amount_d47,
+                    amount_d48,
+                    amount_d49,
+                    amount_d50,
+                    amount_d51,
+                    amount_d52,
+                    amount_d53,
+                    amount_d54,
+                    amount_d55,
+                    amount_d56,
+                    amount_d57,
+                    amount_d58,
+                    amount_d59,
+                    amount_d60,
+                    amount_d61,
+                    amount_d62,
+                    amount_d63,
+                    amount_d64,
+                    amount_d65,
+                    amount_d66,
+                    amount_d67,
+                    amount_d68,
+                    amount_d69,
+                    amount_d70,
+                    amount_d71,
+                    amount_d72,
+                    amount_d73,
+                    amount_d74,
+                    amount_d75,
+                    amount_d76,
+                    amount_d77,
+                    amount_d78,
+                    amount_d79,
+                    amount_d80,
+                    amount_d81,
+                    amount_d82,
+                    amount_d83,
+                    amount_d84,
+                    amount_d85,
+                    amount_d86,
+                    amount_d87,
+                    amount_d88,
+                    amount_d89,
+                    amount_d90,
+                    amount_m4,
+                    amount_m5,
                     amount_m6,
-                    amount_y1,
+                    amount_m7,
+                    amount_m8,
+                    amount_m9,
+                    amount_m10,
+                    amount_m11,
+                    amount_m12,
                     amount_sum,
                     reg_cost,
                     first_amount_cost as first_new_user_recharge_cost,
@@ -2132,272 +2327,139 @@ public class GameDataServiceImpl implements IGameDataService {
     private String gameDataDayTotalSql() {
         return """
                 SELECT
-                IFNULL(SUM(cost), 0) cost,
-                                
-                IFNULL(SUM(buy_reg_num), 0) buy_reg_num,
-                IFNULL(SUM(nature_reg_num), 0) nature_reg_num,
-                IFNULL(SUM(reg_num), 0) reg_num,
-                                
-                """
-                + amountDay("buy_") +
-                """
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now() , CAST(SPLIT_PART(buy_amount_m1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_m1, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(buy_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(buy_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS buy_amount_m1,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now() , CAST(SPLIT_PART(buy_amount_m2 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_m2, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(buy_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(buy_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS buy_amount_m2,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now() , CAST(SPLIT_PART(buy_amount_m3 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_m3, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(buy_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(buy_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS buy_amount_m3,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now() , CAST(SPLIT_PART(buy_amount_m6 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_m6, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(buy_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(buy_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS buy_amount_m6,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now() , CAST(SPLIT_PART(buy_amount_y1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_y1, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(buy_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(buy_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS buy_amount_y1,
-                        CONCAT(
-                        	SUM(CAST(SPLIT_PART(buy_amount_sum , '/', 1) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_sum, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_sum, '/', 2) AS BIGINT)), '/',
-                            SUM(cost), '/',
-                            SUM(CAST(SPLIT_PART(buy_amount_d1 , '/', 1) AS DECIMAL(10, 2)))
-                            ) AS buy_amount_sum,
-                        IFNULL(SUM(buy_first_new_user_amount_count), 0) buy_first_new_user_amount_count,
-                        IFNULL(SUM(buy_first_new_user_amount_num), 0) buy_first_new_user_amount_num,
-                        IFNULL(SUM(buy_first_new_user_amount), 0) buy_first_new_user_amount,
-                        IFNULL(SUM(buy_old_user_count), 0) buy_old_user_count,
-                        IFNULL(SUM(buy_old_user_num), 0) buy_old_user_num,
-                        IFNULL(SUM(buy_old_user_amount), 0) buy_old_user_amount,
-                        IFNULL(SUM(buy_amount_count), 0) buy_amount_count,
-                        IFNULL(SUM(buy_amount_num), 0) buy_amount_num,
-                        IFNULL(SUM(buy_amount), 0) buy_amount,
-                        IFNULL(SUM(buy_new_user_total_amount_count), 0) buy_new_user_total_amount_count,
-                        IFNULL(SUM(buy_new_user_total_amount_num), 0) buy_new_user_total_amount_num,
-                        IFNULL(SUM(buy_new_user_total_amount), 0) buy_new_user_total_amount,
-                        round(if(SUM(cost) > 0 , SUM(buy_first_new_user_amount) / SUM(cost) ,0), 4) buy_first_roi,
-                        round(if(SUM(buy_reg_num) > 0 , SUM(buy_first_new_user_amount_num) / SUM(buy_reg_num) ,0), 4) buy_first_amount_rate,
-                        round(if(SUM(buy_reg_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(buy_reg_num), 0) ,4) buy_today_amount_rate,
-                        round(if(SUM(buy_amount_num) > 0 , SUM(buy_first_new_user_amount_num) / SUM(buy_amount_num) ,0), 4) buy_new_user_rate,
-                        round(if(SUM(buy_first_new_user_amount_count) > 0, SUM(buy_first_new_user_amount) / SUM(buy_first_new_user_amount_count), 0), 2) buy_first_avg_amount,
-                        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) buy_today_avg_amount,
-                        round(if(SUM(buy_amount_count) > 0, SUM(buy_amount) / SUM(buy_amount_count), 0), 2) buy_avg_amount,
-                        round(if(SUM(buy_new_user_total_amount_num) > 0, SUM(buy_reg_order_user_again) / SUM(buy_new_user_total_amount_num), 0), 4) buy_user_again_rate,
-                        round(if(SUM(buy_reg_num) > 0, SUM(buy_new_user_total_amount) / SUM(buy_reg_num), 0), 2) buy_reg_user_arpu,
-                        round(if(SUM(buy_first_new_user_amount_num) > 0 , SUM(buy_first_new_user_amount) / SUM(buy_first_new_user_amount_num), 0), 2) buy_first_amount_arpu,
-                        round(if(SUM(buy_new_user_total_amount_num) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_num), 0), 2) buy_today_amount_arpu,
-                        round(if(SUM(buy_amount_num) > 0, SUM(buy_amount) / SUM(buy_amount_num), 0), 2) buy_amount_arpu,
-                        round(if(SUM(buy_reg_num) > 0, SUM(cost) / SUM(buy_reg_num), 0), 2) buy_reg_cost,
-                        round(if(SUM(buy_first_new_user_amount_num) > 0, SUM(cost) / SUM(buy_first_new_user_amount_num), 0), 2) buy_first_new_user_recharge_cost,
-                        round(if(SUM(buy_new_user_total_amount_num) > 0, SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) buy_total_recharge_cost,
-                        round(if(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) buy_total_roi,
-                        SUM(buy_hundred_user_num) buy_hundred_user_num,
-                        round(IF(SUM(buy_hundred_user_num) > 0, SUM(cost) / SUM(buy_hundred_user_num), 0), 2) buy_hundred_user_num_cost,
-                        SUM(buy_first_role_num) buy_first_role_num,
-                        SUM(buy_role_num) buy_role_num,
-                        SUM(buy_new_user_total_role_num) buy_new_user_total_role_num,
-                        round(IF(SUM(buy_first_role_num) > 0, SUM(cost) / SUM(buy_first_role_num), 0), 2) buy_first_role_num_cost,
-                        round(IF(SUM(buy_role_num) > 0, SUM(cost) / SUM(buy_role_num), 0), 2) buy_role_num_cost,
-                        round(IF(SUM(buy_new_user_total_role_num) >0, SUM(cost) / SUM(buy_new_user_total_role_num), 0), 2) buy_new_user_total_role_num_cost,
-                        round(IF(SUM(buy_reg_num) >0, SUM(buy_first_role_num) / SUM(buy_reg_num), 0), 4) buy_first_role_num_rate,
-                        round(IF(SUM(buy_reg_num) >0, SUM(buy_role_num) / SUM(buy_reg_num), 0), 4) buy_role_num_rate,
-                        round(IF(SUM(buy_reg_num) >0, SUM(buy_new_user_total_role_num) / SUM(buy_reg_num), 0), 4) buy_new_user_total_role_num_rate,
-                                        
-                        """
-                + amountDay("nature_") +
-                """
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now() , CAST(SPLIT_PART(nature_amount_m1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_m1, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(nature_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(nature_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS nature_amount_m1,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now() , CAST(SPLIT_PART(nature_amount_m2 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_m2, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(nature_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(nature_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS nature_amount_m2,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now() , CAST(SPLIT_PART(nature_amount_m3 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_m3, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(nature_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(nature_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS nature_amount_m3,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now() , CAST(SPLIT_PART(nature_amount_m6 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_m6, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(nature_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(nature_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS nature_amount_m6,
-                        CONCAT(
-                        	SUM(IF( DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now() , CAST(SPLIT_PART(nature_amount_y1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_y1, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(nature_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(nature_amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
-                            ) AS nature_amount_y1,
-                        CONCAT(
-                        	SUM(CAST(SPLIT_PART(nature_amount_sum , '/', 1) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_sum, '/', 6) AS DECIMAL(10, 2))), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_sum, '/', 2) AS BIGINT)), '/',
-                            SUM(cost), '/',
-                            SUM(CAST(SPLIT_PART(nature_amount_d1 , '/', 1) AS DECIMAL(10, 2)))
-                            ) AS nature_amount_sum,
-                        IFNULL(SUM(nature_first_new_user_amount_count), 0) nature_first_new_user_amount_count,
-                        IFNULL(SUM(nature_first_new_user_amount_num), 0) nature_first_new_user_amount_num,
-                        IFNULL(SUM(nature_first_new_user_amount), 0) nature_first_new_user_amount,
-                        IFNULL(SUM(nature_old_user_count), 0) nature_old_user_count,
-                        IFNULL(SUM(nature_old_user_num), 0) nature_old_user_num,
-                        IFNULL(SUM(nature_old_user_amount), 0) nature_old_user_amount,
-                        IFNULL(SUM(nature_amount_count), 0) nature_amount_count,
-                        IFNULL(SUM(nature_amount_num), 0) nature_amount_num,
-                        IFNULL(SUM(nature_amount), 0) nature_amount,
-                        IFNULL(SUM(nature_new_user_total_amount_count), 0) nature_new_user_total_amount_count,
-                        IFNULL(SUM(nature_new_user_total_amount_num), 0) nature_new_user_total_amount_num,
-                        IFNULL(SUM(nature_new_user_total_amount), 0) nature_new_user_total_amount,
-                        round(if(SUM(cost) > 0 , SUM(nature_first_new_user_amount) / SUM(cost) ,0), 4) nature_first_roi,
-                        round(if(SUM(nature_reg_num) > 0 , SUM(nature_first_new_user_amount_num) / SUM(nature_reg_num) ,0), 4) nature_first_amount_rate,
-                        round(if(SUM(nature_reg_num) > 0, SUM(nature_new_user_total_amount_num) / SUM(nature_reg_num), 0) ,4) nature_today_amount_rate,
-                        round(if(SUM(nature_amount_num) > 0 , SUM(nature_first_new_user_amount_num) / SUM(nature_amount_num) ,0), 4) nature_new_user_rate,
-                        round(if(SUM(nature_first_new_user_amount_count) > 0, SUM(nature_first_new_user_amount) / SUM(nature_first_new_user_amount_count), 0), 2) nature_first_avg_amount,
-                        round(if(SUM(nature_new_user_total_amount_count) > 0, SUM(nature_new_user_total_amount) / SUM(nature_new_user_total_amount_count), 0), 2) nature_today_avg_amount,
-                        round(if(SUM(nature_amount_count) > 0, SUM(nature_amount) / SUM(nature_amount_count), 0), 2) nature_avg_amount,
-                        round(if(SUM(nature_new_user_total_amount_num) > 0, SUM(nature_reg_order_user_again) / SUM(nature_new_user_total_amount_num), 0), 4) nature_user_again_rate,
-                        round(if(SUM(nature_reg_num) > 0, SUM(nature_new_user_total_amount) / SUM(nature_reg_num), 0), 2) nature_reg_user_arpu,
-                        round(if(SUM(nature_first_new_user_amount_num) > 0 , SUM(nature_first_new_user_amount) / SUM(nature_first_new_user_amount_num), 0), 2) nature_first_amount_arpu,
-                        round(if(SUM(nature_new_user_total_amount_num) > 0 , SUM(nature_new_user_total_amount) / SUM(nature_new_user_total_amount_num), 0), 2) nature_today_amount_arpu,
-                        round(if(SUM(nature_amount_num) > 0, SUM(nature_amount) / SUM(nature_amount_num), 0), 2) nature_amount_arpu,
-                        round(if(SUM(nature_reg_num) > 0, SUM(cost) / SUM(nature_reg_num), 0), 2) nature_reg_cost,
-                        round(if(SUM(nature_first_new_user_amount_num) > 0, SUM(cost) / SUM(nature_first_new_user_amount_num), 0), 2) nature_first_new_user_recharge_cost,
-                        round(if(SUM(nature_new_user_total_amount_num) > 0, SUM(cost) / SUM(nature_new_user_total_amount_num), 0), 2) nature_total_recharge_cost,
-                        round(if(SUM(cost) > 0, SUM(nature_new_user_total_amount) / SUM(cost), 0), 4) nature_total_roi,
-                        SUM(nature_hundred_user_num) nature_hundred_user_num,
-                        round(IF(SUM(nature_hundred_user_num) > 0, SUM(cost) / SUM(nature_hundred_user_num), 0), 2) nature_hundred_user_num_cost,
-                        SUM(nature_first_role_num) nature_first_role_num,
-                        SUM(nature_role_num) nature_role_num,
-                        SUM(nature_new_user_total_role_num) nature_new_user_total_role_num,
-                        round(IF(SUM(nature_first_role_num) > 0, SUM(cost) / SUM(nature_first_role_num), 0), 2) nature_first_role_num_cost,
-                        round(IF(SUM(nature_role_num) > 0, SUM(cost) / SUM(nature_role_num), 0), 2) nature_role_num_cost,
-                        round(IF(SUM(nature_new_user_total_role_num) >0, SUM(cost) / SUM(nature_new_user_total_role_num), 0), 2) nature_new_user_total_role_num_cost,
-                        round(IF(SUM(nature_reg_num) >0, SUM(nature_first_role_num) / SUM(nature_reg_num), 0), 4) nature_first_role_num_rate,
-                        round(IF(SUM(nature_reg_num) >0, SUM(nature_role_num) / SUM(nature_reg_num), 0), 4) nature_role_num_rate,
-                        round(IF(SUM(nature_reg_num) >0, SUM(nature_new_user_total_role_num) / SUM(nature_reg_num), 0), 4) nature_new_user_total_role_num_rate,
-                                        
-                        """
-                + amountDay("") +
-                """
-                        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,
-                        IFNULL(SUM(first_new_user_amount_count), 0) first_new_user_amount_count,
-                        IFNULL(SUM(first_new_user_amount_num), 0) first_new_user_amount_num,
-                        IFNULL(SUM(first_new_user_amount), 0) first_new_user_amount,
-                        IFNULL(SUM(old_user_count), 0) old_user_count,
-                        IFNULL(SUM(old_user_num), 0) old_user_num,
-                        IFNULL(SUM(old_user_amount), 0) old_user_amount,
-                        IFNULL(SUM(amount_count), 0) amount_count,
-                        IFNULL(SUM(amount_num), 0) amount_num,
-                        IFNULL(SUM(amount), 0) amount,
-                        IFNULL(SUM(new_user_total_amount_count), 0) new_user_total_amount_count,
-                        IFNULL(SUM(new_user_total_amount_num), 0) new_user_total_amount_num,
-                        IFNULL(SUM(new_user_total_amount), 0) new_user_total_amount,
-                        round(if(SUM(cost) > 0 , SUM(first_new_user_amount) / SUM(cost) ,0), 4) first_roi,
-                        round(if(SUM(reg_num) > 0 , SUM(first_new_user_amount_num) / SUM(reg_num) ,0), 4) first_amount_rate,
-                        round(if(SUM(reg_num) > 0, SUM(new_user_total_amount_num) / SUM(reg_num), 0) ,4) today_amount_rate,
-                        round(if(SUM(amount_num) > 0 , SUM(first_new_user_amount_num) / SUM(amount_num) ,0), 4) new_user_rate,
-                        round(if(SUM(first_new_user_amount_count) > 0, SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) first_avg_amount,
-                        round(if(SUM(new_user_total_amount_count) > 0, SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) today_avg_amount,
-                        round(if(SUM(amount_count) > 0, SUM(amount) / SUM(amount_count), 0), 2) avg_amount,
-                        round(if(SUM(new_user_total_amount_num) > 0, SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) user_again_rate,
-                        round(if(SUM(reg_num) > 0, SUM(new_user_total_amount) / SUM(reg_num), 0), 2) reg_user_arpu,
-                        round(if(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) first_amount_arpu,
-                        round(if(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) today_amount_arpu,
-                        round(if(SUM(amount_num) > 0, SUM(amount) / SUM(amount_num), 0), 2) amount_arpu,
-                        round(if(SUM(reg_num) > 0, SUM(cost) / SUM(reg_num), 0), 2) reg_cost,
-                        round(if(SUM(first_new_user_amount_num) > 0, SUM(cost) / SUM(first_new_user_amount_num), 0), 2) first_new_user_recharge_cost,
-                        round(if(SUM(new_user_total_amount_num) > 0, SUM(cost) / SUM(new_user_total_amount_num), 0), 2) total_recharge_cost,
-                        round(if(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) total_roi,
-                        SUM(hundred_user_num) hundred_user_num,
-                        round(IF(SUM(hundred_user_num) > 0, SUM(cost) / SUM(hundred_user_num), 0), 2) hundred_user_num_cost,
-                        SUM(first_role_num) first_role_num,
-                        SUM(role_num) role_num,
-                        SUM(new_user_total_role_num) new_user_total_role_num,
-                        round(IF(SUM(first_role_num) > 0, SUM(cost) / SUM(first_role_num), 0), 2) first_role_num_cost,
-                        round(IF(SUM(role_num) > 0, SUM(cost) / SUM(role_num), 0), 2) role_num_cost,
-                        round(IF(SUM(new_user_total_role_num) >0, SUM(cost) / SUM(new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
-                        round(IF(SUM(reg_num) >0, SUM(first_role_num) / SUM(reg_num), 0), 4) first_role_num_rate,
-                        round(IF(SUM(reg_num) >0, SUM(role_num) / SUM(reg_num), 0), 4) role_num_rate,
-                        round(IF(SUM(reg_num) >0, SUM(new_user_total_role_num) / SUM(reg_num), 0), 4) new_user_total_role_num_rate
-                                        
-                        FROM
-                        ads_game_day
-                         
-                                        
-                        """;
+                    IFNULL(SUM(cost), 0) cost,
+                    IFNULL(SUM(buy_reg_num), 0) buy_reg_num,
+                    IFNULL(SUM(nature_reg_num), 0) nature_reg_num,
+                    IFNULL(SUM(reg_num), 0) reg_num,
+                    """
+                    + amountDay("buy_") +
+                    """
+                    IFNULL(SUM(buy_first_new_user_amount_count), 0) buy_first_new_user_amount_count,
+                    IFNULL(SUM(buy_first_new_user_amount_num), 0) buy_first_new_user_amount_num,
+                    IFNULL(SUM(buy_first_new_user_amount), 0) buy_first_new_user_amount,
+                    IFNULL(SUM(buy_old_user_count), 0) buy_old_user_count,
+                    IFNULL(SUM(buy_old_user_num), 0) buy_old_user_num,
+                    IFNULL(SUM(buy_old_user_amount), 0) buy_old_user_amount,
+                    IFNULL(SUM(buy_amount_count), 0) buy_amount_count,
+                    IFNULL(SUM(buy_amount_num), 0) buy_amount_num,
+                    IFNULL(SUM(buy_amount), 0) buy_amount,
+                    IFNULL(SUM(buy_new_user_total_amount_count), 0) buy_new_user_total_amount_count,
+                    IFNULL(SUM(buy_new_user_total_amount_num), 0) buy_new_user_total_amount_num,
+                    IFNULL(SUM(buy_new_user_total_amount), 0) buy_new_user_total_amount,
+                    round(if(SUM(cost) > 0 , SUM(buy_first_new_user_amount) / SUM(cost) ,0), 4) buy_first_roi,
+                    round(if(SUM(buy_reg_num) > 0 , SUM(buy_first_new_user_amount_num) / SUM(buy_reg_num) ,0), 4) buy_first_amount_rate,
+                    round(if(SUM(buy_reg_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(buy_reg_num), 0) ,4) buy_today_amount_rate,
+                    round(if(SUM(buy_amount_num) > 0 , SUM(buy_first_new_user_amount_num) / SUM(buy_amount_num) ,0), 4) buy_new_user_rate,
+                    round(if(SUM(buy_first_new_user_amount_count) > 0, SUM(buy_first_new_user_amount) / SUM(buy_first_new_user_amount_count), 0), 2) buy_first_avg_amount,
+                    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) buy_today_avg_amount,
+                    round(if(SUM(buy_amount_count) > 0, SUM(buy_amount) / SUM(buy_amount_count), 0), 2) buy_avg_amount,
+                    round(if(SUM(buy_new_user_total_amount_num) > 0, SUM(buy_reg_order_user_again) / SUM(buy_new_user_total_amount_num), 0), 4) buy_user_again_rate,
+                    round(if(SUM(buy_reg_num) > 0, SUM(buy_new_user_total_amount) / SUM(buy_reg_num), 0), 2) buy_reg_user_arpu,
+                    round(if(SUM(buy_first_new_user_amount_num) > 0 , SUM(buy_first_new_user_amount) / SUM(buy_first_new_user_amount_num), 0), 2) buy_first_amount_arpu,
+                    round(if(SUM(buy_new_user_total_amount_num) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_num), 0), 2) buy_today_amount_arpu,
+                    round(if(SUM(buy_amount_num) > 0, SUM(buy_amount) / SUM(buy_amount_num), 0), 2) buy_amount_arpu,
+                    round(if(SUM(buy_reg_num) > 0, SUM(cost) / SUM(buy_reg_num), 0), 2) buy_reg_cost,
+                    round(if(SUM(buy_first_new_user_amount_num) > 0, SUM(cost) / SUM(buy_first_new_user_amount_num), 0), 2) buy_first_new_user_recharge_cost,
+                    round(if(SUM(buy_new_user_total_amount_num) > 0, SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) buy_total_recharge_cost,
+                    round(if(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) buy_total_roi,
+                    SUM(buy_hundred_user_num) buy_hundred_user_num,
+                    round(IF(SUM(buy_hundred_user_num) > 0, SUM(cost) / SUM(buy_hundred_user_num), 0), 2) buy_hundred_user_num_cost,
+                    SUM(buy_first_role_num) buy_first_role_num,
+                    SUM(buy_role_num) buy_role_num,
+                    SUM(buy_new_user_total_role_num) buy_new_user_total_role_num,
+                    round(IF(SUM(buy_first_role_num) > 0, SUM(cost) / SUM(buy_first_role_num), 0), 2) buy_first_role_num_cost,
+                    round(IF(SUM(buy_role_num) > 0, SUM(cost) / SUM(buy_role_num), 0), 2) buy_role_num_cost,
+                    round(IF(SUM(buy_new_user_total_role_num) >0, SUM(cost) / SUM(buy_new_user_total_role_num), 0), 2) buy_new_user_total_role_num_cost,
+                    round(IF(SUM(buy_reg_num) >0, SUM(buy_first_role_num) / SUM(buy_reg_num), 0), 4) buy_first_role_num_rate,
+                    round(IF(SUM(buy_reg_num) >0, SUM(buy_role_num) / SUM(buy_reg_num), 0), 4) buy_role_num_rate,
+                    round(IF(SUM(buy_reg_num) >0, SUM(buy_new_user_total_role_num) / SUM(buy_reg_num), 0), 4) buy_new_user_total_role_num_rate,
+                    """
+                    + amountDay("nature_") +
+                    """
+                    IFNULL(SUM(nature_first_new_user_amount_count), 0) nature_first_new_user_amount_count,
+                    IFNULL(SUM(nature_first_new_user_amount_num), 0) nature_first_new_user_amount_num,
+                    IFNULL(SUM(nature_first_new_user_amount), 0) nature_first_new_user_amount,
+                    IFNULL(SUM(nature_old_user_count), 0) nature_old_user_count,
+                    IFNULL(SUM(nature_old_user_num), 0) nature_old_user_num,
+                    IFNULL(SUM(nature_old_user_amount), 0) nature_old_user_amount,
+                    IFNULL(SUM(nature_amount_count), 0) nature_amount_count,
+                    IFNULL(SUM(nature_amount_num), 0) nature_amount_num,
+                    IFNULL(SUM(nature_amount), 0) nature_amount,
+                    IFNULL(SUM(nature_new_user_total_amount_count), 0) nature_new_user_total_amount_count,
+                    IFNULL(SUM(nature_new_user_total_amount_num), 0) nature_new_user_total_amount_num,
+                    IFNULL(SUM(nature_new_user_total_amount), 0) nature_new_user_total_amount,
+                    round(if(SUM(cost) > 0 , SUM(nature_first_new_user_amount) / SUM(cost) ,0), 4) nature_first_roi,
+                    round(if(SUM(nature_reg_num) > 0 , SUM(nature_first_new_user_amount_num) / SUM(nature_reg_num) ,0), 4) nature_first_amount_rate,
+                    round(if(SUM(nature_reg_num) > 0, SUM(nature_new_user_total_amount_num) / SUM(nature_reg_num), 0) ,4) nature_today_amount_rate,
+                    round(if(SUM(nature_amount_num) > 0 , SUM(nature_first_new_user_amount_num) / SUM(nature_amount_num) ,0), 4) nature_new_user_rate,
+                    round(if(SUM(nature_first_new_user_amount_count) > 0, SUM(nature_first_new_user_amount) / SUM(nature_first_new_user_amount_count), 0), 2) nature_first_avg_amount,
+                    round(if(SUM(nature_new_user_total_amount_count) > 0, SUM(nature_new_user_total_amount) / SUM(nature_new_user_total_amount_count), 0), 2) nature_today_avg_amount,
+                    round(if(SUM(nature_amount_count) > 0, SUM(nature_amount) / SUM(nature_amount_count), 0), 2) nature_avg_amount,
+                    round(if(SUM(nature_new_user_total_amount_num) > 0, SUM(nature_reg_order_user_again) / SUM(nature_new_user_total_amount_num), 0), 4) nature_user_again_rate,
+                    round(if(SUM(nature_reg_num) > 0, SUM(nature_new_user_total_amount) / SUM(nature_reg_num), 0), 2) nature_reg_user_arpu,
+                    round(if(SUM(nature_first_new_user_amount_num) > 0 , SUM(nature_first_new_user_amount) / SUM(nature_first_new_user_amount_num), 0), 2) nature_first_amount_arpu,
+                    round(if(SUM(nature_new_user_total_amount_num) > 0 , SUM(nature_new_user_total_amount) / SUM(nature_new_user_total_amount_num), 0), 2) nature_today_amount_arpu,
+                    round(if(SUM(nature_amount_num) > 0, SUM(nature_amount) / SUM(nature_amount_num), 0), 2) nature_amount_arpu,
+                    round(if(SUM(nature_reg_num) > 0, SUM(cost) / SUM(nature_reg_num), 0), 2) nature_reg_cost,
+                    round(if(SUM(nature_first_new_user_amount_num) > 0, SUM(cost) / SUM(nature_first_new_user_amount_num), 0), 2) nature_first_new_user_recharge_cost,
+                    round(if(SUM(nature_new_user_total_amount_num) > 0, SUM(cost) / SUM(nature_new_user_total_amount_num), 0), 2) nature_total_recharge_cost,
+                    round(if(SUM(cost) > 0, SUM(nature_new_user_total_amount) / SUM(cost), 0), 4) nature_total_roi,
+                    SUM(nature_hundred_user_num) nature_hundred_user_num,
+                    round(IF(SUM(nature_hundred_user_num) > 0, SUM(cost) / SUM(nature_hundred_user_num), 0), 2) nature_hundred_user_num_cost,
+                    SUM(nature_first_role_num) nature_first_role_num,
+                    SUM(nature_role_num) nature_role_num,
+                    SUM(nature_new_user_total_role_num) nature_new_user_total_role_num,
+                    round(IF(SUM(nature_first_role_num) > 0, SUM(cost) / SUM(nature_first_role_num), 0), 2) nature_first_role_num_cost,
+                    round(IF(SUM(nature_role_num) > 0, SUM(cost) / SUM(nature_role_num), 0), 2) nature_role_num_cost,
+                    round(IF(SUM(nature_new_user_total_role_num) >0, SUM(cost) / SUM(nature_new_user_total_role_num), 0), 2) nature_new_user_total_role_num_cost,
+                    round(IF(SUM(nature_reg_num) >0, SUM(nature_first_role_num) / SUM(nature_reg_num), 0), 4) nature_first_role_num_rate,
+                    round(IF(SUM(nature_reg_num) >0, SUM(nature_role_num) / SUM(nature_reg_num), 0), 4) nature_role_num_rate,
+                    round(IF(SUM(nature_reg_num) >0, SUM(nature_new_user_total_role_num) / SUM(nature_reg_num), 0), 4) nature_new_user_total_role_num_rate,
+                    """
+                    + amountDay("") +
+                    """
+                    IFNULL(SUM(first_new_user_amount_count), 0) first_new_user_amount_count,
+                    IFNULL(SUM(first_new_user_amount_num), 0) first_new_user_amount_num,
+                    IFNULL(SUM(first_new_user_amount), 0) first_new_user_amount,
+                    IFNULL(SUM(old_user_count), 0) old_user_count,
+                    IFNULL(SUM(old_user_num), 0) old_user_num,
+                    IFNULL(SUM(old_user_amount), 0) old_user_amount,
+                    IFNULL(SUM(amount_count), 0) amount_count,
+                    IFNULL(SUM(amount_num), 0) amount_num,
+                    IFNULL(SUM(amount), 0) amount,
+                    IFNULL(SUM(new_user_total_amount_count), 0) new_user_total_amount_count,
+                    IFNULL(SUM(new_user_total_amount_num), 0) new_user_total_amount_num,
+                    IFNULL(SUM(new_user_total_amount), 0) new_user_total_amount,
+                    round(if(SUM(cost) > 0 , SUM(first_new_user_amount) / SUM(cost) ,0), 4) first_roi,
+                    round(if(SUM(reg_num) > 0 , SUM(first_new_user_amount_num) / SUM(reg_num) ,0), 4) first_amount_rate,
+                    round(if(SUM(reg_num) > 0, SUM(new_user_total_amount_num) / SUM(reg_num), 0) ,4) today_amount_rate,
+                    round(if(SUM(amount_num) > 0 , SUM(first_new_user_amount_num) / SUM(amount_num) ,0), 4) new_user_rate,
+                    round(if(SUM(first_new_user_amount_count) > 0, SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) first_avg_amount,
+                    round(if(SUM(new_user_total_amount_count) > 0, SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) today_avg_amount,
+                    round(if(SUM(amount_count) > 0, SUM(amount) / SUM(amount_count), 0), 2) avg_amount,
+                    round(if(SUM(new_user_total_amount_num) > 0, SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) user_again_rate,
+                    round(if(SUM(reg_num) > 0, SUM(new_user_total_amount) / SUM(reg_num), 0), 2) reg_user_arpu,
+                    round(if(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) first_amount_arpu,
+                    round(if(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) today_amount_arpu,
+                    round(if(SUM(amount_num) > 0, SUM(amount) / SUM(amount_num), 0), 2) amount_arpu,
+                    round(if(SUM(reg_num) > 0, SUM(cost) / SUM(reg_num), 0), 2) reg_cost,
+                    round(if(SUM(first_new_user_amount_num) > 0, SUM(cost) / SUM(first_new_user_amount_num), 0), 2) first_new_user_recharge_cost,
+                    round(if(SUM(new_user_total_amount_num) > 0, SUM(cost) / SUM(new_user_total_amount_num), 0), 2) total_recharge_cost,
+                    round(if(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) total_roi,
+                    SUM(hundred_user_num) hundred_user_num,
+                    round(IF(SUM(hundred_user_num) > 0, SUM(cost) / SUM(hundred_user_num), 0), 2) hundred_user_num_cost,
+                    SUM(first_role_num) first_role_num,
+                    SUM(role_num) role_num,
+                    SUM(new_user_total_role_num) new_user_total_role_num,
+                    round(IF(SUM(first_role_num) > 0, SUM(cost) / SUM(first_role_num), 0), 2) first_role_num_cost,
+                    round(IF(SUM(role_num) > 0, SUM(cost) / SUM(role_num), 0), 2) role_num_cost,
+                    round(IF(SUM(new_user_total_role_num) >0, SUM(cost) / SUM(new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
+                    round(IF(SUM(reg_num) >0, SUM(first_role_num) / SUM(reg_num), 0), 4) first_role_num_rate,
+                    round(IF(SUM(reg_num) >0, SUM(role_num) / SUM(reg_num), 0), 4) role_num_rate,
+                    round(IF(SUM(reg_num) >0, SUM(new_user_total_role_num) / SUM(reg_num), 0), 4) new_user_total_role_num_rate
+                FROM
+                    ads_game_day
+                """;
     }
 
     /**
@@ -2406,20 +2468,79 @@ public class GameDataServiceImpl implements IGameDataService {
      * @param type 输入的参数表示选择表的类型
      * @return String : Dn的充值金额 / D1-Dn的充值总金额 / Dn的充值人数 /当前消耗(剔除不存在的天数数据) /D1充值金额总和(剔除不存在的天数数据)/type
      */
+    /*private String amountDay(String type) {
+        //拼接查询条件
+        StringBuilder trendDay = new StringBuilder(StringUtils.EMPTY);
+        for (int day = 1; day <= 90; day++) {
+            trendDay.append("""
+                    CONCAT(
+                        SUM(IF( DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now()  , CAST(SPLIT_PART(%samount_d%s , '/', 1) AS DECIMAL(10, 2)), 0 )),'/',
+                        SUM(CAST(SPLIT_PART( %samount_d%s, '/', 6) AS DECIMAL(10, 2))),'/',
+                        SUM(CAST(SPLIT_PART(%samount_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(%samount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                    ) AS %samount_d%s ,
+                    """.formatted(day - 1, type, day, type, day, type, day, day - 1, day - 1, type, type, day));
+        }
+        for (int month = 4; month <= 12; month++) {
+            trendDay.append("""
+                    CONCAT(
+                        SUM(IF( DATE_ADD(dt, INTERVAL %s month) <= LocalDate.now()  , CAST(SPLIT_PART(%samount_m%s , '/', 1) AS DECIMAL(10, 2)), 0 )),'/',
+                        SUM(CAST(SPLIT_PART(%samount_m%s, '/', 6) AS DECIMAL(10, 2))),'/',
+                        SUM(CAST(SPLIT_PART(%samount_m%s, '/', 2) AS BIGINT)),'/',
+                        SUM(IF( DATE_ADD(dt, INTERVAL %s month) <= LocalDate.now(),  cost, 0)),'/',
+                        SUM(IF( DATE_ADD(dt, INTERVAL %s month) <= LocalDate.now(),  CAST(SPLIT_PART(%samount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                    ) AS %samount_m%s ,
+                    """.formatted(month, type, month, type, month, type, month, month, month, type, type, month));
+        }
+        //拼接sum数据
+        trendDay.append("""
+                CONCAT(
+                    SUM(CAST(SPLIT_PART(%samount_sum , '/', 1) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(%samount_sum, '/', 6) AS DECIMAL(10, 2))), '/',
+                    SUM(CAST(SPLIT_PART(%samount_sum, '/', 2) AS BIGINT)), '/',
+                    SUM(cost), '/',
+                    SUM(CAST(SPLIT_PART(%samount_d1 , '/', 1) AS DECIMAL(10, 2)))
+                ) AS %samount_sum ,
+                """.formatted(type, type, type, type, type));
+
+        return trendDay.toString();
+    }*/
     private String amountDay(String type) {
         //拼接查询条件
         StringBuilder trendDay = new StringBuilder(StringUtils.EMPTY);
-        for (int day = 1; day <= 29; day++) {
+        for (int day = 1; day <= 90; day++) {
             trendDay.append("""
                     CONCAT(
-                    SUM(IF( DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now()  , CAST(SPLIT_PART(%samount_d%s , '/', 1) AS DECIMAL(10, 2)), 0 )),'/',
-                    SUM(CAST(SPLIT_PART( %samount_d%s, '/', 6) AS DECIMAL(10, 2))),'/',
-                    SUM(CAST(SPLIT_PART(%samount_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(%samount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0))
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= DATE(NOW()), SPLIT_PART(%samount_d%s , '/', 1), 0 )),'/',
+                        SUM(SPLIT_PART(%samount_d%s, '/', 6)),'/',
+                        SUM(SPLIT_PART(%samount_d%s, '/', 2)),'/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= DATE(NOW()), cost, 0)),'/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= DATE(NOW()), SPLIT_PART(%samount_d1 , '/', 1), 0))
                     ) AS %samount_d%s ,
-                       """.formatted(day - 1, type, day, type, day, type, day, day - 1, day - 1, type, type, day));
+                    """.formatted(day - 1, type, day, type, day, type, day, day - 1, day - 1, type, type, day));
         }
+        for (int month = 4; month <= 12; month++) {
+            trendDay.append("""
+                    CONCAT(
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= DATE(NOW()), SPLIT_PART(%samount_m%s , '/', 1), 0 )),'/',
+                        SUM(SPLIT_PART(%samount_m%s, '/', 6)),'/',
+                        SUM(SPLIT_PART(%samount_m%s, '/', 2)),'/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= DATE(NOW()), cost, 0)),'/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= DATE(NOW()), SPLIT_PART(%samount_d1 , '/', 1), 0))
+                    ) AS %samount_m%s ,
+                    """.formatted(month, type, month, type, month, type, month, month, month, type, type, month));
+        }
+        //拼接sum数据
+        trendDay.append("""
+                CONCAT(
+                    SUM(SPLIT_PART(%samount_sum, '/', 1)), '/',
+                    SUM(SPLIT_PART(%samount_sum, '/', 6)), '/',
+                    SUM(SPLIT_PART(%samount_sum, '/', 2)), '/',
+                    SUM(cost), '/',
+                    SUM(SPLIT_PART(%samount_d1, '/', 1))
+                ) AS %samount_sum ,
+                """.formatted(type, type, type, type, type));
 
         return trendDay.toString();
     }
@@ -4991,8 +5112,66 @@ public class GameDataServiceImpl implements IGameDataService {
                                     buy_da28 as da28,
                                     buy_da29 as da29,
                                     buy_da30 as da30,
-                                    buy_m2 as m2,
-                                    buy_m3 as m3,
+                                    buy_da31 as da31,
+                                    buy_da32 as da32,
+                                    buy_da33 as da33,
+                                    buy_da34 as da34,
+                                    buy_da35 as da35,
+                                    buy_da36 as da36,
+                                    buy_da37 as da37,
+                                    buy_da38 as da38,
+                                    buy_da39 as da39,
+                                    buy_da40 as da40,
+                                    buy_da41 as da41,
+                                    buy_da42 as da42,
+                                    buy_da43 as da43,
+                                    buy_da44 as da44,
+                                    buy_da45 as da45,
+                                    buy_da46 as da46,
+                                    buy_da47 as da47,
+                                    buy_da48 as da48,
+                                    buy_da49 as da49,
+                                    buy_da50 as da50,
+                                    buy_da51 as da51,
+                                    buy_da52 as da52,
+                                    buy_da53 as da53,
+                                    buy_da54 as da54,
+                                    buy_da55 as da55,
+                                    buy_da56 as da56,
+                                    buy_da57 as da57,
+                                    buy_da58 as da58,
+                                    buy_da59 as da59,
+                                    buy_da60 as da60,
+                                    buy_da61 as da61,
+                                    buy_da62 as da62,
+                                    buy_da63 as da63,
+                                    buy_da64 as da64,
+                                    buy_da65 as da65,
+                                    buy_da66 as da66,
+                                    buy_da67 as da67,
+                                    buy_da68 as da68,
+                                    buy_da69 as da69,
+                                    buy_da70 as da70,
+                                    buy_da71 as da71,
+                                    buy_da72 as da72,
+                                    buy_da73 as da73,
+                                    buy_da74 as da74,
+                                    buy_da75 as da75,
+                                    buy_da76 as da76,
+                                    buy_da77 as da77,
+                                    buy_da78 as da78,
+                                    buy_da79 as da79,
+                                    buy_da80 as da80,
+                                    buy_da81 as da81,
+                                    buy_da82 as da82,
+                                    buy_da83 as da83,
+                                    buy_da84 as da84,
+                                    buy_da85 as da85,
+                                    buy_da86 as da86,
+                                    buy_da87 as da87,
+                                    buy_da88 as da88,
+                                    buy_da89 as da89,
+                                    buy_da90 as da90,
                                     buy_m4 as m4,
                                     buy_m5 as m5,
                                     buy_m6 as m6,
@@ -5001,7 +5180,7 @@ public class GameDataServiceImpl implements IGameDataService {
                                     buy_m9 as m9,
                                     buy_m10 as m10,
                                     buy_m11 as m11,
-                                    buy_y1 as y1,
+                                    buy_m12 as m12,
                                     buy_total as total
                                 FROM
                                     ads_game_first_new_user_again_day
@@ -5103,8 +5282,66 @@ public class GameDataServiceImpl implements IGameDataService {
                                     nature_da28 as da28,
                                     nature_da29 as da29,
                                     nature_da30 as da30,
-                                    nature_m2 as m2,
-                                    nature_m3 as m3,
+                                    nature_da31 as da31,
+                                    nature_da32 as da32,
+                                    nature_da33 as da33,
+                                    nature_da34 as da34,
+                                    nature_da35 as da35,
+                                    nature_da36 as da36,
+                                    nature_da37 as da37,
+                                    nature_da38 as da38,
+                                    nature_da39 as da39,
+                                    nature_da40 as da40,
+                                    nature_da41 as da41,
+                                    nature_da42 as da42,
+                                    nature_da43 as da43,
+                                    nature_da44 as da44,
+                                    nature_da45 as da45,
+                                    nature_da46 as da46,
+                                    nature_da47 as da47,
+                                    nature_da48 as da48,
+                                    nature_da49 as da49,
+                                    nature_da50 as da50,
+                                    nature_da51 as da51,
+                                    nature_da52 as da52,
+                                    nature_da53 as da53,
+                                    nature_da54 as da54,
+                                    nature_da55 as da55,
+                                    nature_da56 as da56,
+                                    nature_da57 as da57,
+                                    nature_da58 as da58,
+                                    nature_da59 as da59,
+                                    nature_da60 as da60,
+                                    nature_da61 as da61,
+                                    nature_da62 as da62,
+                                    nature_da63 as da63,
+                                    nature_da64 as da64,
+                                    nature_da65 as da65,
+                                    nature_da66 as da66,
+                                    nature_da67 as da67,
+                                    nature_da68 as da68,
+                                    nature_da69 as da69,
+                                    nature_da70 as da70,
+                                    nature_da71 as da71,
+                                    nature_da72 as da72,
+                                    nature_da73 as da73,
+                                    nature_da74 as da74,
+                                    nature_da75 as da75,
+                                    nature_da76 as da76,
+                                    nature_da77 as da77,
+                                    nature_da78 as da78,
+                                    nature_da79 as da79,
+                                    nature_da80 as da80,
+                                    nature_da81 as da81,
+                                    nature_da82 as da82,
+                                    nature_da83 as da83,
+                                    nature_da84 as da84,
+                                    nature_da85 as da85,
+                                    nature_da86 as da86,
+                                    nature_da87 as da87,
+                                    nature_da88 as da88,
+                                    nature_da89 as da89,
+                                    nature_da90 as da90,
                                     nature_m4 as m4,
                                     nature_m5 as m5,
                                     nature_m6 as m6,
@@ -5113,7 +5350,7 @@ public class GameDataServiceImpl implements IGameDataService {
                                     nature_m9 as m9,
                                     nature_m10 as m10,
                                     nature_m11 as m11,
-                                    nature_y1 as y1,
+                                    nature_m12 as m12,
                                     nature_total as total
                                 FROM
                                     ads_game_first_new_user_again_day
@@ -5216,8 +5453,66 @@ public class GameDataServiceImpl implements IGameDataService {
                                 da28,
                                 da29,
                                 da30,
-                                m2,
-                                m3,
+                                da31,
+                                da32,
+                                da33,
+                                da34,
+                                da35,
+                                da36,
+                                da37,
+                                da38,
+                                da39,
+                                da40,
+                                da41,
+                                da42,
+                                da43,
+                                da44,
+                                da45,
+                                da46,
+                                da47,
+                                da48,
+                                da49,
+                                da50,
+                                da51,
+                                da52,
+                                da53,
+                                da54,
+                                da55,
+                                da56,
+                                da57,
+                                da58,
+                                da59,
+                                da60,
+                                da61,
+                                da62,
+                                da63,
+                                da64,
+                                da65,
+                                da66,
+                                da67,
+                                da68,
+                                da69,
+                                da70,
+                                da71,
+                                da72,
+                                da73,
+                                da74,
+                                da75,
+                                da76,
+                                da77,
+                                da78,
+                                da79,
+                                da80,
+                                da81,
+                                da82,
+                                da83,
+                                da84,
+                                da85,
+                                da86,
+                                da87,
+                                da88,
+                                da89,
+                                da90,
                                 m4,
                                 m5,
                                 m6,
@@ -5226,7 +5521,7 @@ public class GameDataServiceImpl implements IGameDataService {
                                 m9,
                                 m10,
                                 m11,
-                                y1,
+                                m12,
                                 total
                             FROM
                                 ads_game_first_new_user_again_day
@@ -5256,7 +5551,7 @@ public class GameDataServiceImpl implements IGameDataService {
         StringBuilder trendDay = new StringBuilder(StringUtils.EMPTY);
         trendDay.append("SELECT ");
         //30天数据
-        for (int day = 1; day <= 30; day++) {
+        for (int day = 1; day <= 90; day++) {
             trendDay.append("""
                     CONCAT( SUM(CAST(SPLIT_PART(%sda%s, '/', 1) AS DECIMAL(10, 2))), '/',
                             SUM(CAST(SPLIT_PART(%sda%s, '/', 2) AS BIGINT)), '/',
@@ -5265,7 +5560,7 @@ public class GameDataServiceImpl implements IGameDataService {
                        """.formatted(type, day, type, day, day-1, type, day));
         }
         //m2-m11数据
-        for (int month = 2; month <= 11; month++) {
+        for (int month = 4; month <= 12; month++) {
             trendDay.append("""
                     CONCAT( SUM(CAST(SPLIT_PART(%sm%s, '/', 1) AS DECIMAL(10, 2))), '/',
                             SUM(CAST(SPLIT_PART(%sm%s, '/', 2) AS BIGINT)), '/',
@@ -5273,13 +5568,6 @@ public class GameDataServiceImpl implements IGameDataService {
                     ) AS m%s,
                        """.formatted(type, month, type, month, month, type, month));
         }
-        //y1数据
-        trendDay.append("""
-                CONCAT( SUM(CAST(SPLIT_PART(%sy1, '/', 1) AS DECIMAL(10, 2))), '/',
-                        SUM(CAST(SPLIT_PART(%sy1, '/', 2) AS BIGINT)), '/',
-                        SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= Local.now(), CAST(SPLIT_PART(%sda1, '/', 2) AS BIGINT), 0))
-                ) AS y1,
-                   """.formatted(type, type, type));
         //total数据
         trendDay.append("""
                 CONCAT( SUM(CAST(SPLIT_PART(%stotal, '/', 1) AS DECIMAL(10, 2))), '/',

+ 108 - 23
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/IActiveDataServiceImpl.java

@@ -5,6 +5,7 @@ import com.zanxiang.game.data.serve.pojo.dto.ActiveDataDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.ActiveDataTotalDTO;
 import com.zanxiang.game.data.serve.pojo.entity.AdsGameActiveOrderDay;
 import com.zanxiang.game.data.serve.pojo.entity.AdsGameActiveRegDay;
+import com.zanxiang.game.data.serve.pojo.entity.AdsGameActiveRoleDay;
 import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
 import com.zanxiang.game.data.serve.pojo.vo.ActiveDataDayVO;
 import com.zanxiang.game.data.serve.pojo.vo.ActiveDataTotalVO;
@@ -139,8 +140,8 @@ public class IActiveDataServiceImpl implements IActiveDataService {
                 tempClazz = AdsGameActiveRegDay.class;
             }
             case "role" -> {
-                queryTableName = "";
-                tempClazz = AdsGameActiveRegDay.class;
+                queryTableName = "ads_game_active_role_day";
+                tempClazz = AdsGameActiveRoleDay.class;
             }
             case "amount" -> {
                 queryTableName = "ads_game_active_order_day";
@@ -223,7 +224,7 @@ public class IActiveDataServiceImpl implements IActiveDataService {
         }
         switch (dto.getActiveTypes()) {
             case "reg" -> queryTableName = "ads_game_active_reg_day";
-            case "role" -> queryTableName = "";
+            case "role" -> queryTableName = "ads_game_active_role_day";
             case "amount" -> queryTableName = "ads_game_active_order_day";
         }
         //创建查询条件
@@ -386,7 +387,35 @@ public class IActiveDataServiceImpl implements IActiveDataService {
                     ) AS m12
                        """.formatted(type, type, type, type));
         } else {
-
+            // 第N天的新增创角用户/第N天的老活跃用户/第N天的累计创角用户/第N天的累计活跃用户
+            //90天数据
+            for (int day = 1; day <= 90; day++) {
+                trendDay.append("""
+                    CONCAT( SUM(CAST(SPLIT_PART(%sda%s, '/', 1) AS BIGINT(20))), '/',
+                            SUM(CAST(SPLIT_PART(%sda%s, '/', 2) AS BIGINT(20))), '/',
+                            SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), CAST(SPLIT_PART(%sda%s, '/', 3) AS BIGINT(20)), 0)), '/',
+                            SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), CAST(SPLIT_PART(%sda%s, '/', 4) AS BIGINT(20)), 0))
+                    ) AS da%s,
+                       """.formatted(type, day, type, day, day-1, type, day, day-1, type, day, day));
+            }
+            //m4-m11数据
+            for (int month = 4; month < 12; month++) {
+                trendDay.append("""
+                    CONCAT( SUM(CAST(SPLIT_PART(%sm%s, '/', 1) AS BIGINT(20))), '/',
+                            SUM(CAST(SPLIT_PART(%sm%s, '/', 2) AS BIGINT(20))), '/',
+                            SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), CAST(SPLIT_PART(%sm%s, '/', 3) AS BIGINT(20)), 0)), '/',
+                            SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), CAST(SPLIT_PART(%sm%s, '/', 4) AS BIGINT(20)), 0))
+                    ) AS m%s,
+                       """.formatted(type, month, type, month, month, type, month, month, type, month, month));
+            }
+            //m12数据
+            trendDay.append("""
+                    CONCAT( SUM(CAST(SPLIT_PART(%sm12, '/', 1) AS BIGINT(20))), '/',
+                            SUM(CAST(SPLIT_PART(%sm12, '/', 2) AS BIGINT(20))), '/',
+                            SUM(IF(DATE_ADD(dt, INTERVAL 12 month) <= Local.now(), CAST(SPLIT_PART(%sm12, '/', 3) AS BIGINT(20)), 0)), '/',
+                            SUM(IF(DATE_ADD(dt, INTERVAL 12 month) <= Local.now(), CAST(SPLIT_PART(%sm12, '/', 4) AS BIGINT(20)), 0))
+                    ) AS m12
+                       """.formatted(type, type, type, type));
         }
         trendDay.append("FROM game_ads.");
         trendDay.append(tableName);
@@ -407,11 +436,19 @@ public class IActiveDataServiceImpl implements IActiveDataService {
             //处理注册留存数据
             activeDataDayNFieldMapList.forEach(dayNFieldMapList -> {
                 try {
-                    String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
-                    dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
-                            .activeNum(Long.valueOf(temps[0]))
-                            .regActiveRate(new BigDecimal(temps[1]))
-                            .build());
+                    String dataStr = (String)dayNFieldMapList.getT1().get(vo);
+                    if (StringUtils.isNotBlank(dataStr)) {
+                        String[] temps = dataStr.split("/");
+                        dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
+                                .activeNum(Long.valueOf(temps[0]))
+                                .regActiveRate(new BigDecimal(temps[1]))
+                                .build());
+                    } else {
+                        dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
+                                .activeNum(0L)
+                                .regActiveRate(BigDecimal.ZERO)
+                                .build());
+                    }
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
                 }
@@ -420,15 +457,27 @@ public class IActiveDataServiceImpl implements IActiveDataService {
             //处理付费留存数据
             activeDataDayNFieldMapList.forEach(dayNFieldMapList -> {
                 try {
-                    //  第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
-                    String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
-                    dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
-                            .newUserAmountNum(Long.valueOf(temps[0]))
-                            .oldActiveUserNum(Long.valueOf(temps[1]))
-                            .newUserTotalAmountNum(Long.valueOf(temps[2]))
-                            .newActiveUserTotalNum(Long.valueOf(temps[3]))
-                            .amountActiveRate(new BigDecimal(temps[4]))
-                            .build());
+                    //  第N天的新增创角用户,第N天的老活跃用户,第N天的累计创角用户,第N天的累计活跃用户,创角留存率
+                    String dataStr = (String)dayNFieldMapList.getT1().get(vo);
+                    //判断取出的字符串数据是否为空
+                    if (StringUtils.isNotBlank(dataStr)) {
+                        String[] temps = dataStr.split("/");
+                        dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
+                                .newUserAmountNum(Long.valueOf(temps[0]))
+                                .oldActiveUserNum(Long.valueOf(temps[1]))
+                                .newUserTotalAmountNum(Long.valueOf(temps[2]))
+                                .newActiveUserTotalNum(Long.valueOf(temps[3]))
+                                .amountActiveRate(new BigDecimal(temps[4]))
+                                .build());
+                    } else {
+                        dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
+                                .newUserAmountNum(0L)
+                                .oldActiveUserNum(0L)
+                                .newUserTotalAmountNum(0L)
+                                .newActiveUserTotalNum(0L)
+                                .amountActiveRate(BigDecimal.ZERO)
+                                .build());
+                    }
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
                 }
@@ -437,10 +486,26 @@ public class IActiveDataServiceImpl implements IActiveDataService {
             //处理创角留存数据
             activeDataDayNFieldMapList.forEach(dayNFieldMapList -> {
                 try {
-                    //  第N天新用户数/第N天老用户数/累计到第N天的新用户数/付费留存率
-                    String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
-                    dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
-                            .build());
+                    //第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
+                    String dataStr = (String)dayNFieldMapList.getT1().get(vo);
+                    if (StringUtils.isNotBlank(dataStr)) {
+                        String[] temps = dataStr.split("/");
+                        dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
+                                .roleNewUserNum(Long.valueOf(temps[0]))
+                                .roleOldActiveUserNum(Long.valueOf(temps[1]))
+                                .roleNewUserTotalNum(Long.valueOf(temps[2]))
+                                .roleNewActiveUserTotalNum(Long.valueOf(temps[3]))
+                                .roleActiveRate(new BigDecimal(temps[4]))
+                                .build());
+                    } else {
+                        dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
+                                .roleNewUserNum(0L)
+                                .roleOldActiveUserNum(0L)
+                                .roleNewUserTotalNum(0L)
+                                .roleNewActiveUserTotalNum(0L)
+                                .roleActiveRate(BigDecimal.ZERO)
+                                .build());
+                    }
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
                 }
@@ -498,7 +563,27 @@ public class IActiveDataServiceImpl implements IActiveDataService {
                 }
             });
         } else {
-
+            activeDataDayNTotalFieldMapList.forEach(dayNFieldMapList -> {
+                try {
+                    // 第N天的新增创角用户/第N天的老活跃用户/第N天的累计创角用户/第N天的累计活跃用户
+                    String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
+                    //累计到第N天的活跃人数(活跃人数)
+                    Long roleActiveUserNum = Long.valueOf(temps[3]);
+                    //累计到第N天的创角用户数
+                    Long roleTotalNum = Long.valueOf(temps[2]);
+                    dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
+                            .roleNewUserNum(Long.valueOf(temps[0]))
+                            .roleOldActiveUserNum(Long.valueOf(temps[1]))
+                            .roleNewUserTotalNum(roleTotalNum)
+                            .roleNewActiveUserTotalNum(roleActiveUserNum)
+                            .roleActiveRate(roleTotalNum == 0L ? BigDecimal.ZERO :
+                                    BigDecimal.valueOf(roleActiveUserNum.doubleValue() / roleTotalNum.doubleValue())
+                                            .setScale(4, RoundingMode.HALF_UP))
+                            .build());
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            });
         }
     }
 

+ 64 - 145
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java

@@ -2577,45 +2577,21 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                 		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_pitcher_day
-                	""" + criA +
+                    	ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
+                		""" + pitcherDataTotalRoiSql() +
+                        """
+                    	ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                            SUM(m2) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                    	ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                            SUM(m3) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                            SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                            SUM(y1) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
+                    	ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
+                    FROM
+                    	game_ads.ads_pitcher_day
+                """ + criA +
                 """
             ) a
             LEFT JOIN (
@@ -2687,6 +2663,21 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
             """;
     }
 
+    /**
+     * 投手总数据的每日roi计算sql(投手总数据和投手总数据总计使用)
+     * @return String
+     */
+    private String pitcherDataTotalRoiSql() {
+        StringBuilder roiSql = new StringBuilder(StringUtils.EMPTY);
+        for (int day = 1; day <= 30 ; day++) {
+            roiSql.append("""
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now(), cost, 0)) > 0 ,
+                        SUM(da%s) / SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now(), cost, 0)), 0), 4) as roi%s,
+                    """.formatted(day - 1, day, day - 1 , day));
+        }
+        return roiSql.toString();
+    }
+
     /**
      * 查询投手游戏总数据SQL(投手游戏总数据)
      * @param criA       主表查询条件
@@ -2763,44 +2754,20 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                 		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 +
+                		""" + pitcherDataTotalRoiSql() +
+                        """
+                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                              SUM(m2) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                              SUM(m3) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                              SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                              SUM(y1) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 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 (
@@ -2929,40 +2896,16 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     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,
+                    """ + pitcherDataTotalRoiSql() +
+                    """
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(m2) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(m3) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(y1) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
                     ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
                 FROM
                     game_ads.ads_pitcher_day
@@ -3018,40 +2961,16 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     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,
+                    """ + pitcherDataTotalRoiSql() +
+                    """
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(m2) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(m3) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                          SUM(y1) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 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

+ 85 - 34
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PromotionDayServiceImpl.java

@@ -1015,6 +1015,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                     game_pay_count,
                     ROUND(IF(game_pay_count > 0, today_cost / game_pay_count, 0), 2) as game_pay_count_cost,
                     ltv_day1,
+                    ROUND(IF(reg_num > 0, first_new_user_amount / reg_num, 0), 2) as ltv_day1_actual_data,
                     sub_order_num,
                     sub_order_amount,
                     ROUND(IF(first_new_user_amount_count > 0, today_cost / first_new_user_amount_count, 0), 2) as first_new_user_amount_count_cost,
@@ -1123,6 +1124,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                 	    SUM(game_pay_count) as game_pay_count,
                 	    ROUND(IF(SUM(game_pay_count) > 0, SUM(today_cost) / SUM(game_pay_count), 0), 2) as game_pay_count_cost,
                 	    ROUND(IF(SUM(reg_num) > 0, SUM(first_attribution_game_in_app_ltv1day) / SUM(reg_num), 0), 2) as ltv_day1,
+                	    ROUND(IF(SUM(reg_num) > 0, SUM(first_new_user_amount) / SUM(reg_num), 0), 2) as ltv_day1_actual_data,
                 	    (SUM(first_new_user_amount_count) - SUM(first_sub_amount_count)) as sub_order_num,
                 	    (SUM(first_new_user_amount) - SUM(first_sub_amount)) as sub_order_amount,
                 	    ROUND(IF(SUM(first_new_user_amount_count) > 0, SUM(today_cost) / SUM(first_new_user_amount_count), 0), 2) as first_new_user_amount_count_cost,
@@ -1250,6 +1252,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                     SUM(game_pay_count) as game_pay_count,
                     ROUND(IF(SUM(game_pay_count) > 0, SUM(today_cost) / SUM(game_pay_count), 0), 2) as game_pay_count_cost,
                     ROUND(IF(SUM(reg_num) > 0, SUM(first_attribution_game_in_app_ltv1day) / SUM(reg_num), 0), 2) as ltv_day1,
+                    ROUND(IF(SUM(reg_num) > 0, SUM(first_new_user_amount) / SUM(reg_num), 0), 2) as ltv_day1_actual_data,
                     (SUM(first_new_user_amount_count) - SUM(first_sub_amount_count)) as sub_order_num,
                     (SUM(first_new_user_amount) - SUM(first_sub_amount)) as sub_order_amount,
                     ROUND(IF(SUM(first_new_user_amount_count) > 0, SUM(today_cost) / SUM(first_new_user_amount_count), 0), 2) as first_new_user_amount_count_cost,
@@ -1403,16 +1406,32 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                 	d3,
                 	d7,
                 	d15,
-                	active,
-                    active_cost,
-                    first_convert_count,
-                    first_convert_cost,
-                    first_active_pay_rate,
-                    first_attribution_game_in_app_ltv1day,
-                    first_attribution_game_in_app_roi1day,
-                    game_pay_count,
-                    ROUND(IF(game_pay_count > 0, today_cost / game_pay_count, 0), 2) as game_pay_count_cost,
+                	mini_game_register_users,
+                    mini_game_register_cost,
+                    mini_game_register_rate,
+                    mini_game_paying_count,
+                    mini_game_paying_amount,
+                    mini_game_paying_users_d1,
+                    mini_game_paying_amount_d1,
+                    mini_game_paying_amount_d3,
+                    mini_game_paying_amount_d7,
+                    mini_game_paying_amount_d14,
+                    mini_game_paying_amount_d30,
+                    mini_game_first_paying_users,
+                    mini_game_first_day_paying_roi,
+                    mini_game_paying_roi,
+                    mini_game_paying_arpu,
+                    mini_game_pay_d3_roi,
+                    mini_game_pay_d7_roi,
+                    mini_game_pay_d14_roi,
+                    mini_game_pay_d30_roi,
+                    minigame1d_pay_count,
+                    minigame24h_pay_uv,
+                    minigame24h_pay_amount,
+                    minigame24h_pay_roi,
+                    minigame24h_pay_arpu,
                     ltv_day1,
+                    ROUND(IF(reg_num > 0, first_new_user_amount / reg_num, 0), 2) as ltv_day1_actual_data,
                     sub_order_num,
                     sub_order_amount,
                     ROUND(IF(first_new_user_amount_count > 0, today_cost / first_new_user_amount_count, 0), 2) as first_new_user_amount_count_cost,
@@ -1506,21 +1525,37 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                 		round(if(SUM(reg_num) > 0, SUM(first_new_user_amount_num) / SUM(reg_num), 0), 4) as first_amount_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_new_user_avg_price,
                 		round(if(SUM(new_user_total_amount_count) > 0, SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as new_user_total_avg_price,
-                		SUM(d1) as d1,
-                		SUM(d2) as d2,
-                		SUM(d3) as d3,
-                		SUM(d7) as d7,
-                		SUM(d15) as d15,
-                		IFNULL(SUM(active), 0) as active,
-                	    ROUND(IF(SUM(active) > 0, SUM(today_cost) / SUM(active), 0), 2) as active_cost,
-                	    IFNULL(SUM(first_convert_count), 0) as first_convert_count,
-                	    ROUND(IF(SUM(first_convert_count) > 0, SUM(today_cost) / SUM(first_convert_count), 0), 2) as first_convert_cost,
-                	    ROUND(IF(SUM(active) > 0, SUM(game_pay_count) / SUM(active), 0), 4) as first_active_pay_rate,
-                	    SUM(first_attribution_game_in_app_ltv1day) as first_attribution_game_in_app_ltv1day,
-                	    ROUND(IF(SUM(today_cost) > 0 , SUM(first_attribution_game_in_app_ltv1day) / SUM(today_cost), 0), 4) as first_attribution_game_in_app_roi1day,
-                	    SUM(game_pay_count) as game_pay_count,
-                	    ROUND(IF(SUM(game_pay_count) > 0, SUM(today_cost) / SUM(game_pay_count), 0), 2) as game_pay_count_cost,
-                	    ROUND(IF(SUM(reg_num) > 0, SUM(first_attribution_game_in_app_ltv1day) / SUM(reg_num), 0), 2) as ltv_day1,
+                		IFNULL(SUM(d1), 0) as d1,
+                		IFNULL(SUM(d2), 0) as d2,
+                		IFNULL(SUM(d3), 0) as d3,
+                		IFNULL(SUM(d7), 0) as d7,
+                		IFNULL(SUM(d15), 0) as d15,
+                		IFNULL(SUM(mini_game_register_users), 0) as mini_game_register_users,
+                        IFNULL(SUM(mini_game_register_cost), 0) as mini_game_register_cost,
+                        IFNULL(SUM(mini_game_register_rate), 0) as mini_game_register_rate,
+                        IFNULL(SUM(mini_game_paying_count), 0) as mini_game_paying_count,
+                        IFNULL(SUM(mini_game_paying_amount), 0) as mini_game_paying_amount,
+                        IFNULL(SUM(mini_game_paying_users_d1), 0) as mini_game_paying_users_d1,
+                        IFNULL(SUM(mini_game_paying_amount_d1), 0) as mini_game_paying_amount_d1,
+                        IFNULL(SUM(mini_game_paying_amount_d3), 0) as mini_game_paying_amount_d3,
+                        IFNULL(SUM(mini_game_paying_amount_d7), 0) as mini_game_paying_amount_d7,
+                        IFNULL(SUM(mini_game_paying_amount_d14), 0) as mini_game_paying_amount_d14,
+                        IFNULL(SUM(mini_game_paying_amount_d30), 0) as mini_game_paying_amount_d30,
+                        IFNULL(SUM(mini_game_first_paying_users), 0) as mini_game_first_paying_users,
+                        IFNULL(SUM(mini_game_paying_roi), 0) as mini_game_paying_roi,
+                        IFNULL(SUM(mini_game_paying_arpu), 0) as mini_game_paying_arpu,
+                        IFNULL(SUM(mini_game_first_day_paying_roi), 0) as mini_game_first_day_paying_roi,
+                        IFNULL(SUM(mini_game_pay_d3_roi), 0) as mini_game_pay_d3_roi,
+                        IFNULL(SUM(mini_game_pay_d7_roi), 0) as mini_game_pay_d7_roi,
+                        IFNULL(SUM(mini_game_pay_d14_roi), 0) as mini_game_pay_d14_roi,
+                        IFNULL(SUM(mini_game_pay_d30_roi), 0) as mini_game_pay_d30_roi,
+                        IFNULL(SUM(minigame1d_pay_count), 0) as minigame1d_pay_count,
+                        IFNULL(SUM(minigame24h_pay_uv), 0) as minigame24h_pay_uv,
+                        IFNULL(SUM(minigame24h_pay_amount), 0) as minigame24h_pay_amount,
+                        IFNULL(SUM(minigame24h_pay_roi), 0) as minigame24h_pay_roi,
+                        IFNULL(SUM(minigame24h_pay_arpu), 0) as minigame24h_pay_arpu,
+                	    ROUND(IF(SUM(reg_num) > 0, SUM(mini_game_paying_amount_d1) / SUM(reg_num), 0), 2) as ltv_day1,
+                	    ROUND(IF(SUM(reg_num) > 0, SUM(first_new_user_amount) / SUM(reg_num), 0), 2) as ltv_day1_actual_data,
                 	    (SUM(first_new_user_amount_count) - SUM(first_sub_amount_count)) as sub_order_num,
                 	    (SUM(first_new_user_amount) - SUM(first_sub_amount)) as sub_order_amount,
                 	    ROUND(IF(SUM(first_new_user_amount_count) > 0, SUM(today_cost) / SUM(first_new_user_amount_count), 0), 2) as first_new_user_amount_count_cost,
@@ -1638,16 +1673,32 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                 	IFNULL(SUM(d3), 0) as d3,
                 	IFNULL(SUM(d7), 0) as d7,
                 	IFNULL(SUM(d15), 0) as d15,
-                	IFNULL(SUM(active), 0) as active,
-                    ROUND(IF(SUM(active) > 0, SUM(today_cost) / SUM(active), 0), 2) as active_cost,
-                    IFNULL(SUM(first_convert_count), 0) as first_convert_count,
-                    ROUND(IF(SUM(first_convert_count) > 0, SUM(today_cost) / SUM(first_convert_count), 0), 2) as first_convert_cost,
-                    ROUND(IF(SUM(active) > 0, SUM(game_pay_count) / SUM(active), 0), 4) as first_active_pay_rate,
-                    SUM(first_attribution_game_in_app_ltv1day) as first_attribution_game_in_app_ltv1day,
-                    ROUND(IF(SUM(today_cost) > 0 , SUM(first_attribution_game_in_app_ltv1day) / SUM(today_cost), 0), 4) as first_attribution_game_in_app_roi1day,
-                    SUM(game_pay_count) as game_pay_count,
-                    ROUND(IF(SUM(game_pay_count) > 0, SUM(today_cost) / SUM(game_pay_count), 0), 2) as game_pay_count_cost,
-                    ROUND(IF(SUM(reg_num) > 0, SUM(first_attribution_game_in_app_ltv1day) / SUM(reg_num), 0), 2) as ltv_day1,
+                	IFNULL(SUM(mini_game_register_users), 0) as mini_game_register_users,
+                    IFNULL(SUM(mini_game_register_cost), 0) as mini_game_register_cost,
+                    IFNULL(SUM(mini_game_register_rate), 0) as mini_game_register_rate,
+                    IFNULL(SUM(mini_game_paying_count), 0) as mini_game_paying_count,
+                    IFNULL(SUM(mini_game_paying_amount), 0) as mini_game_paying_amount,
+                    IFNULL(SUM(mini_game_paying_users_d1), 0) as mini_game_paying_users_d1,
+                    IFNULL(SUM(mini_game_paying_amount_d1), 0) as mini_game_paying_amount_d1,
+                    IFNULL(SUM(mini_game_paying_amount_d3), 0) as mini_game_paying_amount_d3,
+                    IFNULL(SUM(mini_game_paying_amount_d7), 0) as mini_game_paying_amount_d7,
+                    IFNULL(SUM(mini_game_paying_amount_d14), 0) as mini_game_paying_amount_d14,
+                    IFNULL(SUM(mini_game_paying_amount_d30), 0) as mini_game_paying_amount_d30,
+                    IFNULL(SUM(mini_game_first_paying_users), 0) as mini_game_first_paying_users,
+                    IFNULL(SUM(mini_game_paying_roi), 0) as mini_game_paying_roi,
+                    IFNULL(SUM(mini_game_paying_arpu), 0) as mini_game_paying_arpu,
+                    IFNULL(SUM(mini_game_first_day_paying_roi), 0) as mini_game_first_day_paying_roi,
+                    IFNULL(SUM(mini_game_pay_d3_roi), 0) as mini_game_pay_d3_roi,
+                    IFNULL(SUM(mini_game_pay_d7_roi), 0) as mini_game_pay_d7_roi,
+                    IFNULL(SUM(mini_game_pay_d14_roi), 0) as mini_game_pay_d14_roi,
+                    IFNULL(SUM(mini_game_pay_d30_roi), 0) as mini_game_pay_d30_roi,
+                    IFNULL(SUM(minigame1d_pay_count), 0) as minigame1d_pay_count,
+                    IFNULL(SUM(minigame24h_pay_uv), 0) as minigame24h_pay_uv,
+                    IFNULL(SUM(minigame24h_pay_amount), 0) as minigame24h_pay_amount,
+                    IFNULL(SUM(minigame24h_pay_roi), 0) as minigame24h_pay_roi,
+                    IFNULL(SUM(minigame24h_pay_arpu), 0) as minigame24h_pay_arpu,
+                    ROUND(IF(SUM(reg_num) > 0, SUM(mini_game_paying_amount_d1) / SUM(reg_num), 0), 2) as ltv_day1,
+                    ROUND(IF(SUM(reg_num) > 0, SUM(first_new_user_amount) / SUM(reg_num), 0), 2) as ltv_day1_actual_data,
                     (SUM(first_new_user_amount_count) - SUM(first_sub_amount_count)) as sub_order_num,
                     (SUM(first_new_user_amount) - SUM(first_sub_amount)) as sub_order_amount,
                     ROUND(IF(SUM(first_new_user_amount_count) > 0, SUM(today_cost) / SUM(first_new_user_amount_count), 0), 2) as first_new_user_amount_count_cost,

+ 1 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java

@@ -238,6 +238,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
         if (Objects.equals(agentId, Agent.DEFAULT_AGENT)) {
             //超管, 运营, 组长可以查询自然量
             if (SecurityUtil.isAdmin() || sysGameUserGroupRpcVO != null
+                    || Objects.equals(gameAuthRole.getAuthType(), GameAuthEnum.MANAGE.getValue())
                     || Objects.equals(gameAuthRole.getAuthType(), GameAuthEnum.OPERATE.getValue())) {
                 return Tuples.of(Collections.singletonList(Agent.DEFAULT_AGENT), Collections.emptyList());
             }

+ 1 - 2
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameRemitLogServiceImpl.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.erp.security.util.SecurityUtil;
-import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
 import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
 import com.zanxiang.game.module.manage.pojo.params.GameRemitLogListParam;
@@ -58,7 +57,7 @@ public class GameRemitLogServiceImpl extends ServiceImpl<GameRemitLogMapper, Gam
         //渠道获取
         Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(null, null, null);
         List<Long> agentIdList = tuple2.getT1();
-        if (Objects.equals(gameTuple.getT1(), GameAuthEnum.PITCHER.getValue()) && CollectionUtils.isEmpty(agentIdList)) {
+        if (CollectionUtils.isEmpty(agentIdList)) {
             return new Page<>();
         }
         //查询

+ 5 - 5
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java

@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.module.base.ServerInfo;
-import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.base.pojo.enums.PayDeviceEnum;
 import com.zanxiang.game.module.base.pojo.enums.PayWayEnum;
@@ -125,7 +124,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
         List<Long> agentIds = tuple2.getT1();
         //投手没有渠道, 看不见数据
-        if (Objects.equals(gameTuple.getT1(), GameAuthEnum.PITCHER.getValue()) && CollectionUtils.isEmpty(agentIds)) {
+        if (CollectionUtils.isEmpty(agentIds)) {
             return new OrderListVO(param.toPage().getSize());
         }
         //查询用户id和名字条件
@@ -282,12 +281,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         //游戏获取
         Tuple2<String, List<Long>> gameTuple = gameAuthService.getUserGameList(param.getPitcherId());
         List<Long> gameIdList = gameTuple.getT2();
-        if (CollectionUtils.isEmpty(gameIdList)) {
-            return;
-        }
         //渠道获取
         Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
         List<Long> agentIds = tuple2.getT1();
+        //未获取到游戏或者渠道列表
+        if (CollectionUtils.isEmpty(gameIdList) || CollectionUtils.isEmpty(agentIds)) {
+            return;
+        }
         //渠道
         Map<Long, AgentDTO> agentMap = tuple2.getT2().stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
         //查询用户id和名字条件

+ 9 - 3
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserCardServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
 import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
 import com.zanxiang.game.module.manage.pojo.dto.UserDTO;
@@ -57,12 +58,17 @@ public class UserCardServiceImpl extends ServiceImpl<UserCardMapper, UserCard> i
         //游戏获取
         Tuple2<String, List<Long>> gameTuple = gameAuthService.getUserGameList(null);
         List<Long> gameIdList = gameTuple.getT2();
-        if (!SecurityUtil.isAdmin() && CollectionUtils.isEmpty(gameIdList)) {
-            return new Page<>();
-        }
         //渠道获取
         Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(null, null, null);
         List<Long> agentIdList = tuple2.getT1();
+        if (CollectionUtils.isEmpty(gameIdList)) {
+            if (!SecurityUtil.isAdmin() || Objects.equals(gameTuple.getT1(), GameAuthEnum.MANAGE.getValue())) {
+                return new Page<>();
+            }
+        }
+        if (CollectionUtils.isEmpty(agentIdList)) {
+            return new Page<>();
+        }
         return page(param.toPage(), new QueryWrapper<UserCard>().lambda()
                 .in(!SecurityUtil.isAdmin(), UserCard::getGameId, gameIdList)
                 .in(CollectionUtils.isNotEmpty(agentIdList), UserCard::getAgentId, agentIdList)

+ 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服务启动成功 <手机号正则修改> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <解决微信和支付宝支付逻辑中的高并发引起的全局变量bug> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

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

@@ -43,4 +43,9 @@ public class WxPayConfigDTO {
      * 签名加密类型
      */
     private String signType;
+
+    /**
+     * 支付方式主键id
+     */
+    private Long gamePayWayId;
 }

+ 10 - 19
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/AliPayService.java

@@ -78,16 +78,6 @@ public class AliPayService extends PayBaseService {
     @Value("${payConfig.aliPay.notifyUrl}")
     private String notifyUrlConfig;
 
-    /**
-     * 同步回调地址
-     */
-    private String notifyUrl;
-
-    /**
-     * 商户信息
-     */
-    private PayMerchantDTO payMerchant;
-
     @Autowired
     private IPayMerchantService payMerchantService;
 
@@ -102,29 +92,31 @@ public class AliPayService extends PayBaseService {
         //初始化支付配置
         this.configInit(gamePayWayDTO);
         //回调地址中拼接游戏具体支付方式
-        this.notifyUrl = this.notifyUrlConfig + "?" + "gamePayWayId=" + this.attach.getGamePayWayId();
+        String notifyUrl = this.notifyUrlConfig + "?" + "gamePayWayId=" + gamePayWayDTO.getId();
         //支付方式
         int payDevice = product.getPayDevice().intValue();
         //不同的支付途径
         Map<String, Object> resultMap;
         switch (payDevice) {
             case 1:
-                resultMap = this.pcPay(product);
+                resultMap = this.pcPay(product, notifyUrl);
                 break;
             case 2:
-                resultMap = this.h5Pay(product);
+                resultMap = this.h5Pay(product, notifyUrl);
                 break;
             case 3:
-                resultMap = this.appPay(product);
+                resultMap = this.appPay(product, notifyUrl);
                 break;
             default:
                 throw new RuntimeException("未知支付方式");
         }
         //订单支付添加过期缓存
         this.orderExpire(product.getOutTradeNo());
+        //商户信息
+        PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWayDTO.getMerchantNo());
         //更新订单商户信息
         orderService.update(new LambdaUpdateWrapper<Order>()
-                .set(Order::getMerchantNo, payMerchant.getMerchantNo())
+                .set(Order::getMerchantNo, payMerchantDTO.getMerchantNo())
                 .eq(Order::getOrderId, product.getOutTradeNo()));
         log.error("返回支付参数 resultMap : {}", JsonUtil.toString(resultMap));
         //返回结果
@@ -203,7 +195,7 @@ public class AliPayService extends PayBaseService {
         }
     }
 
-    private Map<String, Object> h5Pay(ProductPayParamDTO product) {
+    private Map<String, Object> h5Pay(ProductPayParamDTO product, String notifyUrl) {
         AlipayTradeWapPayResponse response;
         try {
             response = Factory.Payment.Wap().asyncNotify(notifyUrl)
@@ -306,7 +298,7 @@ public class AliPayService extends PayBaseService {
         return JsonUtil.toMap(JsonUtil.toString(aliPayLinkDTO.getData().getBizData().getInvokeAlipayData()), Map.class, String.class);
     }
 
-    private Map<String, Object> pcPay(ProductPayParamDTO product) {
+    private Map<String, Object> pcPay(ProductPayParamDTO product, String notifyUrl) {
         AlipayTradePagePayResponse response;
         try {
             response = Factory.Payment.Page().asyncNotify(notifyUrl)
@@ -327,7 +319,7 @@ public class AliPayService extends PayBaseService {
         return payParamMap;
     }
 
-    private Map<String, Object> appPay(ProductPayParamDTO product) {
+    private Map<String, Object> appPay(ProductPayParamDTO product, String notifyUrl) {
         AlipayTradeAppPayResponse response;
         try {
             response = Factory.Payment.App().asyncNotify(notifyUrl)
@@ -351,7 +343,6 @@ public class AliPayService extends PayBaseService {
     private void configInit(GamePayWayDTO gamePayWayDTO) {
         //商户信息
         PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWayDTO.getMerchantNo());
-        this.payMerchant = payMerchantDTO;
         //查询支付应用信息
         PayApplicationDTO payApplicationDTO = payApplicationService.getPayApplicationByAppId(gamePayWayDTO.getAppId());
         //支付参数

+ 0 - 11
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/PayBaseService.java

@@ -8,7 +8,6 @@ import com.zanxiang.game.module.sdk.enums.OrderStateEnum;
 import com.zanxiang.game.module.sdk.listener.OrderPaySuccessEvent;
 import com.zanxiang.game.module.sdk.pojo.dto.GamePayWayDTO;
 import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
-import com.zanxiang.game.module.sdk.pojo.dto.ProductPayAttachParamDTO;
 import com.zanxiang.game.module.sdk.pojo.dto.ProductPayParamDTO;
 import com.zanxiang.game.module.sdk.service.IGamePayWayService;
 import com.zanxiang.game.module.sdk.service.IOrderService;
@@ -52,10 +51,6 @@ public abstract class PayBaseService {
     @Autowired
     private RedisUtil<String> redisUtil;
 
-    /**
-     * 自定义参数
-     */
-    protected ProductPayAttachParamDTO attach;
 
     /**
      * 创建订单支付参数
@@ -77,12 +72,6 @@ public abstract class PayBaseService {
             product.setGameId(gameId);
             product.setTotalFee(String.valueOf(platformOrderDTO.getAmount()));
             product.setOutTradeNo(platformOrderDTO.getOrderId());
-            ProductPayAttachParamDTO attachBO = new ProductPayAttachParamDTO();
-            attachBO.setUserId(product.getUserId());
-            attachBO.setOrderId(product.getOutTradeNo());
-            attachBO.setPayWay(product.getPayWay());
-            attachBO.setGamePayWayId(gamePayWayDTO.getId());
-            this.attach = attachBO;
             return this.create(product, gamePayWayDTO);
         } catch (Exception e) {
             log.error("订单支付参数生成异常, ProductPayParamBO : {} , e: {}", JsonUtil.toString(product), e.getMessage());

+ 24 - 25
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/WxPayService.java

@@ -76,11 +76,6 @@ public class WxPayService extends PayBaseService {
     @Value("${payConfig.wxPay.notifyUrl}")
     private String notifyUrl;
 
-    /**
-     * 微信支付配置
-     */
-    private WxPayConfigDTO config;
-
     @Autowired
     private IOrderPayParamService orderPayParamService;
 
@@ -102,7 +97,7 @@ public class WxPayService extends PayBaseService {
     @Override
     public Map<String, Object> create(ProductPayParamDTO product, GamePayWayDTO gamePayWayDTO) {
         //初始化配置
-        this.configInit(gamePayWayDTO);
+        WxPayConfigDTO config = this.configInit(gamePayWayDTO);
         //支付方式
         int payDevice = product.getPayDevice().intValue();
         //不同的支付途径
@@ -110,17 +105,17 @@ public class WxPayService extends PayBaseService {
         switch (payDevice) {
             case 1:
                 //PC
-                resultMap = this.pcPay(product);
+                resultMap = this.pcPay(product, config);
                 break;
             case 2:
                 //H5
-                resultMap = this.h5Pay(product);
+                resultMap = this.h5Pay(product, config);
                 break;
             case 4:
             case 6:
             case 7:
                 //小程序
-                resultMap = this.miniAppPay(product);
+                resultMap = this.miniAppPay(product, config);
                 break;
             default:
                 throw new RuntimeException("未知支付方式");
@@ -144,18 +139,16 @@ public class WxPayService extends PayBaseService {
         String requestStr = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
         // 解析xml成map
         Map<String, String> packageParams = XmlUtil.xmlToMap(requestStr);
-        log.error("微信支付回调参数, packageParams : {}, config : {}", JsonUtil.toString(packageParams), JsonUtil.toString(config));
+        log.error("微信支付回调参数, packageParams : {}", JsonUtil.toString(packageParams));
         //获取订单信息
         String attachStr = packageParams.get("attach");
         ProductPayAttachParamDTO attachBO = JsonUtil.toObj(attachStr, ProductPayAttachParamDTO.class);
-
         log.error("微信支付回调参数, attachBO : {}", JsonUtil.toString(attachBO));
-
         if (attachBO == null) {
             log.info("回调参数中attach值为空");
             return null;
         }
-        configInit(gamePayWayService.getById(attachBO.getGamePayWayId()));
+        WxPayConfigDTO config = this.configInit(gamePayWayService.getById(attachBO.getGamePayWayId()));
         // 账号信息
         String key = config.getApiKey();
         // 判断签名是否正确
@@ -171,7 +164,7 @@ public class WxPayService extends PayBaseService {
             String orderNo = packageParams.get("out_trade_no");
             String totalFee = String.valueOf(Float.parseFloat(packageParams.get("total_fee")) / 100);
             log.info("微信订单号回调成功, orderId : {}", orderNo);
-            if (paySuccess(attachBO.getOrderId(), totalFee, packageParams.get("transaction_id"))) {
+            if (paySuccess(orderNo, totalFee, packageParams.get("transaction_id"))) {
                 // 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了
                 xmlMap.put("return_code", "SUCCESS");
                 xmlMap.put("return_msg", "OK");
@@ -190,9 +183,9 @@ public class WxPayService extends PayBaseService {
         return HttpStatusEnum.SUCCESS.getMsg();
     }
 
-    private Map<String, Object> pcPay(ProductPayParamDTO product) {
+    private Map<String, Object> pcPay(ProductPayParamDTO product, WxPayConfigDTO config) {
         //下单
-        Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_NATIVE, null);
+        Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_NATIVE, null, config);
         //获取二维码链接
         String urlCode = successMap.get("code_url");
         //判断是否获取到支付链接
@@ -207,9 +200,9 @@ public class WxPayService extends PayBaseService {
         return payParamMap;
     }
 
-    private Map<String, Object> h5Pay(ProductPayParamDTO product) {
+    private Map<String, Object> h5Pay(ProductPayParamDTO product, WxPayConfigDTO config) {
         //下单
-        Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_MWEB, null);
+        Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_MWEB, null, config);
         //获取h5支付链接
         String urlCode = successMap.get("mweb_url");
         if (Strings.isBlank(urlCode)) {
@@ -231,7 +224,7 @@ public class WxPayService extends PayBaseService {
         return payParamMap;
     }
 
-    private Map<String, Object> miniAppPay(ProductPayParamDTO product) {
+    private Map<String, Object> miniAppPay(ProductPayParamDTO product, WxPayConfigDTO config) {
         try {
             //用户openId
             String openId = product.getOpenId();
@@ -241,7 +234,7 @@ public class WxPayService extends PayBaseService {
                         config.getAppletType()).get("openid");
             }
             //下单
-            Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_JSAPI, openId);
+            Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_JSAPI, openId, config);
             // 支付参数
             String prepayId = successMap.get("prepay_id");
             // 随机字符串
@@ -289,7 +282,7 @@ public class WxPayService extends PayBaseService {
         GamePayWayDTO gamePayWayDTO = gamePayWayService.getGamePayWay(platformOrderDTO.getGameId(),
                 platformOrderDTO.getPayWayId(), platformOrderDTO.getPayDeviceId());
         //初始化配置
-        this.configInit(gamePayWayDTO);
+        WxPayConfigDTO config = this.configInit(gamePayWayDTO);
         try {
             Map<String, String> paramData = new HashMap<>(6);
             paramData.put("appid", config.getAppId());
@@ -315,7 +308,12 @@ public class WxPayService extends PayBaseService {
         }
     }
 
-    private Map<String, String> unifiedOrder(ProductPayParamDTO product, String tradeType, String openId) {
+    private Map<String, String> unifiedOrder(ProductPayParamDTO product, String tradeType, String openId, WxPayConfigDTO config) {
+        ProductPayAttachParamDTO attachBO = new ProductPayAttachParamDTO();
+        attachBO.setUserId(product.getUserId());
+        attachBO.setOrderId(product.getOutTradeNo());
+        attachBO.setPayWay(product.getPayWay());
+        attachBO.setGamePayWayId(config.getGamePayWayId());
         try {
             Map<String, String> paramData = new HashMap<>(13);
             paramData.put("appid", config.getAppId());
@@ -328,7 +326,7 @@ public class WxPayService extends PayBaseService {
             paramData.put("spbill_create_ip", product.getSpbillCreateIp());
             paramData.put("notify_url", notifyUrl);
             paramData.put("trade_type", tradeType);
-            paramData.put("attach", JsonUtil.toString(this.attach));
+            paramData.put("attach", JsonUtil.toString(attachBO));
             paramData.put("sign_type", config.getSignType());
             //小程序商城下单需要携带openId
             if (Strings.isNotBlank(openId)) {
@@ -357,7 +355,7 @@ public class WxPayService extends PayBaseService {
         }
     }
 
-    private void configInit(GamePayWayDTO gamePayWayDTO) {
+    private WxPayConfigDTO configInit(GamePayWayDTO gamePayWayDTO) {
         //商户信息
         PayMerchantDTO payMerchantDTO;
         //支付应用信息
@@ -376,7 +374,8 @@ public class WxPayService extends PayBaseService {
         payConfigBO.setAppSecret(payApplicationDTO.getAppSecret());
         payConfigBO.setAppletType(payApplicationDTO.getType());
         payConfigBO.setMachName(payMerchantDTO.getMerchantName());
+        payConfigBO.setGamePayWayId(gamePayWayDTO.getId());
         //赋值配置信息
-        this.config = payConfigBO;
+        return payConfigBO;
     }
 }

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff