From 4a293865ac437a812eea8800cc0b04314efbd210 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期二, 24 十月 2023 10:06:24 +0800
Subject: [PATCH] 异步登录增加延迟时间避免接口频繁 修改大华通道数量获取

---
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java |  227 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 144 insertions(+), 83 deletions(-)

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 4116465..49757d6 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
@@ -1,20 +1,18 @@
 package com.ruoyi.inspect.service.impl;
 
-import java.text.SimpleDateFormat;
 import java.util.*;
 import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
 import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.constant.Global;
+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.config.MinioClientSingleton;
+import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.inspect.domain.ArdVideoInspectRecord;
 import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper;
 import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper;
-import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.utils.StringUtils;
@@ -24,7 +22,6 @@
 import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper;
 import com.ruoyi.inspect.domain.ArdVideoInspectTask;
 import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 
@@ -35,7 +32,7 @@
  * @date 2023-05-30
  */
 @Service
-@Slf4j
+@Slf4j(topic = "patrolInspectionTask")
 public class ArdVideoInspectTaskServiceImpl implements IArdVideoInspectTaskService {
     @Resource
     private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
@@ -48,7 +45,9 @@
     @Resource
     private ArdCamerasMapper ardCamerasMapper;
     @Resource
-    private IHikClientService hikClientService;
+    private ICameraSdkService cameraSdkService;
+    @Resource
+    private ArdCamerasMapper camerasMapper;
 
     @PostConstruct
     public void initTask() {
@@ -60,7 +59,7 @@
             }
             ardVideoInspectTask.setCurrentStepId("");
             ardVideoInspectTask.setCurrentStepStartTime("");
-            ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
+            ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
         }
     }
 
@@ -95,6 +94,7 @@
     @Transactional
     @Override
     public int insertArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
+        ardVideoInspectTask.setId(IdUtils.simpleUUID());
         ardVideoInspectTask.setCreateBy(SecurityUtils.getUsername());
         ardVideoInspectTask.setCreateTime(DateUtils.getNowDate());
         ardVideoInspectTask.setUserId(SecurityUtils.getUserId());
@@ -171,12 +171,20 @@
      */
     public void insertArdVideoInspectTaskStep(ArdVideoInspectTask ardVideoInspectTask) {
         List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
-        String id = ardVideoInspectTask.getId();
+        //鑾峰彇鐩告満
+        ArdCameras camera = camerasMapper.selectArdCamerasById(ardVideoInspectTask.getCameraId());
+        Collections.sort(ardVideoInspectTaskStepList, new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper, camera.getLongitude(), camera.getLatitude()));
+        String taskId = ardVideoInspectTask.getId();
+        for (int i = 0; i < ardVideoInspectTaskStepList.size(); i++) {
+            ArdVideoInspectTaskStep step = ardVideoInspectTaskStepList.get(i);
+            step.setTaskId(taskId);
+            step.setOrderNumber(new Integer(i + 1));
+        }
         if (StringUtils.isNotNull(ardVideoInspectTaskStepList)) {
-            List<ArdVideoInspectTaskStep> list = new ArrayList<ArdVideoInspectTaskStep>();
             for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) {
                 if (ardVideoInspectTaskStep.getId() == null) {
                     //鏂扮殑姝ラ,娣诲姞
+                    ardVideoInspectTaskStep.setId(IdUtils.simpleUUID());
                     ardVideoInspectTaskStepMapper.insertArdVideoInspectTaskStep(ardVideoInspectTaskStep);
                 } else {
                     //宸叉湁姝ラ,鏇存柊
@@ -193,6 +201,9 @@
     public void manualTaskRun(String TaskId) {
         try {
             ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId);
+            if (!videoInspectTask.getMenualSwitch().equals("寮�")) {
+                return;
+            }
             if (videoInspectTask.getArdVideoInspectTaskStepList().size() == 0) {
                 return;
             }
@@ -218,6 +229,9 @@
                         //寮�濮嬩笅涓�姝ラ
                         videoInspectTask.setCurrentStepId(nextStepId);
                         startRunStep(videoInspectTask);
+                    } else {
+                        //鏈繃鏈熷皾璇曞紩瀵硷紝寮曞澶辫触娓呯┖褰撳墠姝ラ寮�濮嬫椂闂达紝鏍囪涓柇
+                        tryGuide(videoInspectTask);
                     }
                 }
             }
