Browse Source

:fix:优化GS游戏区服

zhangxianyu 1 year ago
parent
commit
6e773e9778

+ 0 - 22
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/config/TaskSchedulerConfig.java

@@ -1,22 +0,0 @@
-package com.zanxiang.game.data.serve.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.SchedulingConfigurer;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
-import org.springframework.scheduling.config.ScheduledTaskRegistrar;
-
-@Configuration
-@EnableScheduling
-public class TaskSchedulerConfig implements SchedulingConfigurer {
-
-    @Override
-    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
-        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
-        threadPoolTaskScheduler.setPoolSize(10); // 根据需求设置线程池大小
-        threadPoolTaskScheduler.setThreadNamePrefix("schedule-task-");
-        threadPoolTaskScheduler.setDaemon(true);
-        threadPoolTaskScheduler.initialize();
-        taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
-    }
-}

+ 183 - 309
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GSGameServerDayVO.java

@@ -53,322 +53,196 @@ public class GSGameServerDayVO implements Serializable {
     private Long totalAmountNum;
 
     /**
-     * 区服第1天:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
+     * 区服第1天:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率
      */
-    @ApiModelProperty(value = "不展示")
-    private String da1;
-
-    /**
-     * 区服第1天:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String da2;
-
-    /**
-     * 区服第2天:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String da3;
-
-    /**
-     * 区服第3天:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String da4;
-
-    /**
-     * 区服第4天:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String da5;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da6;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da7;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da8;
-
-    @ApiModelProperty(value = "不展示")
-    private String da9;
-
-    @ApiModelProperty(value = "不展示")
-    private String da10;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da11;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da12;
-
-    @ApiModelProperty(value = "不展示")
-    private String da13;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da14;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da15;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da16;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da17;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da18;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da19;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da20;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da21;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da22;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da23;
+    private String daStr1;
+    private String daStr2;
+    private String daStr3;
+    private String daStr4;
+    private String daStr5;
+    private String daStr6;
+    private String daStr7;
+    private String daStr8;
+    private String daStr9;
+    private String daStr10;
+    private String daStr11;
+    private String daStr12;
+    private String daStr13;
+    private String daStr14;
+    private String daStr15;
+    private String daStr16;
+    private String daStr17;
+    private String daStr18;
+    private String daStr19;
+    private String daStr20;
+    private String daStr21;
+    private String daStr22;
+    private String daStr23;
+    private String daStr24;
+    private String daStr25;
+    private String daStr26;
+    private String daStr27;
+    private String daStr28;
+    private String daStr29;
+    private String daStr30;
+    private String daStr31;
+    private String daStr32;
+    private String daStr33;
+    private String daStr34;
+    private String daStr35;
+    private String daStr36;
+    private String daStr37;
+    private String daStr38;
+    private String daStr39;
+    private String daStr40;
+    private String daStr41;
+    private String daStr42;
+    private String daStr43;
+    private String daStr44;
+    private String daStr45;
+    private String daStr46;
+    private String daStr47;
+    private String daStr48;
+    private String daStr49;
+    private String daStr50;
+    private String daStr51;
+    private String daStr52;
+    private String daStr53;
+    private String daStr54;
+    private String daStr55;
+    private String daStr56;
+    private String daStr57;
+    private String daStr58;
+    private String daStr59;
+    private String daStr60;
+    private String daStr61;
+    private String daStr62;
+    private String daStr63;
+    private String daStr64;
+    private String daStr65;
+    private String daStr66;
+    private String daStr67;
+    private String daStr68;
+    private String daStr69;
+    private String daStr70;
+    private String daStr71;
+    private String daStr72;
+    private String daStr73;
+    private String daStr74;
+    private String daStr75;
+    private String daStr76;
+    private String daStr77;
+    private String daStr78;
+    private String daStr79;
+    private String daStr80;
+    private String daStr81;
+    private String daStr82;
+    private String daStr83;
+    private String daStr84;
+    private String daStr85;
+    private String daStr86;
+    private String daStr87;
+    private String daStr88;
+    private String daStr89;
+    private String daStr90;
+
+    //1-90的留存率
+    private GSServerRetentionVO daRetention1;
+    private GSServerRetentionVO daRetention2;
+    private GSServerRetentionVO daRetention3;
+    private GSServerRetentionVO daRetention4;
+    private GSServerRetentionVO daRetention5;
+    private GSServerRetentionVO daRetention6;
+    private GSServerRetentionVO daRetention7;
+    private GSServerRetentionVO daRetention8;
+    private GSServerRetentionVO daRetention9;
+    private GSServerRetentionVO daRetention10;
+    private GSServerRetentionVO daRetention11;
+    private GSServerRetentionVO daRetention12;
+    private GSServerRetentionVO daRetention13;
+    private GSServerRetentionVO daRetention14;
+    private GSServerRetentionVO daRetention15;
+    private GSServerRetentionVO daRetention16;
+    private GSServerRetentionVO daRetention17;
+    private GSServerRetentionVO daRetention18;
+    private GSServerRetentionVO daRetention19;
+    private GSServerRetentionVO daRetention20;
+    private GSServerRetentionVO daRetention21;
+    private GSServerRetentionVO daRetention22;
+    private GSServerRetentionVO daRetention23;
+    private GSServerRetentionVO daRetention24;
+    private GSServerRetentionVO daRetention25;
+    private GSServerRetentionVO daRetention26;
+    private GSServerRetentionVO daRetention27;
+    private GSServerRetentionVO daRetention28;
+    private GSServerRetentionVO daRetention29;
+    private GSServerRetentionVO daRetention30;
+    private GSServerRetentionVO daRetention31;
+    private GSServerRetentionVO daRetention32;
+    private GSServerRetentionVO daRetention33;
+    private GSServerRetentionVO daRetention34;
+    private GSServerRetentionVO daRetention35;
+    private GSServerRetentionVO daRetention36;
+    private GSServerRetentionVO daRetention37;
+    private GSServerRetentionVO daRetention38;
+    private GSServerRetentionVO daRetention39;
+    private GSServerRetentionVO daRetention40;
+    private GSServerRetentionVO daRetention41;
+    private GSServerRetentionVO daRetention42;
+    private GSServerRetentionVO daRetention43;
+    private GSServerRetentionVO daRetention44;
+    private GSServerRetentionVO daRetention45;
+    private GSServerRetentionVO daRetention46;
+    private GSServerRetentionVO daRetention47;
+    private GSServerRetentionVO daRetention48;
+    private GSServerRetentionVO daRetention49;
+    private GSServerRetentionVO daRetention50;
+    private GSServerRetentionVO daRetention51;
+    private GSServerRetentionVO daRetention52;
+    private GSServerRetentionVO daRetention53;
+    private GSServerRetentionVO daRetention54;
+    private GSServerRetentionVO daRetention55;
+    private GSServerRetentionVO daRetention56;
+    private GSServerRetentionVO daRetention57;
+    private GSServerRetentionVO daRetention58;
+    private GSServerRetentionVO daRetention59;
+    private GSServerRetentionVO daRetention60;
+    private GSServerRetentionVO daRetention61;
+    private GSServerRetentionVO daRetention62;
+    private GSServerRetentionVO daRetention63;
+    private GSServerRetentionVO daRetention64;
+    private GSServerRetentionVO daRetention65;
+    private GSServerRetentionVO daRetention66;
+    private GSServerRetentionVO daRetention67;
+    private GSServerRetentionVO daRetention68;
+    private GSServerRetentionVO daRetention69;
+    private GSServerRetentionVO daRetention70;
+    private GSServerRetentionVO daRetention71;
+    private GSServerRetentionVO daRetention72;
+    private GSServerRetentionVO daRetention73;
+    private GSServerRetentionVO daRetention74;
+    private GSServerRetentionVO daRetention75;
+    private GSServerRetentionVO daRetention76;
+    private GSServerRetentionVO daRetention77;
+    private GSServerRetentionVO daRetention78;
+    private GSServerRetentionVO daRetention79;
+    private GSServerRetentionVO daRetention80;
+    private GSServerRetentionVO daRetention81;
+    private GSServerRetentionVO daRetention82;
+    private GSServerRetentionVO daRetention83;
+    private GSServerRetentionVO daRetention84;
+    private GSServerRetentionVO daRetention85;
+    private GSServerRetentionVO daRetention86;
+    private GSServerRetentionVO daRetention87;
+    private GSServerRetentionVO daRetention88;
+    private GSServerRetentionVO daRetention89;
+    private GSServerRetentionVO daRetention90;
 
 
-    @ApiModelProperty(value = "不展示")
-    private String da24;
 
 
-    @ApiModelProperty(value = "不展示")
-    private String da25;
 
 
-    @ApiModelProperty(value = "不展示")
-    private String da26;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da27;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da28;
-
-
-    @ApiModelProperty(value = "不展示")
-    private String da29;
-
-    @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;
-
-    @ApiModelProperty(value = "不展示")
-    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;
-
-    @ApiModelProperty(value = "不展示")
-    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月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m4;
-
-    /**
-     * 区服在第5月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m5;
-
-    /**
-     * 区服在第6月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m6;
-
-    /**
-     * 区服在第7月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m7;
-
-    /**
-     * 区服在第8月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m8;
-
-    /**
-     * 区服在第9月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m9;
-
-    /**
-     * 区服在第10月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m10;
-
-    /**
-     * 区服在第11月:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m11;
-
-    /**
-     * 区服在第1年:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String m12;
-
-//    /**
-//     * 区服至今:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-//     */
-//    @ApiModelProperty(value = "区服至今总数据")
-//    private GameServerTrendVO totalTrend;
-
-    /**
-     * 昨日区服数据:活跃留存率/付费留存率/小R留存率/中R留存率/大R留存率/超大R留存率/第N天创角总人数/第N天付费总人数
-     */
-    @ApiModelProperty(value = "不展示")
-    private String yesterday;
-
 
 
 

+ 44 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GSServerRetentionVO.java

@@ -0,0 +1,44 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * packageName com.zanxiang.game.data.serve.pojo.vo
+ *
+ * @author ZhangXianyu
+ * @date 2024/4/7
+ * @description GS区服留存VO
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class GSServerRetentionVO {
+    /**
+     * 活跃留存率
+     */
+    private String activeRetention;
+    /**
+     * 付费留存率
+     */
+    private String PaidRetentionRate;
+    /**
+     * 小R留存率
+     */
+    private String smallR;
+    /**
+     * 中R留存率
+     */
+    private String mediumR;
+    /**
+     * 大R留存率
+     */
+    private String largeR;
+    /**
+     * 超大R留存率
+     */
+    private String superR;
+}

+ 56 - 21
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameServerServiceImpl.java

@@ -52,7 +52,6 @@ public class GameServerServiceImpl implements IGameServerService {
     private static final List<Tuple2<Field, Field>> dayNTotalFieldMapListForServerDay;
 
 
-
     static {
         //解析游戏区服的dayN映射
         Map<String, Field> fieldMap = new HashMap<>();
@@ -511,6 +510,8 @@ public class GameServerServiceImpl implements IGameServerService {
      */
     @Override
     public Page<GSGameServerDayVO> getGSGameServerDataDay(GSGameServerDayDTO dto) {
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start();
         Criteria cri = getGameServerDayCriteria(dto);
         Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
         Sql sql = Sqls.create(getGSGameServerDateSql() + cri);
@@ -531,7 +532,13 @@ public class GameServerServiceImpl implements IGameServerService {
 
         //获取所有的da字段
         List<Field> fieldList = Arrays.stream(GSGameServerDayVO.class.getDeclaredFields())
-                .filter(field -> field.getName().contains("da"))
+                .filter(field -> field.getName().contains("daStr"))
+                .peek(field -> field.setAccessible(true))
+                .toList();
+
+        //获取所有的da的object
+        List<Field> fieldObjectList = Arrays.stream(GSGameServerDayVO.class.getDeclaredFields())
+                .filter(field -> field.getName().contains("daRetention"))
                 .peek(field -> field.setAccessible(true))
                 .toList();
 
@@ -548,18 +555,29 @@ public class GameServerServiceImpl implements IGameServerService {
                     } else {
                         rData = "0/0/0/0";
                     }
-                    field.set(vo, value + "/" + rData);
+                    value += "/" + rData;
+//                    field.set(vo, value + "/" + rData);
+                    String[] split = value.split("/");
+                    GSServerRetentionVO retentionVO = GSServerRetentionVO.builder()
+                            .activeRetention(split[0])
+                            .PaidRetentionRate(split[1])
+                            .smallR(split[2])
+                            .mediumR(split[3])
+                            .largeR(split[4])
+                            .superR(split[5]).build();
+                    fieldObjectList.get(i).set(vo, retentionVO);
                 } catch (IllegalAccessException e) {
                     throw new RuntimeException(e);
                 }
             }
 
+            stopWatch.stop();
+            log.info("GS区服查询消耗时间:{}", stopWatch.getTotalTimeMillis());
         }
         return new Page<>(vos, pager);
     }
 
 
-
     /**
      * 区服总数据
      *
@@ -579,12 +597,18 @@ public class GameServerServiceImpl implements IGameServerService {
         List<GSGameServerTotalRVo> rDatas = getRDataList(cri);
         //获取所有的da字段
         List<Field> fieldList = Arrays.stream(GSGameServerDayVO.class.getDeclaredFields())
-                .filter(field -> field.getName().contains("da"))
+                .filter(field -> field.getName().contains("daStr"))
                 .peek(field -> field.setAccessible(true))
                 .toList();
+        //获取所有的da的object
+        List<Field> fieldObjectList = Arrays.stream(GSGameServerDayVO.class.getDeclaredFields())
+                .filter(field -> field.getName().contains("daRetention"))
+                .peek(field -> field.setAccessible(true))
+                .toList();
+
         Map<Integer, GSGameServerDayRVO> dayRVOMap = new HashMap<>();
         for (GSGameServerTotalRVo rData : rDatas) {
-            if(StringUtils.isEmpty(rData.getSmallR())){
+            if (StringUtils.isEmpty(rData.getSmallR())) {
                 continue;
             }
             String[] smallRs = rData.getSmallR().split(",");
@@ -592,26 +616,26 @@ public class GameServerServiceImpl implements IGameServerService {
             String[] largeRs = rData.getLargeR().split(",");
             String[] superRs = rData.getSuperR().split(",");
             for (int i = 0; i < fieldList.size(); i++) {
-                if(i>=smallRs.length){
+                if (i >= smallRs.length) {
                     continue;
                 }
                 String smallR = smallRs[i];
                 String mediumR = mediumRs[i];
                 String largeR = largeRs[i];
                 String superR = superRs[i];
-                if(dayRVOMap.get(i)==null){
+                if (dayRVOMap.get(i) == null) {
                     GSGameServerDayRVO gsGameServerDayRVO = new GSGameServerDayRVO();
                     gsGameServerDayRVO.setSmallR(Long.parseLong(smallR.trim()));
                     gsGameServerDayRVO.setMediumR(Long.parseLong(mediumR.trim()));
                     gsGameServerDayRVO.setLargeR(Long.parseLong(largeR.trim()));
                     gsGameServerDayRVO.setSuperR(Long.parseLong(superR.trim()));
-                    dayRVOMap.put(i,gsGameServerDayRVO);
-                }else {
+                    dayRVOMap.put(i, gsGameServerDayRVO);
+                } else {
                     GSGameServerDayRVO gsGameServerDayRVO = dayRVOMap.get(i);
-                    gsGameServerDayRVO.setSmallR(gsGameServerDayRVO.getSmallR()+Long.parseLong(smallR.trim()));
-                    gsGameServerDayRVO.setMediumR(gsGameServerDayRVO.getMediumR()+Long.parseLong(mediumR.trim()));
-                    gsGameServerDayRVO.setLargeR(gsGameServerDayRVO.getLargeR()+Long.parseLong(largeR.trim()));
-                    gsGameServerDayRVO.setSuperR(gsGameServerDayRVO.getSuperR()+Long.parseLong(superR.trim()));
+                    gsGameServerDayRVO.setSmallR(gsGameServerDayRVO.getSmallR() + Long.parseLong(smallR.trim()));
+                    gsGameServerDayRVO.setMediumR(gsGameServerDayRVO.getMediumR() + Long.parseLong(mediumR.trim()));
+                    gsGameServerDayRVO.setLargeR(gsGameServerDayRVO.getLargeR() + Long.parseLong(largeR.trim()));
+                    gsGameServerDayRVO.setSuperR(gsGameServerDayRVO.getSuperR() + Long.parseLong(superR.trim()));
                 }
             }
         }
@@ -621,26 +645,37 @@ public class GameServerServiceImpl implements IGameServerService {
                 String value = (String) field.get(vo);
                 GSGameServerDayRVO gsGameServerDayRVO = dayRVOMap.get(i);
                 String rData = getRDataStr(gsGameServerDayRVO, vo);
-                field.set(vo, value + "/" + rData);
+
+                value += "/" + rData;
+                String[] split = value.split("/");
+                GSServerRetentionVO retentionVO = GSServerRetentionVO.builder()
+                        .activeRetention(split[0])
+                        .PaidRetentionRate(split[1])
+                        .smallR(split[2])
+                        .mediumR(split[3])
+                        .largeR(split[4])
+                        .superR(split[5]).build();
+                fieldObjectList.get(i).set(vo, retentionVO);
+//                field.set(vo, value + "/" + rData);
             } catch (IllegalAccessException e) {
                 throw new RuntimeException(e);
             }
         }
         stopWatch.stop();
-        log.info("耗时:" + stopWatch.getTotalTimeMillis()+"ms");
+        log.info("耗时:" + stopWatch.getTotalTimeMillis() + "ms");
         return vo;
     }
 
 
     private List<GSGameServerTotalRVo> getRDataList(Criteria cri) {
-        Sql sql = Sqls.create(getGSGameServerDateAndRSql() + cri);
+        Sql sql = Sqls.create(getGSGameServerDateAndRSql(cri));
         sql.setCallback(Sqls.callback.entities());
         sql.setEntity(dao.getEntity(GSGameServerTotalRVo.class));
         dao.execute(sql);
         return sql.getList(GSGameServerTotalRVo.class);
     }
 
-    private String getGSGameServerDateAndRSql(){
+    private String getGSGameServerDateAndRSql(Criteria cri) {
 
         return """
                 select a.source_system,
@@ -654,12 +689,12 @@ public class GameServerServiceImpl implements IGameServerService {
                 left join game_ads_parent.ads_game_server_gs_r_day_parent e
                           on a.source_system = e.source_system and a.server_id = e.server_id and
                              a.parent_game_id = e.parent_game_id and a.dt = e.dt
+                             """ + cri + """
                 group by a.source_system, a.server_id, a.parent_game_id
                 """;
     }
 
 
-
     /**
      * 拼接R留存率  (R/充值总人数)
      *
@@ -792,7 +827,7 @@ public class GameServerServiceImpl implements IGameServerService {
         StringBuilder sql = new StringBuilder(StringUtils.EMPTY);
         for (int i = 1; i <= 90; i++) {
             sql.append("""
-                    concat(ifnull(round(c.da%d_active_num / e.new_da%d_total_num ,4),0),'/',ifnull(round(d.new_da%d_num + d.old_da%d_num / d.new_da%d_total_num,4),0)) as da%d,
+                    concat(ifnull(round(c.da%d_active_num / e.new_da%d_total_num ,4),0),'/',ifnull(round(d.new_da%d_num + d.old_da%d_num / d.new_da%d_total_num,4),0)) as da_str%d,
                      """.formatted(i, i, i, i, i, i));
 
         }
@@ -806,7 +841,7 @@ public class GameServerServiceImpl implements IGameServerService {
         StringBuilder sql = new StringBuilder(StringUtils.EMPTY);
         for (int i = 1; i <= 90; i++) {
             sql.append("""
-                    concat(ifnull(round(SUM(c.da%d_active_num) / SUM(e.new_da%d_total_num) ,4),0),'/',ifnull(round(SUM(d.new_da%d_num) + SUM(d.old_da%d_num) / SUM(d.new_da%d_total_num),4),0)) as da%d,
+                    concat(ifnull(round(SUM(c.da%d_active_num) / SUM(e.new_da%d_total_num) ,4),0),'/',ifnull(round(SUM(d.new_da%d_num) + SUM(d.old_da%d_num) / SUM(d.new_da%d_total_num),4),0)) as da_str%d,
                      """.formatted(i, i, i, i, i, i));
         }
         return sql.toString();

+ 27 - 6
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/task/GameMonitorAlarmTask.java

@@ -6,8 +6,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
+import java.util.concurrent.*;
+
 /**
  * @author tianhua
  * @version 1.0
@@ -22,6 +26,9 @@ public class GameMonitorAlarmTask {
     @Autowired
     private IGameMonitorAlarmService gameMonitorAlarmService;
 
+    private ExecutorService taskScheduler = Executors.newSingleThreadExecutor();
+
+
     @Value("${sys-config.task_is_run}")
     private boolean run;
 
@@ -31,15 +38,29 @@ public class GameMonitorAlarmTask {
     @Scheduled(cron = "0 */5 * * * *")
     public void run() {
         log.info("游戏监控告警定时任务开始.");
-        if (!run) {
-            return;
-        }
+        Future<?> future =  taskScheduler.submit(()->{
+            try {
+                if (!run) {
+                    return;
+                }
+                try {
+                    gameMonitorAlarmService.sendMsgToUser();
+                    log.info("游戏监控告警定时任务结束.");
+                } catch (Exception e) {
+                    log.info("定时任务游戏监控告警出错", e);
+                }
+            }catch (Exception e){
+                log.error("定时任务游戏监控告警出错", e);
+            }
+        });
         try {
-            gameMonitorAlarmService.sendMsgToUser();
-            log.info("游戏监控告警定时任务结束.");
+            //两分钟执行不完就超时
+            future.get(120, TimeUnit.SECONDS);
         } catch (Exception e) {
-            log.info("定时任务游戏监控告警出错", e);
+            log.error("定时任务游戏监控告警超时", e);
+            future.cancel(true);
         }
     }
 
+
 }

+ 38 - 19
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/task/OrderCostMonitorAlarmTask.java

@@ -4,10 +4,15 @@ import com.zanxiang.game.data.serve.service.IOrderCostMonitorAlarmService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author ZhangXianyu
@@ -20,37 +25,51 @@ import java.time.LocalDateTime;
 public class OrderCostMonitorAlarmTask {
 
     @Resource
-    private IOrderCostMonitorAlarmService  orderCostMonitorAlarmService;
+    private IOrderCostMonitorAlarmService orderCostMonitorAlarmService;
 
     @Value("${sys-config.task_is_run}")
     private boolean run;
 
+    private ExecutorService taskScheduler = Executors.newSingleThreadExecutor();
+
+
+
     /**
      * 任务每10分钟运行一次
      */
     @Scheduled(cron = "0 0/10 * * * ? ")
     public void run() {
-        log.info("订单与消耗监控告警定时任务开始.");
-        //本地不运行
-        if(!run){
-            return;
-        }
-        //0点0分到0点30分不执行
-        LocalDateTime now = LocalDateTime.now();
-        if(now.getHour() == 0 && now.getMinute() <= 30){
-            return;
-        }
+        Future<?> future =  taskScheduler.submit(() -> {
+            log.info("订单与消耗监控告警定时任务开始.");
+            //本地不运行
+            if (!run) {
+                return;
+            }
+            //0点0分到0点30分不执行
+            LocalDateTime now = LocalDateTime.now();
+            if (now.getHour() == 0 && now.getMinute() <= 30) {
+                return;
+            }
 //        log.info("订单与消耗监控告警定时任务开始.");
+            try {
+                //监控订单表
+                orderCostMonitorAlarmService.monitorDataStatus();
+                //监控头条广告消耗表
+                orderCostMonitorAlarmService.monitorHeadCostStatus();
+                //监控腾讯广告消耗表
+                orderCostMonitorAlarmService.monitorTencentCostStatus();
+                log.info("订单与消耗监控告警定时任务结束.");
+            } catch (Exception e) {
+                log.error("定时任务订单与消耗监控告警出错", e);
+            }
+        });
         try {
-            //监控订单表
-            orderCostMonitorAlarmService.monitorDataStatus();
-            //监控头条广告消耗表
-            orderCostMonitorAlarmService.monitorHeadCostStatus();
-            //监控腾讯广告消耗表
-            orderCostMonitorAlarmService.monitorTencentCostStatus();
-            log.info("订单与消耗监控告警定时任务结束.");
+            //两分钟执行不完就超时
+            future.get(120, TimeUnit.SECONDS);
         } catch (Exception e) {
-            log.error("定时任务订单与消耗监控告警出错", e);
+            log.error("定时任务订单与消耗监控告警超时", e);
+            future.cancel(true);
         }
     }
+
 }