Browse Source

整体概况接口编写

lth 1 year ago
parent
commit
d403c51fed

+ 46 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AdsOverallSummaryController.java

@@ -0,0 +1,46 @@
+package com.zanxiang.game.data.serve.controller;
+
+import com.zanxiang.game.data.serve.pojo.vo.AdsOverallSummaryLineDataVO;
+import com.zanxiang.game.data.serve.pojo.param.AdsOverallSummaryParam;
+import com.zanxiang.game.data.serve.pojo.vo.AdsOverallSummaryVO;
+import com.zanxiang.game.data.serve.service.IAdsOverallSummaryService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author tianhua
+ * @time 2023/7/4
+ * @Description 整体概况控制层接口
+ **/
+@Api(tags = {"整体概况"})
+@RestController
+@RequestMapping("/allSurvey")
+@Slf4j
+public class AdsOverallSummaryController {
+
+    @Autowired
+    private IAdsOverallSummaryService adsOverallSummaryService;
+
+    @ApiOperation(value = "获取整体概况数据")
+    @PostMapping("/data")
+    public ResultVO<AdsOverallSummaryVO> getOverallSummaryData(@RequestBody AdsOverallSummaryParam param) {
+        return ResultVO.ok(adsOverallSummaryService.getOverallSummaryData(param));
+    }
+
+    @ApiOperation(value = "获取折线图数据")
+    @PostMapping("/linedata")
+    public ResultVO<List<AdsOverallSummaryLineDataVO>> getOverallSummaryLineData(@RequestBody AdsOverallSummaryParam param) {
+        return ResultVO.ok(adsOverallSummaryService.getOverallSummaryLineData(param));
+    }
+
+
+}

+ 13 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsOverallSummary.java

@@ -17,7 +17,7 @@ import java.time.LocalDate;
  * 整体概括
  * 整体概括
  * </p>
  * </p>
  *
  *
- * @author 
+ * @author
  * @since 2023-06-30
  * @since 2023-06-30
  */
  */
 @Data
 @Data
@@ -93,6 +93,18 @@ public class AdsOverallSummary implements Serializable {
     @Column
     @Column
     private BigDecimal todayAmount;
     private BigDecimal todayAmount;
 
 
+    /**
+     * 今日账面充值(买量)
+     */
+    @Column
+    private BigDecimal todayBuyAmount;
+
+    /**
+     * 今日账面充值(自然量)
+     */
+    @Column
+    private BigDecimal todayNatureAmount;
+
     /**
     /**
      * 昨日新用户充值
      * 昨日新用户充值
      */
      */
@@ -153,5 +165,4 @@ public class AdsOverallSummary implements Serializable {
     @Column
     @Column
     private BigDecimal totalRoi;
     private BigDecimal totalRoi;
 
 
-
 }
 }

+ 59 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/param/AdsOverallSummaryParam.java

@@ -0,0 +1,59 @@
+package com.zanxiang.game.data.serve.pojo.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigInteger;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/4
+ * @Description 整体概况前端查询参数实体
+ **/
+@Data
+public class AdsOverallSummaryParam {
+
+    /**
+     * 筛选起始时间:给统计数据展示折线图时使用
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "筛选起始时间")
+    private LocalDate beginDate;
+
+    /**
+     * 筛选结束时间:给统计数据展示折线图时使用
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "筛选结束时间")
+    private LocalDate endDate;
+
+    /**
+     * 渠道ID
+     */
+    @ApiModelProperty(value = "推广渠道")
+    private BigInteger agentId;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "推广游戏")
+    private BigInteger gameId;
+
+    /**
+     * 投手ID
+     */
+    @ApiModelProperty(value = "投手")
+    private BigInteger pithcerId;
+
+    /**
+     * 广告账户ID
+     */
+    @ApiModelProperty(value = "推广账号")
+    private BigInteger accountId;
+
+}

+ 66 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/AdsOverallSummaryLineDataVO.java

