|
@@ -1,8 +1,10 @@
|
|
package com.zanxiang.game.data.serve.service.impl;
|
|
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.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.pojo.vo.OverallSummaryVO;
|
|
import com.zanxiang.game.data.serve.service.IOverallSummaryService;
|
|
import com.zanxiang.game.data.serve.service.IOverallSummaryService;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -38,82 +40,17 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
@Autowired
|
|
@Autowired
|
|
private Dao dao;
|
|
private Dao dao;
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 整体概况总计数据部分
|
|
|
|
+ *
|
|
|
|
+ * @param dto 前端传递的查询条件实体
|
|
|
|
+ * @return 返回给前端的整体概况总计数据实体
|
|
|
|
+ */
|
|
@Override
|
|
@Override
|
|
public OverallSummaryVO getOverallSummaryTotalData(OverallSummaryDTO dto) {
|
|
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);
|
|
Condition totalCri = myCondition(dto, true, false, -1);
|
|
@@ -121,6 +58,10 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
Condition todayCri = myCondition(dto, true, false, 1);
|
|
Condition todayCri = myCondition(dto, true, false, 1);
|
|
//计算昨日数据条件
|
|
//计算昨日数据条件
|
|
Condition yesterdayCri = myCondition(dto, true, false, 0);
|
|
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", 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;
|
|
return overallSummaryVO;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 整体概况折线图数据部分
|
|
|
|
+ *
|
|
|
|
+ * @param dto 前端传递的查询条件实体
|
|
|
|
+ * @return 返回给前端的整体概况折线图数据实体
|
|
|
|
+ */
|
|
@Override
|
|
@Override
|
|
- public List<OverallSummaryLineDataVO> getOverallSummaryLineData(OverallSummaryDTO dto) {
|
|
|
|
|
|
+ public Map<String, List> getOverallSummaryLineData(OverallSummaryDTO dto) {
|
|
|
|
|
|
//根据条件获取数据
|
|
//根据条件获取数据
|
|
Condition lineCon = myCondition(dto, true, true, -1);
|
|
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>
|
|
//自定义回显对象 结果自动添加到一个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语句
|
|
//执行自定义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 dto 前端传递的查询参数实体
|
|
- * @param needGameId 是否需要拼接gameId查询条件
|
|
|
|
- * @param needLocalDate 是否拼接日期查询条件
|
|
|
|
|
|
+ * @param needGameId 是否需要拼接gameId查询条件(整体概况游戏表不需要gameId条件)
|
|
|
|
+ * @param needLocalDate 是否拼接日期查询条件(折线图需要日期条件,总计不需要)
|
|
* @param queryDays 拼接需要查询数据的天数条件(给今日昨日、首日Roi、7日Roi以及30日Roi使用)
|
|
* @param queryDays 拼接需要查询数据的天数条件(给今日昨日、首日Roi、7日Roi以及30日Roi使用)
|
|
* @return Condition 查询条件
|
|
* @return Condition 查询条件
|
|
*/
|
|
*/
|
|
@@ -224,7 +222,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
//拼接查询 sdk 来源条件
|
|
//拼接查询 sdk 来源条件
|
|
cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
}
|
|
}
|
|
- /*//前端传递 pitcherId 根据 pitcherId 查询
|
|
|
|
|
|
+ //前端传递 pitcherId 根据 pitcherId 查询
|
|
if (dto.getPitcherId() != null) {
|
|
if (dto.getPitcherId() != null) {
|
|
//拼接投手查询条件
|
|
//拼接投手查询条件
|
|
cri.where().andEquals("pitcher_id", dto.getPitcherId());
|
|
cri.where().andEquals("pitcher_id", dto.getPitcherId());
|
|
@@ -234,20 +232,8 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
} else {
|
|
} else {
|
|
//前端没有传递 pitcherId 并且不是管理员 只能看自己的数据
|
|
//前端没有传递 pitcherId 并且不是管理员 只能看自己的数据
|
|
cri.where().andEquals("pitcher_id", SecurityUtil.getUserId());
|
|
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) {
|
|
switch (queryDays) {
|
|
//前一天时间
|
|
//前一天时间
|
|
@@ -315,20 +301,20 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 检查前端查询日期内的数据是否在数据库中都存在
|
|
|
|
- * 不存在要设置默认值 0
|
|
|
|
|
|
+ * 检查查询的时间内是否都有数据,没有则赋值默认值0
|
|
*
|
|
*
|
|
|
|
+ * @param type 需要判断list的类型:costList -> 消耗折线数据;
|
|
|
|
+ * amountList -> 充值相关折线数据;
|
|
|
|
+ * userList -> 新增用户折线数据
|
|
* @param list 需要判断的list
|
|
* @param list 需要判断的list
|
|
* @param dto 前端传递的查询参数实体
|
|
* @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)) {
|
|
if ((list.size() - 1) == dto.getBeginDate().until(dto.getEndDate(), ChronoUnit.DAYS)) {
|
|
return list;
|
|
return list;
|
|
}
|
|
}
|
|
-
|
|
|
|
//创建一个Map用来存储日期数据
|
|
//创建一个Map用来存储日期数据
|
|
Map<LocalDate, Integer> map = new HashMap<>();
|
|
Map<LocalDate, Integer> map = new HashMap<>();
|
|
//添加日期数据
|
|
//添加日期数据
|
|
@@ -337,30 +323,73 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
map.put(tempDate, 1);
|
|
map.put(tempDate, 1);
|
|
tempDate = tempDate.plusDays(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中没有该日期的实体
|
|
//遍历map数据 value为 1 的表示 list中没有该日期的实体
|
|
for (Map.Entry<LocalDate, Integer> entry : map.entrySet()) {
|
|
for (Map.Entry<LocalDate, Integer> entry : map.entrySet()) {
|
|
if (entry.getValue() == 1) {
|
|
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表达式 按日期升序排序
|
|
//排序 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;
|
|
return list;
|
|
}
|
|
}
|
|
@@ -379,7 +408,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
if (type == 1) {
|
|
if (type == 1) {
|
|
sql = Sqls.create(sumByItemsAndTablesSql() + cri);
|
|
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.vars().set("tableName", queryString.split("-")[1]);
|
|
} else {
|
|
} else {
|
|
sql = Sqls.create(gameCountSql() + cri);
|
|
sql = Sqls.create(gameCountSql() + cri);
|
|
@@ -403,9 +432,8 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
//创建sql
|
|
//创建sql
|
|
Sql sql = Sqls.create(sumByItemsAndTablesSql() + cri);
|
|
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.vars().set("tableName", queryString.split("-")[1]);
|
|
-
|
|
|
|
//设置回传对象
|
|
//设置回传对象
|
|
sql.setCallback(Sqls.callback.doubleValue());
|
|
sql.setCallback(Sqls.callback.doubleValue());
|
|
//执行sql
|
|
//执行sql
|
|
@@ -424,7 +452,7 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
SELECT
|
|
SELECT
|
|
COUNT(DISTINCT game_id)
|
|
COUNT(DISTINCT game_id)
|
|
FROM
|
|
FROM
|
|
- game_ads.ads_game_push_num
|
|
|
|
|
|
+ ads_overall_summary_game
|
|
""";
|
|
""";
|
|
}
|
|
}
|
|
|
|
|
|
@@ -434,11 +462,52 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
|
|
private String sumByItemsAndTablesSql() {
|
|
private String sumByItemsAndTablesSql() {
|
|
return """
|
|
return """
|
|
SELECT
|
|
SELECT
|
|
- SUM(@item)
|
|
|
|
|
|
+ SUM($item)
|
|
FROM
|
|
FROM
|
|
$tableName
|
|
$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
|
|
|
|
+ """;
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|