From 6c56f35bef519265b4e7ae98fda6ca87855daf9f Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期四, 15 十二月 2022 11:29:08 +0800 Subject: [PATCH] Merge branch 'master' of http://42.193.1.25:9521/r/sccg_server --- ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java | 102 +++++++++++++++++++++++++++++++++++---------------- 1 files changed, 70 insertions(+), 32 deletions(-) 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 4cac604..e80d31d 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 @@ -1,10 +1,11 @@ package com.ycl.service.video.impl; +import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ycl.dto.video.AlarmDataParam; -import com.ycl.dto.video.AlarmParam; -import com.ycl.dto.video.CameraInfParam; +import com.ycl.dto.video.*; import com.ycl.entity.video.VideoAlarmReport; import com.ycl.mapper.video.VideoAlarmReportMapper; import com.ycl.service.caseHandler.IViolationsService; @@ -13,8 +14,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.imageio.ImageIO; import javax.xml.bind.DatatypeConverter; +import java.awt.*; +import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -49,46 +55,78 @@ @Override public void save(AlarmParam alarmParam) { - if (alarmParam != null && alarmParam.getAlarmData().size() > 0) { + if (alarmParam != null && alarmParam.getAlarmData() != null) { CameraInfParam cameraInf = alarmParam.getCameraInf(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); String picData = ""; - String[] strings = alarmParam.getPicData().split(","); - String extension = "jpg"; + if (!StringUtils.isEmpty(alarmParam.getPicData())) { +// String[] strings = alarmParam.getPicData().split(","); + String extension = "jpg"; - byte[] data = DatatypeConverter.parseBase64Binary(strings[1]); - InputStream inputStream = new ByteArrayInputStream(data); - try { - picData = mediaFileUtil.savePicture(inputStream, extension); - List<VideoAlarmReport> videoAlarmReports = new ArrayList<>(); - for (int i = 0; i < alarmParam.getAlarmData().size(); i++) { - AlarmDataParam alarmData = alarmParam.getAlarmData().get(i); - /******************** 澶勭悊鍥剧墖 **********************/ - try { - Date date = sdf.parse(alarmData.getAlarmTime()); - Instant instant = date.toInstant(); - ZoneId zoneId = ZoneId.systemDefault(); + byte[] data = DatatypeConverter.parseBase64Binary(alarmParam.getPicData()); + InputStream inputStream = new ByteArrayInputStream(data); - 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()) - .algoName(alarmData.getAlgoName()).alarmObj(JSON.toJSONString(alarmData.getAlarmObject())) - .build(); - videoAlarmReports.add(videoAlarmReport); + try { + if (!StringUtils.isEmpty(alarmParam.getAlarmData().getAlarmObject().toString())) { + String alarmObject = JSON.toJSONString(alarmParam.getAlarmData().getAlarmObject()); + if (!StringUtils.isEmpty(alarmObject)) { + BufferedImage image = ImageIO.read(inputStream); - } catch (ParseException e) { - e.printStackTrace(); + 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(); } - this.saveBatch(videoAlarmReports, videoAlarmReports.size()); + } + List<VideoAlarmReport> videoAlarmReports = new ArrayList<>(); - violationsService.saveFromVideo(videoAlarmReports); - } catch (Exception e) { + 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()) + .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(); } } } + + private List<VideoAlarmReport> getByAlarmId(String alarmId) { + LambdaQueryWrapper<VideoAlarmReport> queryWrapper = new LambdaQueryWrapper<VideoAlarmReport>().eq(VideoAlarmReport::getAlarmId, alarmId); + return this.list(queryWrapper); + } } -- Gitblit v1.8.0