Browse Source

视频AI事件结束上报

develop
王兴琳 12 months ago
parent
commit
cc7218dbd4
  1. 10
      zc-business/src/main/java/com/zc/business/controller/DcWarningController.java
  2. 4
      zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java
  3. 236
      zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java
  4. 2
      zc-business/src/main/java/com/zc/business/service/IDcWarningService.java
  5. 6
      zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java
  6. 24
      zc-business/src/main/resources/mapper/business/DcWarningMapper.xml

10
zc-business/src/main/java/com/zc/business/controller/DcWarningController.java

@ -119,5 +119,15 @@ public class DcWarningController extends BaseController
}
return toAjax(dcWarningService.deleteDcWarningByStringId(dcWarning));
}
/**
*视频AI 上报 条件查询
*/
@GetMapping("/selectDcWarningoTherConfiglist")
public TableDataInfo selectDcWarningoTherConfig(DcWarning dcWarning)
{
startPage();
List<HashMap<String,Object>> list = dcWarningService.selectDcWarningoTherConfig(dcWarning);
return getDataTable(list);
}
}

4
zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java

@ -66,4 +66,8 @@ public interface DcWarningMapper
int updateState(DcWarning dcWarning);
//感知事件删除
int deleteDcWarningByStringId(DcWarning dcWarning);
//AI视频
List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning);
}

236
zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java

