package com.ycwl.basic.task; import cn.hutool.core.date.DateUtil; import com.ycwl.basic.mapper.ScenicDeviceStatsMapper; import com.ycwl.basic.mapper.ScenicMapper; import com.ycwl.basic.mapper.StatisticsMapper; import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq; import com.ycwl.basic.model.mobile.statistic.resp.AppStatisticsFunnelVO; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.model.pc.scenicDeviceStats.entity.ScenicDeviceStatsEntity; import com.ycwl.basic.service.mobile.AppStatisticsService; import com.ycwl.basic.utils.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; @Component @EnableScheduling public class ScenicStatsTask { @Autowired private ScenicDeviceStatsMapper mapper; @Autowired private StatisticsMapper statisticsMapper; @Autowired private AppStatisticsService statisticsService; @Autowired private ScenicMapper scenicMapper; @Scheduled(cron = "0 10 0 * * *") public void countDeviceStats() { Date yesterdayStart = DateUtil.beginOfDay(DateUtil.yesterday()); Date yesterdayEnd = DateUtil.endOfDay(yesterdayStart); Date twoDaysBeforeStart = DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.yesterday(), -1)); Date twoDaysBeforeEnd = DateUtil.endOfDay(twoDaysBeforeStart); // 前天的数据 List list = mapper.countDeviceStats(twoDaysBeforeStart, twoDaysBeforeEnd); if (!list.isEmpty()) { list.forEach(stats -> { stats.setDate(twoDaysBeforeStart); mapper.insert(stats); }); } list = mapper.countDeviceStats(yesterdayStart, yesterdayEnd); if (!list.isEmpty()) { list.forEach(stats -> { stats.setDate(yesterdayStart); mapper.insert(stats); }); } } @Scheduled(cron = "0 20 0 * * *") public void countScenicStats() { Date yesterdayStart = DateUtil.beginOfDay(DateUtil.yesterday()); Date yesterdayEnd = DateUtil.endOfDay(yesterdayStart); List list = scenicMapper.list(new ScenicReqQuery()); list.forEach((scenic) -> { CommonQueryReq query = new CommonQueryReq(); query.setScenicId(scenic.getId()); query.setStartTime(yesterdayStart); query.setEndTime(yesterdayEnd); query.setRealtime(true); ApiResponse resp = statisticsService.userConversionFunnel(query); AppStatisticsFunnelVO data = resp.getData(); statisticsMapper.insertStat(scenic.getId(), yesterdayStart, data); }); } }