@@ -0,0 +1,66 @@
+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.math.BigInteger;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/5
+ * @Description 整体概况折线图前端展示数据实体
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class AdsOverallSummaryLineDataVO {
+
+    /**
+     * 日期
+     */
+    @ApiModelProperty(value = "日期")
+    private LocalDate dt;
+
+    /**
+     * 消耗
+     */
+    @ApiModelProperty(value = "消耗")
+    private BigDecimal cost;
+
+    /**
+     * 充值
+     */
+    @ApiModelProperty(value = "充值")
+    private BigDecimal amount;
+
+    /**
+     * 买量充值
+     */
+    @ApiModelProperty(value = "买量充值")
+    private BigDecimal buyAmount;
+
+    /**
+     * 自然量充值
+     */
+    @ApiModelProperty(value = "自然量充值")
+    private BigDecimal natureAmount;
+
+    /**
+     * 首日ROI
+     */
+    @ApiModelProperty(value = "首日ROI")
+    private BigDecimal firstRoi;
+
+    /**
+     * 新增用户
+     */
+    @ApiModelProperty(value = "新增用户")
+    private BigInteger playerAccount;
+
+}

+ 149 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/AdsOverallSummaryVO.java

@@ -0,0 +1,149 @@
+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.math.BigInteger;
+
+/**
+ * @author tianhua
+ * @time 2023/7/4
+ * @Description 整体概况前端展示数据实体
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class AdsOverallSummaryVO {
+
+    /**
+     * 玩家总计
+     */
+    @ApiModelProperty(value = "玩家总计")
+    private BigInteger totalPlayers;
+
+    /**
+     * 今日新增玩家数量
+     */
+    @ApiModelProperty(value = "今日新增玩家数量")
+    private BigInteger todayPlayerCount;
+
+    /**
+     * 昨日新增玩家数量
+     */
+    @ApiModelProperty(value = "昨日新增玩家数量")
+    private BigInteger yesterdayPlayerCount;
+
+    /**
+     * 累计消耗
+     */
+    @ApiModelProperty(value = "消耗总计")
+    private BigDecimal totalCost;
+
+    /**
+     * 今日消耗
+     */
+    @ApiModelProperty(value = "今日消耗")
+    private BigDecimal todayTotalCost;
+
+    /**
+     * 昨日消耗
+     */
+    @ApiModelProperty(value = "昨日消耗")
+    private BigDecimal yesterdayTotalCost;
+
+    /**
+     * 累计充值
+     */
+    @ApiModelProperty(value = "充值总计")
+    private BigDecimal totalAmount;
+
+    /**
+     * 今日新用户充值
+     */
+    @ApiModelProperty(value = "今日新用户充值")
+    private BigDecimal todayNewPlayerAmount;
+
+    /**
+     * 今日账面充值
+     */
+    @ApiModelProperty(value = "今日账面充值")
+    private BigDecimal todayAmount;
+
+    /**
+     * 昨日新用户充值
+     */
+    @ApiModelProperty(value = "昨日新用户充值")
+    private BigDecimal yesterdayNewPlayerAmount;
+
+    /**
+     * 昨日账面充值
+     */
+    @ApiModelProperty(value = "昨日账面充值")
+    private BigDecimal yesterdayAmount;
+
+    /**
+     * 总渠道数
+     */
+    @ApiModelProperty(value = "渠道总计")
+    private BigInteger totalAgentCount;
+
+    /**
+     * 今日新增渠道数量
+     */
+    @ApiModelProperty(value = "今日新增渠道数量")
+    private BigInteger todayAgentCount;
+
+    /**
+     * 昨日新增渠道数量
+     */
+    @ApiModelProperty(value = "昨日新增渠道数量")
+    private BigInteger yesterdayAgentCount;
+
+    /**
+     * 游戏总计
+     */
+    @ApiModelProperty(value = "游戏总计")
+    private BigInteger totalGameCount;
+
+    /**
+     * 今日新增游戏数量
+     */
+    @ApiModelProperty(value = "今日新增游戏数量")
+    private BigInteger todayGameCount;
+
+    /**
+     * 昨日新增游戏数量
+     */
+    @ApiModelProperty(value = "昨日新增游戏数量")
+    private BigInteger yesterdayGameCount;
+
+    /**
+     * 总回本率
+     */
+    @ApiModelProperty(value = "总回本率")
+    private BigDecimal totalRoi;
+
+    /**
+     * 首日回本率
+     */
+    @ApiModelProperty(value = "首日回本率")
+    private BigDecimal firstRoi;
+
+    /**
+     * 7日回本率
+     */
+    @ApiModelProperty(value = "7日回本率")
+    private BigDecimal d7TotalRoi;
+
+    /**
+     * 30日回本率
+     */
+    @ApiModelProperty(value = "30日回本率")
+    private BigDecimal d30TotalRoi;
+
+}

+ 14 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IAdsOverallSummaryService.java