@ -25,16 +25,20 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* 设备消息处理
*
* @author xiepufeng
*/
@Service
public class DeviceMessageHandler {
private final int EVENT_AI = 1;
private final int EVENT_STATE = 1;
private final int EVENTEND_STATE = 4;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
@ -101,6 +105,7 @@ public class DeviceMessageHandler {
/**
* 摄像头检测事件处理
*
* @param event 事件数据
*/
private void cameraDetectionEventHandle(JSONObject event) {
@ -108,62 +113,199 @@ public class DeviceMessageHandler {
JSONObject data = event.getJSONObject("data");
DcWarning dcWarning = new DcWarning();
/**
* case "constructionEnd":"施工结束";
* case "congestionEnd":"拥堵结束";
* case "illegalParkingEnd":"违停结束";
* case "lowVisibilityEnd":"低环境能见度结束";
* case "singleVehicleBreakdownEnd":"单车抛锚结束";
* case "pedestrianEnd":"行人事件结束";
* case "abandonedObjectEnd":"抛洒物结束";
* trafficAccidentEnd 交通事故结束
* case "unknown":"未知";
* case "desc":"单车抛锚是指单辆车抛锚(故障)停止";//4-5
* */
String illegalTrafficEventSubType = data.getString("illegalTrafficEventSubType");
if (!illegalTrafficEventSubType.equals("constructionEnd") &&
!illegalTrafficEventSubType.equals("congestionEnd") &&
!illegalTrafficEventSubType.equals("illegalParkingEnd") &&
!illegalTrafficEventSubType.equals("lowVisibilityEnd") &&
!illegalTrafficEventSubType.equals("singleVehicleBreakdownEnd") &&
!illegalTrafficEventSubType.equals("pedestrianEnd") &&
!illegalTrafficEventSubType.equals("trafficAccidentEnd") &&
!illegalTrafficEventSubType.equals("abandonedObjectEnd")
) {
// 桩号
dcWarning.setStakeMark(data.getString("stakeMark"));
// 方向
dcWarning.setDirection(data.getString("direction"));
// 警情状态
dcWarning.setWarningState(WarningStateEnum.REPORTED.getCode());
// 捕获时间
Long captureTime = data.getLong("captureTime");
// 预警时间
dcWarning.setWarningTime(new Date(captureTime));
// 信息来源
dcWarning.setWarningSource(WarningSourceEnum.VIDEO_AI.getCode());
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
String warningSubclass = data.getString("warningSubclass");
// 子类型
dcWarning.setWarningSubclass(warningSubclass);
String stakeMarkDescription = data.getString("stakeMarkDescription");
String title = stakeMarkDescription + WarningSubclassEnum.getDecorateInfo(warningSubclass);
// 标题
dcWarning.setWarningTitle(title);
dcWarning.setRemark(convertTimestampToString(captureTime) + " " + title);
// 影响车道
dcWarning.setLane(String.valueOf(data.getInteger("relatedLaneNo")));
// 物联设备id
String iotDeviceId = event.getString("deviceId");
DcDevice dcDevice = redisCache.getCacheMapValue(RedisKeyConstants.DC_DEVICES, iotDeviceId);
if (dcDevice != null) {
// 所属机构
dcWarning.setDeptId(dcDevice.getGroupId());
}
JSONArray pictures = data.getJSONArray("pictures");
JSONArray video = data.getJSONArray("videoList");
// List<String> pictureList = pictures.stream().map(picture -> (iotAddress + "/profile" + picture)).collect(Collectors.toList());
JSONObject otherConfig = new JSONObject();
otherConfig.put("pictures", pictures);
/**视频地址*/
otherConfig.put("videoList", video);
/** 事件id*/ // 去掉空格和双引号
Long targetId = data.getLong("targetId");
otherConfig.put("targetId", targetId);
/**事件位置*/
Long coordinate = data.getLong("coordinate");
otherConfig.put("coordinate", coordinate);
// 桩号
dcWarning.setStakeMark(data.getString("stakeMark"));
// 方向
dcWarning.setDirection(data.getString("direction"));
// 警情状态
dcWarning.setWarningState(WarningStateEnum.REPORTED.getCode());
// 捕获时间
Long captureTime = data.getLong("captureTime");
// 预警时间
dcWarning.setWarningTime(new Date(captureTime));
// 信息来源
dcWarning.setWarningSource(WarningSourceEnum.VIDEO_AI.getCode());
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
String warningSubclass = data.getString("warningSubclass");
// 子类型
dcWarning.setWarningSubclass(warningSubclass);
String stakeMarkDescription = data.getString("stakeMarkDescription");
String title = stakeMarkDescription + WarningSubclassEnum.getDecorateInfo(warningSubclass);
// 标题
dcWarning.setWarningTitle(title);
dcWarning.setRemark(convertTimestampToString(captureTime) + " " + title);
// 影响车道
dcWarning.setLane(String.valueOf(data.getInteger("relatedLaneNo")));
// 物联设备id
String iotDeviceId = event.getString("deviceId");
/* JSONObject combinedData = new JSONObject();
combinedData.put("address", otherConfig);*/
dcWarning.setOtherConfig(otherConfig.toString());
dcWarningService.insertDcWarning(dcWarning);
DcDevice dcDevice = redisCache.getCacheMapValue(RedisKeyConstants.DC_DEVICES, iotDeviceId);
if (dcDevice != null) {
// 所属机构
dcWarning.setDeptId(dcDevice.getGroupId());
}
//无法判定事件结束上报的类型有:占用应急车道,路障,逆行,机占非
//非持续性事件:拥堵、
if (illegalTrafficEventSubType.equals("congestion")) {
//无ID无框
extracted(data, dcWarning);
}
//持续性事件
//行人结束事件上报(无ID无框)
if (illegalTrafficEventSubType.equals("pedestrianEnd")) {
//无ID无框
extracted(data, dcWarning);
}
//能见度(无ID无框)
if (illegalTrafficEventSubType.equals("lowVisibilityEnd")) {
//无ID无框
extracted(data, dcWarning);
}
//施工(无ID有框)
if (illegalTrafficEventSubType.equals("constructionEnd")) {
extracted1(data, dcWarning);
}
//抛洒物(有ID有框)
if (illegalTrafficEventSubType.equals("abandonedObjectEnd")){
extracted3(data, dcWarning);
}
//事故(有ID有框)
if(illegalTrafficEventSubType.equals("trafficAccidentEnd")){
extracted3(data, dcWarning);
JSONArray pictures = data.getJSONArray("pictures");
JSONArray video = data.getJSONArray("videoList");
}
//车辆抛锚有ID有框)
if(illegalTrafficEventSubType.equals("singleVehicleBreakdownEnd")){
extracted3(data, dcWarning);
// List<String> pictureList = pictures.stream().map(picture -> (iotAddress + "/profile" + picture)).collect(Collectors.toList());
}
//违停(有ID有框)
if(illegalTrafficEventSubType.equals("illegalParkingEnd")){
extracted3(data, dcWarning);
JSONObject otherConfig = new JSONObject();
otherConfig.put("pictures", pictures);
/**视频地址*/
otherConfig.put("videoList", video);
}
}
//(有ID有框)
private void extracted3(JSONObject data, DcWarning dcWarning) {
//事件上报ID
String targetId = data.getString("targetId");
//事件位置
String coordinate = data.getString("coordinate");
String stakeMark = data.getString("stakeMark");
dcWarning.setStakeMark(stakeMark);
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
dcWarning.setWarningSource(EVENT_AI);//事件来源
dcWarning.setWarningState(EVENT_STATE);//事件状态
List<HashMap<String, Object>> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning);
for (HashMap<String, Object> hashMap : hashMaps) {
String id = (String) hashMap.get("Id");
String targetIdEvent = (String) hashMap.get("targetId");
//事件位置
String coordinateEvent = (String) hashMap.get("coordinate");
if (coordinate.equals(coordinateEvent)&&targetId.equals(targetIdEvent)) {
DcWarning dcWarning2 = new DcWarning();
dcWarning2.setId(id);
//自动确定状态
dcWarning2.setWarningState(EVENTEND_STATE);
dcWarningService.updateDcWarning(dcWarning2);
}
/* JSONObject combinedData = new JSONObject();
combinedData.put("address", otherConfig);*/
}
}
dcWarning.setOtherConfig(otherConfig.toString());
//无ID有框
private void extracted1(JSONObject data, DcWarning dcWarning) {
//事件位置
String coordinate = data.getString("coordinate");
String stakeMark = data.getString("stakeMark");
dcWarning.setStakeMark(stakeMark);
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
dcWarning.setWarningSource(EVENT_AI);//事件来源
dcWarning.setWarningState(EVENT_STATE);//事件状态
List<HashMap<String, Object>> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning);
for (HashMap<String, Object> hashMap : hashMaps) {
String id = (String) hashMap.get("Id");
//事件位置
String coordinateEvent = (String) hashMap.get("coordinate");
if (coordinate.equals(coordinateEvent)) {
DcWarning dcWarning2 = new DcWarning();
dcWarning2.setId(id);
//自动确定状态
dcWarning2.setWarningState(EVENTEND_STATE);
dcWarningService.updateDcWarning(dcWarning2);
}
dcWarningService.insertDcWarning(dcWarning);
}
}
//无ID无框
private void extracted(JSONObject data, DcWarning dcWarning) {
// 桩号
String stakeMark = data.getString("stakeMark");
dcWarning.setStakeMark(stakeMark);
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
dcWarning.setWarningSource(EVENT_AI);//事件来源
dcWarning.setWarningState(EVENT_STATE);//事件状态
List<HashMap<String, Object>> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning);
for (HashMap<String, Object> hashMap : hashMaps) {
String id = (String) hashMap.get("Id");
DcWarning dcWarning2 = new DcWarning();
dcWarning2.setId(id);
dcWarning2.setWarningState(EVENTEND_STATE);
dcWarningService.updateDcWarning(dcWarning2);
}
}
/**

2
zc-business/src/main/java/com/zc/business/service/IDcWarningService.java

@ -67,4 +67,6 @@ public interface IDcWarningService
AjaxResult updateWarningConvert(DcWarning dcWarning);
//感知事件删除
int deleteDcWarningByStringId(DcWarning dcWarning);
List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning);
}

6
zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java

@ -165,5 +165,9 @@ public class DcWarningServiceImpl implements IDcWarningService
public int deleteDcWarningByStringId(DcWarning dcWarning) {
return dcWarningMapper.deleteDcWarningByStringId(dcWarning);
}
@Override
public List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning)
{
return dcWarningMapper.selectDcWarningoTherConfig(dcWarning);
}
}

24
zc-business/src/main/resources/mapper/business/DcWarningMapper.xml

@ -24,7 +24,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="lane" column="lane" />
<result property="vehicleType" column="vehicle_type" />
</resultMap>
<resultMap type="map" id="eventMap">
<result property="targetId" column="targetId" />
<result property="coordinate" column="coordinate" />
<result property="warningSubclass" column="warning_subclass" />
<result property="warningtype" column="warning_type" />
<result property="stakeMark" column="stake_mark" />
<result property="Id" column="id" />
</resultMap>
<sql id="selectDcWarningVo">
select id, stake_mark stakeMark, direction, dept_id deptId,
warning_state warningState,vehicle_type vehicleType,
@ -154,4 +161,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectCount" resultType="int">
SELECT COUNT(*)AS count FROM dc_warning
</select>
<select id="selectDcWarningoTherConfig" parameterType="DcWarning" resultType="map" resultMap="eventMap">
SELECT id,stake_mark,warning_type,warning_subclass, other_config->'$.coordinate' AS coordinate ,other_config->'$.targetId' AS targetId
FROM dc_warning
<where>
<if test="stakeMark != null and stakeMark != ''"> and stake_mark = #{stakeMark}</if>
<if test="warningState != null "> and warning_state = #{warningState}</if>
<if test="warningSource != null "> and warning_source = #{warningSource}</if>
<if test="warningType != null "> and warning_type = #{warningType}</if>
<if test="warningSubclass != null and warningSubclass != ''"> and warning_subclass = #{warningSubclass}</if>
</where>
</select>
</mapper>
Loading…
Cancel
Save