baizonghao
2023-03-05 8e3052593eba165893677e13df4d7a72296b2f3f
视频报警API
4个文件已修改
172 ■■■■ 已修改文件
ycl-platform/src/main/java/com/ycl/dto/video/AlarmDataParam.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/dto/video/AlarmParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java 158 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
}
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;
}
ycl-platform/src/main/java/com/ycl/dto/video/AlarmParam.java
@@ -28,5 +28,5 @@
     * 报警信息(通常行为类算法报警一次只会包含一个报警信息。纯单帧图片检测类分析服务有可能会出现同一张图,对应多个不同算法的检测结果的情况,从而上报多个报警信息)
     */
    @JsonProperty("AlarmData")
    private AlarmDataParam alarmData;
    private List<AlarmDataParam> alarmData;
}
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编码解析数据
                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();
            }
        }
    }