Bläddra i källkod

修改内容:LTV每日数据修改;游戏首日趋势添加用户详情

lth 1 år sedan
förälder
incheckning
b1bf7c6d50

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

@@ -115,4 +115,11 @@ public class GameDataController {
         return ResultVO.ok(gameDataService.getFirstNewUserAgainTotal(dto));
     }
 
+    @ApiOperation(value = "用户详情")
+    //@PreAuthorize(permissionKey = "gameData:adsGameDay:userDetails")
+    @PostMapping("user/details")
+    public ResultVO<Page<GameDataUserDetailsVO>> getUserDetails(@RequestBody GameDataUserDetailsDTO dto) {
+        return ResultVO.ok(gameDataService.getUserDetails(dto));
+    }
+
 }

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

@@ -0,0 +1,29 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+import com.zanxiang.game.data.serve.pojo.base.BasePage;
+import com.zanxiang.game.data.serve.pojo.vo.FirstNewUserAgainTrendVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author tianhua
+ * @time 2023/8/11
+ * @Description 用户详情查询条件参数实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameDataUserDetailsDTO extends BasePage {
+
+    /**
+     * 对象里面包含需要查询的usersID等信息
+     */
+    @ApiModelProperty(notes = "首日复充趋势对象")
+    private FirstNewUserAgainTrendVO againTrendVO;
+
+
+}

+ 25 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/FirstNewUserAgainTrendVO.java

@@ -31,4 +31,29 @@ public class FirstNewUserAgainTrendVO {
      */
     @ApiModelProperty(notes = "充值占比")
     private BigDecimal percentage;
+
+    /**
+     * 用户详情,用来跳转查询
+     */
+    @ApiModelProperty(notes = "用户详情")
+    private final String userDetail = "用户详情";
+
+    /**
+     * da1的所有用户ID,用作后续查询指定用户的条件
+     */
+    @ApiModelProperty(notes = "da1所有用户ID(不展示)")
+    private Long[] usersId;
+
+    /**
+     * 当前对象属于哪个daN数据
+     */
+    @ApiModelProperty(notes = "不展示")
+    private String timeType;
+
+    /**
+     * SDK数据来源
+     */
+    @ApiModelProperty(notes = "不展示")
+    private String sourceSystem;
+
 }