@@ -304,6 +318,7 @@
                         continue;
                     }
                     videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList);
+
                     String currentStepId = videoInspectTask.getCurrentStepId();
                     String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
                     if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) {
@@ -325,33 +340,20 @@
                                 //寮�濮嬩笅涓�姝ラ
                                 videoInspectTask.setCurrentStepId(nextStepId);
                                 startRunStep(videoInspectTask);
+                            } else {
+                                tryGuide(videoInspectTask);
                             }
                         }
                     }
                 } else {
-                    if(Global.task_record.contains(videoInspectTask.getId()))
-                    {
-                        /*鍋滄褰曞儚*/
-                        CameraCmd cmd = new CameraCmd();
-                        cmd.setCameraId(videoInspectTask.getCameraId());
-                        cmd.setChannelNum(videoInspectTask.getChannel());
-                        cmd.setOperator("sys_patrol_inspect");
-                        cmd.setEnable(false);//鍋滄褰曞儚
-                        String uuid = UUID.randomUUID().toString().replace("-", "");
-                        String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
-                        String recordName = videoInspectTask.getCameraId() + "/" + time + "/" + uuid + ".mp4";
-                        cmd.setRecordBucketName("record");
-                        cmd.setRecordObjectName(recordName);
-                        cmd.setUploadMinio(true);
-                        hikClientService.recordToMinio(cmd);
+                    if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepId())) {
+                        videoInspectTask.setCurrentStepId("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask);
                     }
-                    if (StringUtils.isEmpty(videoInspectTask.getCurrentStepId()) || StringUtils.isEmpty(videoInspectTask.getCurrentStepStartTime())) {
-                        continue;
+                    if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepStartTime())) {
+                        videoInspectTask.setCurrentStepId("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask);
                     }
-                    /*杩囨湡鐨勪换鍔℃竻绌哄綋鍓嶆楠や俊鎭�*/
-                    videoInspectTask.setCurrentStepId("");
-                    videoInspectTask.setCurrentStepStartTime("");
-                    ardVideoInspectTaskMapper.updateArdVideoInspectTask(videoInspectTask);
                 }
             }
         } catch (Exception ex) {
@@ -414,10 +416,72 @@
         try {
             String currentStepId = ardVideoInspectTask.getCurrentStepId();
             if (StringUtils.isNull(currentStepId)) {
-                log.info("褰撳墠寮�濮嬪贰妫�姝ラid涓虹┖");
+                log.debug("褰撳墠寮�濮嬪贰妫�姝ラid涓虹┖");
                 return;
             }
-            log.info("姝ラ锛�" + currentStepId + "寮�濮�");
+            log.debug("宸℃姝ラ锛�" + currentStepId + "灏濊瘯寮�濮�");
+            String cameraId = ardVideoInspectTask.getCameraId();
+            Integer channel = ardVideoInspectTask.getChannel();
+            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
+                    .filter(obj -> obj.getId().equals(currentStepId))
+                    .findFirst();
+            if (objectOptional.isPresent()) {
+                ArdVideoInspectTaskStep step = objectOptional.get();
+                /*鏇存柊浠诲姟褰撳墠姝ラid鍜屾楠ゅ惎鍔ㄦ椂闂�*/
+                ardVideoInspectTask.setCurrentStepId(step.getId());
+                ardVideoInspectTask.setCurrentStepStartTime(DateUtils.getTime());
+                ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                String wellId = step.getWellId();
+                if (!StringUtils.isNull(wellId)) {
+                    /*鑾峰彇浜曞潗鏍�*/
+                    ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(wellId);
+                    double[] targetPositon = new double[3];
+                    targetPositon[0] = ardAlarmpointsWell.getLongitude();
+                    targetPositon[1] = ardAlarmpointsWell.getLatitude();
+                    targetPositon[2] = ardAlarmpointsWell.getAltitude();
+                    /*鑾峰彇鐩告満鍧愭爣*/
+                    ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+                    if(StringUtils.isNull(cameras))
+                    {
+                        log.debug("鎵句笉鍒扮浉鏈�:"+cameraId);
+                        return;
+                    }
+                    double[] cameraPositon = new double[3];
+                    cameraPositon[0] = cameras.getLongitude();
+                    cameraPositon[1] = cameras.getLatitude();
+                    cameraPositon[2] = cameras.getAltitude();
+                    /*鎺у埗鐩告満宸℃*/
+                    CameraCmd cmd = new CameraCmd();
+                    cmd.setCameraId(cameraId);
+                    cmd.setChanNo(channel);
+                    cmd.setTargetPosition(targetPositon);
+                    cmd.setOperator("sys_patrol_inspect");
+                    cmd.setExpired(step.getRecordingTime() * 60);
+                    boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
+                    if (setTargetPosition) {
+                        /*鎺у埗鐩告満宸℃鎴愬姛锛屽紑濮嬪綍鍍�*/
+                        cameraSdkService.recordStart(cmd);
+                    } else {
+                        /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁ull*/
+                        ardVideoInspectTask.setCurrentStepStartTime("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("宸℃寮�濮嬪紓甯革細" + ex.getMessage());
+        }
+    }
+
+    //灏濊瘯鎺у埗寮曞
+    private void tryGuide(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            if (StringUtils.isNull(currentStepId)) {
+                log.debug("褰撳墠寮�濮嬪贰妫�姝ラid涓虹┖");
+                return;
+            }
+            log.debug("宸℃姝e父锛屽皾璇曞紩瀵硷細" + currentStepId);
             String cameraId = ardVideoInspectTask.getCameraId();
             Integer channel = ardVideoInspectTask.getChannel();
             Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
@@ -435,6 +499,11 @@
                     targetPositon[2] = ardAlarmpointsWell.getAltitude();
                     /*鑾峰彇鐩告満鍧愭爣*/
                     ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+                    if(StringUtils.isNull(cameras))
+                    {
+                        log.debug("鎵句笉鍒扮浉鏈�:"+cameraId);
+                        return;
+                    }
                     double[] cameraPositon = new double[3];
                     cameraPositon[0] = cameras.getLongitude();
                     cameraPositon[1] = cameras.getLatitude();
@@ -442,43 +511,30 @@
                     /*鎺у埗鐩告満宸℃*/
                     CameraCmd cmd = new CameraCmd();
                     cmd.setCameraId(cameraId);
-                    cmd.setChannelNum(channel);
-                    cmd.setCamPosition(cameraPositon);
+                    cmd.setChanNo(channel);
                     cmd.setTargetPosition(targetPositon);
                     cmd.setOperator("sys_patrol_inspect");
-                    cmd.setExpired(step.getRecordingTime());
-                    boolean setTargetPosition = hikClientService.setTargetPosition(cmd);
-                    if (setTargetPosition) {
-                        if(!Global.task_record.contains(ardVideoInspectTask.getId()))
-                        {
-                            /*鎺у埗鐩告満宸℃鎴愬姛锛屽紑濮嬪綍鍍�*/
-                            cmd.setEnable(true);//鍚姩褰曞儚
-                            hikClientService.recordToMinio(cmd);
-                            Global.task_record.add(ardVideoInspectTask.getId());
-                        }
-                        /*鏇存柊浠诲姟褰撳墠姝ラid鍜屾楠ゅ惎鍔ㄦ椂闂�*/
-                        ardVideoInspectTask.setCurrentStepId(step.getId());
-                        ardVideoInspectTask.setCurrentStepStartTime(DateUtils.getTime());
-                        ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
-                    } else {
-                        cmd.setEnable(false);//鍋滄褰曞儚
-                        cmd.setUploadMinio(true);
-                        hikClientService.recordToMinio(cmd);
+                    cmd.setExpired(step.getRecordingTime() * 60);
+                    boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
+                    if (!setTargetPosition) {
                         /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁ull*/
                         ardVideoInspectTask.setCurrentStepStartTime("");
-                        ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                    } else {
+                        log.debug("寮曞鎴愬姛!");
                     }
                 }
             }
         } catch (Exception ex) {
-            log.error("宸℃寮�濮嬪紓甯革細" + ex.getMessage());
+            log.error("宸℃灏濊瘯寮曞寮傚父锛�" + ex.getMessage());
         }
     }
+
     //姝ラ鍋滄
     private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
         try {
             String currentStepId = ardVideoInspectTask.getCurrentStepId();
-            log.info("姝ラ锛�" + currentStepId + "鍋滄");
+            log.debug("宸℃姝ラ锛�" + currentStepId + "鍋滄");
             if (StringUtils.isNull(currentStepId)) {
                 log.info("褰撳墠鍋滄宸℃姝ラid涓虹┖");
                 return;
@@ -494,25 +550,22 @@
                 /*鍋滄褰曞儚*/
                 CameraCmd cmd = new CameraCmd();
                 cmd.setCameraId(cameraId);
-                cmd.setChannelNum(channel);
+                cmd.setChanNo(channel);
                 cmd.setOperator("sys_patrol_inspect");
-                cmd.setEnable(false);//鍋滄褰曞儚
-                String uuid = UUID.randomUUID().toString().replace("-", "");
-                String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
-                String recordName = cameraId + "/" + time + "/" + uuid + ".mp4";
                 cmd.setRecordBucketName("record");
-                cmd.setRecordObjectName(recordName);
-                cmd.setUploadMinio(true);
-                hikClientService.recordToMinio(cmd);
-                Global.task_record.remove(ardVideoInspectTask.getId());
+                cmd.setRecordObjectName("inspect_" + IdUtils.fastSimpleUUID());
+                String url = cameraSdkService.recordStopToMinio(cmd);
                 /*鎻掑叆宸℃璁板綍*/
                 ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
                 ardVideoInspectRecord.setStepId(step.getId());
+                ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(step.getWellId());
+                if (StringUtils.isNotNull(ardAlarmpointsWell)) {
+                    ardVideoInspectRecord.setWellName(ardAlarmpointsWell.getWellId());
+                }
                 Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime);
                 Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, step.getRecordingTime());
                 ardVideoInspectRecord.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartDate));
                 ardVideoInspectRecord.setEndTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStopDate));
