瀏覽代碼

:feat:投手每日数据列表,增加用户id查询结果

zhangxianyu 1 年之前
父節點
當前提交
76b32d24f4

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

@@ -2151,4 +2151,7 @@ public class PitcherDataDayVO {
     @ApiModelProperty(value = "付费趋势总:增/回/倍")
     private RechargeTrendVO amountSumTrend;
 
+    @ApiModelProperty(value = "da1的用户详情")
+    private FirstNewUserAgainTrendVO userDetails;
+
 }

+ 419 - 282
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java

@@ -14,6 +14,7 @@ import com.zanxiang.module.util.exception.BaseException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.nutz.dao.Cnd;
 import org.nutz.dao.Dao;
@@ -202,6 +203,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
     public Page<PitcherDataDayVO> getPitcherDataDay(PitcherDataDayDTO dto) {
         com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
         List<Long> userIds = CollectionUtils.isEmpty(dto.getPitcherId()) ? poerInfo.first : dto.getPitcherId();
+//        List<Long> userIds = CollectionUtils.isEmpty(dto.getPitcherId()) ? null : dto.getPitcherId();
 
         //不传递时间,默认查询当天
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
@@ -252,16 +254,151 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         dao.execute(sql);
         //设置总记录数
         pager.setRecordCount(dao.count(clazz, cri));
+
+        //查询用户id
+        Map<String, String> map = findUsersIdForGameData(dto);
+
         //处理dayN数据
         List<PitcherDataDayVO> tempList = sql.getList(PitcherDataDayVO.class);
+        //取出用户ids,制作响应vo
         List<PitcherDataDayVO> list = tempList.stream().map(vo -> {
+            Long[] usersID = ArrayUtils.EMPTY_LONG_OBJECT_ARRAY;
+            //默认查询的数据-不选择投手
+            if (CollectionUtils.isEmpty(dto.getPitcherId())) {
+                //将gameId和需要查询的注册时间拼接
+                String pitcherIdDate = vo.getPitcher() + "/" + dto.getBeginDate();
+                //取出所有usersId
+                if (map.containsKey(pitcherIdDate)) {
+                    //string[] -> Long[]
+                    usersID = Arrays.stream(map.get(pitcherIdDate)
+                                    .split("/"))
+                            .map(Long::parseLong)
+                            .toArray(Long[]::new);
+                }
+            } else {
+                //取出所有usersId
+                if (map.containsKey(dto.getBeginDate().toString())) {
+                    //string[] -> Long[]
+                    usersID = Arrays.stream(map.get(dto.getBeginDate().toString())
+                                    .split("/"))
+                            .map(Long::parseLong)
+                            .toArray(Long[]::new);
+                }
+            }
             formatPitcherDataDayDayN(vo);
+
+            FirstNewUserAgainTrendVO againTrendVO = FirstNewUserAgainTrendVO.builder()
+                    .gameDimension(dto.getGameDimension())
+                    .sourceSystem(dto.getSourceSystem())
+                    .timeType("da1")
+                    .rechargeCount(vo.getAmountD1Trend().getRechargeUserCount())
+                    .usersId(usersID)
+                    .build();
+            vo.setUserDetails(againTrendVO);
             return vo;
         }).collect(Collectors.toList());
         //返回结果
         return new Page<>(list, pager);
     }
 
+
+    /**
+     * 查询出注册当天且充值的所有用户id-投手每日
+     *
+     * @param dto 前端查询参数
+     * @return map
+     */
+    private Map findUsersIdForGameData(PitcherDataDayDTO dto) {
+        //不选投手查询的结果 --> (投手id/日期, userId)
+        //选投手查询的结果 --> (日期, userId)
+
+        //默认查询子游戏维度
+        if (dto.getGameDimension() == null) {
+            dto.setGameDimension(1L);
+        }
+        //默认查询字段
+        String gameColumn = "pitcher_id";
+        if (dto.getGameDimension() == 2L) {
+            gameColumn = "pitcher_id";
+        }
+        //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
+        Criteria findUsersCri = Cnd.cri();
+        //拼接游戏ID
+        if (CollectionUtils.isNotEmpty(dto.getPitcherId())) {
+            findUsersCri.where().andInList(gameColumn, dto.getPitcherId());
+        }
+        //拼接SDK来源
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            findUsersCri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //拼接查询时间
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            findUsersCri.where().andBetween("DATE(reg_user_time)", dto.getBeginDate(), dto.getEndDate());
+        }
+        findUsersCri.where().andNotEquals("reg_agent_id", 0);
+        Sql findUsersIdSql;
+        Criteria groupByCri = Cnd.cri();
+        //如果是默认查询,需要按投手、日期分组
+        if (CollectionUtils.isEmpty(dto.getPitcherId())) {
+            groupByCri.getGroupBy().groupBy("pitcher_id", "DATE(reg_user_time)");
+            findUsersIdSql = Sqls.create(findUsersIdSql(findUsersCri, groupByCri));
+        } else {
+            //选择投手后,只按照日期分组
+            //拼接分组条件
+            groupByCri.getGroupBy().groupBy("DATE(reg_user_time)");
+            findUsersIdSql = Sqls.create(findUsersIdSqlPitcher(findUsersCri, groupByCri));
+        }
+        //自定义回传
+        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);
+    }
+
+    /**
+     * 找出每个游戏注册时间内的注册当天且充值的用户id-投手每日-子游戏维度 (不选投手)
+     *
+     * @return String
+     */
+    private String findUsersIdSql(Criteria cri, Criteria groupByCri) {
+        return """
+                SELECT
+                    CONCAT(pitcher_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 = DATE(reg_user_time) 
+                        """ + groupByCri;
+    }
+
+    /**
+     * 找出每个游戏注册时间内的注册当天且充值的用户id-投手每日-子游戏维度(选投手)
+     *
+     * @return String
+     */
+    private String findUsersIdSqlPitcher(Criteria cri, Criteria groupByCri) {
+        return """
+                SELECT
+                    DATE(reg_user_time) as reg_user_time,
+                    GROUP_CONCAT(CONVERT (player_id, varchar), "/") as amount_users_id
+                FROM
+                    game_ads.ads_player_recharge_ranking
+                """ + cri +
+                """
+                            and dt = DATE(reg_user_time) 
+                        """ + groupByCri;
+    }
+
+
     /**
      * 投手每日数据总计
      *
@@ -607,16 +744,16 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         //设置总记录数
         Sql sqlCount = Sqls.create(
                 """
-                    SELECT
-                    	COUNT(1)
-                    FROM (
-                    	SELECT
-                    		COUNT(*)
-                    	FROM game_ads.ads_game_pitcher_day
-                """ + cri +
-                """
-                    ) a
-                """);
+                            SELECT
+                            	COUNT(1)
+                            FROM (
+                            	SELECT
+                            		COUNT(*)
+                            	FROM game_ads.ads_game_pitcher_day
+                        """ + cri +
+                        """
+                                    ) a
+                                """);
         sqlCount.setCallback(Sqls.callback.integer());
         dao.execute(sqlCount);
         pager.setRecordCount(sqlCount.getInt());
@@ -698,16 +835,16 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         //设置总记录数
         Sql sqlCount = Sqls.create(
                 """
-                    SELECT
-                    	COUNT(1)
-                    FROM (
-                    	SELECT
-                    		COUNT(*)
-                    	FROM game_ads_parent.ads_game_pitcher_day_parent
-                """ + cri +
-                """
-                    ) a
-                """);
+                            SELECT
+                            	COUNT(1)
+                            FROM (
+                            	SELECT
+                            		COUNT(*)
+                            	FROM game_ads_parent.ads_game_pitcher_day_parent
+                        """ + cri +
+                        """
+                                    ) a
+                                """);
         sqlCount.setCallback(Sqls.callback.integer());
         dao.execute(sqlCount);
         pager.setRecordCount(sqlCount.getInt());
@@ -1029,14 +1166,14 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         //账面人数数据
         Sql sqlAmountNum = Sqls.create(
                 """
-                SELECT
-                    IFNULL(COUNT(DISTINCT user_id), 0) amount_num
-                FROM
-                    game_ads.ads_information
-                """ + criAmount +
-                """
-                AND NOT agent_id = 0
-                """);
+                        SELECT
+                            IFNULL(COUNT(DISTINCT user_id), 0) amount_num
+                        FROM
+                            game_ads.ads_information
+                        """ + criAmount +
+                        """
+                                AND NOT agent_id = 0
+                                """);
         //设置回传对象
         sqlAmountNum.setCallback(Sqls.callback.longValue());
         //执行sql
@@ -1050,14 +1187,14 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         //新用户充值人数
         Sql sqlNewUserNum = Sqls.create(
                 """
-                SELECT
-                    COUNT(DISTINCT user_id) new_user_amount_num
-                FROM
-                    game_ads.ads_information
-                """ + criNewUser +
-                """
-                AND NOT agent_id = 0
-                """);
+                        SELECT
+                            COUNT(DISTINCT user_id) new_user_amount_num
+                        FROM
+                            game_ads.ads_information
+                        """ + criNewUser +
+                        """
+                                AND NOT agent_id = 0
+                                """);
         //设置回传对象
         sqlNewUserNum.setCallback(Sqls.callback.longValue());
         //执行sql
@@ -1068,20 +1205,20 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         //新用户复充人数
         Sql sqlNewUserAgainNum = Sqls.create(
                 """
-                SELECT
-                    COUNT(tempA.num) as new_user_order_again
-                FROM (
-                    SELECT
-                        COUNT(user_id) num
-                    FROM
-                        game_ads.ads_information
-                """ + criNewUser +
-                """
-                    AND NOT agent_id = 0
-                    GROUP BY user_id
-                    HAVING
-                        COUNT(user_id) > 1 ) tempA
-                """);
+                        SELECT
+                            COUNT(tempA.num) as new_user_order_again
+                        FROM (
+                            SELECT
+                                COUNT(user_id) num
+                            FROM
+                                game_ads.ads_information
+                        """ + criNewUser +
+                        """
+                                    AND NOT agent_id = 0
+                                    GROUP BY user_id
+                                    HAVING
+                                        COUNT(user_id) > 1 ) tempA
+                                """);
         //设置回传对象
         sqlNewUserAgainNum.setCallback(Sqls.callback.longValue());
         //执行sql
@@ -1092,14 +1229,14 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         //创角人数
         Sql sqlRoleNum = Sqls.create(
                 """
-                SELECT
-                    COUNT(DISTINCT role_user_id) as role_num
-                FROM
-                    dw_create_role_detail
-                """ + criRoleNum +
-                """
-                AND NOT user_agent_id = 0
-                """);
+                        SELECT
+                            COUNT(DISTINCT role_user_id) as role_num
+                        FROM
+                            dw_create_role_detail
+                        """ + criRoleNum +
+                        """
+                                AND NOT user_agent_id = 0
+                                """);
         //设置回传对象
         sqlRoleNum.setCallback(Sqls.callback.longValue());
         //执行sql
@@ -1590,26 +1727,26 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         Sql dayNSql;
         if (dto.getGameDimension() == 1L) {
             dayNSql = Sqls.create("""
-                SELECT
-                    dt,
-                    game_id,
-                    pitcher_id,
-                    source_system,
-                    dayN
-                FROM
-                    game_ads.ads_pitcher_game_dayn
-                """ + cri);
+                    SELECT
+                        dt,
+                        game_id,
+                        pitcher_id,
+                        source_system,
+                        dayN
+                    FROM
+                        game_ads.ads_pitcher_game_dayn
+                    """ + cri);
         } else {
             dayNSql = Sqls.create("""
-                SELECT
-                    dt,
-                    parent_game_id as game_id,
-                    pitcher_id,
-                    source_system,
-                    dayN
-                FROM
-                    game_ads_parent.ads_pitcher_game_dayn_parent
-                """ + cri);
+                    SELECT
+                        dt,
+                        parent_game_id as game_id,
+                        pitcher_id,
+                        source_system,
+                        dayN
+                    FROM
+                        game_ads_parent.ads_pitcher_game_dayn_parent
+                    """ + cri);
         }
 
         //设置回传
@@ -1731,26 +1868,26 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         Sql dayNSql;
         if (dto.getGameDimension() == 1L) {
             dayNSql = Sqls.create("""
-                SELECT
-                    dt,
-                    game_id,
-                    pitcher_id,
-                    source_system,
-                    dayN
-                FROM
-                    game_ads.ads_pitcher_game_dayn
-                """ + cri);
+                    SELECT
+                        dt,
+                        game_id,
+                        pitcher_id,
+                        source_system,
+                        dayN
+                    FROM
+                        game_ads.ads_pitcher_game_dayn
+                    """ + cri);
         } else {
             dayNSql = Sqls.create("""
-                SELECT
-                    dt,
-                    parent_game_id as game_id,
-                    pitcher_id,
-                    source_system,
-                    dayN
-                FROM
-                    game_ads_parent.ads_pitcher_game_dayn_parent
-                """ + cri);
+                    SELECT
+                        dt,
+                        parent_game_id as game_id,
+                        pitcher_id,
+                        source_system,
+                        dayN
+                    FROM
+                        game_ads_parent.ads_pitcher_game_dayn_parent
+                    """ + cri);
         }
 
         //设置回传
@@ -2541,9 +2678,9 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total,
                 """ + getPitcherGameDataDayTotalDayNsql() +
                 """
-                FROM
-                    game_ads.ads_game_pitcher_day
-                """;
+                        FROM
+                            game_ads.ads_game_pitcher_day
+                        """;
     }
 
     /**
@@ -2649,9 +2786,9 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total,
                 """ + getPitcherGameDataDayTotalDayNsql() +
                 """
-                FROM
-                    game_ads_parent.ads_game_pitcher_day_parent
-                """;
+                        FROM
+                            game_ads_parent.ads_game_pitcher_day_parent
+                        """;
     }
 
     /**
@@ -2753,8 +2890,8 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total,
                 """ + getPitcherGameDataDayTotalDayNsql() +
                 """
-                FROM 
-                """ + tableName;
+                        FROM 
+                        """ + tableName;
     }
 
     /**
@@ -2856,8 +2993,8 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total,
                 """ + getPitcherGameDataDayTotalDayNsql() +
                 """
-                FROM 
-                """ + tableName;
+                        FROM 
+                        """ + tableName;
     }
 
     /**
@@ -3135,87 +3272,87 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     	ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
                 """ + pitcherDataTotalRoiSql() +
                 """
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                            SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                            SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                            SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
-                            SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
-                        ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
-                    FROM
-                        game_ads_parent.ads_pitcher_day_parent
-                """ + criA +
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                    SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                    SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                    SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                                    SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
+                                ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
+                            FROM
+                                game_ads_parent.ads_pitcher_day_parent
+                        """ + criA +
                 """
-                ) a
-                LEFT JOIN (
-                    SELECT
-                        pitcher_id as b_pitcher_id,
-                        IFNULL(SUM(amount), 0) as amount,
-                        IFNULL(SUM(amount_count), 0) as amount_count,
-                        ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
-                    FROM
-                        game_ads_parent.ads_pitcher_day_parent
-                """ + criB +
+                        ) a
+                        LEFT JOIN (
+                            SELECT
+                                pitcher_id as b_pitcher_id,
+                                IFNULL(SUM(amount), 0) as amount,
+                                IFNULL(SUM(amount_count), 0) as amount_count,
+                                ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
+                            FROM
+                                game_ads_parent.ads_pitcher_day_parent
+                        """ + criB +
                 """
-                ) b ON a.pitcher_id = b.b_pitcher_id
-                LEFT JOIN (
-                    SELECT
-                        pitcher_id as c_pitcher_id,
-                        IFNULL(COUNT(DISTINCT user_id), 0) amount_num
-                    FROM
-                        game_ads.ads_information
-                """ + criAmount +
+                        ) b ON a.pitcher_id = b.b_pitcher_id
+                        LEFT JOIN (
+                            SELECT
+                                pitcher_id as c_pitcher_id,
+                                IFNULL(COUNT(DISTINCT user_id), 0) amount_num
+                            FROM
+                                game_ads.ads_information
+                        """ + criAmount +
                 """
-                        AND NOT agent_id = 0
-                    GROUP BY pitcher_id
-                ) c ON a.pitcher_id = c.c_pitcher_id
-                LEFT JOIN (
-                    SELECT
-                        pitcher_id as d_pitcher_id,
-                        COUNT(DISTINCT user_id) new_user_amount_num
-                    FROM
-                        game_ads.ads_information
-                """ + criNewUser +
+                                AND NOT agent_id = 0
+                            GROUP BY pitcher_id
+                        ) c ON a.pitcher_id = c.c_pitcher_id
+                        LEFT JOIN (
+                            SELECT
+                                pitcher_id as d_pitcher_id,
+                                COUNT(DISTINCT user_id) new_user_amount_num
+                            FROM
+                                game_ads.ads_information
+                        """ + criNewUser +
                 """
-                        AND NOT agent_id = 0
-                    GROUP BY
-                        pitcher_id
-                ) d ON a.pitcher_id = d.d_pitcher_id
-                LEFT JOIN (
-                    SELECT
-                        pitcher_id as e_pitcher_id,
-                        COUNT(tempA.num) as new_user_order_again
-                    FROM (
-                        SELECT
-                            pitcher_id,
-                            COUNT(user_id) num
-                        FROM
-                            game_ads.ads_information
-                """ + criNewUser +
+                                AND NOT agent_id = 0
+                            GROUP BY
+                                pitcher_id
+                        ) d ON a.pitcher_id = d.d_pitcher_id
+                        LEFT JOIN (
+                            SELECT
+                                pitcher_id as e_pitcher_id,
+                                COUNT(tempA.num) as new_user_order_again
+                            FROM (
+                                SELECT
+                                    pitcher_id,
+                                    COUNT(user_id) num
+                                FROM
+                                    game_ads.ads_information
+                        """ + criNewUser +
                 """
-                            AND NOT agent_id = 0
-                        GROUP BY
-                            user_id,
-                            pitcher_id
-                        HAVING
-                            COUNT(user_id) > 1 ) tempA
-                    GROUP BY
-                        tempA.pitcher_id
-                ) e ON a.pitcher_id = e.e_pitcher_id
-                LEFT JOIN (
-                    SELECT
-                        user_zx_pitcher_id as f_pitcher_id,
-                        COUNT(DISTINCT role_user_id) as role_num
-                    FROM
-                        dw_create_role_detail
-                """ + criRoleNum +
+                                    AND NOT agent_id = 0
+                                GROUP BY
+                                    user_id,
+                                    pitcher_id
+                                HAVING
+                                    COUNT(user_id) > 1 ) tempA
+                            GROUP BY
+                                tempA.pitcher_id
+                        ) e ON a.pitcher_id = e.e_pitcher_id
+                        LEFT JOIN (
+                            SELECT
+                                user_zx_pitcher_id as f_pitcher_id,
+                                COUNT(DISTINCT role_user_id) as role_num
+                            FROM
+                                dw_create_role_detail
+                        """ + criRoleNum +
                 """
-                        AND NOT user_agent_id = 0
-                    GROUP BY user_zx_pitcher_id
-                ) f ON a.pitcher_id = f.f_pitcher_id
-                """;
+                                AND NOT user_agent_id = 0
+                            GROUP BY user_zx_pitcher_id
+                        ) f ON a.pitcher_id = f.f_pitcher_id
+                        """;
     }
 
     /**
@@ -3483,93 +3620,93 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                 		ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
                 """ + pitcherDataTotalRoiSql() +
                 """
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                              SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                              SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                              SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
-                        ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
-                              SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
-                        ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
-                    FROM
-                        game_ads_parent.ads_game_pitcher_day_parent
-                """ + criA +
-                """
-                ) a
-                LEFT JOIN (
-                    SELECT
-                        pitcher_id as b_pitcher_id,
-                        parent_game_id as b_game_id,
-                        IFNULL(SUM(amount), 0) as amount,
-                        IFNULL(SUM(amount_count), 0) as amount_count,
-                        ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
-                    FROM
-                        game_ads_parent.ads_game_pitcher_day_parent
-                """ + criB +
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                      SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                      SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                      SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                                ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                                      SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
+                                ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
+                            FROM
+                                game_ads_parent.ads_game_pitcher_day_parent
+                        """ + criA +
                 """
-                ) b ON a.pitcher_id = b.b_pitcher_id AND a.game_id = b.b_game_id
-                LEFT JOIN (
-                    SELECT
-                        pitcher_id as c_pitcher_id,
-                        parent_game_id as c_game_id,
-                        IFNULL(COUNT(DISTINCT user_id), 0) amount_num
-                    FROM
-                        game_ads.ads_information
-                """ + criAmount +
+                        ) a
+                        LEFT JOIN (
+                            SELECT
+                                pitcher_id as b_pitcher_id,
+                                parent_game_id as b_game_id,
+                                IFNULL(SUM(amount), 0) as amount,
+                                IFNULL(SUM(amount_count), 0) as amount_count,
+                                ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
+                            FROM
+                                game_ads_parent.ads_game_pitcher_day_parent
+                        """ + criB +
                 """
-                        AND NOT agent_id = 0
-                    GROUP BY pitcher_id , parent_game_id
-                ) c ON a.pitcher_id = c.c_pitcher_id AND a.game_id = c.c_game_id
-                LEFT JOIN (
-                    SELECT
-                        pitcher_id as d_pitcher_id,
-                        parent_game_id as d_game_id,
-                        COUNT(DISTINCT user_id) new_user_amount_num
-                    FROM
-                        game_ads.ads_information
-                """ + criNewUser +
+                        ) b ON a.pitcher_id = b.b_pitcher_id AND a.game_id = b.b_game_id
+                        LEFT JOIN (
+                            SELECT
+                                pitcher_id as c_pitcher_id,
+                                parent_game_id as c_game_id,
+                                IFNULL(COUNT(DISTINCT user_id), 0) amount_num
+                            FROM
+                                game_ads.ads_information
+                        """ + criAmount +
                 """
-                    AND NOT agent_id = 0
-                    GROUP BY
-                        pitcher_id , parent_game_id
-                ) d ON a.pitcher_id = d.d_pitcher_id AND a.game_id = d.d_game_id
-                LEFT JOIN (
-                    SELECT
-                        parent_game_id as e_game_id,
-                        pitcher_id as e_pitcher_id,
-                        COUNT(tempA.num) as new_user_order_again
-                    FROM (
-                        SELECT
-                            parent_game_id,
-                            pitcher_id,
-                            COUNT(user_id) num
-                        FROM
-                            game_ads.ads_information
-                """ + criNewUser +
+                                AND NOT agent_id = 0
+                            GROUP BY pitcher_id , parent_game_id
+                        ) c ON a.pitcher_id = c.c_pitcher_id AND a.game_id = c.c_game_id
+                        LEFT JOIN (
+                            SELECT
+                                pitcher_id as d_pitcher_id,
+                                parent_game_id as d_game_id,
+                                COUNT(DISTINCT user_id) new_user_amount_num
+                            FROM
+                                game_ads.ads_information
+                        """ + criNewUser +
                 """
                             AND NOT agent_id = 0
-                        GROUP BY
-                            user_id,
-                            pitcher_id,
-                            parent_game_id
-                        HAVING
-                            COUNT(user_id) > 1 ) tempA
-                    GROUP BY tempA.parent_game_id, tempA.pitcher_id
-                ) e ON a.game_id = e.e_game_id AND a.pitcher_id = e.e_pitcher_id
-                LEFT JOIN (
-                    SELECT
-                        parent_game_id as f_game_id,
-                        user_zx_pitcher_id as f_pitcher_id,
-                        COUNT(DISTINCT role_user_id) as role_num
-                    FROM
-                        dw_create_role_detail
-                """ + criRoleNum +
+                            GROUP BY
+                                pitcher_id , parent_game_id
+                        ) d ON a.pitcher_id = d.d_pitcher_id AND a.game_id = d.d_game_id
+                        LEFT JOIN (
+                            SELECT
+                                parent_game_id as e_game_id,
+                                pitcher_id as e_pitcher_id,
+                                COUNT(tempA.num) as new_user_order_again
+                            FROM (
+                                SELECT
+                                    parent_game_id,
+                                    pitcher_id,
+                                    COUNT(user_id) num
+                                FROM
+                                    game_ads.ads_information
+                        """ + criNewUser +
                 """
-                        AND NOT user_agent_id = 0
-                    GROUP BY parent_game_id, user_zx_pitcher_id
-                ) f ON a.game_id = f.f_game_id AND a.pitcher_id = f.f_pitcher_id
-                """;
+                                    AND NOT agent_id = 0
+                                GROUP BY
+                                    user_id,
+                                    pitcher_id,
+                                    parent_game_id
+                                HAVING
+                                    COUNT(user_id) > 1 ) tempA
+                            GROUP BY tempA.parent_game_id, tempA.pitcher_id
+                        ) e ON a.game_id = e.e_game_id AND a.pitcher_id = e.e_pitcher_id
+                        LEFT JOIN (
+                            SELECT
+                                parent_game_id as f_game_id,
+                                user_zx_pitcher_id as f_pitcher_id,
+                                COUNT(DISTINCT role_user_id) as role_num
+                            FROM
+                                dw_create_role_detail
+                        """ + criRoleNum +
+                """
+                                AND NOT user_agent_id = 0
+                            GROUP BY parent_game_id, user_zx_pitcher_id
+                        ) f ON a.game_id = f.f_game_id AND a.pitcher_id = f.f_pitcher_id
+                        """;
     }
 
     /**
@@ -3623,17 +3760,17 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
                 """ + pitcherDataTotalRoiSql() +
                 """
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
-                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
-                FROM 
-                """ + tableName;
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
+                            ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
+                        FROM 
+                        """ + tableName;
     }
 
     /**
@@ -3687,17 +3824,17 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
                     ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
                 """ + pitcherDataTotalRoiSql() +
                 """
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
-                    ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
-                          SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
-                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
-                FROM 
-                """ + tableName;
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(da60) / SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi60,
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(da90) / SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi90,
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(m6) / SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), 0), 4) as roi180,
+                            ROUND(IF(SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)) > 0 ,
+                                  SUM(m12) / SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), 0), 4) as roi1yaer,
+                            ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
+                        FROM 
+                        """ + tableName;
     }