Commit b46c1dce authored by hanbing's avatar hanbing

信控优化-时间告警

parent b96c1be1
...@@ -6,6 +6,8 @@ import cn.hutool.core.date.DateUtil; ...@@ -6,6 +6,8 @@ import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.wanji.common.enums.EventAlarmEnum;
import net.wanji.common.enums.EventAlarmSourceEnum;
import net.wanji.common.utils.tool.BeanListUtils; import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.common.utils.tool.BeanMapUtils; import net.wanji.common.utils.tool.BeanMapUtils;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
......
...@@ -7,10 +7,12 @@ import io.swagger.annotations.ApiResponses; ...@@ -7,10 +7,12 @@ import io.swagger.annotations.ApiResponses;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.trend.AbnormalCrossListDTO; import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.EventAlarmDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO; import net.wanji.opt.dto.trend.GreenwaveListDTO;
import net.wanji.opt.service.impl.TrendServiceImpl; import net.wanji.opt.service.impl.TrendServiceImpl;
import net.wanji.opt.vo.AbnormalCrossDetailVO; import net.wanji.opt.vo.AbnormalCrossDetailVO;
import net.wanji.opt.vo.AbnormalCrossVO; import net.wanji.opt.vo.AbnormalCrossVO;
import net.wanji.opt.vo.EventAlarmVO;
import net.wanji.opt.vo.GreenwaveListVO; import net.wanji.opt.vo.GreenwaveListVO;
import net.wanji.opt.vo.GreenwaveStats; import net.wanji.opt.vo.GreenwaveStats;
import net.wanji.opt.vo.GreenwaveVO; import net.wanji.opt.vo.GreenwaveVO;
...@@ -20,6 +22,9 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -20,6 +22,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -33,6 +38,8 @@ import java.util.List; ...@@ -33,6 +38,8 @@ import java.util.List;
public class TrendController { public class TrendController {
private final TrendServiceImpl trendService; private final TrendServiceImpl trendService;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public TrendController(TrendServiceImpl trendService) { public TrendController(TrendServiceImpl trendService) {
this.trendService = trendService; this.trendService = trendService;
} }
...@@ -85,4 +92,17 @@ public class TrendController { ...@@ -85,4 +92,17 @@ public class TrendController {
return jsonViewObject.success(abnormalCrossDetailVO); return jsonViewObject.success(abnormalCrossDetailVO);
} }
@ApiOperation(value = "事件告警", notes = "事件告警", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/eventAlarm",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject eventAlarm(@RequestBody EventAlarmDTO eventAlarmDTO) throws ParseException {
String currentTimeStr = eventAlarmDTO.getCurrentTime();
Date todayTime = sdf.parse(currentTimeStr);
List<EventAlarmVO> eventAlarmVOList = trendService.eventAlarm(todayTime);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(eventAlarmVOList);
}
} }
\ No newline at end of file
package net.wanji.opt.dao.mapper.trend;
import net.wanji.opt.po.trend.EventAlarmPO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@Repository
public interface EventAlarmMapper {
List<EventAlarmPO> selectByTodayTime(@Param("todayTime") Date todayTime);
}
\ No newline at end of file
package net.wanji.opt.dto.trend;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "EventAlarmDTO", description = "查询事件报警输入参数")
public class EventAlarmDTO {
@ApiModelProperty(value = "当天时间,格式:yyyy-MM-dd HH:mm:ss,如:2022-10-27 17:21:23")
String currentTime;
}
package net.wanji.opt.po.trend;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.annotation.Id;
import java.util.Date;
@Data
public class EventAlarmPO {
/** 主键 */
@Id
@ApiModelProperty(name = "主键",notes = "")
private Integer id;
/** 事件ID */
@ApiModelProperty(name = "事件ID",notes = "")
private String eventId;
/** 事件描述 */
@ApiModelProperty(name = "事件描述",notes = "")
private String eventDesc;
/** 事件类型:1事故;2拥堵;3管制;4施工 */
@ApiModelProperty(name = "事件类型:1事故;2拥堵;3管制;4施工",notes = "")
private Integer type;
/** 开始时间 */
@ApiModelProperty(name = "开始时间",notes = "")
private Date startTime;
/** 结束时间 */
@ApiModelProperty(name = "结束时间",notes = "")
private Date endTime;
/** 事件来源:1接处警;2交管部门;3互联网 */
@ApiModelProperty(name = "事件来源:1接处警;2交管部门;3互联网",notes = "")
private Integer source;
/** 事件坐标:精度;维度;精度,维度... */
@ApiModelProperty(name = "事件坐标:精度",notes = "维度;精度,维度...")
private String wkt;
/** 图片链接 */
@ApiModelProperty(name = "图片链接",notes = "")
private String imageUrl;
/** 创建时间 */
@ApiModelProperty(name = "创建时间",notes = "")
private Date gmtCreate;
/** 修改时间 */
@ApiModelProperty(name = "修改时间",notes = "")
private Date gmtModified;
}
...@@ -5,9 +5,12 @@ import net.wanji.opt.dto.trend.AbnormalCrossListDTO; ...@@ -5,9 +5,12 @@ import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO; import net.wanji.opt.dto.trend.GreenwaveListDTO;
import net.wanji.opt.vo.AbnormalCrossDetailVO; import net.wanji.opt.vo.AbnormalCrossDetailVO;
import net.wanji.opt.vo.AbnormalCrossVO; import net.wanji.opt.vo.AbnormalCrossVO;
import net.wanji.opt.vo.EventAlarmVO;
import net.wanji.opt.vo.GreenwaveListVO; import net.wanji.opt.vo.GreenwaveListVO;
import net.wanji.opt.vo.GreenwaveStats; import net.wanji.opt.vo.GreenwaveStats;
import java.text.ParseException;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -23,4 +26,6 @@ public interface TrendService { ...@@ -23,4 +26,6 @@ public interface TrendService {
AbnormalCrossVO abnormalCrossList(AbnormalCrossListDTO abnormalCrossListDTO); AbnormalCrossVO abnormalCrossList(AbnormalCrossListDTO abnormalCrossListDTO);
AbnormalCrossDetailVO abnormalCrossDetail(CrossIdDTO crossIdDTO); AbnormalCrossDetailVO abnormalCrossDetail(CrossIdDTO crossIdDTO);
List<EventAlarmVO> eventAlarm(Date todayTime) throws ParseException;
} }
...@@ -4,11 +4,14 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -4,11 +4,14 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.enums.EventAlarmEnum;
import net.wanji.common.enums.EventAlarmSourceEnum;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.opt.dao.mapper.CrossInfoMapper; import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper; import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper;
import net.wanji.opt.dao.mapper.trend.CrossDirDataHistMapper; import net.wanji.opt.dao.mapper.trend.CrossDirDataHistMapper;
import net.wanji.opt.dao.mapper.trend.CrossTurnDataRealtimeMapper; import net.wanji.opt.dao.mapper.trend.CrossTurnDataRealtimeMapper;
import net.wanji.opt.dao.mapper.trend.EventAlarmMapper;
import net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper; import net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper;
import net.wanji.opt.dto.trend.AbnormalCrossListDTO; import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO; import net.wanji.opt.dto.trend.GreenwaveListDTO;
...@@ -16,15 +19,19 @@ import net.wanji.opt.po.base.CrossInfoPO; ...@@ -16,15 +19,19 @@ import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.trend.CrossDataRealtimePO; import net.wanji.opt.po.trend.CrossDataRealtimePO;
import net.wanji.opt.po.trend.CrossDirDataHistPO; import net.wanji.opt.po.trend.CrossDirDataHistPO;
import net.wanji.opt.po.trend.CrossTurnDataRealtimePO; import net.wanji.opt.po.trend.CrossTurnDataRealtimePO;
import net.wanji.opt.po.trend.EventAlarmPO;
import net.wanji.opt.service.TrendService; import net.wanji.opt.service.TrendService;
import net.wanji.opt.vo.AbnormalCrossDetailVO; import net.wanji.opt.vo.AbnormalCrossDetailVO;
import net.wanji.opt.vo.AbnormalCrossListVO; import net.wanji.opt.vo.AbnormalCrossListVO;
import net.wanji.opt.vo.AbnormalCrossStats; import net.wanji.opt.vo.AbnormalCrossStats;
import net.wanji.opt.vo.AbnormalCrossVO; import net.wanji.opt.vo.AbnormalCrossVO;
import net.wanji.opt.vo.EventAlarmVO;
import net.wanji.opt.vo.GreenwaveListVO; import net.wanji.opt.vo.GreenwaveListVO;
import net.wanji.opt.vo.GreenwaveStats; import net.wanji.opt.vo.GreenwaveStats;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -42,13 +49,18 @@ public class TrendServiceImpl implements TrendService { ...@@ -42,13 +49,18 @@ public class TrendServiceImpl implements TrendService {
private final CrossDataRealtimeMapper crossDataRealtimeMapper; private final CrossDataRealtimeMapper crossDataRealtimeMapper;
private final CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper; private final CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper;
private final CrossDirDataHistMapper crossDirDataHistMapper; private final CrossDirDataHistMapper crossDirDataHistMapper;
private final EventAlarmMapper eventAlarmMapper;
public TrendServiceImpl(GreenwaveInfoMapper greenwaveInfoMapper, CrossInfoMapper crossInfoMapper, CrossDataRealtimeMapper crossDataRealtimeMapper, CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper, CrossDirDataHistMapper crossDirDataHistMapper) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public TrendServiceImpl(GreenwaveInfoMapper greenwaveInfoMapper, CrossInfoMapper crossInfoMapper, CrossDataRealtimeMapper crossDataRealtimeMapper, CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper, CrossDirDataHistMapper crossDirDataHistMapper, EventAlarmMapper eventAlarmMapper) {
this.greenwaveInfoMapper = greenwaveInfoMapper; this.greenwaveInfoMapper = greenwaveInfoMapper;
this.crossInfoMapper = crossInfoMapper; this.crossInfoMapper = crossInfoMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper; this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.crossTurnDataRealtimeMapper = crossTurnDataRealtimeMapper; this.crossTurnDataRealtimeMapper = crossTurnDataRealtimeMapper;
this.crossDirDataHistMapper = crossDirDataHistMapper; this.crossDirDataHistMapper = crossDirDataHistMapper;
this.eventAlarmMapper = eventAlarmMapper;
} }
@Override @Override
...@@ -144,6 +156,63 @@ public class TrendServiceImpl implements TrendService { ...@@ -144,6 +156,63 @@ public class TrendServiceImpl implements TrendService {
return abnormalCrossDetailVO; return abnormalCrossDetailVO;
} }
@Override
public List<EventAlarmVO> eventAlarm(Date todayTime) throws ParseException {
List<EventAlarmPO> eventAlarmPOList = eventAlarmMapper.selectByTodayTime(todayTime);
List<EventAlarmVO> eventAlarmOutVOList = new ArrayList<>();
for (EventAlarmPO eventAlarmPO : eventAlarmPOList) {
EventAlarmVO eventAlarmOutVO = new EventAlarmVO();
eventAlarmOutVO.setEventDesc(eventAlarmPO.getEventDesc());
// 事件类型
Integer typeCode = eventAlarmPO.getType();
String msgByCode = EventAlarmEnum.getMsgByCode(typeCode);
eventAlarmOutVO.setType(msgByCode);
Date endTime = eventAlarmPO.getEndTime();
if (typeCode == 1 || typeCode == 2) {
// 发生时间
Date startTime = eventAlarmPO.getStartTime();
String startTimeStr = sdf.format(startTime);
String substring = startTimeStr.substring(11, 16);
eventAlarmOutVO.setStartTime(substring);
// 时长
if (endTime == null) {
Date nowTime = DateUtil.date();
// todo 时间为演示用,待删除
Date parse = sdf.parse("2022-10-27 09:56:23");
nowTime = parse;
long between = DateUtil.between(startTime, nowTime, DateUnit.MINUTE);
int betweenInt = (int) between;
eventAlarmOutVO.setDuration(betweenInt);
} else {
long between = DateUtil.between(startTime, endTime, DateUnit.MINUTE);
int betweenInt = (int) between;
eventAlarmOutVO.setDuration(betweenInt);
}
}
if (typeCode == 3 || typeCode == 4) {
// 时间范围
Date startTime = eventAlarmPO.getStartTime();
String startTimeStr = sdf.format(startTime);
String startTimeSubStr = startTimeStr.substring(0, 16); // 截取到分钟
String endTimeStr = sdf.format(endTime);
String endTimeSubStr = endTimeStr.substring(0, 16); // 截取到分钟
eventAlarmOutVO.setTimeSpan(startTimeSubStr + "~" + endTimeSubStr);
}
Integer sourceCode = eventAlarmPO.getSource();
String sourceStr = EventAlarmSourceEnum.getMsgByCode(sourceCode);
eventAlarmOutVO.setSource(sourceStr);
eventAlarmOutVO.setCoordinate(eventAlarmPO.getWkt());
eventAlarmOutVOList.add(eventAlarmOutVO);
}
return eventAlarmOutVOList;
}
private List<AbnormalCrossDetailVO.DirDataElement> buildDirData(String crossId) { private List<AbnormalCrossDetailVO.DirDataElement> buildDirData(String crossId) {
List<AbnormalCrossDetailVO.DirDataElement> dirData = new ArrayList<>(); List<AbnormalCrossDetailVO.DirDataElement> dirData = new ArrayList<>();
// 获取当前时间前后20分钟的10位时间戳 // 获取当前时间前后20分钟的10位时间戳
......
...@@ -57,8 +57,8 @@ public class AbnormalCrossDetailVO { ...@@ -57,8 +57,8 @@ public class AbnormalCrossDetailVO {
public static class DirDataElement { public static class DirDataElement {
@ApiModelProperty(value = "方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北") @ApiModelProperty(value = "方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北")
private Integer dir; private Integer dir;
@ApiModelProperty(value = "时间 格式08:12:25") @ApiModelProperty(value = "时间 格式08:12")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss", timezone = "GMT+8") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8")
private Date time; private Date time;
@ApiModelProperty(value = "交通状态:1畅通;2缓行;3拥堵;5未知") @ApiModelProperty(value = "交通状态:1畅通;2缓行;3拥堵;5未知")
private Integer status; private Integer status;
......
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel(value = "EventAlarmVO", description = "查询事件报警返回值")
public class EventAlarmVO {
@ApiModelProperty(value = "事件描述")
String eventDesc;
@ApiModelProperty(value = "事件类型:1事故;2拥堵;3管制;4施工")
String type;
@ApiModelProperty(value = "发生时间")
String startTime;
@ApiModelProperty(value = "时长(单位:分钟)")
Integer duration;
@ApiModelProperty(value = "时间范围")
String timeSpan;
@ApiModelProperty(value = "事件来源:事件来源:1接处警;2交管部门;3互联网")
String source;
@ApiModelProperty(value = "事件坐标:经度,纬度;经度,纬度...")
String coordinate;
}
...@@ -17,7 +17,7 @@ public class GreenwaveListVO { ...@@ -17,7 +17,7 @@ public class GreenwaveListVO {
private String id; private String id;
@ApiModelProperty(value = "子区名称") @ApiModelProperty(value = "子区名称")
private String name; private String name;
@ApiModelProperty(value = "协调方式") @ApiModelProperty(value = "协调方式:0未开启;1相位差优化;2选择方案")
private Integer infoStatus; private Integer infoStatus;
@ApiModelProperty(value = "路口状态:1畅通;2缓行;3拥堵;5未知") @ApiModelProperty(value = "路口状态:1畅通;2缓行;3拥堵;5未知")
private Integer realtimeStatus; private Integer realtimeStatus;
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.trend.EventAlarmMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.trend.EventAlarmPO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="eventId" column="event_id"/>
<result property="eventDesc" column="event_desc"/>
<result property="type" column="type"/>
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="source" column="source"/>
<result property="wkt" column="wkt"/>
<result property="imageUrl" column="image_url"/>
<result property="gmtCreate" column="gmt_create"/>
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<select id="selectByTodayTime" resultMap="BaseResultMap">
select
id,event_id,event_desc,type,start_time,end_time,source,wkt,image_url,gmt_create,gmt_modified
from t_event_data
where to_days(#{todayTime}) = to_days(start_time)
order by start_time desc;
</select>
</mapper>
package net.wanji.web.common.enums; package net.wanji.common.enums;
/** /**
* @author Kent HAN * @author Kent HAN
......
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