Commit 55f0893f authored by zhoushiguang's avatar zhoushiguang

频发拥堵/缓行路段小时粒度数据中间表计算

parent e1f7a137
...@@ -116,5 +116,10 @@ public interface AnalysisProblemCrossDayMapper extends BaseMapper<AnalysisProble ...@@ -116,5 +116,10 @@ public interface AnalysisProblemCrossDayMapper extends BaseMapper<AnalysisProble
List<GreenwaveCrossResultDTO> getTrunkLineCrossProblemByDay(); List<GreenwaveCrossResultDTO> getTrunkLineCrossProblemByDay();
void insertAnalysisCrossDayData(List<GreenwaveCrossResultDTO> greenwaveCrossResultList); void insertAnalysisCrossDayData(List<GreenwaveCrossResultDTO> greenwaveCrossResultList);
/**
* 绿波干线小时粒度拥堵数据
*/
void insertGreenCrossHourData(@Param("startTime")String startTime,@Param("endTime")String endTime);
} }
...@@ -76,4 +76,6 @@ public interface AnalysisProblemCrossDayService extends IService<AnalysisProblem ...@@ -76,4 +76,6 @@ public interface AnalysisProblemCrossDayService extends IService<AnalysisProblem
CrossOptAnalysisVO getCrossOptAnalysis(String crossID, String startTime,String endTime); CrossOptAnalysisVO getCrossOptAnalysis(String crossID, String startTime,String endTime);
void insertAnalysisProblemCrossDay(); void insertAnalysisProblemCrossDay();
public void insertGreenCrossHourData(String startTime, String endTime);
} }
...@@ -13,6 +13,7 @@ import net.wanji.opt.synthesis.pojo.CrossOptAnalysisEntity; ...@@ -13,6 +13,7 @@ import net.wanji.opt.synthesis.pojo.CrossOptAnalysisEntity;
import net.wanji.opt.vo2.CrossOptAnalysisVO; import net.wanji.opt.vo2.CrossOptAnalysisVO;
import net.wanji.opt.vo2.GreenwaveCrossResult; import net.wanji.opt.vo2.GreenwaveCrossResult;
import net.wanji.opt.vo2.GreenwaveCrossResultDTO; import net.wanji.opt.vo2.GreenwaveCrossResultDTO;
import org.apache.ibatis.annotations.Param;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -219,4 +220,12 @@ public class AnalysisProblemCrossDayServiceImpl extends ServiceImpl<AnalysisProb ...@@ -219,4 +220,12 @@ public class AnalysisProblemCrossDayServiceImpl extends ServiceImpl<AnalysisProb
analysisProblemCrossDayMapper.insertAnalysisCrossDayData(greenwaveCrossResultList); analysisProblemCrossDayMapper.insertAnalysisCrossDayData(greenwaveCrossResultList);
} }
@Override
public void insertGreenCrossHourData(String startTime, String endTime) {
analysisProblemCrossDayMapper.insertGreenCrossHourData(startTime,endTime);
}
} }
package net.wanji.opt.task; package net.wanji.opt.task;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisProblemCrossDayService; import net.wanji.opt.servicev2.judgeanalysis.AnalysisProblemCrossDayService;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
...@@ -9,18 +12,21 @@ import org.springframework.stereotype.Component; ...@@ -9,18 +12,21 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
@Component @Component
@Slf4j @Slf4j
public class AnalysisProblemCrossDayTask implements ApplicationRunner { public class AnalysisProblemCrossDayTask implements ApplicationRunner {
@Resource @Resource
private AnalysisProblemCrossDayService analysisProblemCrossDayService; private AnalysisProblemCrossDayService analysisProblemCrossDayService;
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
log.info("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行时间:" + LocalDateTime.now()); log.info("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行时间:" + LocalDateTime.now());
// 干线协调方向频发拥堵/缓行路段 // 干线协调方向频发拥堵/缓行路段
try { try {
// analysisProblemCrossDayService.insertAnalysisProblemCrossDay(); // analysisProblemCrossDayService.insertAnalysisProblemCrossDay();
}catch (Exception e){ } catch (Exception e) {
log.error("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行错误" + e); log.error("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行错误" + e);
} }
log.info("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行结束时间:" + LocalDateTime.now()); log.info("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行结束时间:" + LocalDateTime.now());
...@@ -29,15 +35,61 @@ public class AnalysisProblemCrossDayTask implements ApplicationRunner { ...@@ -29,15 +35,61 @@ public class AnalysisProblemCrossDayTask implements ApplicationRunner {
/** /**
* 每凌晨 0:30 执行的任务 * 每凌晨 0:30 执行的任务
*/ */
@Scheduled(cron = "0 10 0 * * ?") public void executeWeeklyTask() { @Scheduled(cron = "0 10 0 * * ?")
public void executeWeeklyTask() {
//干线协调方向频发拥堵/缓行路段 //干线协调方向频发拥堵/缓行路段
log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行开始时间:" + LocalDateTime.now()); log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行开始时间:" + LocalDateTime.now());
try { try {
analysisProblemCrossDayService.insertAnalysisProblemCrossDay(); analysisProblemCrossDayService.insertAnalysisProblemCrossDay();
}catch (Exception e){ } catch (Exception e) {
log.error("定时任务--干线协调方向频发拥堵/缓行路段--任务执行错误" + e); log.error("定时任务--干线协调方向频发拥堵/缓行路段--任务执行错误" + e);
} }
log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行结束时间:" + LocalDateTime.now()); log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行结束时间:" + LocalDateTime.now());
} }
/**
* 每小时执行溢出
*/
@Scheduled(cron = "5 0 * * * ?")
public void executeGreenCrossHourTask() {
//干线协调方向频发拥堵/缓行路段
log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行开始时间:" + LocalDateTime.now());
try {
DateTime endTDateTime = DateUtil.date();
//开始时间
DateTime startTDateTime = DateUtil.offsetHour(endTDateTime, -1);
String sdt = startTDateTime.toString("yyyy-MM-dd HH:00:00");
//窗口截止时间
endTDateTime =DateUtil.parseDateTime(sdt).offset(DateField.HOUR,1).offset(DateField.SECOND,-1);
String edt = endTDateTime.toString("yyyy-MM-dd HH:mm:ss");
analysisProblemCrossDayService.insertGreenCrossHourData(sdt, edt);
log.info("干线协调方向频发拥堵/缓行路段=》小时粒度数据入库,小时开始时间:{},小时截止时间:{},截止时间:{}", sdt, edt, endTDateTime.toString("yyyy-MM-dd HH:mm:ss"));
} catch (Exception e) {
log.error("定时任务--干线协调方向频发拥堵/缓行路段--任务执行错误" + e);
}
log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行结束时间:" + LocalDateTime.now());
}
public static void main(String[] args) {
DateTime endTDateTime = DateUtil.date();
//开始时间
DateTime startTDateTime = DateUtil.offsetHour(endTDateTime, -1);
String sdt = startTDateTime.toString("yyyy-MM-dd HH:00:00");
//窗口截止时间
DateTime endDateTime = DateUtil.parseDateTime(sdt).offset(DateField.HOUR,1).offset(DateField.SECOND,-1);
String edt = endDateTime.toString("yyyy-MM-dd HH:mm:ss");
System.out.println(sdt+" "+edt);
}
} }
...@@ -434,5 +434,35 @@ ...@@ -434,5 +434,35 @@
where ( b.in_dir = a.dir_type OR b.out_dir = a.dir_type ) where ( b.in_dir = a.dir_type OR b.out_dir = a.dir_type )
</select> </select>
<insert id="insertGreenCrossHourData" parameterType="map">
INSERT INTO t_analysis_green_wave_cross_hour_data (green_id, dir_count, cross_id, status, dir_type, in_dir, out_dir, name, start_time, end_time)
SELECT
b.green_id,
a.dir_count,
a.cross_id,
a.status,
a.dir_type,
b.in_dir,
b.out_dir,
c.name,
#{startTime} as startTime,
#{endTime} as endTime
FROM
(
SELECT count(*) AS dir_count, cross_id, dir_type, status
FROM t_cross_dir_data_hist
WHERE
start_time BETWEEN #{startTime} AND #{endTime}
GROUP BY cross_id, dir_type, status
) a
LEFT JOIN t_greenwave_cross b ON a.cross_id = b.cross_id
LEFT JOIN t_base_cross_info c ON a.cross_id = c.id
where ( b.in_dir = a.dir_type OR b.out_dir = a.dir_type )
ON DUPLICATE KEY UPDATE
dir_count = VALUES(dir_count),
in_dir = VALUES(in_dir),
out_dir = VALUES(out_dir),
name = VALUES(name)
</insert>
</mapper> </mapper>
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
* *
*/ */
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.SignalOptimizeApplication; import net.wanji.opt.SignalOptimizeApplication;
import net.wanji.opt.dao.mapper.judgeanalysis.AnalysisProblemCrossDayMapper; import net.wanji.opt.dao.mapper.judgeanalysis.AnalysisProblemCrossDayMapper;
import org.junit.FixMethodOrder; import org.junit.FixMethodOrder;
...@@ -12,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -12,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
/** /**
* @author fengyi * @author fengyi
* @date * @date
...@@ -19,16 +24,48 @@ import org.springframework.test.context.junit4.SpringRunner; ...@@ -19,16 +24,48 @@ import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = SignalOptimizeApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(classes = SignalOptimizeApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@FixMethodOrder(MethodSorters.NAME_ASCENDING) @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@Slf4j
public class AnalysisProblemDayTaskTest { public class AnalysisProblemDayTaskTest {
@Autowired @Autowired
private AnalysisProblemCrossDayMapper analysisProblemCrossDayMapper; private AnalysisProblemCrossDayMapper analysisProblemCrossDayMapper;
@Test @Test
public void testProducerTrack() { public void testProducerTrack() {
long st = System.currentTimeMillis();
analysisProblemCrossDayMapper.insertAnalysisProblemCrossDay(); DateTime endTDateTime = DateUtil.date();
long et = System.currentTimeMillis();
System.out.println((et-st)+"ms"); //开始时间
DateTime startTDateTime = DateUtil.offsetHour(endTDateTime, -1);
String sdt = startTDateTime.toString("yyyy-MM-dd HH:00:00");
//窗口截止时间
startTDateTime = DateUtil.offsetSecond(startTDateTime, 59);
String edt = startTDateTime.toString("yyyy-MM-dd HH:mm:ss");
System.out.println();
// long st = System.currentTimeMillis();
// DateTime startTDateTime = DateUtil.beginOfDay(new Date());
// DateTime endTDateTime = DateUtil.date(); //DateUtil.offsetHour(startTDateTime,1);
//
// while (startTDateTime.isBefore(endTDateTime)) {
//
// String sdt = startTDateTime.toString("yyyy-MM-dd HH:00:00");
//
// startTDateTime = DateUtil.offsetHour(startTDateTime, 1);
// startTDateTime = DateUtil.offsetSecond(startTDateTime,-1);
//
// String edt = startTDateTime.toString("yyyy-MM-dd HH:mm:ss");
//
// analysisProblemCrossDayMapper.insertGreenCrossHourData(sdt, edt);
//
// startTDateTime = DateUtil.offsetSecond(startTDateTime,1);
// log.info("小时粒度数据入库,小时开始时间:{},小时截止时间:{},截止时间:{}",sdt,edt,endTDateTime.toString("yyyy-MM-dd HH:mm:ss"));
//
// }
//
// long et = System.currentTimeMillis();
// System.out.println((et - st) + "ms");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment