Commit f7baaa67 authored by zhoushiguang's avatar zhoushiguang

事件场景评价接口

parent acb62a59
package net.wanji.opt.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.ResponseHeader;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.po.base.EventStatisticPo;
import net.wanji.opt.service.EvaluateService;
import net.wanji.opt.service.EventService;
import net.wanji.opt.vo.EvaluateCrossDetailVO;
import net.wanji.opt.vo.EvaluateMetricsVO;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
@RestController
@Slf4j
@RequestMapping("/event")
@Api(value="EventController", description="事件相关", tags = "事件相关")
public class EventController {
@Resource
EventService eventService;
@GetMapping("/count")
@ApiOperation(httpMethod="GET",value="事件总次数统计", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "Integer",defaultValue = "13N8J0B5P10"),
@ApiImplicitParam(name = "eventType", value = "事件类型 701:空放 702:失衡 703:溢出", required = false, dataType = "String",defaultValue = "701"),
@ApiImplicitParam(name = "startTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2025-01-05 00:00:00"),
@ApiImplicitParam(name = "endTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2025-01-05 23:59:59"),
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = EventStatisticPo.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject evaluateCrossDetail(String crossId,String eventType,String startTime,String endTime) {
EventStatisticPo result = null;
try {
result = eventService.findCrossEventCount(crossId,eventType,startTime,endTime );
return JsonViewObject.newInstance().success(result);
} catch (DubboProviderException e) {
e.printStackTrace();
return JsonViewObject.newInstance().fail(e);
}
}
@GetMapping("/distribute")
@ApiOperation(httpMethod="GET",value="空放、失衡、溢出事件分布情况", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "Integer",defaultValue = "13N8J0B5P10"),
// @ApiImplicitParam(name = "eventType", value = "事件类型 701:空放 702:失衡 703:溢出", required = false, dataType = "String",defaultValue = "701"),
@ApiImplicitParam(name = "startTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2025-01-05 00:00:00"),
@ApiImplicitParam(name = "endTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2025-01-05 23:59:59"),
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = EventStatisticPo.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject distribute(String crossId,String startTime,String endTime) {
try {
List<Map<String,Object>> result = eventService.findEventDistribute(crossId,startTime,endTime );
return JsonViewObject.newInstance().success(result);
} catch (DubboProviderException e) {
e.printStackTrace();
return JsonViewObject.newInstance().fail(e);
}
}
}
\ No newline at end of file
...@@ -2,11 +2,14 @@ package net.wanji.opt.dao.mapper; ...@@ -2,11 +2,14 @@ package net.wanji.opt.dao.mapper;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.po.base.EventStatisticPo;
import net.wanji.opt.po.trend.EventInfoSimplePo;
import net.wanji.opt.po.trend.HoloEventInfoPO; import net.wanji.opt.po.trend.HoloEventInfoPO;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author duanruiming * @author duanruiming
...@@ -19,5 +22,10 @@ public interface HoloEventMapper extends BaseMapper<HoloEventInfoPO> { ...@@ -19,5 +22,10 @@ public interface HoloEventMapper extends BaseMapper<HoloEventInfoPO> {
Integer selectEmergencyCountWithLaneIds(String crossId, int startStamp, int endStamp, List<String> laneIds); Integer selectEmergencyCountWithLaneIds(String crossId, int startStamp, int endStamp, List<String> laneIds);
List<HoloEventInfoPO> selectAIList(Date startTime); List<HoloEventInfoPO> selectAIList(Date startTime);
List<HoloEventInfoPO> selectAIGreenList(Date startTime); List<HoloEventInfoPO> selectAIGreenList(Date startTime);
EventStatisticPo findCrossEventCount(Map<String,Object> params);
List<EventInfoSimplePo> findEventDistribute(Map<String,Object> params);
} }
package net.wanji.opt.dao.mapper.base;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.opt.po.base.BaseRidInfo;
/**
* <p>
* 路段基础信息
* </p>
*
* @Author fengyi
* @Date 2024-11-14
*/
public interface BaseRidInfoMapper extends BaseMapper<BaseRidInfo> {
}
package net.wanji.opt.po.base;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 路段基础信息
* </p>
*
* @Author fengyi
* @Date 2024-11-14
*/
@Data
@ApiModel(value="BaseRidInfo对象", description="路段基础信息")
@TableName("t_base_rid_info")
public class BaseRidInfo {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "路段名称")
private String name;
@ApiModelProperty(value = "道路编号")
private String roadId;
@ApiModelProperty(value = "道路名称")
private String roadName;
@ApiModelProperty(value = "道路方向编号")
private String roadDirId;
@ApiModelProperty(value = "开始路口编号")
private String startCrossId;
@ApiModelProperty(value = "结束路口编号")
private String endCrossId;
@ApiModelProperty(value = "驶出方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北")
private Integer outDir;
@ApiModelProperty(value = "驶入方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北")
private Integer inDir;
@ApiModelProperty(value = "驶出角度,正北顺时针0~359")
private Double startAngle;
@ApiModelProperty(value = "驶入角度,正北顺时针0~359")
private Double endAngle;
@ApiModelProperty(value = "行驶方向:0上行;1下行")
private Integer direction;
@ApiModelProperty(value = "顺序号:路段在道路方向的顺序号")
private Integer sort;
@ApiModelProperty(value = "路段走向:1 南向北;2 西向东;3 北向南;4 东向西;5 内环;6 外环;99 其他(参见路段走向字典)")
private Integer trend;
@ApiModelProperty(value = "道路等级: 41000 高速公路; 42000 国道; 43000 城市快速路; 44000 城市主干道; 45000 城市次干道; 47000 城市普通道路; 51000 省道; 52000 县道; 53000 乡道; 54000 县乡村内部道路; 49 小路(参见道路等级字典)")
private Integer level;
@ApiModelProperty(value = "行政区划代码,跨区数据会以逗号分开")
private String areaCode;
@ApiModelProperty(value = "路段长度(米)")
private Double length;
@ApiModelProperty(value = "路段宽度(米)")
private Double width;
@ApiModelProperty(value = "是否单行线:0否;1是;99其他")
private Integer isOneway;
@ApiModelProperty(value = "路段类型:1路段;3匝道;4隧道;5桥梁;6高架;99其他")
private Integer type;
@ApiModelProperty(value = "主辅标志:1主路;2辅路;99其他 (参见主辅标志字典)")
private Integer mainFlag;
@ApiModelProperty(value = "空间对象")
private String wkt;
@ApiModelProperty(value = "信控路段编号")
private String scId;
@ApiModelProperty(value = "信控路段名称")
private String scName;
@ApiModelProperty(value = "信控路段序号")
private Integer scSort;
@ApiModelProperty(value = "创建时间")
private Date gmtCreate;
@ApiModelProperty(value = "修改时间")
private Date gmtModified;
}
package net.wanji.opt.po.base;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author fengyi
* @date 2024/12/24
* @description
*/
@Data
public class EventStatisticPo {
@ApiModelProperty(name = "路口编号",notes = "")
private String crossId;
@ApiModelProperty(value = "事件类型", notes = "")
private String eventType;
@ApiModelProperty(value = "事件类型描述", notes = "")
private String eventTypeDesc;
@ApiModelProperty(value = "事件次数", notes = "")
private Integer eventCount;
@ApiModelProperty(value = "时间轴", notes = "")
private String timeAxis;
@ApiModelProperty(value = "事件方向集合", notes = "",hidden = true)
private String dirs;
@ApiModelProperty(value = "每个方向发生的次数", notes = "")
private Map<String,Long> dirEventCount;
@ApiModelProperty(value = "进口道方向",notes = "")
private Map<String,String> dirWkt;
}
package net.wanji.opt.po.trend;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import net.wanji.common.framework.Constants;
import net.wanji.common.utils.tool.DateUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
/**
* @author duanruiming
* @date 2024/05/17 9:45
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_event_info")
@ApiModel(value = "HoloEventInfoPO", description = "交通事件信息")
public class EventInfoSimplePo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "二级类别")
@JsonProperty("eventType")
//@JSONField(name = "eventType")
private String eventType;
@ApiModelProperty(value = "事件发生时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
@ApiModelProperty(value = "事件结束时间")
//@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
@ApiModelProperty(value = "事件持续时长,单位秒")
private Integer duration;
@ApiModelProperty(value = "横轴时间轴", notes = "")
private String timeAxis;
@ApiModelProperty(value = "纵轴日期 格式:(dd/MM)", notes = "")
private String date;
}
\ No newline at end of file
...@@ -73,7 +73,7 @@ public class HoloEventInfoPO implements Serializable { ...@@ -73,7 +73,7 @@ public class HoloEventInfoPO implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime; private Date endTime;
@ApiModelProperty(value = "事件持续时长,单位分钟") @ApiModelProperty(value = "事件持续时长,单位")
private Integer duration; private Integer duration;
@ApiModelProperty(value = "事件来源", notes = "1-系统检测;2-接处警;3-互联网;4-交管部门;5-济南城市大脑;") @ApiModelProperty(value = "事件来源", notes = "1-系统检测;2-接处警;3-互联网;4-交管部门;5-济南城市大脑;")
...@@ -106,4 +106,8 @@ public class HoloEventInfoPO implements Serializable { ...@@ -106,4 +106,8 @@ public class HoloEventInfoPO implements Serializable {
private String extend; private String extend;
@ApiModelProperty(value = "拓展字段") @ApiModelProperty(value = "拓展字段")
private Integer alarmStatus; private Integer alarmStatus;
@ApiModelProperty(value = "时间轴", notes = "")
private String timeAxis;
} }
\ No newline at end of file
package net.wanji.opt.service;
import com.alibaba.fastjson.JSONObject;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.vo.GreenwaveListVO;
import net.wanji.opt.bo.CrossIdAndIsFirstBO;
import net.wanji.opt.bo.CrossIdAndTimeSpanBO;
import net.wanji.opt.bo.GreenwaveDetailBO;
import net.wanji.opt.bo.GreenwaveIdAndTimeStampBO;
import net.wanji.opt.bo.GreenwaveIdBO;
import net.wanji.opt.bo.SaveGreenwaveStrategyBO;
import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO;
import net.wanji.opt.po.base.EventStatisticPo;
import net.wanji.opt.po.trend.AnalysisRidTurnIndicators;
import net.wanji.opt.po.trend.HoloEventInfoPO;
import net.wanji.opt.vo.AbnormalCrossDetailVO;
import net.wanji.opt.vo.AbnormalCrossVO;
import net.wanji.opt.vo.CommonCrossIdDateTimeVO;
import net.wanji.opt.vo.CommonCrossIdVO;
import net.wanji.opt.vo.CountRealTimeVO;
import net.wanji.opt.vo.CrossStatusTimeRateVO;
import net.wanji.opt.vo.EventAlarmVO;
import net.wanji.opt.vo.GreenStatusTimeRateVO;
import net.wanji.opt.vo.GreenWaveCrossMonitorVO;
import net.wanji.opt.vo.GreenwaveCrossMetricsVO;
import net.wanji.opt.vo.GreenwaveDetailVO;
import net.wanji.opt.vo.GreenwaveRunMonitorVO;
import net.wanji.opt.vo.GreenwaveStats;
import net.wanji.opt.vo.HoloEventVO;
import net.wanji.opt.vo.HotspotCrossLaneVO;
import net.wanji.opt.vo.HotspotCrossTurnVO;
import net.wanji.opt.vo.HotspotCrossVO;
import net.wanji.opt.vo.LaneIdAliasNameVO;
import net.wanji.opt.vo.LanePeriodTurnVO;
import net.wanji.opt.vo.LaneSnapshotIndexVO;
import net.wanji.opt.vo.OptTypeVO;
import net.wanji.opt.vo.OverflowEvent;
import net.wanji.opt.vo.TableQueryVO;
import net.wanji.opt.vo.Top5IndexVO;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 事件接口
*/
public interface EventService {
/**
* 查询路口事件统计数
* @param crossId
* @param type
* @param startTime
* @param endTime
* @return
*/
EventStatisticPo findCrossEventCount(String crossId, String type, String startTime, String endTime) throws DubboProviderException;
/**
* 场景分布
* @param crossId
* @param startTime
* @param endTime
* @return
*/
List<Map<String,Object>> findEventDistribute(String crossId, String startTime, String endTime) throws DubboProviderException;
}
package net.wanji.opt.service.base;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.opt.po.base.BaseRidInfo;
/**
* <p>
* 路段基础信息
* </p>
*
* @Author fengyi
* @Date 2024-11-14
*/
public interface BaseRidInfoProvider {
}
package net.wanji.opt.service.base.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.opt.dao.mapper.base.BaseRidInfoMapper;
import net.wanji.opt.po.base.BaseRidInfo;
import net.wanji.opt.service.base.BaseRidInfoProvider;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
/**
* <p>
* 路段基础信息
* </p>
*
* @Author fengyi
* @Date 2024-11-14
*/
@Slf4j
@Component
@Service
public class BaseRidInfoProviderImpl implements BaseRidInfoProvider {
@Resource
private BaseRidInfoMapper baseRidInfoMapper;
}
...@@ -75,8 +75,10 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -75,8 +75,10 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
Date endDate = bo.getEndDate(); Date endDate = bo.getEndDate();
SceneEvaluateAbnormalDistributeVO vo = new SceneEvaluateAbnormalDistributeVO(); SceneEvaluateAbnormalDistributeVO vo = new SceneEvaluateAbnormalDistributeVO();
List<SceneEvaluateAbnormalDistributeVO.TimeDistribution> timeDistributionList = List<SceneEvaluateAbnormalDistributeVO.TimeDistribution> timeDistributionList =
buildTimeDistributionList(crossId, startDate, endDate); buildTimeDistributionList(crossId, startDate, endDate);
vo.setTimeDateDistributionList(buildTimeDateDistributionList(timeDistributionList)); vo.setTimeDateDistributionList(buildTimeDateDistributionList(timeDistributionList));
setCounts(timeDistributionList, vo); setCounts(timeDistributionList, vo);
...@@ -1345,13 +1347,16 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -1345,13 +1347,16 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
partEnd.add(Calendar.DAY_OF_MONTH, 1); partEnd.add(Calendar.DAY_OF_MONTH, 1);
int startStamp = (int)(start.getTimeInMillis() / 1000); int startStamp = (int)(start.getTimeInMillis() / 1000);
int endStamp = (int)(partEnd.getTimeInMillis() / 1000); int endStamp = (int)(partEnd.getTimeInMillis() / 1000);
//按开始、截止时间查询事件列表
List<MetricHistDTO> crossDTOList = crossDataHistMapper.selectMetricHistDTO( List<MetricHistDTO> crossDTOList = crossDataHistMapper.selectMetricHistDTO(
crossId, startStamp, endStamp); crossId, startStamp, endStamp);
// 过滤有问题的记录 // 过滤有问题的记录
List<MetricHistDTO> filteredList = crossDTOList.stream() List<MetricHistDTO> filteredList = crossDTOList.stream()
.filter(metricHistDTO -> metricHistDTO.getStatus() != null && !metricHistDTO.getStatus().equals(0)) .filter(metricHistDTO -> metricHistDTO.getStatus() != null && !metricHistDTO.getStatus().equals(0))
.collect(Collectors.toList()); .collect(Collectors.toList());
timeDistribution.setProblemStatusList(runningEvaluateService.buildProblemStatusList(filteredList)); timeDistribution.setProblemStatusList(runningEvaluateService.buildProblemStatusList(filteredList));
res.add(timeDistribution); res.add(timeDistribution);
} }
return res; return res;
......
...@@ -249,11 +249,12 @@ ...@@ -249,11 +249,12 @@
( (
SELECT start_time, SELECT start_time,
(case (case
when #{groupType}=0 then start_time when #{groupType}=0 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 5 ) * 5 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' ) when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' ) when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' ) when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' )
when #{groupType}=4 then DATE_FORMAT(start_time,'%Y-%m-%d 00:00:00' ) when #{groupType}=4 then DATE_FORMAT(start_time,'%Y-%m-%d 00:00:00' )
else DATE_FORMAT(start_time,'%Y-01-01 00:00:00') <!-- 按查询时间范围不分粒度进行聚合处理 -->
end end
) unit_time, ) unit_time,
t.cross_id, t.cross_id,
...@@ -335,7 +336,7 @@ ...@@ -335,7 +336,7 @@
SUM(TIMESTAMPDIFF(SECOND,start_time, end_time)) duration, SUM(TIMESTAMPDIFF(SECOND,start_time, end_time)) duration,
TIMESTAMPDIFF(SECOND,#{startDate}, #{endDate}) total_time TIMESTAMPDIFF(SECOND,#{startDate}, #{endDate}) total_time
from t_event_info t from t_event_info t
where start_time > #{startDate} and start_time &lt; #{endDate} where start_time >= #{startDate} and start_time &lt; #{endDate}
<if test="eventTypeList!=null and eventTypeList.size>0"> <if test="eventTypeList!=null and eventTypeList.size>0">
and t.type in and t.type in
<foreach collection="eventTypeList" item="item" index="index" open="(" close=")" separator=","> <foreach collection="eventTypeList" item="item" index="index" open="(" close=")" separator=",">
...@@ -398,7 +399,7 @@ ...@@ -398,7 +399,7 @@
left join ( left join (
SELECT cross_id,dir_type,start_time,flow,speed,queue_length,stop_times,delay_time,sturation ,traffic_index, SELECT cross_id,dir_type,start_time,flow,speed,queue_length,stop_times,delay_time,sturation ,traffic_index,
(case (case
when #{groupType}=0 then start_time when #{groupType}=0 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 5 ) * 5 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' ) when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' ) when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' ) when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' )
...@@ -406,7 +407,7 @@ ...@@ -406,7 +407,7 @@
end end
) unit_time ) unit_time
from t_cross_dir_data_hist from t_cross_dir_data_hist
WHERE start_time > #{startDate} and start_time &lt; #{endDate} WHERE start_time >= #{startDate} and start_time &lt; #{endDate}
) t2 ) t2
on t2.cross_id=t1.end_cross_id and t2.dir_type=t1.dir on t2.cross_id=t1.end_cross_id and t2.dir_type=t1.dir
GROUP BY t1.start_cross_id,t1.dir,t2.unit_time GROUP BY t1.start_cross_id,t1.dir,t2.unit_time
...@@ -446,7 +447,7 @@ ...@@ -446,7 +447,7 @@
left join ( left join (
SELECT id as lane_id,cross_id,start_time,flow,speed,queue_length,stop_times,delay_time,sturation , SELECT id as lane_id,cross_id,start_time,flow,speed,queue_length,stop_times,delay_time,sturation ,
(case (case
when #{groupType}=0 then start_time when #{groupType}=0 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 5 ) * 5 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' ) when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' ) when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' ) when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' )
...@@ -454,7 +455,7 @@ ...@@ -454,7 +455,7 @@
end end
) unit_time ) unit_time
from t_lane_data_hist from t_lane_data_hist
WHERE start_time > #{startDate} and start_time &lt; #{endDate} WHERE start_time >= #{startDate} and start_time &lt; #{endDate}
) t2 ) t2
on t2.lane_id=t1.lane_id on t2.lane_id=t1.lane_id
GROUP BY t1.end_cross_id,t1.dir,t1.lane_id,t1.turn,t2.unit_time GROUP BY t1.end_cross_id,t1.dir,t1.lane_id,t1.turn,t2.unit_time
......
...@@ -56,4 +56,35 @@ ...@@ -56,4 +56,35 @@
order by t2.alarm_status desc order by t2.alarm_status desc
</select> </select>
<!-- 空放、失衡、溢出事件分布查询 -->
<select id="findEventDistribute" resultType="net.wanji.opt.po.trend.EventInfoSimplePo">
select cross_id,type as event_type,start_time,end_time,
TIMESTAMPDIFF(SECOND,start_time, ifnull(end_time,now())) duration,
DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 5 ) * 5 ),'%Y-%m-%d %H:%i:00' ) time_axis
from t_event_info
where type in ('701', '702','703')
and cross_id=#{crossId}
and start_time > #{startDate} and start_time &lt; #{endDate}
</select>
<!-- 查看路口事件数量 -->
<select id="findCrossEventCount" resultType="net.wanji.opt.po.base.EventStatisticPo">
select type as event_type,count(*) event_count,group_concat(distinct dir) dirs,b.label as event_type_desc
from t_event_info a left join t_config_event_category b on a.type=b.event_type
where 1=1
<if test="crossId !=null and crossId !=''">
and cross_id = #{crossId}
</if>
<if test="eventType!=null and eventType !=''">
and a.type = #{eventType}
</if>
<if test="startDate!=null and endDate !=''">
and start_time > #{startDate} and start_time &lt; #{endDate}
</if>
GROUP BY type
</select>
</mapper> </mapper>
\ No newline at end of file
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