From cc7218dbd49bd5b10fbc2752c321c8f1727bb961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Wed, 13 Mar 2024 13:34:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91AI=E4=BA=8B=E4=BB=B6=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DcWarningController.java | 10 + .../zc/business/mapper/DcWarningMapper.java | 4 + .../device/handler/DeviceMessageHandler.java | 236 ++++++++++++++---- .../business/service/IDcWarningService.java | 2 + .../service/impl/DcWarningServiceImpl.java | 6 +- .../mapper/business/DcWarningMapper.xml | 24 +- 6 files changed, 233 insertions(+), 49 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java b/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java index dd997365..df443061 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java +++ b/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> list = dcWarningService.selectDcWarningoTherConfig(dcWarning); + return getDataTable(list); + } } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java index 58d60eaf..a55e1ed6 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java +++ b/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> selectDcWarningoTherConfig(DcWarning dcWarning); + } diff --git a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java index edc3a8b5..45213776 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java +++ b/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 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 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> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning); + + for (HashMap 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> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning); + + for (HashMap 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> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning); + for (HashMap hashMap : hashMaps) { + String id = (String) hashMap.get("Id"); + DcWarning dcWarning2 = new DcWarning(); + dcWarning2.setId(id); + dcWarning2.setWarningState(EVENTEND_STATE); + dcWarningService.updateDcWarning(dcWarning2); + } } /** diff --git a/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java b/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java index 0a670456..837c6dfa 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java +++ b/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> selectDcWarningoTherConfig(DcWarning dcWarning); + } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java index 7dc23f6d..93112275 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java +++ b/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> selectDcWarningoTherConfig(DcWarning dcWarning) + { + return dcWarningMapper.selectDcWarningoTherConfig(dcWarning); + } } diff --git a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml index d8b6a869..04da5447 100644 --- a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml @@ -24,7 +24,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + + + + + + + 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" + + + + + \ No newline at end of file