From 8e3052593eba165893677e13df4d7a72296b2f3f Mon Sep 17 00:00:00 2001 From: baizonghao <1719256278@qq.com> Date: 星期日, 05 三月 2023 13:37:00 +0800 Subject: [PATCH] 视频报警API --- ycl-platform/src/main/java/com/ycl/dto/video/AlarmDataParam.java | 4 + ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java | 8 ++ ycl-platform/src/main/java/com/ycl/dto/video/AlarmParam.java | 2 ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java | 158 +++++++++++++++++++++++++++++++++++++++++----------- 4 files changed, 135 insertions(+), 37 deletions(-) diff --git a/ycl-platform/src/main/java/com/ycl/dto/video/AlarmDataParam.java b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmDataParam.java index c5de217..25fcf39 100644 --- a/ycl-platform/src/main/java/com/ycl/dto/video/AlarmDataParam.java +++ b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmDataParam.java @@ -3,6 +3,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import java.util.List; + /** * AlarmDataParam * @@ -42,6 +44,6 @@ * 绠楁硶妫�鍑哄璞′俊鎭紙閫氬父涓�涓棰戝垎鏋愭湇鍔℃姤璀﹀彧鍖呭惈涓�涓洰鏍囦俊鎭�傚浘鐗囩被澶氱洰鏍囨娴嬬被绠楁硶闄ゅ銆傦級 */ @JsonProperty("AlarmObject") - private Object alarmObject; + private List<AlarmObject> alarmObject; } diff --git a/ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java index 18f593b..02601e9 100644 --- a/ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java +++ b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java @@ -9,6 +9,12 @@ public class AlarmObject { @JsonProperty("ObjectRect") - List<ObjectRect> objectRect; + ObjectRect objectRect; + + @JsonProperty("ObjectID") + Integer ObjectID; + + @JsonProperty("ObjectTag") + String ObjectTag; } diff --git a/ycl-platform/src/main/java/com/ycl/dto/video/AlarmParam.java b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmParam.java index 5f0ba80..285624f 100644 --- a/ycl-platform/src/main/java/com/ycl/dto/video/AlarmParam.java +++ b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmParam.java @@ -28,5 +28,5 @@ * 鎶ヨ淇℃伅锛堥�氬父琛屼负绫荤畻娉曟姤璀︿竴娆″彧浼氬寘鍚竴涓姤璀︿俊鎭�傜函鍗曞抚鍥剧墖妫�娴嬬被鍒嗘瀽鏈嶅姟鏈夊彲鑳戒細鍑虹幇鍚屼竴寮犲浘锛屽搴斿涓笉鍚岀畻娉曠殑妫�娴嬬粨鏋滅殑鎯呭喌锛屼粠鑰屼笂鎶ュ涓姤璀︿俊鎭級 */ @JsonProperty("AlarmData") - private AlarmDataParam alarmData; + private List<AlarmDataParam> alarmData; } diff --git a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java index acd2ce6..51d7f17 100644 --- a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java +++ b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.function.Consumer; /** * VideoAlarmReportServiceImpl @@ -53,9 +54,83 @@ this.violationsService = violationsService; } +// @Override +// public void save(AlarmParam alarmParam) { +// if (alarmParam != null && alarmParam.getAlarmData() != null) { +// CameraInfParam cameraInf = alarmParam.getCameraInf(); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); +// String picData = ""; +// if (!StringUtils.isEmpty(alarmParam.getPicData())) { +//// String[] strings = alarmParam.getPicData().split(","); +// String extension = "jpg"; +// +// byte[] data = DatatypeConverter.parseBase64Binary(alarmParam.getPicData()); +// InputStream inputStream = new ByteArrayInputStream(data); +// +// try { +// if (!StringUtils.isEmpty(alarmParam.getAlarmData().getAlarmObject().toString())) { +// String alarmObject = JSON.toJSONString(alarmParam.getAlarmData().getAlarmObject()); +// if (!StringUtils.isEmpty(alarmObject)) { +// BufferedImage image = ImageIO.read(inputStream); +// +// Graphics2D g2 = (Graphics2D) image.getGraphics(); +// g2.setColor(Color.RED); +// g2.setStroke(new BasicStroke(3.0f)); +// List<AlarmObject> alarmObjects = JSON.parseArray(alarmObject, AlarmObject.class); +// alarmObjects.forEach(o -> { +// o.getObjectRect().forEach(rect -> { +// g2.drawRect(rect.getX(), rect.getY(), rect.getW(), rect.getH()); +// }); +// }); +// ByteArrayOutputStream os = new ByteArrayOutputStream(); +// ImageIO.write(image, extension, os); +// inputStream = new ByteArrayInputStream(os.toByteArray()); +// } +// } +// picData = mediaFileUtil.savePicture(inputStream, extension); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// List<VideoAlarmReport> videoAlarmReports = new ArrayList<>(); +// +// AlarmDataParam alarmData = alarmParam.getAlarmData(); +// List<VideoAlarmReport> list = getByAlarmId(alarmData.getAlarmID()); +// try { +// Date date = sdf.parse(alarmData.getAlarmTime()); +// Instant instant = date.toInstant(); +// ZoneId zoneId = ZoneId.systemDefault(); +// VideoAlarmReport videoAlarmReport = VideoAlarmReport.builder() +// .ip(cameraInf.getIp()).port(cameraInf.getPort()) +// .user(cameraInf.getUser()).password(cameraInf.getPassword()) +// .channel(cameraInf.getChannel()).platResourceId(cameraInf.getPlatResourceID()) +// .picData(picData).alarmTime(instant.atZone(zoneId).toLocalDateTime()) +// .alarmId(alarmData.getAlarmID()).algoType(alarmData.getAlgoType()) +// .alarmType(alarmData.getAlarmType()).alarmName(alarmData.getAlarmName()) +// .algoName(alarmData.getAlgoName()).alarmObj(JSON.toJSONString(alarmData.getAlarmObject())) +// .build(); +// if (list.size() == 0) { +// +// videoAlarmReports.add(videoAlarmReport); +// +// this.saveBatch(videoAlarmReports, videoAlarmReports.size()); +// +// violationsService.saveFromVideo(videoAlarmReports); +// +// } else { +// videoAlarmReport.setId(list.get(0).getId()); +// this.updateById(videoAlarmReport); +// } +// } catch (ParseException e) { +// e.printStackTrace(); +// } +// } +// } + @Override public void save(AlarmParam alarmParam) { if (alarmParam != null && alarmParam.getAlarmData() != null) { +// 鍙栧嚭CameraInf CameraInfParam cameraInf = alarmParam.getCameraInf(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); String picData = ""; @@ -63,28 +138,39 @@ // String[] strings = alarmParam.getPicData().split(","); String extension = "jpg"; +// 鎸夌収Base64缂栫爜瑙f瀽鏁版嵁 byte[] data = DatatypeConverter.parseBase64Binary(alarmParam.getPicData()); InputStream inputStream = new ByteArrayInputStream(data); try { - if (!StringUtils.isEmpty(alarmParam.getAlarmData().getAlarmObject().toString())) { - String alarmObject = JSON.toJSONString(alarmParam.getAlarmData().getAlarmObject()); - if (!StringUtils.isEmpty(alarmObject)) { - BufferedImage image = ImageIO.read(inputStream); +// 濡傛灉List<AlarmDataParam>鍚堢悊 + if (alarmParam.getAlarmData()!=null && alarmParam.getAlarmData().size()!=0) { + BufferedImage image = ImageIO.read(inputStream); Graphics2D g2 = (Graphics2D) image.getGraphics(); g2.setColor(Color.RED); g2.setStroke(new BasicStroke(3.0f)); - List<AlarmObject> alarmObjects = JSON.parseArray(alarmObject, AlarmObject.class); - alarmObjects.forEach(o -> { - o.getObjectRect().forEach(rect -> { - g2.drawRect(rect.getX(), rect.getY(), rect.getW(), rect.getH()); - }); + + List<AlarmDataParam> alarmData = alarmParam.getAlarmData(); + + alarmData.forEach(new Consumer<AlarmDataParam>() { + @Override + public void accept(AlarmDataParam alarmDataParam) { + List<AlarmObject> alarmObject = alarmDataParam.getAlarmObject(); + alarmObject.forEach(new Consumer<AlarmObject>() { + @Override + public void accept(AlarmObject alarmObject) { + ObjectRect rect = alarmObject.getObjectRect(); + g2.drawRect(rect.getX(), rect.getY(), rect.getW(), rect.getH()); + } + }); + } }); + ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(image, extension, os); inputStream = new ByteArrayInputStream(os.toByteArray()); - } + } picData = mediaFileUtil.savePicture(inputStream, extension); } catch (Exception e) { @@ -93,36 +179,40 @@ } List<VideoAlarmReport> videoAlarmReports = new ArrayList<>(); - AlarmDataParam alarmData = alarmParam.getAlarmData(); - List<VideoAlarmReport> list = getByAlarmId(alarmData.getAlarmID()); - try { - Date date = sdf.parse(alarmData.getAlarmTime()); - Instant instant = date.toInstant(); - ZoneId zoneId = ZoneId.systemDefault(); - VideoAlarmReport videoAlarmReport = VideoAlarmReport.builder() - .ip(cameraInf.getIp()).port(cameraInf.getPort()) - .user(cameraInf.getUser()).password(cameraInf.getPassword()) - .channel(cameraInf.getChannel()).platResourceId(cameraInf.getPlatResourceID()) - .picData(picData).alarmTime(instant.atZone(zoneId).toLocalDateTime()) - .alarmId(alarmData.getAlarmID()).algoType(alarmData.getAlgoType()) - .alarmType(alarmData.getAlarmType()).alarmName(alarmData.getAlarmName()) - .algoName(alarmData.getAlgoName()).alarmObj(JSON.toJSONString(alarmData.getAlarmObject())) - .build(); - if (list.size() == 0) { + List<AlarmDataParam> alarmData = alarmParam.getAlarmData(); + for (AlarmDataParam alarmDatum : alarmData) { + List<VideoAlarmReport> list = getByAlarmId(alarmDatum.getAlarmID()); + try { + Date date = sdf.parse(alarmDatum.getAlarmTime()); + Instant instant = date.toInstant(); + ZoneId zoneId = ZoneId.systemDefault(); + VideoAlarmReport videoAlarmReport = VideoAlarmReport.builder() + .ip(cameraInf.getIp()).port(cameraInf.getPort()) + .user(cameraInf.getUser()).password(cameraInf.getPassword()) + .channel(cameraInf.getChannel()).platResourceId(cameraInf.getPlatResourceID()) + .picData(picData).alarmTime(instant.atZone(zoneId).toLocalDateTime()) + .alarmId(alarmDatum.getAlarmID()).algoType(alarmDatum.getAlgoType()) + .alarmType(alarmDatum.getAlarmType()).alarmName(alarmDatum.getAlarmName()) + .algoName(alarmDatum.getAlgoName()).alarmObj(JSON.toJSONString(alarmDatum.getAlarmObject())) + .build(); + if (list.size() == 0) { - videoAlarmReports.add(videoAlarmReport); + videoAlarmReports.add(videoAlarmReport); - this.saveBatch(videoAlarmReports, videoAlarmReports.size()); + this.saveBatch(videoAlarmReports, videoAlarmReports.size()); - violationsService.saveFromVideo(videoAlarmReports); + violationsService.saveFromVideo(videoAlarmReports); - } else { - videoAlarmReport.setId(list.get(0).getId()); - this.updateById(videoAlarmReport); + } else { + videoAlarmReport.setId(list.get(0).getId()); + this.updateById(videoAlarmReport); + } + } catch (ParseException e) { + e.printStackTrace(); } - } catch (ParseException e) { - e.printStackTrace(); } + + } } -- Gitblit v1.8.0