+ 85 - 84
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataFirstNewUserAgainTotalVO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 
 /**
  * @author tianhua
@@ -212,505 +213,505 @@ public class GameDataFirstNewUserAgainTotalVO {
      * 首日注册且充值用户复充趋势第1天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa1;
+    private String da1;
 
     /**
      * 首日注册且充值用户复充趋势在第2天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa2;
+    private String da2;
 
     /**
      * 首日注册且充值用户复充趋势在第3天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa3;
+    private String da3;
 
     /**
      * 首日注册且充值用户复充趋势在第4天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa4;
+    private String da4;
 
     /**
      * 首日注册且充值用户复充趋势在第5天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa5;
+    private String da5;
 
     /**
      * 首日注册且充值用户复充趋势在第6天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa6;
+    private String da6;
 
     /**
      * 首日注册且充值用户复充趋势在第7天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa7;
+    private String da7;
 
     /**
      * 首日注册且充值用户复充趋势在第8天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa8;
+    private String da8;
 
     /**
      * 首日注册且充值用户复充趋势在第9天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa9;
+    private String da9;
 
     /**
      * 首日注册且充值用户复充趋势在第10天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa10;
+    private String da10;
 
     /**
      * 首日注册且充值用户复充趋势在第11天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa11;
+    private String da11;
 
     /**
      * 首日注册且充值用户复充趋势在第12天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa12;
+    private String da12;
 
     /**
      * 首日注册且充值用户复充趋势在第13天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa13;
+    private String da13;
 
     /**
      * 首日注册且充值用户复充趋势在第14天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa14;
+    private String da14;
 
     /**
      * 首日注册且充值用户复充趋势在第15天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa15;
+    private String da15;
 
     /**
      * 首日注册且充值用户复充趋势在第16天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa16;
+    private String da16;
 
     /**
      * 首日注册且充值用户复充趋势在第17天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa17;
+    private String da17;
 
     /**
      * 首日注册且充值用户复充趋势在第18天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa18;
+    private String da18;
 
     /**
      * 首日注册且充值用户复充趋势在第19天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa19;
+    private String da19;
 
     /**
      * 首日注册且充值用户复充趋势在第20天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa20;
+    private String da20;
 
     /**
      * 首日注册且充值用户复充趋势在第21天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa21;
+    private String da21;
 
     /**
      * 首日注册且充值用户复充趋势在第22天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa22;
+    private String da22;
 
     /**
      * 首日注册且充值用户复充趋势在第23天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa23;
+    private String da23;
 
     /**
      * 首日注册且充值用户复充趋势在第24天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa24;
+    private String da24;
 
     /**
      * 首日注册且充值用户复充趋势在第25天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa25;
+    private String da25;
 
     /**
      * 首日注册且充值用户复充趋势在第26天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa26;
+    private String da26;
 
     /**
      * 首日注册且充值用户复充趋势在第27天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa27;
+    private String da27;
 
     /**
      * 首日注册且充值用户复充趋势在第28天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa28;
+    private String da28;
 
     /**
      * 首日注册且充值用户复充趋势在第29天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa29;
+    private String da29;
 
     /**
      * 首日注册且充值用户复充趋势在第30天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againDa30;
+    private String da30;
 
     /**
      * 首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM2;
+    private String m2;
 
     /**
      * 首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM3;
+    private String m3;
 
     /**
      * 首日注册且充值用户复充趋势在第4月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM4;
+    private String m4;
 
     /**
      * 首日注册且充值用户复充趋势在第5月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM5;
+    private String m5;
 
     /**
      * 首日注册且充值用户复充趋势在第6月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM6;
+    private String m6;
 
     /**
      * 首日注册且充值用户复充趋势在第7月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM7;
+    private String m7;
 
     /**
      * 首日注册且充值用户复充趋势在第8月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM8;
+    private String m8;
 
     /**
      * 首日注册且充值用户复充趋势在第9月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM9;
+    private String m9;
 
     /**
      * 首日注册且充值用户复充趋势在第10月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM10;
+    private String m10;
 
     /**
      * 首日注册且充值用户复充趋势在第11月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againM11;
+    private String m11;
 
     /**
      * 首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againY1;
+    private String y1;
 
     /**
      * 首日注册且充值的用户至今:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "不展示")
-    private String againTotal;
+    private String total;
 
     /**
      * 首日注册且充值用户复充趋势第1天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势第1天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa1Trend;
+    private FirstNewUserAgainTrendVO da1Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第2天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第2天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa2Trend;
+    private FirstNewUserAgainTrendVO da2Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第3天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第3天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa3Trend;
+    private FirstNewUserAgainTrendVO da3Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第4天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第4天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa4Trend;
+    private FirstNewUserAgainTrendVO da4Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第5天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第5天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa5Trend;
+    private FirstNewUserAgainTrendVO da5Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第6天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第6天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa6Trend;
+    private FirstNewUserAgainTrendVO da6Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第7天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第7天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa7Trend;
+    private FirstNewUserAgainTrendVO da7Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第8天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第8天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa8Trend;
+    private FirstNewUserAgainTrendVO da8Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第9天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第9天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa9Trend;
+    private FirstNewUserAgainTrendVO da9Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第10天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第10天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa10Trend;
+    private FirstNewUserAgainTrendVO da10Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第11天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第11天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa11Trend;
+    private FirstNewUserAgainTrendVO da11Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第12天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第12天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa12Trend;
+    private FirstNewUserAgainTrendVO da12Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第13天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第13天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa13Trend;
+    private FirstNewUserAgainTrendVO da13Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第14天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第14天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa14Trend;
+    private FirstNewUserAgainTrendVO da14Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第15天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第15天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa15Trend;
+    private FirstNewUserAgainTrendVO da15Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第16天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第16天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa16Trend;
+    private FirstNewUserAgainTrendVO da16Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第17天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第17天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa17Trend;
+    private FirstNewUserAgainTrendVO da17Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第18天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第18天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa18Trend;
+    private FirstNewUserAgainTrendVO da18Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第19天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在19天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa19Trend;
+    private FirstNewUserAgainTrendVO da19Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第20天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第20天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa20Trend;
+    private FirstNewUserAgainTrendVO da20Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第21天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第21天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa21Trend;
+    private FirstNewUserAgainTrendVO da21Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第22天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第22天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa22Trend;
+    private FirstNewUserAgainTrendVO da22Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第23天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第23天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa23Trend;
+    private FirstNewUserAgainTrendVO da23Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第24天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第24天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa24Trend;
+    private FirstNewUserAgainTrendVO da24Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第25天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第25天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa25Trend;
+    private FirstNewUserAgainTrendVO da25Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第26天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第26天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa26Trend;
+    private FirstNewUserAgainTrendVO da26Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第27天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第27天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa27Trend;
+    private FirstNewUserAgainTrendVO da27Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第28天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第28天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa28Trend;
+    private FirstNewUserAgainTrendVO da28Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第29天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第29天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa29Trend;
+    private FirstNewUserAgainTrendVO da29Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第30天:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第30天:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againDa30Trend;
+    private FirstNewUserAgainTrendVO da30Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第2月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM2Trend;
+    private FirstNewUserAgainTrendVO m2Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第3月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM3Trend;
+    private FirstNewUserAgainTrendVO m3Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第4月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第4月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM4Trend;
+    private FirstNewUserAgainTrendVO m4Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第5月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第5月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM5Trend;
+    private FirstNewUserAgainTrendVO m5Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第6月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第6月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM6Trend;
+    private FirstNewUserAgainTrendVO m6Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第7月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第7月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM7Trend;
+    private FirstNewUserAgainTrendVO m7Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第8月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第8月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM8Trend;
+    private FirstNewUserAgainTrendVO m8Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第9月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第9月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM9Trend;
+    private FirstNewUserAgainTrendVO m9Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第10月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第10月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM10Trend;
+    private FirstNewUserAgainTrendVO m10Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第11月:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第11月:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againM11Trend;
+    private FirstNewUserAgainTrendVO m11Trend;
 
     /**
      * 首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值用户复充趋势在第1年:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againY1Trend;
+    private FirstNewUserAgainTrendVO y1Trend;
 
     /**
      * 首日注册且充值的用户至今:充值金额,充值人数,充值占比
      */
     @ApiModelProperty(value = "首日注册且充值的用户至今:充值金额,充值人数,充值占比")
