Forráskód Böngészése

修改内容:付费留存数据

lth 1 éve
szülő
commit
12619942c5

+ 4 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/AdsOrderDetailListDTO.java

@@ -174,15 +174,15 @@ public class AdsOrderDetailListDTO extends BasePage {
     private LocalDate payTimeEnd;
 
     /**
-     * 充值到支付的间隔时间(最小分)
+     * 注册与充值的间隔时间(最小分)
      */
-    @ApiModelProperty("充值到支付的间隔时间(分)")
+    @ApiModelProperty("注册与充值的间隔时间(分)")
     private Long regPayIntervalTimeMin;
 
     /**
-     * 充值到支付的间隔时间(最大分)
+     * 注册与充值的间隔时间(最大分)
      */
-    @ApiModelProperty("充值到支付的间隔时间(分)")
+    @ApiModelProperty("注册与充值的间隔时间(分)")
     private Long regPayIntervalTimeMax;
 
     /**

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

@@ -15,7 +15,7 @@ import java.math.BigDecimal;
 public class ActiveDataTrendVO {
 
     /**
-     * 活跃人数(注册留存数据)
+     * 活跃人数(注册留存数据)
      */
     @ApiModelProperty(notes = "活跃人数(注册留存数据)")
     private Long activeNum;
@@ -27,22 +27,28 @@ public class ActiveDataTrendVO {
     private BigDecimal regActiveRate;
 
     /**
-     * 第N天的新用户(付费留存数据)
+     * 第N天的新增付费用户(付费留存数据)
      */
-    @ApiModelProperty(notes = "第N天的新用户(付费留存数据)")
-    private Long newUserNum;
+    @ApiModelProperty(notes = "第N天的新增付费用户(付费留存数据)")
+    private Long newUserAmountNum;
 
     /**
-     * 第N天的老用户数(付费留存数据)
+     * 第N天的老活跃用户数(付费留存数据)
      */
-    @ApiModelProperty(notes = "第N天的老用户数(付费留存数据)")
-    private Long oldUserNum;
+    @ApiModelProperty(notes = "第N天的老活跃用户数(付费留存数据)")
+    private Long oldActiveUserNum;
 
     /**
-     * 累计到第N天的用户数(付费留存数据)
+     * 累计到第N天的付费用户数(付费留存数据)
      */
-    @ApiModelProperty(notes = "累计到第N天的新用户数(付费留存数据)")
-    private Long newUserTotalNum;
+    @ApiModelProperty(notes = "累计到第N天的付费用户数(付费留存数据)")
+    private Long newUserTotalAmountNum;
+
+    /**
+     * 累计到第N天的活跃用户数(付费留存数据)
+     */
+    @ApiModelProperty(notes = "累计到第N天的活跃用户数(付费留存数据)")
+    private Long newActiveUserTotalNum;
 
     /**
      * 付费留存率(付费留存数据)

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

@@ -356,32 +356,35 @@ public class IActiveDataServiceImpl implements IActiveDataService {
                     ) AS m12
                        """.formatted(type, type));
         } else if ("ads_game_active_order_day".equals(tableName)) {
-            // 第N天新用户数/第N天老用户数/累计到第N天的新用户
+            // 第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, '/', 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, day-1, type, day));
+                       """.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, '/', 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, month, type, month));
+                       """.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))
-                    ) AS m12,
-                       """.formatted(type, type, type));
+                            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));
         } else {
 
         }
@@ -417,13 +420,14 @@ public class IActiveDataServiceImpl implements IActiveDataService {
             //处理付费留存数据
             activeDataDayNFieldMapList.forEach(dayNFieldMapList -> {
                 try {
-                    //  第N天新用户数/第N天老用户数/累计到第N天的新用户数/付费留存率
+                    //  第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
                     String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
                     dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
-                            .newUserNum(Long.valueOf(temps[0]))
-                            .oldUserNum(Long.valueOf(temps[1]))
-                            .newUserTotalNum(Long.valueOf(temps[2]))
-                            .amountActiveRate(new BigDecimal(temps[3]))
+                            .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());
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
@@ -436,10 +440,6 @@ public class IActiveDataServiceImpl implements IActiveDataService {
                     //  第N天新用户数/第N天老用户数/累计到第N天的新用户数/付费留存率
                     String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
                     dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
-                            .newUserNum(Long.valueOf(temps[0]))
-                            .oldUserNum(Long.valueOf(temps[1]))
-                            .newUserTotalNum(Long.valueOf(temps[2]))
-                            .amountActiveRate(new BigDecimal(temps[3]))
                             .build());
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
@@ -478,19 +478,19 @@ public class IActiveDataServiceImpl implements IActiveDataService {
         } else if ("amount".equals(activeType)) {
             activeDataDayNTotalFieldMapList.forEach(dayNFieldMapList -> {
                 try {
+                    // 第N天新增付费用户数/第N天老活跃用户数/累计到第N天的付费用户数/累计到第N天的活跃人数
                     String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
-                    //第N天的新用户数
-                    Long newUserNum = Long.valueOf(temps[0]);
-                    //第N天的老用户数
-                    Long oldUserNum = Long.valueOf(temps[1]);
-                    //累计到第N天的新用户数
-                    Long newUserTotalNum = Long.valueOf(temps[2]);
+                    //累计到第N天的活跃人数(活跃人数)
+                    Long activeUserNum = Long.valueOf(temps[3]);
+                    //累计到第N天的付费人数
+                    Long amountTotalNum = Long.valueOf(temps[2]);
                     dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
-                                    .newUserNum(newUserNum)
-                                    .oldUserNum(oldUserNum)
-                                    .newUserTotalNum(newUserTotalNum)
-                                    .amountActiveRate(newUserTotalNum == 0L ? BigDecimal.ZERO :
-                                            BigDecimal.valueOf((newUserNum.doubleValue() + oldUserNum.doubleValue()) / newUserTotalNum.doubleValue())
+                                    .newUserAmountNum(Long.valueOf(temps[0]))
+                                    .oldActiveUserNum(Long.valueOf(temps[1]))
+                                    .newUserTotalAmountNum(amountTotalNum)
+                                    .newActiveUserTotalNum(activeUserNum)
+                                    .amountActiveRate(amountTotalNum == 0L ? BigDecimal.ZERO :
+                                            BigDecimal.valueOf(activeUserNum.doubleValue() / amountTotalNum.doubleValue())
                                             .setScale(4, RoundingMode.HALF_UP))
                             .build());
                 } catch (IllegalAccessException e) {