From ef0ed9877417b7efb3a6ec72121bee56720f6939 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Sat, 01 Jul 2023 17:28:04 +0800
Subject: [PATCH] 优化提交

---
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java    |   77 ++++++----
 ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java              |   36 ++--
 ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java               |   26 +--
 ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java                           |    2 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java          |  222 +++++++++++++++++--------------
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java               |    4 
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java         |    9 
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java      |   10 
 ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java |    4 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java                  |   17 +
 10 files changed, 218 insertions(+), 189 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
index fcf5f7e..b90aa40 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -29,23 +29,20 @@
 import com.ruoyi.utils.tools.GisTool;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.ArdCameras;
-import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
-import com.ruoyi.device.hiksdk.common.GlobalVariable;
-import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.utils.tube.GeoPoint;
 import com.ruoyi.utils.tube.TubeTools;
+import lombok.AllArgsConstructor;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.PriorityBlockingQueue;
 import java.util.stream.Collectors;
-
 
 /**
  * @Description: 全局报警业务
@@ -76,8 +73,6 @@
     private ISysConfigService configService;
     @Resource
     private ArdCamerasMapper ardCamerasMapper;
-    @Resource
-    private IHikClientService hikClientService;
     @Resource
     private RedisCache redisCache;
     @Resource
@@ -137,8 +132,7 @@
                                     .setCount(ardAlarmStealelec.getCount())
                                     .setTotal(ardAlarmStealelec.getTotal());
                             return globalAlarmData;
-                        })
-                        .collect(Collectors.toList());
+                        }).collect(Collectors.toList());
             case 1002:
                 List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectListAllByCommand(refreshTime);
                 return ardAlarmCameras.stream()
@@ -152,8 +146,7 @@
                                     .setCount(ardAlarmCamera.getCount())
                                     .setTotal(ardAlarmCamera.getTotal());
                             return globalAlarmData;
-                        })
-                        .collect(Collectors.toList());
+                        }).collect(Collectors.toList());
             case 1003:
                 List<ArdAlarmRadar> ardAlarmRadars = ardAlarmRadarMapper.selectListAllByCommand(refreshTime, "运动目标检测");
                 return ardAlarmRadars.stream()
@@ -167,8 +160,7 @@
                                     .setCount(ardAlarmRadar.getCount())
                                     .setTotal(ardAlarmRadar.getTotal());
                             return globalAlarmData;
-                        })
-                        .collect(Collectors.toList());
+                        }).collect(Collectors.toList());
             case 1004:
                 ardAlarmRadars = ardAlarmRadarMapper.selectListAllByCommand(refreshTime, "热源检测");
                 return ardAlarmRadars.stream()
@@ -182,8 +174,7 @@
                                     .setCount(ardAlarmRadar.getCount())
                                     .setTotal(ardAlarmRadar.getTotal());
                             return globalAlarmData;
-                        })
-                        .collect(Collectors.toList());
+                        }).collect(Collectors.toList());
             case 1014:
                 List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectListAllByCommand(refreshTime);
                 return ardAlarmTubes.stream()
@@ -198,8 +189,7 @@
                                     .setCount(ardAlarmTube.getCount())
                                     .setTotal(ardAlarmTube.getTotal());
                             return globalAlarmData;
-                        })
-                        .collect(Collectors.toList());
+                        }).collect(Collectors.toList());
             default:
                 return null;
         }
@@ -224,38 +214,33 @@
                 aas.setParams(params);
                 aas.setPageNum(pageNum);
                 aas.setPageSize(pageSize);
-                List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
-                return ardAlarmStealelecs;
+                return ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
             case 1002:
                 ArdAlarmCamera aac = new ArdAlarmCamera();
                 aac.setParams(params);
                 aac.setPageNum(pageNum);
                 aac.setPageSize(pageSize);
-                List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
-                return ardAlarmCameras;
+                return ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
             case 1003:
                 ArdAlarmRadar aar = new ArdAlarmRadar();
                 aar.setParams(params);
                 aar.setPageNum(pageNum);
                 aar.setPageSize(pageSize);
                 aar.setAlarmType("运动目标检测");
-                List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
-                return ardAlarmRadar;
+                return ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
             case 1004:
                 ArdAlarmRadar aarr = new ArdAlarmRadar();
                 aarr.setParams(params);
                 aarr.setPageNum(pageNum);
                 aarr.setPageSize(pageSize);
                 aarr.setAlarmType("热源检测");
-                List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
-                return ardAlarmRadarr;
+                return ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
             case 1014:
                 ArdAlarmTube aat = new ArdAlarmTube();
                 aat.setParams(params);
                 aat.setPageNum(pageNum);
                 aat.setPageSize(pageSize);
-                List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
-                return ardAlarmTubes;
+                return ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
         }
         return null;
     }
@@ -277,7 +262,7 @@
                 if (StringUtils.isNotNull(ardAlarmStealelec)) {
                     String describe = ardAlarmStealelec.getDescribe();
                     String startTime = fmt.format(ardAlarmStealelec.getStartTime());
-                    int i = ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime());
+                    ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime());
                     return ardAlarmStealelec;
                 }
             case 1014:
@@ -285,7 +270,7 @@
                 if (StringUtils.isNotNull(ardAlarmTube)) {
                     String tubeId = ardAlarmTube.getTubeId();
                     String alarmTime = fmt.format(ardAlarmTube.getAlarmTime());
-                    int i = ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime());
+                    ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime());
                     return ardAlarmTube;
                 }
             default:
@@ -423,7 +408,6 @@
                             if (count >= 3) {
                                 ardAlarmRadar.setGuideFlag(1);
                                 ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
-
                                 //获取雷达所在塔上的大光电
                                 String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
                                 if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
@@ -532,4 +516,37 @@
         return minDistanceCameraId;
     }
 
+    public static void main(String[] args) {
+        Comparator<Obj> PriorityDescCom = Comparator.comparingInt(Obj::getPriority).reversed();
+        Comparator<Obj> NumDescCom = Comparator.comparingInt(Obj::getNum).reversed();
+        Comparator<Obj> receiveTimeAscCom = Comparator.comparing(Obj::getAlarmTime);
+        Comparator<Obj> comparator = PriorityDescCom.thenComparing(NumDescCom).thenComparing(receiveTimeAscCom);
+
+        PriorityBlockingQueue<Obj> priorityQueue = new PriorityBlockingQueue<>(1000,comparator);
+
+        priorityQueue.add(new Obj(999,1,"2023-07-01 16:00:01"));
+        priorityQueue.add(new Obj(999,2,"2023-07-01 16:00:01"));
+        priorityQueue.add(new Obj(999,3,"2023-07-01 16:00:01"));
+
+        List<Obj> elements = new ArrayList<>(priorityQueue);
+        elements.sort(priorityQueue.comparator());  // 使用队列的比较器进行排序
+        for (Obj task : elements) {
+            log.info("正在排队【priority】" + task.getPriority()+"【num】" + task.getNum() + "【alarmTime】" + task.getAlarmTime());
+        }
+        log.info("===================================================================");
+        priorityQueue.add(new Obj(999,5,"2023-07-01 16:00:01"));
+        PriorityBlockingQueue queue = new PriorityBlockingQueue<>(priorityQueue);
+        while (priorityQueue.size() > 0) {
+            Obj task = priorityQueue.poll();
+            log.info("正在排队【priority】" + task.getPriority()+"【num】" + task.getNum() + "【alarmTime】" + task.getAlarmTime());
+        }
+    }
+    @Data
+    @AllArgsConstructor
+    static class Obj
+    {
+        Integer priority;
+        Integer num;
+        String alarmTime;
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
index 659afcc..c3ff35d 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
@@ -41,22 +41,19 @@
             cmd.setOperator(guideTask.getAlarmType());
             cmd.setExpired(30);
             cmd.setRecordBucketName("record");
-            cmd.setRecordObjectName("alarm");
+            cmd.setRecordObjectName("alarm_"+guideTask.getAlarmId());
             log.debug("开始引导");
             boolean guideRes = hikClientService.guideTargetPosition(cmd);
             if (guideRes) {
                 log.debug("引导成功");
                 hikClientService.controlLock(cmd);//上锁
-                cmd.setEnable(true);//开始录像
-                hikClientService.recordToMinio(cmd);//开始录像
+                hikClientService.recordStart(cmd);//开始录像
                 try {
                     Thread.sleep(30000);
                 } catch (InterruptedException e) {
                     log.info("当前任务ID"+guideTask.getAlarmId()+"线程被终止");
                 }
-                cmd.setEnable(false);//停止录像
-                cmd.setUploadMinio(true);//上传minio
-                String url = hikClientService.recordToMinio(cmd);//停止录像返回url
+                String url = hikClientService.recordStopToMinio(cmd);//停止录像返回url
                 if (StringUtils.isNotEmpty(url)) {
                     switch (guideTask.getAlarmType()) {
                         case "sys_tube_leak":
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
index ae971ad..f8962b2 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
@@ -9,15 +9,14 @@
 
 /**
  * 雷达报警Mapper接口
- * 
+ *
  * @author ard
  * @date 2023-06-28
  */