-                String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName;
                 ardVideoInspectRecord.setRecordFilePath(url);
                 ardVideoInspectRecordMapper.insertArdVideoInspectRecord(ardVideoInspectRecord);
             }
@@ -580,7 +633,7 @@
                         .findFirst()
                         .orElse(null);
                 avit.setCurrentStepId(nextStepId);
-                ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit);
+                ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(avit);
                 log.info("姝ラ锛�" + currentStepId + "鍒囨崲涓�" + nextStepId);
                 return nextStepId;
             }
@@ -594,6 +647,11 @@
         return ardVideoInspectTaskMapper.getTaskUsedCameraPeriods(cameraId);
     }
 
+    /**
+     * 鑾峰彇鐩告満鐨勭┖闂叉椂娈�
+     * @param cameraId
+     * @return
+     */
     public List getCameraIdleTimeList(String cameraId) {
         LinkedList<String> timeList = new LinkedList();
         List<Map> usedPeriods = this.getTaskUsedCameraPeriods(cameraId);
@@ -603,23 +661,26 @@
             timeList.add((String) p.get("end_time"));
         }
         //鍒ゆ柇绗竴涓捣濮嬬偣
-        if (timeList.getFirst().equals("00:00:00")) {
-            timeList.removeFirst();
-        } else {
-            timeList.addFirst("00:00:00");
-        }
-        //鍒ゆ柇鏈�鍚庝竴涓粨鏉熸椂闂�
-        if (timeList.getLast().equals("23:59:59")) {
-            timeList.removeLast();
-        } else {
-            timeList.addLast("23:59:59");
-        }
-        //浜嬩欢娈典负绌�,鍒欏叏澶╀綔涓轰竴涓椂闂存
-        if (timeList.size() == 0) {
-            timeList.add("00:00:00");
-            timeList.add("23:59:59");
+        if (timeList.size() > 0) {
+            if ("00:00:00".equals(timeList.getFirst())) {
+                timeList.removeFirst();
+            } else {
+                timeList.addFirst("00:00:00");
+            }
+            //鍒ゆ柇鏈�鍚庝竴涓粨鏉熸椂闂�
+            if ("23:59:59".equals(timeList.getLast())) {
+                timeList.removeLast();
+            } else {
+                timeList.addLast("23:59:59");
+            }
+            //浜嬩欢娈典负绌�,鍒欏叏澶╀綔涓轰竴涓椂闂存
+            if (timeList.size() == 0) {
+                timeList.add("00:00:00");
+                timeList.add("23:59:59");
+            }
+
         }
 
         return timeList;
     }
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3