Commit 75173da9 authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 72bc7534 f67f4c22
...@@ -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");
} }
......
...@@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Objects;
/** /**
* @author duanruiming * @author duanruiming
...@@ -32,7 +33,7 @@ public class CommonUtils { ...@@ -32,7 +33,7 @@ public class CommonUtils {
*/ */
public static String getEventHappenDirName(String dir) { public static String getEventHappenDirName(String dir) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
if (StringUtils.isNotEmpty(dir)) { if (StringUtils.isNotEmpty(dir) && !Objects.equals("null",dir)) {
JSONArray dirArr = JSONArray.parseArray(dir); JSONArray dirArr = JSONArray.parseArray(dir);
for (int i = 0; i < dirArr.size(); i++) { for (int i = 0; i < dirArr.size(); i++) {
String dirName = DirEnum.getName(dirArr.getString(i)); String dirName = DirEnum.getName(dirArr.getString(i));
......
...@@ -42,4 +42,7 @@ public class TEventOptimizeInfoVO { ...@@ -42,4 +42,7 @@ public class TEventOptimizeInfoVO {
@ApiModelProperty(value = "时间数量") @ApiModelProperty(value = "时间数量")
private Integer eventNumber; private Integer eventNumber;
@ApiModelProperty(value = "增加事件方向")
private String dirName;
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.wanji.databus.po.EventOptimizeCountPo; import net.wanji.databus.po.EventOptimizeCountPo;
import net.wanji.opt.common.CommonUtils;
import net.wanji.opt.common.EsDateIndexUtil; import net.wanji.opt.common.EsDateIndexUtil;
import net.wanji.opt.dao.mapper.eventoptimize.TEventOptimizeInfoMapper; import net.wanji.opt.dao.mapper.eventoptimize.TEventOptimizeInfoMapper;
import net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo; import net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo;
...@@ -70,6 +71,7 @@ public class TEventOptimizeInfoServiceImpl extends ServiceImpl<TEventOptimizeInf ...@@ -70,6 +71,7 @@ public class TEventOptimizeInfoServiceImpl extends ServiceImpl<TEventOptimizeInf
TEventOptimizeInfoVO tEventOptimizeInfoVO = new TEventOptimizeInfoVO(); TEventOptimizeInfoVO tEventOptimizeInfoVO = new TEventOptimizeInfoVO();
BeanUtils.copyProperties(x, tEventOptimizeInfoVO); BeanUtils.copyProperties(x, tEventOptimizeInfoVO);
tEventOptimizeInfoVO.setEventLabal(getEventLabel1(x.getEventType())); tEventOptimizeInfoVO.setEventLabal(getEventLabel1(x.getEventType()));
tEventOptimizeInfoVO.setDirName(CommonUtils.getEventHappenDirName(x.getDir()));
tEventOptimizeInfoVO.setOptStatus(1); tEventOptimizeInfoVO.setOptStatus(1);
return tEventOptimizeInfoVO; return tEventOptimizeInfoVO;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
......
...@@ -39,13 +39,15 @@ ...@@ -39,13 +39,15 @@
<!-- 用于方案信号评价-路口优化记录查询(包含当日数据) --> <!-- 用于方案信号评价-路口优化记录查询(包含当日数据) -->
<select id="selectCrossOptimize" parameterType="map" resultType="net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo"> <select id="selectCrossOptimize" parameterType="map" resultType="net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo">
SELECT SELECT
cross_id, a.cross_id,
current_algo AS event_type, a.current_algo AS event_type,
issue_time AS opt_start_time, a.issue_time AS opt_start_time,
duration AS opt_duration, a.duration AS opt_duration,
DATE_ADD( issue_time, INTERVAL duration SECOND ) AS opt_end_time DATE_ADD( issue_time, INTERVAL a.duration SECOND ) AS opt_end_time,
(case when current_algo=1 then concat('[',empty_dir,']') else b.dir end) dir
FROM FROM
t_strategy_cross_result t_strategy_cross_result a
left join t_event_info b on a.event_id=b.event_serial_number
WHERE WHERE
1=1 1=1
<if test="startTime != null and endTime != null"> <if test="startTime != null and endTime != null">
...@@ -53,7 +55,7 @@ ...@@ -53,7 +55,7 @@
AND issue_time &lt; #{endTime} AND issue_time &lt; #{endTime}
</if> </if>
<if test="crossId != null" > <if test="crossId != null" >
AND cross_id = #{crossId} AND a.cross_id = #{crossId}
</if> </if>
AND response_code = 200 AND response_code = 200
</select> </select>
......
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