Explorar el Código

修改内容:游戏总数据修改

lth hace 1 año
padre
commit
d867636756

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

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.controller;
 
+import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataAgainDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
@@ -41,7 +42,7 @@ public class GameDataController {
     private IGameDataService gameDataService;
 
     @ApiOperation(value = "游戏每日数据")
-    //@PreAuthorize(permissionKey = "gameData:adsGameDay:day")
+    @PreAuthorize(permissionKey = "gameData:adsGameDay:day")
     @PostMapping("/day")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameDataDayVO.class)})
     public ResultVO<Page<GameDataDayVO>> getGameDataDay(@RequestBody GameDataDayDTO dto) {
@@ -50,7 +51,7 @@ public class GameDataController {
 
 
     @ApiOperation(value = "游戏总数据")
-    //@PreAuthorize(permissionKey = "gameData:adsGameDay:total")
+    @PreAuthorize(permissionKey = "gameData:adsGameDay:total")
     @PostMapping("/total")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameDataTotalVO.class)})
     public ResultVO<Page<GameDataTotalVO>> getGameDataTotal(@RequestBody GameDataTotalDTO dto) {
@@ -58,14 +59,14 @@ public class GameDataController {
     }
 
     @ApiOperation(value = "每日流水贡献")
-    //@PreAuthorize(permissionKey = "gameData:adsGameDay:water")
+    @PreAuthorize(permissionKey = "gameData:adsGameDay:water")
     @PostMapping("/water")
     public ResultVO<Page<GameDataWaterVO>> getGameDataWater(@RequestBody GameDataWaterDTO dto) {
         return ResultVO.ok(gameDataService.getGameDataWater(dto));
     }
 
     @ApiOperation(value = "游戏每日复充数据")
-    //@PreAuthorize(permissionKey = "gameData:adsGameDay:again")
+    @PreAuthorize(permissionKey = "gameData:adsGameDay:again")
     @PostMapping("/again")
     public ResultVO<Map<LocalDate, List<GameDataAgainDayVO>>> getGameDataAgainDay(@RequestBody GameDataAgainDayDTO dto) throws Exception {
         return ResultVO.ok(gameDataService.getGameDataAgainDay(dto));

+ 71 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsGamePushNum.java

@@ -0,0 +1,71 @@
+package com.zanxiang.game.data.serve.pojo.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.nutz.dao.entity.annotation.Column;
+import org.nutz.dao.entity.annotation.PK;
+import org.nutz.dao.entity.annotation.Table;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 整体概况(游戏在投数量)
+ * </p>
+ *
+ * @author tianhua
+ * @time 2023/7/11
+ * @Description
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Table(AdsGameDayAgainNature.TABLE_NAME)
+@PK({"dt","agentId","pitcherId","accountId"})
+public class AdsGamePushNum implements Serializable {
+    private static final long serialVersionUID = 1L;
+    public static final String TABLE_NAME = "ads_game_push_num";
+
+    /**
+     * 日期(投放日期)
+     */
+    private LocalDate dt;
+
+    /**
+     * 渠道ID
+     */
+    private Long agentId;
+
+    /**
+     * 广告账号
+     */
+    private Long accountId;
+
+    /**
+     * 投手ID
+     */
+    private Long pitcherId;
+
+    /**
+     * 投手名字
+     */
+    @Column
+    private Long pitcherName;
+
+    /**
+     * 游戏ID
+     */
+    @Column
+    private Long gameId;
+
+    /**
+     * 游戏名称
+     */
+    @Column
+    private Long gameName;
+
+}

+ 5 - 5
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/OverallSummaryVO.java

@@ -107,19 +107,19 @@ public class OverallSummaryVO {
     /**
      * 游戏总计
      */
-    @ApiModelProperty(value = "游戏总")
+    @ApiModelProperty(value = "游戏总投数")
     private BigInteger totalGameCount;
 
     /**
-     * 今日新增游戏数量
+     * 今日在投游戏数量
      */
-    @ApiModelProperty(value = "今日新增游戏数量")
+    @ApiModelProperty(value = "今日在投游戏数量")
     private BigInteger todayGameCount;
 
     /**
-     * 昨日新增游戏数量
+     * 昨日在投游戏数量
      */
-    @ApiModelProperty(value = "昨日新增游戏数量")
+    @ApiModelProperty(value = "昨日在投游戏数量")
     private BigInteger yesterdayGameCount;
 
     /**

+ 138 - 32
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -29,10 +29,14 @@ import org.nutz.dao.sql.Criteria;
 import org.nutz.dao.sql.Sql;
 import org.nutz.dao.util.Daos;
 import org.nutz.dao.util.cri.SimpleCriteria;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.BeanWrapperImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.beans.PropertyDescriptor;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -67,6 +71,13 @@ public class GameDataServiceImpl implements IGameDataService {
             dto.setRegisteredBeginDate(LocalDate.now());
             dto.setRegisteredEndDate(LocalDate.now());
         }
+        //如果没有排序条件给默认值
+        if (StringUtils.isBlank(dto.getSortFiled())){
+            dto.setSortFiled("dt");
+        }
+        if (StringUtils.isBlank(dto.getSortType())){
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
         //根据dto拼接查询条件
         Criteria cri = Cnd.cri();
         if (StringUtils.isNotBlank(dto.getGameName())) {
@@ -80,8 +91,8 @@ public class GameDataServiceImpl implements IGameDataService {
         if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
             cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
         }
-        //结果按日期排序
-        cri.getOrderBy().desc("dt");
+        //拼接排序条件
+        cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
 
         //编写sql语句 拼接查询条件
         Sql sql = Sqls.create(gameDataDaySql() + cri);
@@ -387,16 +398,25 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) {
+
         //如果注册时间参数为空,默认设置查询当天数据
-        if (dto.getRegisteredBeginDate() == null || dto.getRechargeEndDate() == null) {
-            dto.setRegisteredBeginDate(LocalDate.now());
+        if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
+            dto.setRegisteredBeginDate(LocalDate.now().minusDays(30));
             dto.setRegisteredEndDate(LocalDate.now());
         }
         //如果充值时间参数为空,默认设置查询当天数据
         if (dto.getRechargeBeginDate() == null || dto.getRechargeEndDate() == null) {
-            dto.setRechargeBeginDate(LocalDate.now());
+            dto.setRechargeBeginDate(LocalDate.now().minusDays(30));
             dto.setRechargeEndDate(LocalDate.now());
         }
+        //如果没有排序条件给默认值
+        if (StringUtils.isBlank(dto.getSortFiled())){
+            //待查看
+            dto.setSortFiled("game_id");
+        }
+        if (StringUtils.isBlank(dto.getSortType())){
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
         //根据传入的dto拼接查询参数
         Criteria cri = Cnd.cri();
         if (StringUtils.isNotBlank(dto.getGameName())) {
@@ -413,15 +433,13 @@ public class GameDataServiceImpl implements IGameDataService {
         }
         //拼接分组条件
         cri.getGroupBy().groupBy("a.game_name", "a.game_id", "a.game_classify");
+        //拼接排序条件
+        cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
         //创建sql语句 执行sql
         Sql sql = Sqls.create(gameDataTotalSql() + cri);
-        //设置自定义参数
-        sql.setParam("rechargeBeginDate", dto.getRechargeBeginDate());
-        sql.setParam("rechargeEndDate", dto.getRechargeEndDate());
         //设置自定义回显对象
         sql.setCallback(Sqls.callback.entities());
         sql.setEntity(dao.getEntity(GameDataTotalVO.class));
-        //设置pager对象
         Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
         sql.setPager(pager);
         //执行sql
@@ -433,6 +451,12 @@ public class GameDataServiceImpl implements IGameDataService {
 
         //根据充值时间修改值
         List<GameDataTotalVO> gameDataTotalVOList = list.stream().map(vo -> {
+
+            //获取到一个只含有与充值时间有关的数据对象
+            GameDataTotalVO tempVO = getRechargeData(vo, dto);
+            //将tempVO中查出的数据添加到vo上
+            copyNullProperties(tempVO,vo);
+
             //设置查询参数map
             Map<String, Object> dayNMap = new HashMap<>(4);
             dayNMap.put("registerBeginDate", dto.getRegisteredBeginDate());
@@ -789,6 +813,75 @@ public class GameDataServiceImpl implements IGameDataService {
         return map;
     }
 
+    /**
+     * 查询只与充值时间相关的数据
+     * @param vo 返回给前端的实体
+     * @param dto 前端查询实体
+     * @return GameDataTotalVO
+     */
+    private GameDataTotalVO getRechargeData(GameDataTotalVO vo, GameDataTotalDTO dto){
+        //查询条件
+        Criteria criRc = Cnd.cri();
+        if (StringUtils.isNotBlank(vo.getGameName())) {
+            //拼接游戏名称查询条件
+            criRc.where().andEquals("b.game_name", vo.getGameName());
+        }
+        if (vo.getGameClassify() != null) {
+            //拼接游戏类型查询条件
+            criRc.where().andEquals("b.game_classify", vo.getGameClassify());
+        }
+        if (vo.getGameId() != null){
+            //拼接游戏id查询条件
+            criRc.where().andEquals("b.game_id", vo.getGameId());
+        }
+        if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
+            //拼接充值日期查询条件
+            criRc.where().andBetween("b.dt", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
+        }
+        //创建sql语句
+        Sql sqlWithRechargeDate = Sqls.create(gameDataTotalSqlRecharge() + criRc);
+
+        sqlWithRechargeDate.setCallback(Sqls.callback.entity());
+        sqlWithRechargeDate.setEntity(dao.getEntity(GameDataTotalVO.class));
+        dao.execute(sqlWithRechargeDate);
+
+        return sqlWithRechargeDate.getObject(GameDataTotalVO.class);
+    }
+
+    /**
+     * 所有为空值的属性都不copy
+     *
+     * @param source 原数据
+     * @param target 目标数据
+     */
+    private void copyNullProperties(Object source, Object target) {
+        BeanUtils.copyProperties(source, target, getNullField(source));
+    }
+
+    /**
+     * 获取属性中为空的字段
+     *
+     * @param target 目标对象
+     * @return 不需要替换的字段数组
+     */
+    private static String[] getNullField(Object target) {
+        BeanWrapper beanWrapper = new BeanWrapperImpl(target);
+        PropertyDescriptor[] propertyDescriptors = beanWrapper.getPropertyDescriptors();
+        Set<String> notNullFieldSet = new HashSet<>();
+        if (propertyDescriptors.length > 0) {
+            for (PropertyDescriptor p : propertyDescriptors) {
+                String name = p.getName();
+                Object value = beanWrapper.getPropertyValue(name);
+                if (Objects.isNull(value)) {
+                    notNullFieldSet.add(name);
+                }
+            }
+        }
+        String[] notNullField = new String[notNullFieldSet.size()];
+
+        return notNullFieldSet.toArray(notNullField);
+    }
+
     /**
      * 三张表共用的方法
      * @param dayNMap 参数Map
@@ -1120,16 +1213,6 @@ public class GameDataServiceImpl implements IGameDataService {
                     sum(a.first_new_user_amount_num) first_new_user_amount_num,
                     sum(a.first_new_user_amount) first_new_user_amount,
                     
-                    sum(b.buy_amount_count) buy_amount_count,
-                    sum(b.buy_amount_num) buy_amount_num,
-                    sum(b.buy_amount) buy_amount,
-                    sum(b.nature_amount_count) nature_amount_count,
-                    sum(b.nature_amount_num) nature_amount_num,
-                    sum(b.nature_amount) nature_amount,
-                    sum(b.amount_count) amount_count,
-                    sum(b.amount_num) amount_num,
-                    sum(b.amount) amount,
-                    
                     sum(a.buy_new_user_total_amount_count) buy_new_user_total_amount_count,
                     sum(a.buy_new_user_total_amount_num) buy_new_user_total_amount_num,
                     sum(a.buy_new_user_total_amount) buy_new_user_total_amount,
@@ -1149,13 +1232,13 @@ public class GameDataServiceImpl implements IGameDataService {
                     
                     round(if(sum(a.buy_first_new_user_amount_count) > 0, sum(a.buy_first_new_user_amount) / sum(a.buy_first_new_user_amount_count), 0), 2) buy_first_avg_amount,
                     round(if(sum(a.buy_new_user_total_amount_count) > 0, sum(a.buy_new_user_total_amount) / sum(a.buy_new_user_total_amount_count), 0), 2) buy_today_avg_amount,
-                    round(if(sum(b.buy_amount_count) > 0, sum(b.buy_amount) / sum(b.buy_amount_count), 0), 2) buy_avg_amount,
+                    
                     round(if(sum(a.nature_first_new_user_amount_count) > 0, sum(a.nature_first_new_user_amount) / sum(a.nature_first_new_user_amount_count), 0), 2) nature_first_avg_amount,
                     round(if(sum(a.nature_new_user_total_amount_count) > 0, sum(a.nature_new_user_total_amount) / sum(a.nature_new_user_total_amount_count), 0), 2) nature_today_avg_amount,
-                    round(if(sum(b.nature_amount_count) > 0, sum(b.nature_amount) / sum(b.nature_amount_count), 0), 2) nature_avg_amount,
+                    
                     round(if(sum(a.first_new_user_amount_count) > 0, sum(a.first_new_user_amount) / sum(a.first_new_user_amount_count), 0), 2) first_avg_amount,
                     round(if(sum(a.new_user_total_amount_count) > 0, sum(a.new_user_total_amount) / sum(a.new_user_total_amount_count), 0), 2) today_avg_amount,
-                    round(if(sum(b.amount_count) > 0, sum(b.amount) / sum(b.amount_count), 0), 2) avg_amount,
+                    
                     
                     round(if(sum(a.buy_new_user_total_amount_num) > 0 , sum(a.buy_reg_order_user_again) / sum(a.buy_new_user_total_amount_num), 0), 4) buy_today_again_rate,
                     round(if(sum(a.nature_new_user_total_amount_num) > 0 , sum(a.nature_reg_order_user_again) / sum(a.nature_new_user_total_amount_num), 0), 4) nature_today_again_rate,
@@ -1164,24 +1247,47 @@ public class GameDataServiceImpl implements IGameDataService {
                     round(if(sum(a.buy_reg_num) > 0 , sum(a.buy_new_user_total_amount) / sum(a.buy_reg_num), 0), 2) buy_reg_user_arpu,
                     round(if(sum(a.buy_first_new_user_amount_num) > 0 , sum(a.buy_first_new_user_amount) / sum(a.buy_first_new_user_amount_num), 0), 2) buy_first_amount_arpu,
                     round(if(sum(a.buy_new_user_total_amount_num) > 0 , sum(a.buy_new_user_total_amount) / sum(a.buy_new_user_total_amount_num), 0), 2) buy_today_amount_arpu,
-                    round(if(sum(b.buy_amount_num) > 0 , sum(b.buy_amount) / sum(b.buy_amount_num), 0), 2) buy_amount_arpu,
+                    
                     round(if(sum(a.nature_reg_num) > 0 , sum(a.nature_new_user_total_amount) / sum(a.nature_reg_num), 0), 2) nature_reg_user_arpu,
                     round(if(sum(a.nature_first_new_user_amount_num) > 0 , sum(a.nature_first_new_user_amount) / sum(a.nature_first_new_user_amount_num), 0), 2) nature_first_amount_arpu,
                     round(if(sum(a.nature_new_user_total_amount_num) > 0 , sum(a.nature_new_user_total_amount) / sum(a.nature_new_user_total_amount_num), 0), 2) nature_today_amount_arpu,
-                    round(if(sum(b.nature_amount_num) > 0 , sum(b.nature_amount) / sum(b.nature_amount_num), 0), 2) nature_amount_arpu,
+                    
                     round(if(sum(a.reg_num) > 0 , sum(a.new_user_total_amount) / sum(a.reg_num), 0), 2) reg_user_arpu,
                     round(if(sum(a.first_new_user_amount_num) > 0 , sum(a.first_new_user_amount) / sum(a.first_new_user_amount_num), 0), 2) first_amount_arpu,
-                    round(if(sum(a.new_user_total_amount_num) > 0 , sum(a.new_user_total_amount) / sum(a.new_user_total_amount_num), 0), 2) today_amount_arpu,
-                    round(if(sum(b.amount_num) > 0 , sum(b.amount) / sum(b.amount_num), 0), 2) amount_arpu
+                    round(if(sum(a.new_user_total_amount_num) > 0 , sum(a.new_user_total_amount) / sum(a.new_user_total_amount_num), 0), 2) today_amount_arpu
+                    
                 FROM
                     ads_game_day a
-                left join
+                """;
+    }
+
+    /**
+     * 和充值时间有关的sql
+     * @return
+     */
+    private String gameDataTotalSqlRecharge(){
+        return """
+                SELECT
+                    sum(b.buy_amount_count) buy_amount_count,
+                    sum(b.buy_amount_num) buy_amount_num,
+                    sum(b.buy_amount) buy_amount,
+                    sum(b.nature_amount_count) nature_amount_count,
+                    sum(b.nature_amount_num) nature_amount_num,
+                    sum(b.nature_amount) nature_amount,
+                    sum(b.amount_count) amount_count,
+                    sum(b.amount_num) amount_num,
+                    sum(b.amount) amount,
+                    
+                    round(if(sum(b.buy_amount_count) > 0, sum(b.buy_amount) / sum(b.buy_amount_count), 0), 2) buy_avg_amount,
+                    round(if(sum(b.nature_amount_count) > 0, sum(b.nature_amount) / sum(b.nature_amount_count), 0), 2) nature_avg_amount,
+                    round(if(sum(b.amount_count) > 0, sum(b.amount) / sum(b.amount_count), 0), 2) avg_amount,
+                    round(if(sum(b.buy_amount_num) > 0 , sum(b.buy_amount) / sum(b.buy_amount_num), 0), 2) buy_amount_arpu,
+                    round(if(sum(b.nature_amount_num) > 0 , sum(b.nature_amount) / sum(b.nature_amount_num), 0), 2) nature_amount_arpu,
+                    round(if(sum(b.amount_num) > 0 , sum(b.amount) / sum(b.amount_num), 0), 2) amount_arpu
+                    
+                FROM
                     ads_game_day b
-                on
-                    a.game_name = b.game_name and
-                    a.game_id = b.game_id and
-                    a.game_classify = b.game_classify and
-                    (b.dt between @rechargeBeginDate and @rechargeEndDate)
+                
                 """;
     }
 

+ 60 - 13
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/OverallSummaryServiceImpl.java

@@ -2,6 +2,7 @@ package com.zanxiang.game.data.serve.service.impl;
 
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.data.serve.pojo.dto.OverallSummaryDTO;
+import com.zanxiang.game.data.serve.pojo.entity.AdsGamePushNum;
 import com.zanxiang.game.data.serve.pojo.entity.AdsOverallSummary;
 import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryLineDataVO;
 import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryVO;
@@ -42,8 +43,8 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
     @Override
     public OverallSummaryVO getOverallSummaryTotalData(OverallSummaryDTO dto) {
 
-        //获取查询条件 整体数据查询 不需要日期
-        Condition totalDataCon = myCondition(dto, false, -1);
+        //获取查询条件 整体数据查询 不需要日期 需要gameId
+        Condition totalDataCon = myCondition(dto, true,false, -1);
         //查询条件转换为sql语句 设置映射 Entity为 AdsOverallSummary对象
         String totalDataConString = totalDataCon.toSql(dao.getEntity(AdsOverallSummary.class));
         //自定义sql语句
@@ -53,7 +54,6 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
                 IFNULL(SUM(x.today_total_cost),0) total_cost ,
                 IFNULL(SUM(x.today_amount),0) total_amount ,
                 IFNULL(SUM(x.today_agent_count),0) total_agent_count ,
-                IFNULL(SUM(x.today_game_count),0) total_game_count ,
                 IFNULL(SUM(x.today_amount)/SUM(x.today_total_cost),0) total_roi
                 FROM ads_overall_summary x
                 """ + totalDataConString);
@@ -67,7 +67,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         OverallSummaryVO totalDataVO = totalDataSql.getObject(OverallSummaryVO.class);
 
         //获取查询条件 查询今日数据 需要按当前日期查询
-        Condition todayDataCon = myCondition(dto, false, 1);
+        Condition todayDataCon = myCondition(dto,true, false, 1);
         //查询条件转换为sql语句 设置映射 Entity为 AdsOverallSummary对象
         String todayDataConString = todayDataCon.toSql(dao.getEntity(AdsOverallSummary.class));
         Sql todayDataSql = Sqls.create("""
@@ -82,8 +82,6 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
                 IFNULL(SUM(x.yesterday_amount),0) yesterday_amount ,
                 IFNULL(SUM(x.today_agent_count),0) today_agent_count ,
                 IFNULL(SUM(x.yesterday_agent_count),0) yesterday_agent_count ,
-                IFNULL(SUM(x.today_game_count),0) today_game_count ,
-                IFNULL(SUM(x.yesterday_game_count),0) yesterday_game_count ,
                 IFNULL(SUM(x.first_new_user_amount)/SUM(x.today_total_cost),0) first_roi
                 FROM ads_overall_summary x
                 """ + todayDataConString);
@@ -101,16 +99,16 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
 
         //7日和30日Roi数据需要手动计算
         //7日内新用户累计充值
-        BigDecimal d7NewPlayerAmount = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayAmount", myCondition(dto, false, 7));
+        BigDecimal d7NewPlayerAmount = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayAmount", myCondition(dto,true, false, 7));
         //7日内总消耗
-        BigDecimal d7TotalCost = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayTotalCost", myCondition(dto, false, 7));
+        BigDecimal d7TotalCost = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayTotalCost", myCondition(dto, true,false, 7));
         //cost 查询出的结果为null或者为0.00 设置为默认值0
         overallSummaryVO.setD7TotalRoi((d7TotalCost == null || BigDecimal.ZERO.compareTo(d7TotalCost) == 0) ? BigDecimal.ZERO : d7NewPlayerAmount.multiply(BigDecimal.valueOf(100)).divide(d7TotalCost, 4, RoundingMode.HALF_UP));
 
         //30日内新用户累计充值
-        BigDecimal d30NewPlayerAmount = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayAmount", myCondition(dto, false, 30));
+        BigDecimal d30NewPlayerAmount = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayAmount", myCondition(dto,true, false, 30));
         //30日内总消耗
-        BigDecimal d30TotalCost = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayTotalCost", myCondition(dto, false, 30));
+        BigDecimal d30TotalCost = (BigDecimal) dao.func2(AdsOverallSummary.class, "sum", "todayTotalCost", myCondition(dto, true,false, 30));
         //计算30日Roi
         //cost 查询出的结果为null或者为0.00 设置为默认值0
         overallSummaryVO.setD30TotalRoi((d30TotalCost == null || BigDecimal.ZERO.compareTo(d30TotalCost) == 0) ? BigDecimal.ZERO : d30NewPlayerAmount.multiply(BigDecimal.valueOf(100)).divide(d30TotalCost, 4, RoundingMode.HALF_UP));
@@ -119,6 +117,37 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         overallSummaryVO.setFirstRoi(overallSummaryVO.getFirstRoi().multiply(BigDecimal.valueOf(100)));
         overallSummaryVO.setTotalRoi(overallSummaryVO.getTotalRoi().multiply(BigDecimal.valueOf(100)));
 
+        //计算游戏数量相关数据
+        //查询总投游戏数量
+        Sql gameCountTotalSql = Sqls.create(gameCountSql() +
+                myCondition(dto,false,false,-1).toSql(dao.getEntity(AdsGamePushNum.class))
+        );
+        //自定义回显对象 结果自动封装到给定的Entity对象中
+        gameCountTotalSql.setCallback(Sqls.callback.integer());
+        //执行自定义sql语句
+        dao.execute(gameCountTotalSql);
+        overallSummaryVO.setTotalGameCount(BigInteger.valueOf(gameCountTotalSql.getInt()));
+
+        //查询今日在投游戏数量
+        Sql gameCountTodaySql = Sqls.create(gameCountSql() +
+                myCondition(dto,false,false,1).toSql(dao.getEntity(AdsGamePushNum.class))
+        );
+        //自定义回显对象 结果自动封装到给定的Entity对象中
+        gameCountTodaySql.setCallback(Sqls.callback.integer());
+        //执行自定义sql语句
+        dao.execute(gameCountTodaySql);
+        overallSummaryVO.setTodayGameCount(BigInteger.valueOf(gameCountTodaySql.getInt()));
+
+        //查询昨日在投游戏数量
+        Sql gameCountYesterdaySql = Sqls.create(gameCountSql() +
+                myCondition(dto,false,false,0).toSql(dao.getEntity(AdsGamePushNum.class))
+        );
+        //自定义回显对象 结果自动封装到给定的Entity对象中
+        gameCountYesterdaySql.setCallback(Sqls.callback.integer());
+        //执行自定义sql语句
+        dao.execute(gameCountYesterdaySql);
+        overallSummaryVO.setYesterdayGameCount(BigInteger.valueOf(gameCountYesterdaySql.getInt()));
+
         return overallSummaryVO;
     }
 
@@ -126,7 +155,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
     public List<OverallSummaryLineDataVO> getOverallSummaryLineData(OverallSummaryDTO dto) {
 
         //根据条件获取数据
-        Condition lineCon = myCondition(dto, true, -1);
+        Condition lineCon = myCondition(dto,true, true, -1);
         //查询条件变为字符串
         String lineConString = lineCon.toSql(dao.getEntity(AdsOverallSummary.class));
         //自定义sql语句 加上条件字符串
@@ -157,15 +186,16 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
      * 自定义查询条件
      *
      * @param dto         前端传递的查询参数实体
+     * @param needGameId 是否需要拼接gameId查询条件
      * @param needLocalDate 是否拼接日期查询条件
      * @param queryDays     拼接需要查询数据的天数条件(给今日昨日、首日Roi、7日Roi以及30日Roi使用)
      * @return Condition 查询条件
      */
-    private Condition myCondition(OverallSummaryDTO dto, Boolean needLocalDate, Integer queryDays) {
+    private Condition myCondition(OverallSummaryDTO dto,Boolean needGameId, Boolean needLocalDate, Integer queryDays) {
 
         Criteria cri = Cnd.cri();
         //默认查询条件
-        if (dto.getGameId() != null) {
+        if (dto.getGameId() != null && needGameId) {
             //拼接游戏查询条件
             cri.where().andEquals("gameId", dto.getGameId());
         }
@@ -191,8 +221,13 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
 
         //根据参数拼接条件
         switch (queryDays) {
+            //前一天时间
+            case 0 -> cri.where().andEquals("dt", LocalDate.now().minusDays(1));
+            //当天时间
             case 1 -> cri.where().andEquals("dt", LocalDate.now());
+            //7天时间
             case 7 -> cri.where().andBetween("dt", LocalDate.now().minusDays(7), LocalDate.now());
+            //30天时间
             case 30 -> cri.where().andBetween("dt", LocalDate.now().minusDays(30), LocalDate.now());
             default -> {
             }
@@ -301,5 +336,17 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         return list;
     }
 
+    /**
+     * 共用的gameCount sql语句
+     * @return String
+     */
+    private String gameCountSql(){
+        return """
+               SELECT
+                   COUNT(DISTINCT a.game_id)
+               FROM
+                   game_ads.ads_game_push_num a
+               """;
+    }
 
 }