|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|