-    private FirstNewUserAgainTrendVO againTotalTrend;
+    private FirstNewUserAgainTrendVO totalTrend;
 
 
 }

+ 64 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataUserDetailsVO.java

@@ -0,0 +1,64 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/8/11
+ * @Description 用户详情
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class GameDataUserDetailsVO {
+
+    /**
+     * 玩家ID
+     */
+    @ApiModelProperty(notes = "玩家ID")
+    private Long playerId;
+
+    /**
+     * 注册渠道ID
+     */
+    @ApiModelProperty(notes = "注册渠道ID")
+    private Long regAgentId;
+
+    /**
+     * 注册渠道名称
+     */
+    @ApiModelProperty(notes = "注册渠道名称")
+    private String regAgentName;
+
+    /**
+     * 游戏服
+     */
+    @ApiModelProperty(notes = "游戏服")
+    private String serverName;
+
+    /**
+     * 角色名称
+     */
+    @ApiModelProperty(notes = "角色名称")
+    private String roleName;
+
+    /**
+     * 玩家操作系统
+     */
+    @ApiModelProperty(notes = "玩家操作系统")
+    private String playerOs;
+
+    /**
+     * 充值金额 玩家排行榜表中的今日累计充值今额
+     */
+    @ApiModelProperty(notes = "充值金额")
+    private BigDecimal todayTotalAmount;
+
+}

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

@@ -2046,9 +2046,9 @@ public class LtvDataVO {
     private Integer regUserCnt;
 
     /**
-     * 创角人数
+     * 首日创角人数
      */
-    @ApiModelProperty(value = "创角人数ltv")
+    @ApiModelProperty(value = "首日创角人数ltv")
     private Integer firstRoleNumLtv;
 
 

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

@@ -82,4 +82,11 @@ public interface IGameDataService {
      * @return
      */
     GameDataFirstNewUserAgainTotalVO getFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalDTO dto);
+
+    /**
+     * 用户详情
+     * @param dto
+     * @return
+     */
+    Page<GameDataUserDetailsVO> getUserDetails(GameDataUserDetailsDTO dto);
 }

+ 446 - 167
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -15,6 +15,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.nutz.dao.Cnd;
 import org.nutz.dao.Dao;