@@ -0,0 +1,14 @@
+package com.zanxiang.game.data.serve.service;
+
+import com.zanxiang.game.data.serve.pojo.vo.AdsOverallSummaryLineDataVO;
+import com.zanxiang.game.data.serve.pojo.param.AdsOverallSummaryParam;
+import com.zanxiang.game.data.serve.pojo.vo.AdsOverallSummaryVO;
+
+import java.util.List;
+
+public interface IAdsOverallSummaryService {
+
+    AdsOverallSummaryVO getOverallSummaryData(AdsOverallSummaryParam param);
+
+    List<AdsOverallSummaryLineDataVO> getOverallSummaryLineData(AdsOverallSummaryParam param);
+}

+ 180 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOverallSummaryServiceImpl.java

@@ -0,0 +1,180 @@
+package com.zanxiang.game.data.serve.service.impl;
+
+import com.zanxiang.game.data.serve.pojo.entity.AdsOverallSummary;
+import com.zanxiang.game.data.serve.pojo.param.AdsOverallSummaryParam;
+import com.zanxiang.game.data.serve.pojo.vo.AdsOverallSummaryLineDataVO;
+import com.zanxiang.game.data.serve.pojo.vo.AdsOverallSummaryVO;
+import com.zanxiang.game.data.serve.service.IAdsOverallSummaryService;
+import lombok.extern.slf4j.Slf4j;
+import org.nutz.dao.Cnd;
+import org.nutz.dao.Condition;
+import org.nutz.dao.Dao;
+import org.nutz.dao.Sqls;
+import org.nutz.dao.sql.Criteria;
+import org.nutz.dao.sql.Sql;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @author tianhua
+ * @time 2023/7/4
+ * @Description 整体概况逻辑处理
+ **/
+@Service
+@Slf4j
+public class AdsOverallSummaryServiceImpl implements IAdsOverallSummaryService {
+
+    @Autowired
+    private Dao dao;
+
+    @Override
+    public AdsOverallSummaryVO getOverallSummaryData(AdsOverallSummaryParam param) {
+
+        //前端展示数据的实体对象
+        AdsOverallSummaryVO adsOverallSummaryVO = new AdsOverallSummaryVO();
+        //获取查询条件 整体数据查询 不需要日期
+        Condition totalDataCon = myCondition(param, false, false);
+        //获取查询条件 查询今日数据 需要按当前日期查询
+        Condition todayDataCon = myCondition(param, false, true);
+
+        //查询数据 设置到实体类中
+        //总玩家数
+        adsOverallSummaryVO.setTotalPlayers(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayPlayerCount", totalDataCon)));
+        //今日新增玩家数
+        adsOverallSummaryVO.setTodayPlayerCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayPlayerCount", todayDataCon)));
+        //昨日新增玩家数
+        adsOverallSummaryVO.setYesterdayPlayerCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "yesterdayPlayerCount", todayDataCon)));
+
+        //累计消耗
+        adsOverallSummaryVO.setTotalCost(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayTotalCost", totalDataCon)));
+        //今日消耗
+        adsOverallSummaryVO.setTodayTotalCost(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayTotalCost", todayDataCon)));
+        //昨日消耗
+        adsOverallSummaryVO.setYesterdayTotalCost(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "yesterdayTotalCost", todayDataCon)));
+
+        //累计充值
+        adsOverallSummaryVO.setTotalAmount(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayAmount", totalDataCon)));
+        //今日新用户充值
+        adsOverallSummaryVO.setTodayNewPlayerAmount(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayNewPlayerAmount", todayDataCon)));
+        //今日账面充值
+        adsOverallSummaryVO.setTodayAmount(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayAmount", todayDataCon)));
+        //昨日新用户充值
+        adsOverallSummaryVO.setYesterdayNewPlayerAmount(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "yesterdayNewPlayerAmount", todayDataCon)));
+        //昨日账面充值
+        adsOverallSummaryVO.setYesterdayAmount(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "yesterdayAmount", todayDataCon)));
+
+        //总渠道数量
+        adsOverallSummaryVO.setTotalAgentCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayAgentCount", totalDataCon)));
+        //今日新增渠道数量
+        adsOverallSummaryVO.setTodayAgentCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayAgentCount", todayDataCon)));
+        //昨日新增渠道数量
+        adsOverallSummaryVO.setYesterdayAgentCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "yesterdayAgentCount", todayDataCon)));
+
+        //游戏总计数量
+        adsOverallSummaryVO.setTotalGameCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayGameCount", totalDataCon)));
+        //今日新增游戏数量
+        adsOverallSummaryVO.setTodayGameCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "todayGameCount", todayDataCon)));
+        //昨日新增游戏数量
+        adsOverallSummaryVO.setYesterdayGameCount(BigInteger.valueOf(dao.func(AdsOverallSummary.class, "sum", "yesterdayGameCount", todayDataCon)));
+
+        //总回本率
+        adsOverallSummaryVO.setTotalRoi(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "totalRoi", totalDataCon)));
+        //首日回本率
+        adsOverallSummaryVO.setFirstRoi(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "firstRoi", totalDataCon)));
+        //7天回本率
+        adsOverallSummaryVO.setD7TotalRoi(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "d7TotalRoi", totalDataCon)));
+        //30天回本率
+        adsOverallSummaryVO.setD30TotalRoi(BigDecimal.valueOf(dao.func(AdsOverallSummary.class, "sum", "d30TotalRoi", totalDataCon)));
+
+        return adsOverallSummaryVO;
+    }
+
+    @Override
+    public List<AdsOverallSummaryLineDataVO> getOverallSummaryLineData(AdsOverallSummaryParam param) {
+
+        //前端展示的折线数据对象实体
+        AdsOverallSummaryLineDataVO adsOverallSummaryLineDataVO = new AdsOverallSummaryLineDataVO();
+
+        //自定义sql语句
+        Sql sql = Sqls.create("Select dt," +
+                "SUM(x.today_total_cost) cost, " +
+                "SUM(x.today_buy_amount)+SUM(x.today_nature_amount) amount," +
+                "SUM(x.today_buy_amount) buy_amount," +
+                "SUM(x.today_nature_amount) nature_amount, " +
+                "SUM(x.first_roi) first_roi," +
+                "SUM(x.today_player_count) player_account " +
+                "from ads_overall_summary x $condition");
+        //根据条件获取数据
+        Condition lineCon = myCondition(param, true, false);
+        //拼接查询条件
+        sql.setCondition(lineCon);
+
+        //自定义回显对象
+        sql.setCallback(Sqls.callback.entities());
+        sql.setEntity(dao.getEntity(AdsOverallSummaryLineDataVO.class));
+
+        //执行自定义sql语句
+        dao.execute(sql);
+
+        return sql.getList(AdsOverallSummaryLineDataVO.class);
+    }
+
+
+    /**
+     * 自定义查询条件
+     *
+     * @param param            前端传递的查询参数实体
+     * @param needLocalDate    是否拼接日期查询条件
+     * @param isQueryTodayData 是否是查询今日数据
+     * @return Condition
+     */
+    private Condition myCondition(AdsOverallSummaryParam param, Boolean needLocalDate, Boolean isQueryTodayData) {
+
+        Criteria cri = Cnd.cri();
+        //默认查询条件
+        if (param.getGameId() != null) {
+            //拼接游戏查询条件
+            cri.where().andEquals("gameId", param.getGameId());
+        }
+        if (param.getPithcerId() != null) {
+            //拼接投手查询条件
+            cri.where().andEquals("pithcerId", param.getPithcerId());
+        }
+        if (param.getAgentId() != null) {
+            //拼接渠道查询条件
+            cri.where().andEquals("agentId", param.getAgentId());
+        }
+        if (param.getAccountId() != null) {
+            //拼接广告账户查询条件
+            cri.where().andEquals("accountId", param.getAccountId());
+        }
+
+        //如果需要查询今日及昨日数据 就指定查询日期条件为当天日期
+        if (isQueryTodayData) {
+            cri.where().andEquals("dt", LocalDate.now());
+        }
+
+        //折线数据需要拼接时间查询条件
+        if (needLocalDate) {
+            if (param.getBeginDate() != null && param.getEndDate() != null) {
+                //如果是折线则需要给定时间内的数据
+                cri.where().andBetween("dt", param.getBeginDate(), param.getEndDate());
+                //日期排序
+            } else {
+                //没有具体时间默认查询今天数据
+                cri.where().andBetween("dt", LocalDate.now().minusDays(30), LocalDate.now());
+            }
+            //按日期分组
+            cri.getGroupBy().groupBy("dt").asc("dt");
+        }
+
+        return cri;
+    }
+
+
+}