|
@@ -142,6 +142,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
|
|
|
*/
|
|
|
@Override
|
|
|
public Page<PromotionDayVO> getPromotionDayData(PromotionDayDTO dto) {
|
|
|
+
|
|
|
//不传递查询条件默认查询当天数据
|
|
|
if (dto.getCostBeginDate() == null || dto.getCostEndDate() == null) {
|
|
|
dto.setCostBeginDate(LocalDate.now());
|
|
@@ -171,30 +172,14 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
|
|
|
Sql sqlCount = Sqls.queryEntity("select count(*) from ads_promotion_day" + cri);
|
|
|
pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
|
|
|
|
|
|
+ //得到查询条件内所有广告最新的一条数据
|
|
|
+ Map<String, PromotionDayVO> latestDateDataMap = getLatestDateData(myCri(dto, false));
|
|
|
+
|
|
|
//处理List中的每个vo对象缺少的数据
|
|
|
list.stream().map(vo -> {
|
|
|
- //记录最近有数据的LocalDate
|
|
|
- LocalDate latestDate = dto.getCostEndDate();
|
|
|
- Boolean hasDataDate = findDate(vo.getPromotionId(), latestDate);
|
|
|
- while (!hasDataDate) {
|
|
|
- latestDate = latestDate.minusDays(1);
|
|
|
- hasDataDate = findDate(vo.getPromotionId(), latestDate);
|
|
|
- }
|
|
|
- //构建查询条件
|
|
|
- Criteria totalCri = Cnd.cri();
|
|
|
- totalCri.where().andEquals("dt", latestDate);
|
|
|
- totalCri.where().andEquals("promotion_id", vo.getPromotionId());
|
|
|
- //查询出最近一条包含总数据的记录
|
|
|
- Sql totalDataSql = Sqls.create(getTotalDataSql() + totalCri);
|
|
|
- //设置回传对象
|
|
|
- totalDataSql.setCallback(Sqls.callback.entity());
|
|
|
- totalDataSql.setEntity(dao.getEntity(PromotionDayVO.class));
|
|
|
- //执行sql
|
|
|
- dao.execute(totalDataSql);
|
|
|
- //得到对象
|
|
|
- PromotionDayVO tempVO = totalDataSql.getObject(PromotionDayVO.class);
|
|
|
- //将两个对象内容合并
|
|
|
- copyNullProperties(tempVO, vo);
|
|
|
+
|
|
|
+ //找到相同的广告ID,取出对象并合并属性值
|
|
|
+ copyNullProperties(latestDateDataMap.get(vo.getPromotionId()), vo);
|
|
|
|
|
|
//总充值次数成本
|
|
|
vo.setTotalAmountCountCost(vo.getTotalAmountCount() == 0L ? BigDecimal.ZERO :
|
|
@@ -497,34 +482,6 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
|
|
|
return cri;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 用来判断当前日期有没有数据
|
|
|
- *
|
|
|
- * @param promotionId 查询的广告id
|
|
|
- * @param latestDate 时间参数
|
|
|
- * @return Boolean
|
|
|
- */
|
|
|
- private Boolean findDate(String promotionId, LocalDate latestDate) {
|
|
|
- //创建查询条件
|
|
|
- Criteria cri = Cnd.cri();
|
|
|
- cri.where().andEquals("promotion_id", Long.valueOf(promotionId));
|
|
|
- cri.where().andEquals("dt", latestDate);
|
|
|
- Sql sql = Sqls.create("""
|
|
|
- SELECT
|
|
|
- promotion_id
|
|
|
- FROM
|
|
|
- game_ads.ads_promotion_day
|
|
|
- """ + cri);
|
|
|
- sql.setCallback(Sqls.callback.str());
|
|
|
- dao.execute(sql);
|
|
|
- String tempStr = sql.getString();
|
|
|
- //查询结果判断
|
|
|
- if (tempStr != null) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 所有为空值的属性都不copy
|
|
|
*
|
|
@@ -559,6 +516,37 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
|
|
|
return notNullFieldSet.toArray(notNullField);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取最新数据得到Map
|
|
|
+ * @param cri 查询条件
|
|
|
+ * @return Map结果
|
|
|
+ */
|
|
|
+ private Map<String, PromotionDayVO> getLatestDateData(Criteria cri) {
|
|
|
+ Sql sql = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ *
|
|
|
+ FROM(
|
|
|
+ """
|
|
|
+ + getLatestDateDataSql() + cri +
|
|
|
+ """
|
|
|
+ ) a
|
|
|
+ WHERE a.num = 1
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sql.setCallback(Sqls.callback.entities());
|
|
|
+ sql.setEntity(dao.getEntity(PromotionDayVO.class));
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sql);
|
|
|
+ //得到sql查询的结果
|
|
|
+ List<PromotionDayVO> list = sql.getList(PromotionDayVO.class);
|
|
|
+ Map<String, PromotionDayVO> resMap = new HashMap<>(list.size());
|
|
|
+ //循环赋值得到最终map
|
|
|
+ for (PromotionDayVO vo : list) {
|
|
|
+ resMap.put(vo.getPromotionId(), vo);
|
|
|
+ }
|
|
|
+ return resMap;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 排序
|
|
|
* @param dto 前端传递的查询条件
|
|
@@ -821,13 +809,14 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询广告每日里总数据sql
|
|
|
- *
|
|
|
+ * 获取到最新数据的sql
|
|
|
* @return String
|
|
|
*/
|
|
|
- private String getTotalDataSql() {
|
|
|
+ private String getLatestDateDataSql() {
|
|
|
return """
|
|
|
SELECT
|
|
|
+ ROW_NUMBER()over(partition by promotion_id order by dt desc) as num,
|
|
|
+ promotion_id,
|
|
|
status,
|
|
|
creative_preview,
|
|
|
landing_type,
|
|
@@ -852,7 +841,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
|
|
|
promotion_total_roi,
|
|
|
total_recharge_cost
|
|
|
FROM
|
|
|
- game_ads.ads_promotion_day
|
|
|
+ game_ads.ads_promotion_day
|
|
|
""";
|
|
|
}
|
|
|
|