From 1cad14bca191807e18705c3a5526eda8151be439 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期一, 14 四月 2025 23:10:22 +0800
Subject: [PATCH] 批量审核和图片保存bug

---
 ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java |  195 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 153 insertions(+), 42 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 e80d31d..dfc786e 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
@@ -9,6 +9,7 @@
 import com.ycl.entity.video.VideoAlarmReport;
 import com.ycl.mapper.video.VideoAlarmReportMapper;
 import com.ycl.service.caseHandler.IViolationsService;
+import com.ycl.service.oss.OssService;
 import com.ycl.service.video.IVideoAlarmReportService;
 import com.ycl.utils.MediaFileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,10 +26,12 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
+import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.function.Consumer;
 
 /**
  * VideoAlarmReportServiceImpl
@@ -44,6 +47,9 @@
     private IViolationsService violationsService;
 
     @Autowired
+    private OssService ossService;
+
+    @Autowired
     public void setMediaFileUtil(MediaFileUtil mediaFileUtil) {
         this.mediaFileUtil = mediaFileUtil;
     }
@@ -53,9 +59,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,68 +143,99 @@
 //                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) {
 
-                            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());
+                        BufferedImage image = ImageIO.read(inputStream);
+                        Graphics2D g2 = (Graphics2D) image.getGraphics();
+                        g2.setColor(Color.RED);
+                        g2.setStroke(new BasicStroke(3.0f));
+
+                        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());
-                        }
+                            }
+                        });
+
+                        ByteArrayOutputStream os = new ByteArrayOutputStream();
+                        ImageIO.write(image, extension, os);
+                        inputStream = new ByteArrayInputStream(os.toByteArray());
+
                     }
-                    picData = mediaFileUtil.savePicture(inputStream, extension);
+                    picData = ossService.uploadImages(inputStream, extension,0);
                 } catch (Exception e) {
-                    e.printStackTrace();
+                    System.out.println("淇濆瓨鎶ヨ鏁版嵁澶辫触---鍥剧墖涓婁紶澶辫触锛�" + e.getMessage());
+//                    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())
-                        .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) {
+                    System.out.println("淇濆瓨鎶ヨ鏁版嵁澶辫触锛�" + e.getMessage());
+//                    e.printStackTrace();
                 }
-            } catch (ParseException e) {
-                e.printStackTrace();
             }
         }
     }
 
+    @Override
+    public void saveFromHK(HKAlarmParam alarmParam) {
+        if (alarmParam != null) {
+            violationsService.saveFromHKVideo(alarmParam);
+        }
+    }
+
+    @Override
+    public List<VideoAlarmReport> findByChannelAndAlarmNameAndTime(String channel, String alarmName, LocalDateTime alarmTime) {
+
+        LambdaQueryWrapper<VideoAlarmReport> queryWrapper = new LambdaQueryWrapper<VideoAlarmReport>()
+                .eq(VideoAlarmReport::getChannel, channel).eq(VideoAlarmReport::getAlarmName, alarmName)
+                .between(VideoAlarmReport::getAlarmTime, alarmTime.plusMinutes(-3), alarmTime.plusMinutes(3));
+        return this.list(queryWrapper);
+    }
+
     private List<VideoAlarmReport> getByAlarmId(String alarmId) {
         LambdaQueryWrapper<VideoAlarmReport> queryWrapper = new LambdaQueryWrapper<VideoAlarmReport>().eq(VideoAlarmReport::getAlarmId, alarmId);
         return this.list(queryWrapper);

--
Gitblit v1.8.0