@@ -1580,17 +1581,21 @@ public class GameDataServiceImpl implements IGameDataService {
      *
      * @param vo
      */
-    private void formatFirstNewUserAgain(GameDataFirstNewUserAgainVO vo) {
+    private void formatFirstNewUserAgain(GameDataFirstNewUserAgainVO vo, Long[] usersId) {
         if (CollectionUtils.isEmpty(firstNewUserAgainFieldMapList)) {
             return;
         }
         firstNewUserAgainFieldMapList.forEach(againFieldMap -> {
             try {
+                String name = againFieldMap.getT1().getName();
                 String[] temps = ((String) againFieldMap.getT1().get(vo)).split("/");
                 againFieldMap.getT2().set(vo, FirstNewUserAgainTrendVO.builder()
                         .rechargeMoney(new BigDecimal(temps[0]))
                         .rechargeCount(Long.valueOf(temps[1]))
                         .percentage(new BigDecimal(temps[2]))
+                        .usersId(usersId)
+                        .timeType(name)
+                        .sourceSystem(vo.getSourceSystem())
                         .build());
             } catch (IllegalAccessException e) {
                 throw new RuntimeException(e);
@@ -1604,7 +1609,27 @@ public class GameDataServiceImpl implements IGameDataService {
      * @param vo
      */
     private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo) {
-
+        if (CollectionUtils.isEmpty(firstNewUserAgainTotalFieldMapList)) {
+            return;
+        }
+        firstNewUserAgainTotalFieldMapList.forEach(againTotalFieldMap -> {
+            try {
+                String[] temps = ((String) againTotalFieldMap.getT1().get(vo)).split("/");
+                //总充值人数
+                Long count = Long.valueOf(temps[1]);
+                //da1的总充值人数
+                Long da1Count = Long.valueOf(temps[2]);
+                //赋值
+                againTotalFieldMap.getT2().set(vo, FirstNewUserAgainTrendVO.builder()
+                        .rechargeMoney(new BigDecimal(temps[0]))
+                        .rechargeCount(count)
+                        .percentage(da1Count == 0L ? BigDecimal.ZERO :
+                                BigDecimal.valueOf(count.doubleValue() / da1Count.doubleValue()).setScale(4, RoundingMode.HALF_UP))
+                        .build());
+            } catch (IllegalAccessException e) {
+                throw new RuntimeException(e);
+            }
+        });
     }
 
     /**
@@ -3203,8 +3228,22 @@ public class GameDataServiceImpl implements IGameDataService {
         List<GameDataFirstNewUserAgainVO> list = sql.getList(GameDataFirstNewUserAgainVO.class);
         //设置查询总数
         pager.setRecordCount(dao.count(AdsGameDay.class, cri));
-        List<GameDataFirstNewUserAgainVO> gameDataFirstNewUserAgainVOList = list.stream().map( vo -> {
-            formatFirstNewUserAgain(vo);
+        //查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id
+        Map<String, String> gameDateUsersIdMap = findUsersId(dto);
+        List<GameDataFirstNewUserAgainVO> gameDataFirstNewUserAgainVOList = list.stream().map(vo -> {
+            //将gameId和需要查询的注册时间拼接
+            String gameIdDate = vo.getGameId() + "/" + vo.getCostDate();
+            //取出所有usersId
+            Long[] usersID = ArrayUtils.EMPTY_LONG_OBJECT_ARRAY;
+            if (gameDateUsersIdMap.containsKey(gameIdDate)) {
+                //string[] -> Long[]
+                usersID = Arrays.stream(gameDateUsersIdMap.get(gameIdDate)
+                                .split("/"))
+                        .map(Long::parseLong)
+                        .toArray(Long[]::new);
+            }
+            //将string转成 FirstNewUserAgainTrendVO 对象
+            formatFirstNewUserAgain(vo, usersID);
             return vo;
         }).collect(Collectors.toList());
 
@@ -3219,7 +3258,171 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public GameDataFirstNewUserAgainTotalVO getFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalDTO dto) {
-        return null;
+        //如果没有传入查询时间默认查询当天
+        if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
+            dto.setRegisteredBeginDate(LocalDate.now());
+            dto.setRegisteredEndDate(LocalDate.now());
+        }
+        //默认查询总数据
+        if (StringUtils.isBlank(dto.getTableTypes())) {
+            dto.setTableTypes("total");
+        }
+        //新增查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getGameId() != null) {
+            //拼接游戏id
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接SDK来源
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getClassify() != null) {
+            cri.where().andEquals("game_classify", dto.getClassify());
+        }
+        if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
+            //拼接查询时间
+            cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
+        }
+
+        //创建sql 获取游戏数据部分的数据
+        Sql sqlGameData = Sqls.create(getTotalGameData(dto.getTableTypes()) + cri);
+        //设置自定义回传对象
+        sqlGameData.setCallback(Sqls.callback.entity());
+        sqlGameData.setEntity(dao.getEntity(GameDataFirstNewUserAgainTotalVO.class));
+        //执行sql
+        dao.execute(sqlGameData);
+        //得到每日总计对象
+        GameDataFirstNewUserAgainTotalVO voGameData = sqlGameData.getObject(GameDataFirstNewUserAgainTotalVO.class);
+
+        //创建sql 获取首日复充数据部分的数据
+        Sql sqlAgainData = Sqls.create(firstNewUserAgainSql(dto.getTableTypes()) + cri);
+        //设置自定义回传对象
+        sqlAgainData.setCallback(Sqls.callback.entity());
+        sqlAgainData.setEntity(dao.getEntity(GameDataFirstNewUserAgainTotalVO.class));
+        //执行sql
+        dao.execute(sqlAgainData);
+        //得到每日总计对象
+        GameDataFirstNewUserAgainTotalVO voAgainData = sqlAgainData.getObject(GameDataFirstNewUserAgainTotalVO.class);
+        //计算游戏首日复充总计
+        formatFirstNewUserAgainTotal(voAgainData);
+        //将两个对象的属性结合
+        copyNullProperties(voAgainData, voGameData);
+        //返回
+        return voGameData;
+    }
+
+    /**
+     * 用户详情
+     *
+     * @param dto 前端传递传销参数实体
+     * @return Page对象
+     */
+    @Override
+    public Page<GameDataUserDetailsVO> getUserDetails(GameDataUserDetailsDTO dto) {
+
+        //得到需要查询的usersID内容
+        FirstNewUserAgainTrendVO againTrendVO = dto.getAgainTrendVO();
+        //处理时间条件
+        String timeType = againTrendVO.getTimeType();
+        //用来处理日期的字符串
+        StringBuilder daysStr = new StringBuilder(StringUtils.EMPTY);
+        if (timeType.startsWith("da")) {
+            daysStr.append(""" 
+                    INTERVAL %s day)""".formatted(
+                            Integer.parseInt(timeType.substring(2)) - 1));
+        } else if (timeType.startsWith("m")) {
+            daysStr.append(""" 
+                    INTERVAL %s month)""".formatted(timeType.substring(1)));
+        } else if (timeType.startsWith("y")) {
+            daysStr.append(" INTERVAL 1 year)");
+        } else {
+            daysStr.append(" INTERVAL 0 day)");
+        }
+        //得到用户id数组
+        Long[] usersId = againTrendVO.getUsersId();
+        //查询具体的数据
+        Sql userDetilsSql = Sqls.create("""
+                SELECT
+                    player_id,
+                    reg_agent_id,
+                    reg_agent_name,
+                    server_name,
+                    role_name,
+                    $amount as today_total_amount,
+                    player_os
+                FROM
+                    game_ads.ads_player_recharge_ranking
+                WHERE player_id IN (@usersId)
+                and source_system = @sourceSystem
+                and dt = DATE_ADD(reg_user_time,
+                """ + daysStr);
+        //设置参数
+        if ("total".equals(timeType)) {
+            userDetilsSql.vars().set("amount", "total_amount");
+        } else {
+            userDetilsSql.vars().set("amount", "today_total_amount");
+        }
+        userDetilsSql.params().set("usersId", usersId);
+        userDetilsSql.params().set("sourceSystem", againTrendVO.getSourceSystem());
+        //设置回传对象
+        userDetilsSql.setCallback(Sqls.callback.entities());
+        userDetilsSql.setEntity(dao.getEntity(GameDataUserDetailsVO.class));
+        //Pager对象
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        userDetilsSql.setPager(pager);
+        //执行sql
+        dao.execute(userDetilsSql);
+        //设置总记录数
+        pager.setRecordCount(Math.toIntExact(againTrendVO.getRechargeCount()));
+        //返回结果
+        return new Page<>(userDetilsSql.getList(GameDataUserDetailsVO.class), pager);
+    }
+
+    /**
+     * 查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id
+     *
+     * @param dto 前端查询参数
+     * @return map
+     */
+    private Map findUsersId(GameDataFirstNewUserAgainDTO dto) {
+        //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
+        Criteria findUsersCri = Cnd.cri();
+        //拼接游戏ID
+        if (dto.getGameId() != null) {
+            findUsersCri.where().andEquals("reg_game_id", dto.getGameId());
+        }
+        //拼接游戏应用类型
+        if (dto.getClassify() != null) {
+            findUsersCri.where().andEquals("classify", dto.getClassify());
+        }
+        //拼接SDK来源
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            findUsersCri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //拼接查询时间
+        if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
+            findUsersCri.where().andBetween("reg_user_time", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
+        }
+        //不同数据类型 查询条件不同 buy、nature、total
+        if ("buy".equals(dto.getTableTypes())) {
+            findUsersCri.where().andNotEquals("reg_agent_id", 0);
+        } else if ("nature".equals(dto.getTableTypes())) {
+            findUsersCri.where().andEquals("reg_agent_id", 0);
+        }
+        Sql findUsersIdSql = Sqls.create(findUsersIdSql(findUsersCri));
+        //自定义回传
+        findUsersIdSql.setCallback((connection, resultSet, sql) -> {
+            Map<String, String> tempMap = new HashMap<>();
+            while (resultSet.next()) {
+                tempMap.put(resultSet.getString(1), resultSet.getString(2));
+            }
+            return tempMap;
+        });
+        //运行sql
+        dao.execute(findUsersIdSql);
+        //返回结果
+        return findUsersIdSql.getObject(Map.class);
     }
 
     /**
@@ -3291,6 +3494,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             LEFT JOIN (
                                 SELECT
                                     game_id,
+                                    game_name,
                                     dt,
                                     buy_user_ltv_1 as user_ltv1,
                                     buy_user_ltv_2 as user_ltv2,
@@ -3599,7 +3803,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             """ + cri +
                     """
                                 ) b
-                            ON a.game_id = b.game_id and a.cost_date = b.dt
+                            ON a.game_id = b.game_id and a.cost_date = b.dt and a.game_name = b.game_name
                             """;
         } else if ("nature".equals(type)) {
             return """
@@ -3662,6 +3866,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             LEFT JOIN (
                                 SELECT
                                     game_id,
+                                    game_name,
                                     dt,
                                     nature_user_ltv_1 as user_ltv1,
                                     nature_user_ltv_2 as user_ltv2,
@@ -3970,7 +4175,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             """ + cri +
                     """
                                     ) b
-                                ON a.game_id = b.game_id and a.cost_date = b.dt
+                                ON a.game_id = b.game_id and a.cost_date = b.dt and a.game_name = b.game_name
                             """;
         }
 
@@ -4034,6 +4239,7 @@ public class GameDataServiceImpl implements IGameDataService {
                         LEFT JOIN (
                             SELECT
                                 game_id,
+                                game_name,
                                 dt,
                                 user_ltv_1 as user_ltv1,
                                 user_ltv_2 as user_ltv2,
@@ -4342,7 +4548,7 @@ public class GameDataServiceImpl implements IGameDataService {
                         """ + cri +
                 """
                             ) b
-                        ON a.game_id = b.game_id and a.cost_date = b.dt
+                        ON a.game_id = b.game_id and a.cost_date = b.dt and a.game_name = b.game_name
                         """;
     }
 
@@ -5497,60 +5703,60 @@ public class GameDataServiceImpl implements IGameDataService {
                             ads_game_day
                     """ + cri +
                     """
-                            ) a
-                    LEFT JOIN (
-                        SELECT
-                            game_id,
-                            dt,
-                            buy_da1 as da1,
-                            buy_da2 as da2,
-                            buy_da3 as da3,
-                            buy_da4 as da4,
-                            buy_da5 as da5,
-                            buy_da6 as da6,
-                            buy_da7 as da7,
-                            buy_da8 as da8,
-                            buy_da9 as da9,
-                            buy_da10 as da10,
-                            buy_da11 as da11,
-                            buy_da12 as da12,
-                            buy_da13 as da13,
-                            buy_da14 as da14,
-                            buy_da15 as da15,
-                            buy_da16 as da16,
-                            buy_da17 as da17,
-                            buy_da18 as da18,
-                            buy_da19 as da19,
-                            buy_da20 as da20,
-                            buy_da21 as da21,
-                            buy_da22 as da22,
-                            buy_da23 as da23,
-                            buy_da24 as da24,
-                            buy_da25 as da25,
-                            buy_da26 as da26,
-                            buy_da27 as da27,
-                            buy_da28 as da28,
-                            buy_da29 as da29,
-                            buy_da30 as da30,
-                            buy_m2 as m2,
-                            buy_m3 as m3,
-                            buy_m4 as m4,
-                            buy_m5 as m5,
-                            buy_m6 as m6,
-                            buy_m7 as m7,
-                            buy_m8 as m8,
-                            buy_m9 as m9,
-                            buy_m10 as m10,
-                            buy_m11 as m11,
-                            buy_y1 as y1,
-                            buy_total as total
-                        FROM
-                            ads_game_first_new_user_again_day
-                    """ + cri +
+                                    ) a
+                            LEFT JOIN (
+                                SELECT
+                                    game_id,
+                                    dt,
+                                    buy_da1 as da1,
+                                    buy_da2 as da2,
+                                    buy_da3 as da3,
+                                    buy_da4 as da4,
+                                    buy_da5 as da5,
+                                    buy_da6 as da6,
+                                    buy_da7 as da7,
+                                    buy_da8 as da8,
+                                    buy_da9 as da9,
+                                    buy_da10 as da10,
+                                    buy_da11 as da11,
+                                    buy_da12 as da12,
+                                    buy_da13 as da13,
+                                    buy_da14 as da14,
+                                    buy_da15 as da15,
+                                    buy_da16 as da16,
+                                    buy_da17 as da17,
+                                    buy_da18 as da18,
+                                    buy_da19 as da19,
+                                    buy_da20 as da20,
+                                    buy_da21 as da21,
+                                    buy_da22 as da22,
+                                    buy_da23 as da23,
+                                    buy_da24 as da24,
+                                    buy_da25 as da25,
+                                    buy_da26 as da26,
+                                    buy_da27 as da27,
+                                    buy_da28 as da28,
+                                    buy_da29 as da29,
+                                    buy_da30 as da30,
+                                    buy_m2 as m2,
+                                    buy_m3 as m3,
+                                    buy_m4 as m4,
+                                    buy_m5 as m5,
+                                    buy_m6 as m6,
+                                    buy_m7 as m7,
+                                    buy_m8 as m8,
+                                    buy_m9 as m9,
+                                    buy_m10 as m10,
+                                    buy_m11 as m11,
+                                    buy_y1 as y1,
+                                    buy_total as total
+                                FROM
+                                    ads_game_first_new_user_again_day
+                            """ + cri +
                     """
-                        ) b
-                    ON a.game_id = b.game_id and a.cost_date = b.dt
-                    """;
+                                ) b
+                            ON a.game_id = b.game_id and a.cost_date = b.dt
+                            """;
         } else if ("nature".equals(type)) {
             return """
                     SELECT
@@ -5608,60 +5814,60 @@ public class GameDataServiceImpl implements IGameDataService {
                             ads_game_day
                     """ + cri +
                     """
-                            ) a
-                    LEFT JOIN (
-                        SELECT
-                            game_id,
-                            dt,
-                            nature_da1 as da1,
-                            nature_da2 as da2,
-                            nature_da3 as da3,
-                            nature_da4 as da4,
-                            nature_da5 as da5,
-                            nature_da6 as da6,
-                            nature_da7 as da7,
-                            nature_da8 as da8,
-                            nature_da9 as da9,
-                            nature_da10 as da10,
-                            nature_da11 as da11,
-                            nature_da12 as da12,
-                            nature_da13 as da13,
-                            nature_da14 as da14,
-                            nature_da15 as da15,
-                            nature_da16 as da16,
-                            nature_da17 as da17,
-                            nature_da18 as da18,
-                            nature_da19 as da19,
-                            nature_da20 as da20,
-                            nature_da21 as da21,
-                            nature_da22 as da22,
-                            nature_da23 as da23,
-                            nature_da24 as da24,
-                            nature_da25 as da25,
-                            nature_da26 as da26,
-                            nature_da27 as da27,
-                            nature_da28 as da28,
-                            nature_da29 as da29,
-                            nature_da30 as da30,
-                            nature_m2 as m2,
-                            nature_m3 as m3,
-                            nature_m4 as m4,
-                            nature_m5 as m5,
-                            nature_m6 as m6,
-                            nature_m7 as m7,
-                            nature_m8 as m8,
-                            nature_m9 as m9,
-                            nature_m10 as m10,
-                            nature_m11 as m11,
-                            nature_y1 as y1,
-                            nature_total as total
-                        FROM
-                            ads_game_first_new_user_again_day
-                    """ + cri +
+                                    ) a
+                            LEFT JOIN (
+                                SELECT
+                                    game_id,
+                                    dt,
+                                    nature_da1 as da1,
+                                    nature_da2 as da2,
+                                    nature_da3 as da3,
+                                    nature_da4 as da4,
+                                    nature_da5 as da5,
+                                    nature_da6 as da6,
+                                    nature_da7 as da7,
+                                    nature_da8 as da8,
+                                    nature_da9 as da9,
+                                    nature_da10 as da10,
+                                    nature_da11 as da11,
+                                    nature_da12 as da12,
+                                    nature_da13 as da13,
+                                    nature_da14 as da14,
+                                    nature_da15 as da15,
+                                    nature_da16 as da16,
+                                    nature_da17 as da17,
+                                    nature_da18 as da18,
+                                    nature_da19 as da19,
+                                    nature_da20 as da20,
+                                    nature_da21 as da21,
+                                    nature_da22 as da22,
+                                    nature_da23 as da23,
+                                    nature_da24 as da24,
+                                    nature_da25 as da25,
+                                    nature_da26 as da26,
+                                    nature_da27 as da27,
+                                    nature_da28 as da28,
+                                    nature_da29 as da29,
+                                    nature_da30 as da30,
+                                    nature_m2 as m2,
+                                    nature_m3 as m3,
+                                    nature_m4 as m4,
+                                    nature_m5 as m5,
+                                    nature_m6 as m6,
+                                    nature_m7 as m7,
+                                    nature_m8 as m8,
+                                    nature_m9 as m9,
+                                    nature_m10 as m10,
+                                    nature_m11 as m11,
+                                    nature_y1 as y1,
+                                    nature_total as total
+                                FROM
+                                    ads_game_first_new_user_again_day
+                            """ + cri +
                     """
-                            ) b
-                        ON a.game_id = b.game_id and a.cost_date = b.dt
-                    """;
+                                    ) b
+                                ON a.game_id = b.game_id and a.cost_date = b.dt
+                            """;
         }
         //总量 total
         return """
@@ -5720,62 +5926,135 @@ public class GameDataServiceImpl implements IGameDataService {
                         ads_game_day
                 """ + cri +
                 """
-                        ) a
-                LEFT JOIN (
-                    SELECT
-                        game_id,
-                        dt,
-                        da1,
-                        da2,
-                        da3,
-                        da4,
-                        da5,
-                        da6,
-                        da7,
-                        da8,
-                        da9,
-                        da10,
-                        da11,
-                        da12,
-                        da13,
-                        da14,
-                        da15,
-                        da16,
-                        da17,
-                        da18,
-                        da19,
-                        da20,
-                        da21,
-                        da22,
-                        da23,
-                        da24,
-                        da25,
-                        da26,
-                        da27,
-                        da28,
-                        da29,
-                        da30,
-                        m2,
-                        m3,
-                        m4,
-                        m5,
-                        m6,
-                        m7,
-                        m8,
-                        m9,
-                        m10,
-                        m11,
-                        y1,
-                        total
-                    FROM
-                        ads_game_first_new_user_again_day
-                """ + cri +
+                                ) a
+                        LEFT JOIN (
+                            SELECT
+                                game_id,
+                                dt,
+                                da1,
+                                da2,
+                                da3,
+                                da4,
+                                da5,
+                                da6,
+                                da7,
+                                da8,
+                                da9,
+                                da10,
+                                da11,
+                                da12,
+                                da13,
+                                da14,
+                                da15,
+                                da16,
+                                da17,
+                                da18,
+                                da19,
+                                da20,
+                                da21,
+                                da22,
+                                da23,
+                                da24,
+                                da25,
+                                da26,
+                                da27,
+                                da28,
+                                da29,
+                                da30,
+                                m2,
+                                m3,
+                                m4,
+                                m5,
+                                m6,
+                                m7,
+                                m8,
+                                m9,
+                                m10,
+                                m11,
+                                y1,
+                                total
+                            FROM
+                                ads_game_first_new_user_again_day
+                        """ + cri +
                 """
-                    ) b
-                ON a.game_id = b.game_id and a.cost_date = b.dt
-                """;
+                            ) b
+                        ON a.game_id = b.game_id and a.cost_date = b.dt
+                        """;
     }
 
+    /**
+     * 游戏首日复充总计sql(首日复充数据部分)
+     *
+     * @param type 查询的类型 buy、nature、total
+     * @return String : 查询出来的结果 第n天的 充值金额/充值人数
+     */
+    private String firstNewUserAgainSql(String type) {
+        //修改类型,与数据库字段名相匹配
+        if ("buy".equals(type)) {
+            type = type + "_";
+        } else if ("nature".equals(type)) {
+            type = type + "_";
+        } else {
+            type = "";
+        }
+        //拼接查询条件
+        StringBuilder trendDay = new StringBuilder(StringUtils.EMPTY);
+        trendDay.append("SELECT ");
+        //90天数据
+        for (int day = 1; day <= 30; day++) {
+            trendDay.append("""
+                    CONCAT( SUM(CAST(SPLIT_PART(%sda%s, '/', 1) AS DECIMAL(10, 2))), '/',
+                            SUM(CAST(SPLIT_PART(%sda%s, '/', 2) AS BIGINT)), '/',
+                            SUM(CAST(SPLIT_PART(%sda1, '/', 2) AS BIGINT))
+                    ) AS da%s,
+                       """.formatted(type, day, type, day, type, day));
+        }
+        //m4-m11数据
+        for (int month = 2; month <= 11; month++) {
+            trendDay.append("""
+                    CONCAT( SUM(CAST(SPLIT_PART(%sm%s, '/', 1) AS DECIMAL(10, 2))), '/',
+                            SUM(CAST(SPLIT_PART(%sm%s, '/', 2) AS BIGINT)), '/',
+                            SUM(CAST(SPLIT_PART(%sda1, '/', 2) AS BIGINT))
+                    ) AS m%s,
+                       """.formatted(type, month, type, 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(CAST(SPLIT_PART(%sda1, '/', 2) AS BIGINT))
+                ) AS y1,
+                   """.formatted(type, type, type));
+        //total数据
+        trendDay.append("""
+                CONCAT( SUM(CAST(SPLIT_PART(%stotal, '/', 1) AS DECIMAL(10, 2))), '/',
+                        SUM(CAST(SPLIT_PART(%stotal, '/', 2) AS BIGINT)), '/',
+                        SUM(CAST(SPLIT_PART(%sda1, '/', 2) AS BIGINT))
+                ) AS total
+                   """.formatted(type, type, type));
+        trendDay.append("FROM ads_game_first_new_user_again_day");
+
+        return trendDay.toString();
+    }
+
+    /**
+     * 找出每个游戏注册时间内的注册当天且充值的用户id
+     *
+     * @return String
+     */
+    private String findUsersIdSql(Criteria cri) {
+        return """
+                SELECT
+                    CONCAT(reg_game_id,'/',DATE(reg_user_time)) as game_id_date,
+                    GROUP_CONCAT(CONVERT (player_id, varchar), "/") as amount_users_id
+                FROM
+                    game_ads.ads_player_recharge_ranking
+                """ + cri +
+                """
+                    AND dt = reg_user_time
+                GROUP BY reg_game_id, reg_user_time
+                        """;
+    }
 
 
     private List<H5NatureUserVO> getH5NatureUserVOList(GameDataH5DTO dto, Map<String, Object> importDayNMap, GameDataH5VO item) {