Commit 5721ad3e authored by zhoushiguang's avatar zhoushiguang

干线路口转向级指标趋势

parent 5a4280cd
package net.wanji.opt.common;
import net.wanji.common.gts.Tools;
import net.wanji.opt.common.enums.TimeGranularityEnum;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Hours;
import org.joda.time.Minutes;
import org.joda.time.Months;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
public class EsDateIndexUtil {
public static final String YMDHM_FORMATTER = "yyyyMMddHHmm";
public static final String YMDHMSFORMATTER = "yyyyMMddHHmmss";
public static final String YMD_HM_FORMATTER = "yyyy-MM-dd HH:mm:00";
public static final String YMD_H_FORMATTER = "yyyyMMddHH";
public static final String YMD_FORMATTER = "yyyyMMdd";
public static final String YM_FORMATTER = "yyyyMM";
public static final String HMS_FORMATTER = "HH:mm:ss";
public static final String HMS_SSS_FORMATTER = "HH:mm:ss SSS";
public static final String HM_FORMATTER = "HH:mm";
public static final String H_FORMATTER = "HH";
private static final String FORMATSTR = "%s_%s";
/**
* 根据开始结束时间获取不同时间粒度的时刻点
*
* @param start 开始时间戳
* @param end 截止时间戳
* @param timeGranularityEnum 时间枚举类型
* @return
*/
public static List<String> getTimeScopeList( DateTime start, DateTime end, TimeGranularityEnum timeGranularityEnum,String dateFormat) {
List<String> indexList = new ArrayList<>();
int diffNum = Minutes.minutesBetween(start, end).getMinutes();
int unitTime = 0;
String DATE_FORMAT = YMD_HM_FORMATTER;
if (Objects.equals(TimeGranularityEnum.FIVE_MINUTE, timeGranularityEnum)) {
unitTime = 5;
}else if (Objects.equals(TimeGranularityEnum.FIFTEEN_MINUTE, timeGranularityEnum)) {
unitTime = 15;
}else if (Objects.equals(TimeGranularityEnum.THIRTY_MINUTE, timeGranularityEnum)) {
unitTime = 30;
}else if (Objects.equals(TimeGranularityEnum.ONE_HOUR, timeGranularityEnum)) {
unitTime = 60;
}
for (int i = 0; i <= diffNum; i=i+unitTime) {
String format = start.plusMinutes(i).toString(dateFormat);
indexList.add(format);
}
return indexList;
}
/**
* 根据开始结束时间匹配对应索引
*
* @param indexName 索引前缀
* @param startTime 开始时间戳
* @param endTime 截止时间戳
* @param timeType 1:分钟 2:小时 3:天 4:月
* @return
*/
public static String[] getIndexByTime(String indexName, long startTime, long endTime, String timeType) {
List<String> indexList = new ArrayList<>();
DateTime start = new DateTime(startTime);
DateTime end = new DateTime(endTime);
int diffNum = 0;
//push单位秒
int unitTime = 0;
String DATE_FORMAT = null;
if (Objects.equals("1", timeType)) {
DATE_FORMAT = YMDHM_FORMATTER;
diffNum = Minutes.minutesBetween(start, end).getMinutes();
unitTime = 60;
} else if (Objects.equals("2", timeType)) {
DATE_FORMAT = YMD_H_FORMATTER;
diffNum = Hours.hoursBetween(start, end).getHours();
unitTime = 60 * 60;
} else if (Objects.equals("3", timeType)) {
DATE_FORMAT = YMD_FORMATTER;
diffNum = Days.daysBetween(start, end).getDays();
unitTime = 24 * 60 * 60;
} else if (Objects.equals("4", timeType)) {
DATE_FORMAT = YM_FORMATTER;
diffNum = Months.monthsBetween(start, end).getMonths();
unitTime = 30 * 24 * 60 * 60;
}
for (int i = 0; i <= diffNum; i++) {
String format = String.format(FORMATSTR, indexName, start.plusSeconds(i * unitTime).toString(DATE_FORMAT));
indexList.add(format);
}
return indexList.toArray(new String[0]);
}
/**
* 根据开始结束时间匹配 文件完整路径
*
* @param fileDirectory 文件目录
* @param startTime 开始时间戳
* @param endTime 截止时间戳
* @param timeType 1:分钟 2:小时 3:天 4:月 5;10分钟
* @return
*/
public static String[] getFileListByTime(String fileDirectory, String filePrefix,long startTime, long endTime, String timeType) {
Set<String> indexList = new TreeSet<>();
///data/track_partitions/dt=2023-08-09/ht=11/mt=00
DateTime start = new DateTime(startTime);
DateTime end = new DateTime(endTime);
while (start.isBefore(end)){
String dt = start.toString("yyyy-MM-dd");
dt = "dt="+dt;
int hour = start.getHourOfDay();
String ht = Tools.fillZeroFront(hour+"",2);
ht = "ht="+ht;
int minute = start.getMinuteOfHour();
int index = minute/10*10;
String mt = Tools.fillZeroFront(index+"",2);
mt = "mt="+mt;
String directory = fileDirectory +"/"+dt+"/"+ht+"/"+mt;
if (!new File(directory).exists()){
start = start.plusMinutes(1);
continue;
}
IOFileFilter ioFileFilter = FileFilterUtils.prefixFileFilter(filePrefix);
List<File> fileList = FileUtils.listFiles(new File(directory),ioFileFilter,null).stream().collect(Collectors.toList());
String fileName = null;
for (File dataFile : fileList) {
fileName = dataFile.getName();
String filePath = directory +"/"+fileName;
if(!indexList.contains(filePath)) {
indexList.add(filePath);
}
}
start = start.plusMinutes(1);
// System.out.println("start:"+start.toString(DateUtil.DATE_FORMAT));
}
// System.out.println("end:"+start.toString(DateUtil.DATE_FORMAT));
// System.out.println(indexList.toString());
// indexList = indexList.stream().sorted().collect(Collectors.toSet());
return indexList.toArray(new String[0]);
}
/**
* 获取当前时间实时索引
*
* @param indexName
* @return
*/
// public static String[] getIndexByNow(String indexName) {
// long start = DateTime.now().plusMonths(-1).withTimeAtStartOfDay().getMillis();
// long end = DateTime.now().getMillis();
// return getIndexByTime(indexName, start, end);
// }
//
// public static String[] getIndexBySingle(String indexName, long time) {
// long start = new DateTime(time).plusMonths(-1).withTimeAtStartOfDay().getMillis();
// return getIndexByTime(indexName, start, time);
// }
public static String getInsertIndex(String indexName) {
return String.format("%s_%s", indexName, DateTime.now().toString(YM_FORMATTER));
}
public static List<String> getTimeList(String formatter, long interval, long startTime, long endTime) {
List<String> timeList = new ArrayList<>();
for (long i = startTime; i < endTime; i += interval) {
timeList.add(new DateTime(i).toString(formatter));
}
return timeList;
}
public static List<String> getMinutesStr() {
List<String> timeStr = new ArrayList<>();
for (int i = 0; i < 24; i++) {
String h;
if (i < 10) {
h = "0" + i;
} else {
h = i + "";
}
for (int j = 0; j < 60; j++) {
String m;
if (j < 10) {
m = "0" + j;
} else {
m = j + "";
}
timeStr.add(h + ":" + m);
}
}
return timeStr;
}
public static void main(String[] args) {
DateTime start = DateTime.now().withTimeAtStartOfDay();
DateTime end = DateTime.now();
List<String> indexByTime = EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.ONE_HOUR,"HH:mm");
System.out.println(indexByTime);
}
}
package net.wanji.opt.common.enums;
/**
* 时间粒度
*/
public enum TimeGranularityEnum {
FIVE_MINUTE("5m","5分钟",5,"5 MINUTE"),
TEN_MINUTE("10m","10分钟",10,"10 MINUTE"),
FIFTEEN_MINUTE("15m","15分钟",15,"15 MINUTE"),
THIRTY_MINUTE("30m","30分钟",30,"30 MINUTE"),
ONE_HOUR("1h","1小时",60,"60 MINUTE"),
ONE_DAY("1d","1天",60,24*60+" MINUTE")
;
private String type;
private String desc;
private Integer minites;
private String enDesc;
TimeGranularityEnum(String type, String desc, int minites, String enDesc) {
this.type = type;
this.desc = desc;
this.minites = minites;
this.enDesc = enDesc;
}
public static TimeGranularityEnum getEnumByType(String type){
for (TimeGranularityEnum timeGranularityEnum : TimeGranularityEnum.values()) {
if(timeGranularityEnum.getType().equals(type)){
return timeGranularityEnum;
}
}
return null;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public Integer getMinites() {
return minites;
}
public String getEnDesc() {
return enDesc;
}
public void setEnDesc(String enDesc) {
this.enDesc = enDesc;
}
}
...@@ -181,6 +181,32 @@ public class GreenwaveHistRestServer { ...@@ -181,6 +181,32 @@ public class GreenwaveHistRestServer {
return jsonView; return jsonView;
} }
@GetMapping("/findGreenWaveCrossTurnIndex")
@ApiOperation(httpMethod="GET",value="绿波路口转向级->分粒度指标趋势", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "String",defaultValue = "13MOD0B5SI0"),
@ApiImplicitParam(name = "groupType", value = "时间粒度类型 0:5分钟粒度 1:15分钟粒度 2:30分钟粒度 3:小时粒度", required = true, dataType = "Integer",defaultValue = "1"),
@ApiImplicitParam(name = "startTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-04 00:00:00"),
@ApiImplicitParam(name = "endTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-05 00:00:00")
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = GreenwaveHist.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject findGreenWaveCrossTurnIndex(String crossId, String startTime, String endTime,String groupType) {
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
JSONObject list = greenwaveHistProvider.findGreenWaveCrossTurnIndex(crossId,startTime,endTime,groupType);
jsonView.success(list);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
@GetMapping("/findGreenWaveCrossIndex") @GetMapping("/findGreenWaveCrossIndex")
@ApiOperation(httpMethod="GET",value="绿波路口级->分粒度指标趋势", notes="") @ApiOperation(httpMethod="GET",value="绿波路口级->分粒度指标趋势", notes="")
......
...@@ -4,6 +4,7 @@ package net.wanji.opt.dao.mapper; ...@@ -4,6 +4,7 @@ package net.wanji.opt.dao.mapper;
import net.wanji.common.framework.mapper.BaseInterfaceMapper; import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.databus.po.CrossDataHistPO; import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDirDataHistPO; import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossTurnDataHistPO;
import net.wanji.opt.entity.GreenwaveHist; import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.vo.GreenWaveRunStateVO; import net.wanji.opt.vo.GreenWaveRunStateVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -62,5 +63,12 @@ public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHis ...@@ -62,5 +63,12 @@ public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHis
*/ */
List<GreenWaveRunStateVO> findGreenWaveRunState(Map<String,Object> params); List<GreenWaveRunStateVO> findGreenWaveRunState(Map<String,Object> params);
/**
* 路口转向指标趋势数据据
* @param params
* @return
*/
List<CrossTurnDataHistPO> findGreenWaveCrossTurnIndex(Map<String,Object> params);
} }
...@@ -79,4 +79,16 @@ public interface GreenwaveHistProvider extends BaseDubboInterface<GreenwaveHist> ...@@ -79,4 +79,16 @@ public interface GreenwaveHistProvider extends BaseDubboInterface<GreenwaveHist>
* @return * @return
*/ */
List<GreenWaveRunStateVO> findGreenWaveRunState(Integer greenId,String crossId, String startTime, String endTime,String eventType) throws DubboProviderException; List<GreenWaveRunStateVO> findGreenWaveRunState(Integer greenId,String crossId, String startTime, String endTime,String eventType) throws DubboProviderException;
/**
* 路口转向级不同时间粒度指标分析
* @param crossId
* @param startTime
* @param endTime
* @param groupType
* @return
* @throws DubboProviderException
*/
JSONObject findGreenWaveCrossTurnIndex(String crossId, String startTime, String endTime, String groupType) throws DubboProviderException;
} }
...@@ -3,6 +3,8 @@ package net.wanji.opt.service.impl; ...@@ -3,6 +3,8 @@ package net.wanji.opt.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.BaseEnum;
import net.wanji.common.enums.TurnConvertEnum;
import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl; import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl;
import net.wanji.common.framework.exception.DubboProviderException; import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.mapper.BaseInterfaceMapper; import net.wanji.common.framework.mapper.BaseInterfaceMapper;
...@@ -10,6 +12,10 @@ import net.wanji.common.gts.Tools; ...@@ -10,6 +12,10 @@ import net.wanji.common.gts.Tools;
import net.wanji.common.utils.tool.DateUtil; import net.wanji.common.utils.tool.DateUtil;
import net.wanji.databus.po.CrossDataHistPO; import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDirDataHistPO; import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossTurnDataHistPO;
import net.wanji.databus.po.CrossTurnInfoPO;
import net.wanji.opt.common.EsDateIndexUtil;
import net.wanji.opt.common.enums.TimeGranularityEnum;
import net.wanji.opt.dao.mapper.GreenwaveHistoryMapper; import net.wanji.opt.dao.mapper.GreenwaveHistoryMapper;
import net.wanji.opt.entity.GreenwaveHist; import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.service.GreenwaveHistProvider; import net.wanji.opt.service.GreenwaveHistProvider;
...@@ -26,7 +32,9 @@ import javax.annotation.Resource; ...@@ -26,7 +32,9 @@ import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
...@@ -256,7 +264,7 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH ...@@ -256,7 +264,7 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
} }
@Override @Override
public List<GreenWaveRunStateVO> findGreenWaveRunState(Integer greenId,String crossId, String startTime, String endTime,String eventType) { public List<GreenWaveRunStateVO> findGreenWaveRunState(Integer greenId, String crossId, String startTime, String endTime, String eventType) {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("greenId", greenId); params.put("greenId", greenId);
params.put("startDate", startTime); params.put("startDate", startTime);
...@@ -268,11 +276,10 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH ...@@ -268,11 +276,10 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
params.put("eventTypeList", Arrays.asList(arr)); params.put("eventTypeList", Arrays.asList(arr));
} }
int[] stateList = new int[]{705,706}; int[] stateList = new int[]{705, 706};
List<GreenWaveRunStateVO> list = greenwaveHistoryMapper.findGreenWaveRunState(params); List<GreenWaveRunStateVO> list = greenwaveHistoryMapper.findGreenWaveRunState(params);
Map<Integer,GreenWaveRunStateVO> groupList = list.stream().collect(Collectors.toMap(o -> o.getState(), o -> o)); Map<Integer, GreenWaveRunStateVO> groupList = list.stream().collect(Collectors.toMap(o -> o.getState(), o -> o));
DateTime startDateTime = DateTime.parse(startTime, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")); DateTime startDateTime = DateTime.parse(startTime, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
...@@ -286,26 +293,103 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH ...@@ -286,26 +293,103 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
list.add(tmp); list.add(tmp);
} }
} }
int totalTime = Seconds.secondsBetween(startDateTime,endDateTime).getSeconds(); int totalTime = Seconds.secondsBetween(startDateTime, endDateTime).getSeconds();
for (GreenWaveRunStateVO vo : list ) { for (GreenWaveRunStateVO vo : list) {
// if (vo.getDuration()<=0) { // if (vo.getDuration()<=0) {
// vo.setDuration(getRandomValue(totalTime / 10, 120)); // vo.setDuration(getRandomValue(totalTime / 10, 120));
// } // }
vo.setTotalTime(totalTime); vo.setTotalTime(totalTime);
} }
return list; return list;
}
@Override
public JSONObject findGreenWaveCrossTurnIndex(String crossId, String startTime, String endTime, String groupType) throws DubboProviderException {
Map<String, Object> params = new HashMap<>();
params.put("crossId", crossId);
params.put("startDate", startTime);
params.put("endDate", endTime);
params.put("groupType", groupType);
List<CrossTurnDataHistPO> list = greenwaveHistoryMapper.findGreenWaveCrossTurnIndex(params);
list = list.stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
//存放时段
Set<String> sortedSet = new TreeSet<>();
//===========================根据开始、结束时间输出完整时刻点=================================================//
DateTime start = DateTime.parse(startTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
DateTime end = DateTime.parse(endTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
if (Objects.equals("0", groupType)) {
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.FIVE_MINUTE,EsDateIndexUtil.YMD_HM_FORMATTER));
} else if (Objects.equals("1", groupType)) {
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.FIFTEEN_MINUTE,EsDateIndexUtil.YMD_HM_FORMATTER));
} else if (Objects.equals("2", groupType)) {
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.THIRTY_MINUTE,EsDateIndexUtil.YMD_HM_FORMATTER));
} else if (Objects.equals("3", groupType)) {
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.ONE_HOUR,EsDateIndexUtil.YMD_HM_FORMATTER));
}
//======================================================================================================//
//存放所有进口数据
List<Map<String, Object>> allList = new ArrayList<>();
//按时间分组分组
Map<String, List<CrossTurnDataHistPO>> groupByDir = list.stream().collect(Collectors.groupingBy(o -> o.getInDir() + "_" + o.getTurnType(), TreeMap::new, Collectors.toList()));
List<Map<String, Object>> turnList = new ArrayList<>();
for (Map.Entry<String, List<CrossTurnDataHistPO>> entry : groupByDir.entrySet()) {
String key = entry.getKey();
String[] sps = key.split("_");
Integer dirType = Integer.parseInt(sps[0]);
String dirName = BaseEnum.SignalDirectionEnum.getNameByCode(dirType);
String turnDesc = TurnConvertEnum.getDescByKey(Integer.valueOf(sps[1]));
String dirTurnDesc = dirName + "进口" + turnDesc;
//按方向排序
List<CrossTurnDataHistPO> value = entry.getValue().stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
//有实际数据的时刻点
Set<String> timeList = value.stream().map(po->DateUtil.formatDate(po.getStartTime(), "HH:mm")).collect(Collectors.toSet());
//补充缺少时段数据,保留时段字段默认值
for (String timeSec : sortedSet) {
if (!timeList.contains(timeSec)) {
CrossTurnDataHistPO tmp = new CrossTurnDataHistPO();
tmp.setStartTime(DateTime.parse(timeSec,DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER)).toDate());
value.add(tmp);
}
}
value = value.stream().sorted(Comparator.comparing(CrossTurnDataHistPO::getStartTime)).collect(Collectors.toList());
// sortedSet.clear();
// value.forEach(o->sortedSet.add(DateUtil.formatDate(o.getStartTime(),"HH:mm")));
Map<String, Object> mapList = new HashMap<>();
mapList.put("dirTurnCode", key);
mapList.put("dirTurnDesc", dirTurnDesc);
mapList.put("list", value);
allList.add(mapList);
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("timeList", sortedSet.stream().map(o->o.substring(o.indexOf(" ")+1,o.lastIndexOf(":"))));
jsonObject.put("dataList", allList);
jsonObject.put("dirList", groupByDir.keySet());
return jsonObject;
} }
/** /**
* 获取随机数 * 获取随机数
*
* @param max * @param max
* @param min * @param min
* @return * @return
*/ */
public static int getRandomValue(int max,int min){ public static int getRandomValue(int max, int min) {
Random random = new Random(); Random random = new Random();
int num =random.nextInt(max+1-min)+min; int num = random.nextInt(max + 1 - min) + min;
return num; return num;
} }
......
...@@ -94,13 +94,13 @@ ...@@ -94,13 +94,13 @@
GROUP BY t.cross_id, DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00') GROUP BY t.cross_id, DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00')
; ;
</select> </select>
<!-- 绿波路口方向级指标趋势,支持按15分钟粒度、30分钟粒度、1小时粒度汇聚 --> <!-- 绿波路口方向级指标趋势,支持按5分钟粒度、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select id="findGreenWaveCrossDirIndex" <select id="findGreenWaveCrossDirIndex"
resultMap="net.wanji.databus.dao.mapper.CrossDirDataHistMapper.BaseResultMap"> resultMap="net.wanji.databus.dao.mapper.CrossDirDataHistMapper.BaseResultMap">
SELECT MIN(start_time) start_time, SELECT MIN(start_time) start_time,
cross_id, cross_id,
dir_type, dir_type,
round(AVG(traffic_index),2), round(AVG(traffic_index),2) traffic_index,
SUM(flow) flow, SUM(flow) flow,
round(AVG(speed),2) speed, round(AVG(speed),2) speed,
MAX(queue_length) queue_length, MAX(queue_length) queue_length,
...@@ -138,8 +138,54 @@ ...@@ -138,8 +138,54 @@
GROUP BY t.cross_id,t.dir_type,unit_time GROUP BY t.cross_id,t.dir_type,unit_time
</select> </select>
<!-- 绿波路口方向级指标趋势,支持按5分钟粒度、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select id="findGreenWaveCrossTurnIndex"
resultMap="net.wanji.databus.dao.mapper.CrossTurnDataHistMapper.BaseResultMap">
SELECT MIN(start_time) start_time,
cross_id,
in_dir,
turn_type,
round(AVG(traffic_index),2) traffic_index,
SUM(flow) flow,
round(AVG(speed),2) speed,
MAX(queue_length) queue_length,
round(AVG(stop_times),2) stop_times,
round(AVG(delay_time),2) delay_time,
round(AVG(sturation),4) sturation
FROM
(
SELECT start_time,
(case
when #{groupType}=0 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)))
when #{groupType}=1 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)) / 900)
when #{groupType}=2 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)) / 1800)
when #{groupType}=3 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)) / 3600)
end
) unit_time,
cross_id,
in_dir,
turn_type,
traffic_index,
flow,
speed,
queue_length,
stop_times,
delay_time,
sturation
FROM t_cross_turn_data_hist t
where 1=1
<if test="crossId!=null and crossId !=''">
and cross_id = #{crossId}
</if>
<if test="startDate !=null and endDate !=null">
AND start_time >= #{startDate} and start_time &lt; #{endDate}
</if>
) t
GROUP BY t.cross_id,t.in_dir,t.turn_type,unit_time
</select>
<!-- 绿波路口级指标趋势,支持按15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<!-- 绿波路口级指标趋势,支持按5分钟、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select id="findGreenWaveCrossIndex" resultMap="net.wanji.databus.dao.mapper.CrossDataHistMapper.BaseResultMap"> <select id="findGreenWaveCrossIndex" resultMap="net.wanji.databus.dao.mapper.CrossDataHistMapper.BaseResultMap">
SELECT MIN(start_time) start_time, SELECT MIN(start_time) start_time,
cross_id, cross_id,
...@@ -178,6 +224,7 @@ ...@@ -178,6 +224,7 @@
) t ) t
GROUP BY t.cross_id,unit_time GROUP BY t.cross_id,unit_time
</select> </select>
<!-- 查看干线拥堵运行状态 --> <!-- 查看干线拥堵运行状态 -->
<select id="findGreenWaveRunState" resultType="net.wanji.opt.vo.GreenWaveRunStateVO"> <select id="findGreenWaveRunState" resultType="net.wanji.opt.vo.GreenWaveRunStateVO">
select type as state,count(*) count, select type as state,count(*) count,
......
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