Explorar o código

修改内容:整体概况

lth hai 1 ano
pai
achega
9cc8b958cc

+ 2 - 3
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/OverallSummaryController.java

@@ -1,7 +1,6 @@
 package com.zanxiang.game.data.serve.controller;
 
 import com.zanxiang.game.data.serve.pojo.dto.OverallSummaryDTO;
-import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryLineDataVO;
 import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryVO;
 import com.zanxiang.game.data.serve.service.IOverallSummaryService;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author tianhua
@@ -43,8 +43,7 @@ public class OverallSummaryController {
     @ApiOperation(value = "获取折线图数据")
     //@PreAuthorize(permissionKey = "gameData:adsOverallSummary:lineData")
     @PostMapping("/lineData")
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = OverallSummaryLineDataVO.class, responseContainer = "list")})
-    public ResultVO<List<OverallSummaryLineDataVO>> getOverallSummaryLineData(@RequestBody OverallSummaryDTO dto) {
+    public ResultVO<Map<String,List>> getOverallSummaryLineData(@RequestBody OverallSummaryDTO dto) {
         return ResultVO.ok(overallSummaryService.getOverallSummaryLineData(dto));
     }
 

+ 6 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataDayDTO.java

@@ -26,6 +26,12 @@ public class GameDataDayDTO extends BasePage {
     @ApiModelProperty(notes = "游戏名称")
     private String gameName;
 
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(notes = "游戏ID")
+    private Long gameId;
+
     /**
      * 推广游戏应用类别
      */

+ 6 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataTotalDTO.java

@@ -27,6 +27,12 @@ public class GameDataTotalDTO extends BasePage {
     @ApiModelProperty(notes = "游戏名称")
     private String gameName;
 
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(notes = "游戏ID")
+    private Long gameId;
+
     /**
      * 推广游戏应用类别
      */

+ 12 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsOverallSummaryAmount.java

@@ -81,4 +81,16 @@ public class AdsOverallSummaryAmount implements Serializable {
     @Column
     private BigDecimal todayFirstNewUserAmount;
 
+    /**
+     * 账面充值(买量)
+     */
+    @Column
+    private BigDecimal todayBuyAmount;
+
+    /**
+     * 账面充值(自然)
+     */
+    @Column
+    private BigDecimal todayNatureAmount;
+
 }

+ 59 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/OverallSummaryAmountLineDataVO.java

@@ -0,0 +1,59 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/25
+ * @Description 充值折线图实体对象
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OverallSummaryAmountLineDataVO {
+
+    /**
+     * 日期
+     */
+    @ApiModelProperty(value = "日期")
+    private LocalDate dt;
+
+    /**
+     * 充值
+     */
+    @ApiModelProperty(value = "充值")
+    private BigDecimal amount;
+
+    /**
+     * 买量充值
+     */
+    @ApiModelProperty(value = "买量充值")
+    private BigDecimal buyAmount;
+
+    /**
+     * 自然量充值
+     */
+    @ApiModelProperty(value = "自然量充值")
+    private BigDecimal natureAmount;
+
+    /**
+     * 首日新用户充值
+     */
+    @ApiModelProperty(value = "首日新用户充值(前端不显示)")
+    private BigDecimal todayFirstNewUserAmount;
+
+    /**
+     * 首日Roi
+     */
+    @ApiModelProperty(value = "首日Roi")
+    private BigDecimal firstRoi;
+
+}

+ 35 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/OverallSummaryCostLineDataVO.java

@@ -0,0 +1,35 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/25
+ * @Description 消耗折线图实体对象
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OverallSummaryCostLineDataVO {
+
+    /**
+     * 日期
+     */
+    @ApiModelProperty(value = "日期")
+    private LocalDate dt;
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+}

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

@@ -62,10 +62,5 @@ public class OverallSummaryLineDataVO {
     @ApiModelProperty(value = "新增用户")
     private Long playerAccount;
 
-    /**
-     * 首日新用户充值(总计)(前端不需要展示)
-     */
-    @ApiModelProperty(value = "首日新用户充值(前端不需要展示)")
-    private BigDecimal firstNewUserAmount;
 
 }

+ 34 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/OverallSummaryUserLineDataVO.java

@@ -0,0 +1,34 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/25
+ * @Description 新增用户折线图实体对象
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OverallSummaryUserLineDataVO {
+
+    /**
+     * 日期
+     */
+    @ApiModelProperty(value = "日期")
+    private LocalDate dt;
+
+    /**
+     * 新增用户
+     */
+    @ApiModelProperty(value = "新增用户")
+    private Long playerAccount;
+
+}

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

@@ -145,10 +145,5 @@ public class OverallSummaryVO {
     @ApiModelProperty(value = "30日回本率")
     private BigDecimal d30TotalRoi;
 
-    /**
-     * 首日新用户充值(总计)(前端不需要展示)
-     */
-    @ApiModelProperty(value = "首日新用户充值(前端不需要展示)")
-    private BigDecimal firstNewUserAmount;
 
 }

+ 2 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IOverallSummaryService.java

@@ -1,10 +1,10 @@
 package com.zanxiang.game.data.serve.service;
 
-import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryLineDataVO;
 import com.zanxiang.game.data.serve.pojo.dto.OverallSummaryDTO;
 import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryVO;
 
 import java.util.List;
+import java.util.Map;
 
 public interface IOverallSummaryService {
 
@@ -20,5 +20,5 @@ public interface IOverallSummaryService {
      * @param dto
      * @return
      */
-    List<OverallSummaryLineDataVO> getOverallSummaryLineData(OverallSummaryDTO dto);
+    Map<String,List> getOverallSummaryLineData(OverallSummaryDTO dto);
 }

+ 8 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -84,6 +84,10 @@ public class GameDataServiceImpl implements IGameDataService {
             //拼接游戏名称查询条件
             cri.where().andEquals("game_name", dto.getGameName());
         }
+        if (dto.getGameId() != null) {
+            //拼接游戏id查询条件
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
         if (dto.getGameClassify() != null) {
             //拼接游戏类型查询条件
             cri.where().andEquals("game_classify", dto.getGameClassify());
@@ -427,6 +431,10 @@ public class GameDataServiceImpl implements IGameDataService {
             //拼接游戏名称查询条件
             cri.where().andEquals("a.game_name", dto.getGameName());
         }
+        if (dto.getGameId() != null) {
+            //拼接游戏id查询条件
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
         if (dto.getGameClassify() != null) {
             //拼接游戏类型查询条件
             cri.where().andEquals("a.game_classify", dto.getGameClassify());

+ 221 - 152
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/OverallSummaryServiceImpl.java

@@ -1,8 +1,10 @@
 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.AdsOverallSummary;
-import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryLineDataVO;
+import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryAmountLineDataVO;
+import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryCostLineDataVO;
+import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryUserLineDataVO;
 import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryVO;
 import com.zanxiang.game.data.serve.service.IOverallSummaryService;
 import lombok.extern.slf4j.Slf4j;
@@ -38,82 +40,17 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
     @Autowired
     private Dao dao;
 
+    /**
+     * 整体概况总计数据部分
+     *
+     * @param dto 前端传递的查询条件实体
+     * @return 返回给前端的整体概况总计数据实体
+     */
     @Override
     public OverallSummaryVO getOverallSummaryTotalData(OverallSummaryDTO dto) {
 
-        //获取查询条件 整体数据查询 不需要日期 需要gameId
-        Condition totalDataCon = myCondition(dto, true, false, -1);
-        //查询条件转换为sql语句 设置映射 Entity为 AdsOverallSummary对象
-        String totalDataConString = totalDataCon.toSql(dao.getEntity(AdsOverallSummary.class));
-        //自定义sql语句
-        Sql totalDataSql = Sqls.create("""
-                SELECT
-                IFNULL(SUM(x.today_player_count),0) total_players ,
-                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_amount)/SUM(x.today_total_cost),0) total_roi
-                FROM ads_overall_summary x
-                """ + totalDataConString);
-
-        //自定义回显对象 结果自动封装到给定的Entity对象中
-        totalDataSql.setCallback(Sqls.callback.entity());
-        totalDataSql.setEntity(dao.getEntity(OverallSummaryVO.class));
-        //执行自定义sql语句
-        dao.execute(totalDataSql);
-        //得到一个包含有总数据的OverallSummaryVO对象
-        OverallSummaryVO totalDataVO = totalDataSql.getObject(OverallSummaryVO.class);
-
-        //获取查询条件 查询今日数据 需要按当前日期查询
-        Condition todayDataCon = myCondition(dto, true, false, 1);
-        //查询条件转换为sql语句 设置映射 Entity为 AdsOverallSummary对象
-        String todayDataConString = todayDataCon.toSql(dao.getEntity(AdsOverallSummary.class));
-        Sql todayDataSql = Sqls.create("""
-                SELECT
-                IFNULL(SUM(x.today_player_count),0) today_player_count ,
-                IFNULL(SUM(x.yesterday_player_count),0) yesterday_player_count ,
-                IFNULL(SUM(x.today_total_cost),0) today_total_cost ,
-                IFNULL(SUM(x.yesterday_total_cost),0) yesterday_total_cost ,
-                IFNULL(SUM(x.today_new_player_amount),0) today_new_player_amount ,
-                IFNULL(SUM(x.today_amount),0) today_amount ,
-                IFNULL(SUM(x.yesterday_new_player_amount),0) yesterday_new_player_amount ,
-                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.first_new_user_amount)/SUM(x.today_total_cost),0) first_roi
-                FROM ads_overall_summary x
-                """ + todayDataConString);
-
-        //自定义回显对象 结果自动封装到给定的Entity对象中
-        todayDataSql.setCallback(Sqls.callback.entity());
-        todayDataSql.setEntity(dao.getEntity(OverallSummaryVO.class));
-        //执行自定义sql语句
-        dao.execute(todayDataSql);
-        //得到一个包含有今日和昨日数据的OverallSummaryVO对象
-        OverallSummaryVO overallSummaryVO = todayDataSql.getObject(OverallSummaryVO.class);
-
-        //拼接参数
-        copyNullProperties(totalDataVO, overallSummaryVO);
-
-        //7日和30日Roi数据需要手动计算
-        //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, 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, true, false, 30));
-        //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));
-
-        //计算百分比
-        overallSummaryVO.setFirstRoi(overallSummaryVO.getFirstRoi().multiply(BigDecimal.valueOf(100)));
-        overallSummaryVO.setTotalRoi(overallSummaryVO.getTotalRoi().multiply(BigDecimal.valueOf(100)));
+        //创建返回给前端的对象
+        OverallSummaryVO overallSummaryVO = new OverallSummaryVO();
 
         //计算总计条件
         Condition totalCri = myCondition(dto, true, false, -1);
@@ -121,6 +58,10 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         Condition todayCri = myCondition(dto, true, false, 1);
         //计算昨日数据条件
         Condition yesterdayCri = myCondition(dto, true, false, 0);
+        //计算7日数据条件
+        Condition d7Cri = myCondition(dto, true, false, 7);
+        //计算30日数据条件
+        Condition d30Cri = myCondition(dto, true, false, 30);
 
         //计算游戏数量相关数据
         //查询总投游戏数量
@@ -142,65 +83,122 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         //查询渠道总计数
         overallSummaryVO.setTotalAgentCount(getResultBySql(1, "today_agent_count-ads_overall_summary_agent", totalCri));
         //查询今日新增渠道
-        overallSummaryVO.setTotalAgentCount(getResultBySql(1, "today_agent_count-ads_overall_summary_agent", todayCri));
+        overallSummaryVO.setTodayAgentCount(getResultBySql(1, "today_agent_count-ads_overall_summary_agent", todayCri));
         //查询昨日新增渠道
-        overallSummaryVO.setTotalAgentCount(getResultBySql(1, "today_agent_count-ads_overall_summary_agent", yesterdayCri));
+        overallSummaryVO.setYesterdayAgentCount(getResultBySql(1, "today_agent_count-ads_overall_summary_agent", yesterdayCri));
 
         //计算充值相关数据
         //查询充值总计
-        overallSummaryVO.setTotalAmount(getResultBySql("today_amount-ads_overall_summary_amount",totalCri));
-        //查询今日充值
-        overallSummaryVO.setTodayAmount(getResultBySql("today_amount-ads_overall_summary_amount",totalCri));
-        //查询昨日充值
-
-
-
-
-
-
-
-
+        overallSummaryVO.setTotalAmount(getResultBySql("today_amount-ads_overall_summary_amount", totalCri));
+        //查询今日账面
+        overallSummaryVO.setTodayAmount(getResultBySql("today_amount-ads_overall_summary_amount", todayCri));
+        //查询昨日账面
+        overallSummaryVO.setYesterdayAmount(getResultBySql("today_amount-ads_overall_summary_amount", yesterdayCri));
+        //查询今日新用户充值
+        overallSummaryVO.setTodayNewPlayerAmount(getResultBySql("today_new_user_amount-ads_overall_summary_amount", todayCri));
+        //查询昨日新用户充值
+        overallSummaryVO.setYesterdayNewPlayerAmount(getResultBySql("today_new_user_amount-ads_overall_summary_amount", yesterdayCri));
+
+        //计算消耗相关数据
+        //查询消耗总计
+        overallSummaryVO.setTotalCost(getResultBySql("today_cost-ads_overall_summary_cost", totalCri));
+        //查询今日消耗
+        overallSummaryVO.setTodayTotalCost(getResultBySql("today_cost-ads_overall_summary_cost", todayCri));
+        //查询昨日消耗
+        overallSummaryVO.setYesterdayTotalCost(getResultBySql("today_cost-ads_overall_summary_cost", yesterdayCri));
+
+        //计算Roi相关数据
+        //计算总回本数据
+        overallSummaryVO.setTotalRoi(overallSummaryVO.getTotalCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                overallSummaryVO.getTotalAmount().divide(overallSummaryVO.getTotalCost(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+        //计算首日Roi
+        //计算当天首日新用户充值
+        BigDecimal todayFirstNewUserAmount = getResultBySql("today_first_new_user_amount-ads_overall_summary_amount", todayCri);
+        overallSummaryVO.setFirstRoi(overallSummaryVO.getTodayTotalCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                todayFirstNewUserAmount.divide(overallSummaryVO.getTodayTotalCost(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+        //计算7日Roi
+        //计算7日账面充值和消耗
+        BigDecimal d7Amount = getResultBySql("today_amount-ads_overall_summary_amount", d7Cri);
+        BigDecimal d7Cost = getResultBySql("today_cost-ads_overall_summary_cost", d7Cri);
+        overallSummaryVO.setD7TotalRoi(d7Cost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                d7Amount.divide(d7Cost, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+        //计算30日Roi
+        //计算7日账面充值和消耗
+        BigDecimal d30Amount = getResultBySql("today_amount-ads_overall_summary_amount", d30Cri);
+        BigDecimal d30Cost = getResultBySql("today_cost-ads_overall_summary_cost", d30Cri);
+        overallSummaryVO.setD30TotalRoi(d30Cost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                d30Amount.divide(d30Cost, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
 
         return overallSummaryVO;
     }
 
+    /**
+     * 整体概况折线图数据部分
+     *
+     * @param dto 前端传递的查询条件实体
+     * @return 返回给前端的整体概况折线图数据实体
+     */
     @Override
-    public List<OverallSummaryLineDataVO> getOverallSummaryLineData(OverallSummaryDTO dto) {
+    public Map<String, List> getOverallSummaryLineData(OverallSummaryDTO dto) {
 
         //根据条件获取数据
         Condition lineCon = myCondition(dto, true, true, -1);
-        //查询条件变为字符串
-        String lineConString = lineCon.toSql(dao.getEntity(AdsOverallSummary.class));
-        //自定义sql语句 加上条件字符串
-        Sql sql = Sqls.create("""
-                Select
-                dt,
-                SUM(x.today_total_cost) cost,
-                SUM(x.today_amount) amount,
-                SUM(x.today_buy_amount) buy_amount,
-                SUM(x.today_nature_amount) nature_amount,
-                IFNULL(SUM(x.first_new_user_amount)/SUM(x.today_total_cost),0) first_roi,
-                SUM(x.today_player_count) player_account
-                from ads_overall_summary x
-                """ + lineConString);
 
+        //查询新增用户数据
+        Sql userSql = Sqls.create(userLineSql() + lineCon);
+        //自定义回显对象
+        userSql.setCallback(Sqls.callback.entities());
+        userSql.setEntity(dao.getEntity(OverallSummaryUserLineDataVO.class));
+        //执行sql得到结果
+        dao.execute(userSql);
+        List<OverallSummaryUserLineDataVO> userLineList = userSql.getList(OverallSummaryUserLineDataVO.class);
+
+        //查询消耗折线数据
+        Sql costSql = Sqls.create(costLineSql() + lineCon);
         //自定义回显对象 结果自动添加到一个List中 List<Entity>
-        sql.setCallback(Sqls.callback.entities());
-        sql.setEntity(dao.getEntity(OverallSummaryLineDataVO.class));
-
+        costSql.setCallback(Sqls.callback.entities());
+        costSql.setEntity(dao.getEntity(OverallSummaryCostLineDataVO.class));
         //执行自定义sql语句
-        dao.execute(sql);
+        dao.execute(costSql);
+        List<OverallSummaryCostLineDataVO> costLineList = costSql.getList(OverallSummaryCostLineDataVO.class);
+
+        //查询充值、买量账面、自然量账面数据
+        Sql amountSql = Sqls.create(amountLineSql() + lineCon);
+        //自定义回显对象
+        amountSql.setCallback(Sqls.callback.entities());
+        amountSql.setEntity(dao.getEntity(OverallSummaryAmountLineDataVO.class));
+        //执行sql得到结果
+        dao.execute(amountSql);
+        List<OverallSummaryAmountLineDataVO> amountLineList = amountSql.getList(OverallSummaryAmountLineDataVO.class);
+
+        //计算首日Roi
+        //记录每个dt的cost
+        Map<LocalDate, BigDecimal> costMap = new HashMap<>();
+        for (OverallSummaryCostLineDataVO costLineDataVO : costLineList) {
+            costMap.put(costLineDataVO.getDt(), costLineDataVO.getCost());
+        }
+        //根据首日新用户充值计算roi
+        for (OverallSummaryAmountLineDataVO amountLineDataVO : amountLineList) {
+            //得到当天的消耗
+            BigDecimal cost = costMap.get(amountLineDataVO.getDt());
+            amountLineDataVO.setFirstRoi(cost == null || cost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                    amountLineDataVO.getTodayFirstNewUserAmount().divide(cost, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+        }
 
-        //判断查询日期的数据是否都存在 结果返回
-        return checkAllDateData(sql.getList(OverallSummaryLineDataVO.class), dto);
+        Map<String, List> resMap = new HashMap<>(3);
+        resMap.put("消耗折线数据", checkAllDateData("costList", costLineList, dto));
+        resMap.put("充值相关折线数据", checkAllDateData("amountList", amountLineList, dto));
+        resMap.put("新增用户折线数据", checkAllDateData("userList", userLineList, dto));
+
+        return resMap;
     }
 
     /**
      * 自定义查询条件
      *
      * @param dto           前端传递的查询参数实体
-     * @param needGameId    是否需要拼接gameId查询条件
-     * @param needLocalDate 是否拼接日期查询条件
+     * @param needGameId    是否需要拼接gameId查询条件(整体概况游戏表不需要gameId条件)
+     * @param needLocalDate 是否拼接日期查询条件(折线图需要日期条件,总计不需要)
      * @param queryDays     拼接需要查询数据的天数条件(给今日昨日、首日Roi、7日Roi以及30日Roi使用)
      * @return Condition 查询条件
      */
@@ -224,7 +222,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
             //拼接查询 sdk 来源条件
             cri.where().andEquals("source_system", dto.getSourceSystem());
         }
-        /*//前端传递 pitcherId 根据 pitcherId 查询
+        //前端传递 pitcherId 根据 pitcherId 查询
         if (dto.getPitcherId() != null) {
             //拼接投手查询条件
             cri.where().andEquals("pitcher_id", dto.getPitcherId());
@@ -234,20 +232,8 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         } else {
             //前端没有传递 pitcherId 并且不是管理员 只能看自己的数据
             cri.where().andEquals("pitcher_id", SecurityUtil.getUserId());
-        }*/
-
-        /**
-         * 测试
-         */
-        //前端传递 pitcherId 根据 pitcherId 查询
-        if (dto.getPitcherId() != null) {
-            //拼接投手查询条件
-            cri.where().andEquals("pitcher_id", dto.getPitcherId());
-        } else {
-            cri.where().andNotEquals("pitcher_id", -2);
         }
 
-
         //根据参数拼接条件
         switch (queryDays) {
             //前一天时间
@@ -315,20 +301,20 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
     }
 
     /**
-     * 检查前端查询日期内的数据是否在数据库中都存在
-     * 不存在要设置默认值 0
+     * 检查查询的时间内是否都有数据,没有则赋值默认值0
      *
+     * @param type 需要判断list的类型:costList -> 消耗折线数据;
+     *             amountList -> 充值相关折线数据;
+     *             userList -> 新增用户折线数据
      * @param list 需要判断的list
      * @param dto  前端传递的查询参数实体
-     * @return 返回给前端的折线图数据 list
+     * @return 补全后的list
      */
-    private List<OverallSummaryLineDataVO> checkAllDateData(List<OverallSummaryLineDataVO> list, OverallSummaryDTO dto) {
-
+    private List checkAllDateData(String type, List list, OverallSummaryDTO dto) {
         //先判断是否缺少数据 不少数据直接返回
         if ((list.size() - 1) == dto.getBeginDate().until(dto.getEndDate(), ChronoUnit.DAYS)) {
             return list;
         }
-
         //创建一个Map用来存储日期数据
         Map<LocalDate, Integer> map = new HashMap<>();
         //添加日期数据
@@ -337,30 +323,73 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
             map.put(tempDate, 1);
             tempDate = tempDate.plusDays(1);
         }
-        //循环遍历list 查询vo里的日期参数
-        for (OverallSummaryLineDataVO vo : list) {
-            Integer value = map.get(vo.getDt());
-            if (value != null) {
-                map.put(vo.getDt(), ++value);
+        //不同类型list
+        if ("costList".equals(type)) {
+            //循环遍历list 查询vo里的日期参数
+            for (Object vo : list) {
+                Integer value = map.get(((OverallSummaryCostLineDataVO) vo).getDt());
+                if (value != null) {
+                    map.put(((OverallSummaryCostLineDataVO) vo).getDt(), ++value);
+                }
+            }
+        } else if ("amountList".equals(type)) {
+            //循环遍历list 查询vo里的日期参数
+            for (Object vo : list) {
+                Integer value = map.get(((OverallSummaryAmountLineDataVO) vo).getDt());
+                if (value != null) {
+                    map.put(((OverallSummaryAmountLineDataVO) vo).getDt(), ++value);
+                }
+            }
+        } else if ("userList".equals(type)) {
+            //循环遍历list 查询vo里的日期参数
+            for (Object vo : list) {
+                Integer value = map.get(((OverallSummaryUserLineDataVO) vo).getDt());
+                if (value != null) {
+                    map.put(((OverallSummaryUserLineDataVO) vo).getDt(), ++value);
+                }
             }
         }
         //遍历map数据 value为 1 的表示 list中没有该日期的实体
         for (Map.Entry<LocalDate, Integer> entry : map.entrySet()) {
             if (entry.getValue() == 1) {
-                //list数据添加一个默认VO对象
-                list.add(OverallSummaryLineDataVO.builder()
-                        .dt(entry.getKey())
-                        .amount(BigDecimal.ZERO)
-                        .buyAmount(BigDecimal.ZERO)
-                        .natureAmount(BigDecimal.ZERO)
-                        .cost(BigDecimal.ZERO)
-                        .firstRoi(BigDecimal.ZERO)
-                        .playerAccount(0L)
-                        .build());
+                //不同类型list
+                if ("costList".equals(type)) {
+                    //添加默认数据
+                    list.add(OverallSummaryCostLineDataVO.builder()
+                            .dt(entry.getKey())
+                            .cost(BigDecimal.ZERO)
+                            .build());
+                } else if ("amountList".equals(type)) {
+                    //添加默认数据
+                    list.add(OverallSummaryAmountLineDataVO.builder()
+                            .dt(entry.getKey())
+                            .amount(BigDecimal.ZERO)
+                            .buyAmount(BigDecimal.ZERO)
+                            .natureAmount(BigDecimal.ZERO)
+                            .todayFirstNewUserAmount(BigDecimal.ZERO)
+                            .firstRoi(BigDecimal.ZERO)
+                            .build());
+                } else if ("userList".equals(type)) {
+                    //添加默认数据
+                    list.add(OverallSummaryUserLineDataVO.builder()
+                            .dt(entry.getKey())
+                            .playerAccount(0L)
+                            .build());
+                }
             }
         }
+
         //排序 lambda表达式 按日期升序排序
-        list.sort((vo1, vo2) -> vo1.getDt().isBefore(vo2.getDt()) ? -1 : 1);
+        if ("costList".equals(type)) {
+            list.sort((vo1, vo2) -> ((OverallSummaryCostLineDataVO) vo1).getDt()
+                    .isBefore(((OverallSummaryCostLineDataVO) vo2).getDt()) ? -1 : 1);
+        } else if ("amountList".equals(type)) {
+            list.sort((vo1, vo2) -> ((OverallSummaryAmountLineDataVO) vo1).getDt()
+                    .isBefore(((OverallSummaryAmountLineDataVO) vo2).getDt()) ? -1 : 1);
+        } else if ("userList".equals(type)) {
+            list.sort((vo1, vo2) -> ((OverallSummaryUserLineDataVO) vo1).getDt()
+                    .isBefore(((OverallSummaryUserLineDataVO) vo2).getDt()) ? -1 : 1);
+        }
 
         return list;
     }
@@ -379,7 +408,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         if (type == 1) {
             sql = Sqls.create(sumByItemsAndTablesSql() + cri);
             //设置查询字段及表名
-            sql.params().set("item", queryString.split("-")[0]);
+            sql.vars().set("item", queryString.split("-")[0]);
             sql.vars().set("tableName", queryString.split("-")[1]);
         } else {
             sql = Sqls.create(gameCountSql() + cri);
@@ -403,9 +432,8 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
         //创建sql
         Sql sql = Sqls.create(sumByItemsAndTablesSql() + cri);
         //设置查询字段及表名
-        sql.params().set("item", queryString.split("-")[0]);
+        sql.vars().set("item", queryString.split("-")[0]);
         sql.vars().set("tableName", queryString.split("-")[1]);
-
         //设置回传对象
         sql.setCallback(Sqls.callback.doubleValue());
         //执行sql
@@ -424,7 +452,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
                 SELECT
                     COUNT(DISTINCT game_id)
                 FROM
-                    game_ads.ads_game_push_num
+                    ads_overall_summary_game
                 """;
     }
 
@@ -434,11 +462,52 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
     private String sumByItemsAndTablesSql() {
         return """
                 SELECT
-                    SUM(@item)
+                    SUM($item)
                 FROM
                     $tableName
                 """;
     }
 
+    /**
+     * 消耗折线数据sql
+     */
+    private String costLineSql() {
+        return """
+                SELECT
+                    dt,
+                    SUM(today_cost) cost
+                FROM
+                    ads_overall_summary_cost
+                """;
+    }
+
+    /**
+     * 充值、买量账面、自然量折线数据sql
+     */
+    private String amountLineSql() {
+        return """
+                SELECT
+                    dt,
+                    SUM(today_amount) amount,
+                    SUM(today_buy_amount) buy_amount,
+                    SUM(today_nature_amount) nature_amount,
+                    SUM(today_first_new_user_amount) today_first_new_user_amount
+                FROM
+                    ads_overall_summary_amount
+                """;
+    }
+
+    /**
+     * 新增用户折线数据sql
+     */
+    private String userLineSql() {
+        return """
+                SELECT
+                    dt,
+                    SUM(today_user_count) player_account
+                FROM
+                    ads_overall_summary_user
+                """;
+    }
 
 }