-public interface ArdAlarmRadarMapper 
-{
+public interface ArdAlarmRadarMapper {
     /**
      * 查询雷达报警
-     * 
+     *
      * @param id 雷达报警主键
      * @return 雷达报警
      */
@@ -25,7 +24,7 @@
 
     /**
      * 查询雷达报警列表
-     * 
+     *
      * @param ardAlarmRadar 雷达报警
      * @return 雷达报警集合
      */
@@ -33,7 +32,7 @@
 
     /**
      * 新增雷达报警
-     * 
+     *
      * @param ardAlarmRadar 雷达报警
      * @return 结果
      */
@@ -41,7 +40,7 @@
 
     /**
      * 修改雷达报警
-     * 
+     *
      * @param ardAlarmRadar 雷达报警
      * @return 结果
      */
@@ -49,7 +48,7 @@
 
     /**
      * 删除雷达报警
-     * 
+     *
      * @param id 雷达报警主键
      * @return 结果
      */
@@ -57,25 +56,26 @@
 
     /**
      * 批量删除雷达报警
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteArdAlarmRadarByIds(String[] ids);
 
-    public List<ArdAlarmRadar> selectListAllByCommand(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
-    int selectCountByAlarmTime(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
+    public List<ArdAlarmRadar> selectListAllByCommand(@Param("refreshTime") String refreshTime, @Param("alarmType") String alarmType);
+
+    int selectCountByAlarmTime(@Param("refreshTime") String refreshTime, @Param("alarmType") String alarmType);
 
     /**
      * 通过雷达id找到关联塔上的大光电id
-     *
      */
-     String getCameraByRadar(String radarId);
+    String getCameraByRadar(String radarId);
 
-     /**
-      *  查找5分钟内引导过的记录
-      * */
-     public ArdAlarmRadar getArdAlarmRadarWithGuide(ArdAlarmRadar ardAlarmRadar);
+    /**
+     * 查找5分钟内引导过的记录
+     */
+    public ArdAlarmRadar getArdAlarmRadarWithGuide(ArdAlarmRadar ardAlarmRadar);
 
-     public int getArdAlarmRadarWithNotGuide(@Param("ardAlarmRadar")ArdAlarmRadar ardAlarmRadar, @Param("guideTime")Date guideTime);
+    public int getArdAlarmRadarWithNotGuide(@Param("ardAlarmRadar") ArdAlarmRadar ardAlarmRadar, @Param("guideTime") Date guideTime);
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java b/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
index 4ed36a0..79aa9f5 100644
--- a/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
+++ b/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
@@ -3,11 +3,8 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-
 import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
 import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService;
-import com.ruoyi.common.annotation.Anonymous;
-import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -26,7 +23,6 @@
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.core.page.TableDataInfo;
 import org.springframework.web.multipart.MultipartFile;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
index 9f39667..db9981e 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -39,6 +39,4 @@
     String recordBucketName;
     /*录像文件名称*/
     String recordObjectName;
-    /*是否上传minio*/
-    boolean isUploadMinio;
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
index 3f9325e..2d43e0e 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -2,13 +2,11 @@
 
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
-
-import java.io.IOException;
 import java.util.Map;
 
 /**
  * @ClassName: sdkClinet
- * @Description:海康操作客户端接口类
+ * @Description: 海康操作客户端接口类
  * @Author: Administrator
  * @Date: 2023年01月17日 15:59
  * @Version: 1.0
@@ -35,7 +33,7 @@
     boolean setFocusPos(CameraCmd cmd);
 
     //获取聚焦值
-    Map getFocusPos(CameraCmd cmd);
+    Map<String,Object> getFocusPos(CameraCmd cmd);
 
     //设置预置位
     boolean setPreset(CameraCmd cmd);
@@ -93,9 +91,16 @@
     //手动录像
     String record(CameraCmd cmd);
 
-    //手动录像
-    String recordToMinio(CameraCmd cmd);
 
     //引导目标位置
     boolean guideTargetPosition(CameraCmd cmd);
+
+    //开始录像
+    void recordStart(CameraCmd cmd);
+
+    //停止录像-上传minio-返回录像url
+    String recordStopToMinio(CameraCmd cmd);
+
+    //停止录像-不上传minio
+    void recordStopNotToMinio(CameraCmd cmd);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 3a4971f..590b551 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -2,7 +2,6 @@
 
 import com.ruoyi.common.annotation.SdkOperate;
 import com.ruoyi.common.utils.file.FileUtils;
-import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
@@ -20,11 +19,9 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import sun.misc.BASE64Encoder;
-
 import javax.annotation.Resource;
 import java.io.*;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.nio.ByteBuffer;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
@@ -618,9 +615,9 @@
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
         m_ptzPosCurrent.wAction = 1;
         try {
-            String p = String.valueOf((int) ((double) ptz.get("p") * 10));
-            String t = String.valueOf((int) ((double) ptz.get("t") * 10));
-            String z = String.valueOf((int) ((double) ptz.get("z") * 10));
+            String p = String.valueOf((int) (ptz.get("p") * 10));
+            String t = String.valueOf((int) (ptz.get("t") * 10));
+            String z = String.valueOf((int) (ptz.get("z") * 10));
             m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
             m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
             m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
@@ -745,8 +742,7 @@
             return -1;
         } else {
             netDvrPtzLockcfg.read();
-            int byWorkMode = netDvrPtzLockcfg.byWorkMode;
-            return byWorkMode;
+            return netDvrPtzLockcfg.byWorkMode;
         }
     }
 
@@ -871,7 +867,6 @@
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
             log.info("设置透雾失败,请稍后重试" + code);
-            return false;
         }
         log.info("设置透雾成功");
         return bool;
@@ -920,7 +915,6 @@
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
             log.info("设置夜视失败,请稍后重试" + code);
-            return false;
         }
         log.info("设置夜视成功");
         return bool;
@@ -967,7 +961,6 @@
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
             log.info("设置聚焦模式失败,请稍后重试" + code);
-            return false;
         }
         log.info("设置聚焦模式成功");
         return bool;
@@ -1010,7 +1003,7 @@
             return false;
         }
         Integer userId = GlobalVariable.loginMap.get(cameraId);
-        Integer dwStop;
+        int dwStop;
         if (enable) {
             dwStop = 0;//开启
         } else {
@@ -1020,7 +1013,6 @@
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
             log.info("设置云台加热失败,请稍后重试" + code);
-            return false;
         }
         log.info("设置云台加热成功");
         return bool;
@@ -1064,7 +1056,6 @@
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
             log.info("设置镜头除冰失败,请稍后重试" + code);
-            return false;
         }
         log.info("设置镜头除冰成功");
         return bool;
@@ -1073,7 +1064,7 @@
     /**
      * 截图 返给前端
      *
-     * @param cmd
+     * @param cmd 相机命令
      */
     public String captureJPEGPicture(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
@@ -1100,41 +1091,11 @@
         boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
         log.info("-----------这里开始图片存入内存----------" + is);
 
-
         BASE64Encoder encoder = new BASE64Encoder();
         String png_base64 = encoder.encodeBuffer(jpegBuffer);//转换成base64串
         png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
         log.info("-----------处理完成截图数据----------");
         return png_base64;
-
-//        ByteArrayInputStream in = new ByteArrayInputStream(jpegBuffer.array(), 0, a.getValue());
-//        OutputStream outputStream = null;
-//        try {
-//            //1、设置response 响应头 //设置页面不缓存,清空buffer
-//            response.reset();
-//            //字符编码
-//            response.setCharacterEncoding("UTF-8");
-//            //二进制传输数据
-//            response.setContentType("multipart/form-data");
-//            //设置响应头
-//            response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpeg", "UTF-8"));
-//
-//            outputStream = response.getOutputStream();
-//            // LoginUser loginUser = LoginContext.me().getLoginUser();
-//            waterMarkUtil.markImageByIO("", in, outputStream, null, "jpeg");
-//            outputStream.flush();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//            log.error("抓图失败,请稍后重试");
-//        } finally {
-//            try {
-//                outputStream.close();
-//            } catch (IOException e) {
-//                log.error("抓图失败,请稍后重试");
-//            }
-//        }
-
-
     }
 
     /**
@@ -1264,16 +1225,6 @@
                     GlobalVariable.previewMap.remove(cameraId);
                 }
                 log.info("录像停止");
-                //存入minio
-                String BucketName = cmd.getRecordBucketName();
-                String ObjectName = cmd.getRecordObjectName();
-                String ContentType = "video/MP4";
-                FileInputStream stream = new FileInputStream(path);
-                boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType);
-                if (b) {
-                    url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName);
-                    log.info("上传文件成功!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName);
-                }
             }
             return url;
         } catch (Exception ex) {
@@ -1283,14 +1234,13 @@
     }
 
     @Override
-    public String recordToMinio(CameraCmd cmd) {
+    public void recordStart(CameraCmd cmd) {
         try {
             String cameraId = cmd.getCameraId();
             Integer channelNum = cmd.getChannelNum();
             String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
-            boolean enable = cmd.isEnable();
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-                return "";
+                return;
             }
             Integer userId = GlobalVariable.loginMap.get(cameraId);
             //强制I帧结构体对象
@@ -1313,53 +1263,125 @@
             previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
             previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
             previewinfo.write();
-            if (enable) {
-                if (GlobalVariable.previewMap.containsKey(cameraId)) {
-                    Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
-                    hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
-                    GlobalVariable.previewMap.remove(cameraId);
-                    log.debug("停止当前录像");
-                }
-                int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
-                if (lRealHandle == -1) {
-                    log.error("取流失败" + hCNetSDK.NET_DVR_GetLastError());
-                    return "";
-                }
-                log.debug("取流成功");
-                GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
-                GlobalVariable.previewMap.put(cameraId, lRealHandle);
-                if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
-                    log.error("保存视频文件到临时文件夹失败 错误码为:  " + hCNetSDK.NET_DVR_GetLastError());
-                    return "";
-                }
-                log.debug("录像开始");
-            } else {
-                if (GlobalVariable.previewMap.containsKey(cameraId)) {
-                    Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
-                    hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
-                    GlobalVariable.previewMap.remove(cameraId);
-                }
-                log.debug("录像停止");
-                //存入minio
-                String BucketName = cmd.getRecordBucketName();
-                String ObjectName = cmd.getRecordObjectName();
-                String ContentType = "video/MP4";
-                FileInputStream stream = new FileInputStream(path);
-                String simpleUUID = IdUtils.simpleUUID();
-                String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
-                String recordName = cameraId + "/" + time + "/" + ObjectName + "_" + simpleUUID + ".mp4";
-                boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
-                if (b) {
-                    String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
-                    log.debug("上传文件成功!" + url);
-                    return url;
-                }
+            if (GlobalVariable.previewMap.containsKey(cameraId)) {
+                Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+                hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+                GlobalVariable.previewMap.remove(cameraId);
+                log.debug("停止当前录像");
             }
-            return "";
+            int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
+            if (lRealHandle == -1) {
+                log.error("取流失败" + hCNetSDK.NET_DVR_GetLastError());
+                return;
+            }
+            log.debug("取流成功");
+            GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
+            GlobalVariable.previewMap.put(cameraId, lRealHandle);
+            if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
+                log.error("保存视频文件到临时文件夹失败 错误码为:  " + hCNetSDK.NET_DVR_GetLastError());
+                return;
+            }
+            log.debug("录像开始");
+        } catch (Exception ex) {
+            log.error("开始录像异常" + ex.getMessage());
+        }
+    }
+
+    @Override
+    public String recordStopToMinio(CameraCmd cmd) {
+        String url = "";
+        try {
+            String cameraId = cmd.getCameraId();
+            Integer channelNum = cmd.getChannelNum();
+            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
+            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+                return "";
+            }
+            Integer userId = GlobalVariable.loginMap.get(cameraId);
+            //region 强制I帧
+            HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //新建结构体对象
+            netDvrIFrame.read();
+            netDvrIFrame.dwChannel = channelNum;//因为上文代码中设置了通道号,按照上文中的设置
+            netDvrIFrame.byStreamType = 0;
+            netDvrIFrame.dwSize = netDvrIFrame.size();
+            netDvrIFrame.write();
+            if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
+                log.error("强制I帧 错误码为:  " + hCNetSDK.NET_DVR_GetLastError());
+            }
+            //endregion
+            //region 预览参数
+            NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
+            previewinfo.read();
+            previewinfo.lChannel = channelNum;
+            previewinfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
+            previewinfo.dwLinkMode = 0;//连接方式:0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RTP/HTTP,6-HRUDP(可靠传输),7-RTSP/HTTPS,8-NPQ
+            previewinfo.hPlayWnd = null;//播放窗口的句柄,为NULL表示不解码显示。
+            previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
+            previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
+            previewinfo.write();
+            //endregion
+            if (GlobalVariable.previewMap.containsKey(cameraId)) {
+                Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+                hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+                GlobalVariable.previewMap.remove(cameraId);
+            }
+            log.debug("录像停止");
+            //存入minio
+            String BucketName = cmd.getRecordBucketName();
+            String ObjectName = cmd.getRecordObjectName();
+            String ContentType = "video/MP4";
+            FileInputStream stream = new FileInputStream(path);
+            String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
+            String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4";
+            boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
+            if (b) {
+                url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
+                log.debug("上传文件成功!" + url);
+            }
+            return url;
         } catch (Exception ex) {
             log.error("录像异常" + ex.getMessage());
             return "";
         }
     }
 
+    @Override
+    public void recordStopNotToMinio(CameraCmd cmd) {
+        try {
+            String cameraId = cmd.getCameraId();
+            Integer channelNum = cmd.getChannelNum();
+            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+                return;
+            }
+            Integer userId = GlobalVariable.loginMap.get(cameraId);
+            //强制I帧结构体对象
+            HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //新建结构体对象
+            netDvrIFrame.read();
+            netDvrIFrame.dwChannel = channelNum;//因为上文代码中设置了通道号,按照上文中的设置
+            netDvrIFrame.byStreamType = 0;
+            netDvrIFrame.dwSize = netDvrIFrame.size();
+            netDvrIFrame.write();
+            if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
+                log.error("强制I帧 错误码为:  " + hCNetSDK.NET_DVR_GetLastError());
+            }
+            //预览参数
+            NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
+            previewinfo.read();
+            previewinfo.lChannel = channelNum;
+            previewinfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
+            previewinfo.dwLinkMode = 0;//连接方式:0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RTP/HTTP,6-HRUDP(可靠传输),7-RTSP/HTTPS,8-NPQ
+            previewinfo.hPlayWnd = null;//播放窗口的句柄,为NULL表示不解码显示。
+            previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
+            previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
+            previewinfo.write();
+            if (GlobalVariable.previewMap.containsKey(cameraId)) {
+                Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+                hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+                GlobalVariable.previewMap.remove(cameraId);
+            }
+            log.debug("录像停止");
+        } catch (Exception ex) {
+            log.error("录像停止异常" + ex.getMessage());
+        }
+    }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
index bda1c8a..4b5e098 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
@@ -17,8 +17,7 @@
 import java.io.OutputStream;
 
 /**
- *   图片水印工具类
- *
+ * 图片水印工具类
  */
 public class waterMarkUtil {
 
@@ -31,7 +30,7 @@
     // 水印文字字体
     private static final Font font = new Font("宋体", Font.BOLD, 30);
     // 水印文字颜色
-    private static final Color color = Color.white;
+    private static final Color color = Color.blue;
 
     /**
      * 给图片添加水印文字
@@ -152,15 +151,14 @@
             e.printStackTrace();
         }
     }
+
+    public static void main(String[] args) {
+        String srcImgPath = "G:\\data\\pic\\7aad76110e7c478598da6b82d7446246.jpeg";
+        String text = "synjones";
+        // 给图片添加水印文字
+        //markImage(text, srcImgPath, "G:\\data\\pic\\微信截图水印.png");
+        // 给图片添加水印文字,水印文字旋转-45
+        markImage(text, srcImgPath, "G:\\data\\pic\\7aad76110e7c478598da6b82d7446246水印.png", 45);
+        System.out.println("给图片添加水印文字完毕");
+    }
 }
-//    public static void main(String[] args) {
-//        String srcImgPath = "D:\\testSmile.jpg";
-//        String text = "JCccc";
-//        // 给图片添加水印文字
-//        markImage(text, srcImgPath, "D:\\testSmileWithMark.jpg");
-//        // 给图片添加水印文字,水印文字旋转-45
-//        markImage(text, srcImgPath, "D:\\testSmileWithMarkRotate.jpg", -45);
-//        System.out.println("给图片添加水印文字完毕");
-//    }
-
-
diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
index e8123e7..4c32163 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -6,6 +6,7 @@
 import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
 import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
@@ -453,8 +454,7 @@
                     boolean setTargetPosition = hikClientService.guideTargetPosition(cmd);
                     if (setTargetPosition) {
                         /*控制相机巡检成功,开始录像*/
-                        cmd.setEnable(true);//启动录像
-                        hikClientService.recordToMinio(cmd);
+                        hikClientService.recordStart(cmd);
                     } else {
                         /*控制失败,当前步骤启动时间置null*/
                         ardVideoInspectTask.setCurrentStepStartTime("");
@@ -541,11 +541,9 @@
                 cmd.setCameraId(cameraId);
                 cmd.setChannelNum(channel);
                 cmd.setOperator("sys_patrol_inspect");
-                cmd.setEnable(false);//停止录像
                 cmd.setRecordBucketName("record");
-                cmd.setRecordObjectName("inspect");
-                cmd.setUploadMinio(true);
-                String url=  hikClientService.recordToMinio(cmd);
+                cmd.setRecordObjectName("inspect_"+ IdUtils.fastSimpleUUID());
+                String url=  hikClientService.recordStopToMinio(cmd);
                 /*插入巡检记录*/
                 ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
                 ardVideoInspectRecord.setStepId(step.getId());
diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
index b56f6f3..d440ac7 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
@@ -77,9 +77,7 @@
             CameraCmd cmd = new CameraCmd();
             cmd.setCameraId(ardVideoInspectTask.getCameraId());
             cmd.setChannelNum(ardVideoInspectTask.getChannel());
-            cmd.setEnable(false);//停止录像
-            cmd.setUploadMinio(false);
-            hikClientService.recordToMinio(cmd);
+            hikClientService.recordStopNotToMinio(cmd);
             GlobalVariable.previewMap.remove(cameraId);
         }
         /*停止任务*/

--
Gitblit v1.9.3