‘liusuyi’
2023-06-01 113cf98d7d26460363d7ef13990623a775c636a2
优化光电巡检手动控制
已添加4个文件
已修改7个文件
已删除1个文件
442 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/common/global/globalVariable.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/controller/TaskController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTask.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-ard.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.device.hiksdk.common;
import com.ruoyi.device.hiksdk.domain.recordInfo;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
 * @ClassName: globalVariable
 * @Description: å…¨å±€å˜é‡
 * @Author: Administrator
 * @Date: 2023å¹´01月31日 17:05
 * @Version: 1.0
 **/
@Data
public class GlobalVariable {
    //保存相机登录信息
    public static Map<String, Integer> loginMap = new HashMap<>();
    //保存录像信息
    public static Map<Integer, recordInfo> user_real_Map = new HashMap<>();
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/common/global/globalVariable.java
ÎļþÒÑɾ³ý
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -86,8 +86,10 @@
    //手动录像
    String record(CameraCmd cmd);
    //手动录像
    void recordToMinio(CameraCmd cmd);
    //引导目标位置
    boolean setTargetPosition(CameraCmd cmd);
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -8,7 +8,7 @@
import com.ruoyi.constant.sdkPriority;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
import com.ruoyi.device.hiksdk.common.global.globalVariable;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
import com.ruoyi.device.hiksdk.domain.recordInfo;
@@ -54,7 +54,6 @@
    SysUserMapper sysUserMapper;
    private static HCNetSDK hCNetSDK;
    private static Map<Integer, recordInfo> user_real_Map = new HashMap<>();
    @Override
    public void loadHCNetSDKLib() {
@@ -133,10 +132,10 @@
            hCNetSDK.NET_DVR_Cleanup();
            camera.setLoginId(-1);
        }
        if (globalVariable.loginMap.containsKey(camera.getId())) {
            globalVariable.loginMap.remove(camera.getId());
        if (GlobalVariable.loginMap.containsKey(camera.getId())) {
            GlobalVariable.loginMap.remove(camera.getId());
        }
        globalVariable.loginMap.put(camera.getId(), lUserID);
        GlobalVariable.loginMap.put(camera.getId(), lUserID);
        camera.setLoginId(lUserID);
        camera.setChannel((int) m_strDeviceInfo.byStartChan);
@@ -194,13 +193,13 @@
     */
    @Override
    public boolean loginOut(String cameraId) {
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        boolean b = hCNetSDK.NET_DVR_Logout(userId);
        if (b) {
            globalVariable.loginMap.remove(cameraId);
            GlobalVariable.loginMap.remove(cameraId);
        }
        return b;
    }
@@ -213,10 +212,10 @@
    @Override
    public boolean isOnLine(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
        return isOnLine;
    }
@@ -239,10 +238,10 @@
        Integer channelNum = cmd.getChannelNum();
        Integer speed = cmd.getSpeed();
        Integer code = cmd.getCode();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        Integer dwStop;
        if (enable) {
            dwStop = 0;//开启
@@ -324,10 +323,10 @@
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        Integer dwFocusPos = cmd.getDwFocusPos();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG();
        Pointer point = focusmodeCfg.getPointer();
@@ -351,10 +350,10 @@
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return new HashMap<>();
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG();
        Pointer point = focusmodeCfg.getPointer();
@@ -385,10 +384,10 @@
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        Integer PresetIndex = cmd.getPresetIndex();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex);
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
@@ -408,10 +407,10 @@
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        Integer PresetIndex = cmd.getPresetIndex();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex);
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
@@ -432,10 +431,10 @@
    public String getVideoResolution(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return " ";
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        String ResResolution = "";
        NET_DVR_COMPRESSIONCFG_V30 resolution = new NET_DVR_COMPRESSIONCFG_V30();
@@ -538,10 +537,10 @@
    public Map<String, Object> getPtz(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return null;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
        Pointer pioint = m_ptzPosCurrent.getPointer();
@@ -590,10 +589,10 @@
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        Map<String, Double> ptz = cmd.getPtzMap();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
        m_ptzPosCurrent.wAction = 1;
        try {
@@ -622,10 +621,10 @@
    public boolean setTargetPosition(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
        m_ptzPosCurrent.wAction = 1;
        try {
@@ -736,10 +735,10 @@
    public int getPTZLockInfo(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return -1;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG();
        Pointer point = netDvrPtzLockcfg.getPointer();
        IntByReference ibrBytesReturned = new IntByReference(0);
@@ -769,10 +768,10 @@
    public boolean setZeroPtz(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL();
        initialpositionctrl.dwSize = initialpositionctrl.size();
@@ -801,10 +800,10 @@
    public Map<String, Object> getPtzScope(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return new HashMap<>();
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE();
        Pointer point = m_ptzPosCurrent.getPointer();
        IntByReference ibrBytesReturned = new IntByReference(0);
@@ -850,10 +849,10 @@
        String cameraId = cmd.getCameraId();
        boolean enable = cmd.isEnable();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX();
        Pointer point = struCameraParam.getPointer();
        IntByReference ibrBytesReturned = new IntByReference(0);
@@ -897,10 +896,10 @@
        String cameraId = cmd.getCameraId();
        boolean enable = cmd.isEnable();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX();
        Pointer point = struDayNigh.getPointer();
        IntByReference ibrBytesReturned = new IntByReference(0);
@@ -946,10 +945,10 @@
        String cameraId = cmd.getCameraId();
        boolean enable = cmd.isEnable();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
        Pointer point = struFocusMode.getPointer();
        IntByReference ibrBytesReturned = new IntByReference(0);
@@ -993,10 +992,10 @@
        String cameraId = cmd.getCameraId();
        boolean enable = cmd.isEnable();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        Integer dwStop;
        if (enable) {
            dwStop = 0;//开启
@@ -1027,10 +1026,10 @@
        String cameraId = cmd.getCameraId();
        boolean enable = cmd.isEnable();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG();
        Pointer point = struDeicing.getPointer();
        IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1065,10 +1064,10 @@
    public String captureJPEGPicture(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return "";
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
        if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) {
            // è¿”回Boolean值,判断是否获取设备能力
@@ -1137,10 +1136,10 @@
    public String picCutCate(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return "";
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        //图片信息
        NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
        //设置图片分辨率
@@ -1203,10 +1202,10 @@
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        boolean enable = cmd.isEnable();
        if (!globalVariable.loginMap.containsKey(cameraId)) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return "";
        }
        Integer userId = globalVariable.loginMap.get(cameraId);
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        String path = "";
        //预览参数
        NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
@@ -1220,7 +1219,7 @@
        previewinfo.write();
        int lRealHandle;
        if (enable) {
            if (!user_real_Map.containsKey(userId)) {
            if (!GlobalVariable.user_real_Map.containsKey(userId)) {
                lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
                if (lRealHandle == -1) {
                    int iErr = hCNetSDK.NET_DVR_GetLastError();
@@ -1249,9 +1248,9 @@
                recordInfo info = new recordInfo();
                info.setLRealHandle(lRealHandle);
                info.setRecordPath(path);
                user_real_Map.put(userId, info);
                GlobalVariable.user_real_Map.put(userId, info);
            }
            recordInfo info = user_real_Map.get(userId);
            recordInfo info = GlobalVariable.user_real_Map.get(userId);
            if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 1, info.getRecordPath())) {
                log.error("保存视频文件到临时文件夹失败 é”™è¯¯ç ä¸º:  " + hCNetSDK.NET_DVR_GetLastError());
                return "保存视频文件到临时文件夹失败 é”™è¯¯ç ä¸º:" + hCNetSDK.NET_DVR_GetLastError();
@@ -1260,7 +1259,7 @@
            //return info.getRecordPath();
            return "";
        } else {
            recordInfo info = user_real_Map.get(userId);
            recordInfo info = GlobalVariable.user_real_Map.get(userId);
            if (StringUtils.isNull(info)) {
                return "";
            }
@@ -1288,7 +1287,7 @@
            } catch (IOException ex) {
                log.error("上传文件异常:" + ex.getMessage());
            }
            user_real_Map.remove(userId);
            GlobalVariable.user_real_Map.remove(userId);
            return url;
        }
    }
@@ -1299,10 +1298,10 @@
            String cameraId = cmd.getCameraId();
            Integer channelNum = cmd.getChannelNum();
            boolean enable = cmd.isEnable();
            if (!globalVariable.loginMap.containsKey(cameraId)) {
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return;
            }
            Integer userId = globalVariable.loginMap.get(cameraId);
            Integer userId = GlobalVariable.loginMap.get(cameraId);
            String path = "";
            //强制I帧结构体对象
            HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //新建结构体对象
@@ -1327,7 +1326,7 @@
            previewinfo.write();
            int lRealHandle;
            if (enable) {
                if (!user_real_Map.containsKey(userId)) {
                if (!GlobalVariable.user_real_Map.containsKey(userId)) {
                    lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
                    if (lRealHandle == -1) {
                        log.error("取流失败" + hCNetSDK.NET_DVR_GetLastError());
@@ -1346,16 +1345,16 @@
                    recordInfo info = new recordInfo();
                    info.setLRealHandle(lRealHandle);
                    info.setRecordPath(path);
                    user_real_Map.put(userId, info);
                    GlobalVariable.user_real_Map.put(userId, info);
                }
                recordInfo info = user_real_Map.get(userId);
                recordInfo info = GlobalVariable.user_real_Map.get(userId);
                if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 2, info.getRecordPath())) {
                    log.error("保存视频文件到临时文件夹失败 é”™è¯¯ç ä¸º:  " + hCNetSDK.NET_DVR_GetLastError());
                    return;
                }
                log.info("录像开始");
            } else {
                recordInfo info = user_real_Map.get(userId);
                recordInfo info = GlobalVariable.user_real_Map.get(userId);
                if (StringUtils.isNull(info)) {
                    return;
                }
@@ -1369,7 +1368,7 @@
                boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType);
                if (b) {
                    log.info("上传文件成功!" + MinioClientSingleton.domainUrl + "/"+ BucketName + "/" + ObjectName);
                    user_real_Map.remove(userId);
                    GlobalVariable.user_real_Map.remove(userId);
                }
            }
        } catch (Exception ex) {
ard-work/src/main/java/com/ruoyi/inspect/controller/TaskController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.ruoyi.inspect.controller;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.inspect.domain.ArdVideoInspectTask;
import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
import com.ruoyi.inspect.service.impl.InspectionTaskManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.Set;
/**
 * @Description: å·¡æ£€ä»»åŠ¡
 * @ClassName: TaskController
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月01日9:19
 * @Version: 1.0
 **/
@RestController
@Api(tags = "巡检任务")
@Anonymous
public class TaskController {
    @Autowired
    private InspectionTaskManager inspectionTaskManager;
    @GetMapping("/startTask/{taskId}")
    @ApiOperation("手动开启巡检")
    AjaxResult startTask(@PathVariable String taskId) {
        // å¼€å¯å·¡æ£€ä»»åŠ¡
        inspectionTaskManager.startInspectionTask(taskId);
        return AjaxResult.success();
    }
    @ApiOperation("手动停止巡检")
    @GetMapping("/stopTask/{taskId}")
    AjaxResult stopTask(@PathVariable String taskId) {
        // åœæ­¢å·¡æ£€ä»»åŠ¡
        inspectionTaskManager.stopInspectionTask(taskId);
        return AjaxResult.success();
    }
    @ApiOperation("查询已启动任务")
    @GetMapping("/getTaskList")
    AjaxResult getTaskList() {
        // åœæ­¢å·¡æ£€ä»»åŠ¡
        Set<String> taskIds = inspectionTaskManager.getTaskMap().keySet();
        return AjaxResult.success(taskIds);
    }
}
ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java
@@ -69,7 +69,7 @@
    /**
     * æ‰‹åŠ¨å·¡æ£€ä»»åŠ¡
     */
    public void manualTaskRun();
    public void manualTaskRun(String TaskId);
    /**
     * å·¡æ£€ä»»åŠ¡
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -163,38 +163,33 @@
     * æ‰‹åŠ¨å·¡æ£€ä»»åŠ¡
     */
    @Override
    public void manualTaskRun() {
        /*扫描所有可执行任务1-时间满足2-自动*/
        ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask();
        ardVideoInspectTask.setInspectMode("手动");
        ardVideoInspectTask.setMenualSwitch("开");
        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(ardVideoInspectTask);
        for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
            /*获取当前任务的所有巡检步骤*/
            List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(videoInspectTask.getId()).getArdVideoInspectTaskStepList();
            if (ardVideoInspectTaskStepList.size() == 0) {
                continue;
    public void manualTaskRun(String TaskId) {
        ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId);
        if (videoInspectTask.getArdVideoInspectTaskStepList().size() == 0) {
            return;
        }
        String currentStepId = videoInspectTask.getCurrentStepId();
        String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
        if (StringUtils.isNull(currentStepId)||StringUtils.isEmpty(currentStepId)) {
            //从1号步骤开始
            videoInspectTask.setCurrentStepId(videoInspectTask.getArdVideoInspectTaskStepList().get(0).getId());
            if(InspectionTaskManager.taskMap.containsKey(TaskId)) {
                startRunStep(videoInspectTask);
            }
            videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList);
            String currentStepId = videoInspectTask.getCurrentStepId();
            if (StringUtils.isNull(currentStepId)) {
                videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
                startRunStep(videoInspectTask);//开始当前任务的第一个步骤
            } else /*当前任务已经执行,判断是否到期*/ {
                if (StringUtils.isNull(videoInspectTask.getCurrentStepStartTime())) {
                    //当前任务启动时间为null,则说明当前步骤被中断,直接启动当前步骤
        } else /*当前任务已经执行,判断是否到期*/ {
            if (StringUtils.isNull(currentStepStartTime)||StringUtils.isEmpty(currentStepStartTime)) {
                //当前任务启动时间为null,则说明当前步骤被中断,直接启动当前步骤
                startRunStep(videoInspectTask);
            } else {
                boolean expird = isExpirdStep(videoInspectTask); /*判断当前步骤时间是否过期*/
                if (expird) {
                    //停止录像
                    stopRunStep(videoInspectTask);
                    //切换步骤
                    String nextStepId = changeNextStep(videoInspectTask);
                    //开始下一步骤
                    videoInspectTask.setCurrentStepId(nextStepId);
                    startRunStep(videoInspectTask);
                } else {
                    boolean expird = isExpirdStep(videoInspectTask); /*判断当前步骤时间是否过期*/
                    if (expird) {
                        //停止录像
                        stopRunStep(videoInspectTask);
                        //切换步骤
                        String nextStepId = changeNextStep(videoInspectTask);
                        //开始下一步骤
                        videoInspectTask.setCurrentStepId(nextStepId);
                        startRunStep(videoInspectTask);
                    }
                }
            }
        }
@@ -244,6 +239,7 @@
            }
        }
    }
    @Override
    public void taskRun() {
        /*扫描所有可执行任务1-时间满足2-自动*/
@@ -346,7 +342,7 @@
                        ArdVideoInspectTask avit = new ArdVideoInspectTask();
                        avit.setId(ardVideoInspectTask.getId());
                        avit.setCurrentStepId(step.getId());
                        avit.setCurrentStepStartTime(null);
                        avit.setCurrentStepStartTime("");
                        ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit);
                    }
                }
ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.ruoyi.inspect.service.impl;
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.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
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.hiksdk.service.IHikClientService;
import com.ruoyi.inspect.domain.ArdVideoInspectRecord;
import com.ruoyi.inspect.domain.ArdVideoInspectTask;
import com.ruoyi.inspect.domain.ArdVideoInspectTaskStep;
import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper;
import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper;
import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.thymeleaf.spring5.context.SpringContextUtils;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
/**
 * @Description:
 * @ClassName: InspectionTaskImpl
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月01日8:57
 * @Version: 1.0
 **/
@Slf4j(topic = "PatrolInspectionTask")
class InspectionTask implements Runnable {
    private String taskId;
    private boolean isRunning;
    public InspectionTask(String taskId) {
        this.taskId = taskId;
        this.isRunning = false;
    }
    public void start() {
        isRunning = true;
        Thread thread = new Thread(this);
        thread.start();
    }
    public void stop() {
        isRunning = false;
    }
    @Override
    public void run() {
        while (isRunning) {
            // å·¡æ£€ä»»åŠ¡çš„å…·ä½“é€»è¾‘
            log.debug("巡检任务执行中:" + taskId);
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            ArdVideoInspectTaskServiceImpl ardVideoInspectTaskService = SpringUtils.getBean(ArdVideoInspectTaskServiceImpl.class);
            ardVideoInspectTaskService.manualTaskRun(taskId);
        }
    }
}
ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.ruoyi.inspect.service.impl;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.device.hiksdk.service.impl.HikClientServiceImpl;
import com.ruoyi.inspect.domain.ArdVideoInspectTask;
import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
 * @Description:
 * @ClassName: InspectionTaskManager
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月01日10:40
 * @Version: 1.0
 **/
@Component
@Slf4j(topic = "PatrolInspectionTask")
public class InspectionTaskManager {
    @Resource
    ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
    @Resource
    private IHikClientService hikClientService;
    public static Map<String, InspectionTask> taskMap;
    public InspectionTaskManager() {
        taskMap = new HashMap<>();
    }
    public Map<String, InspectionTask> getTaskMap() {
        return taskMap;
    }
    public void startInspectionTask(String taskId) {
        ArdVideoInspectTask ardVideoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(taskId);
        ardVideoInspectTask.setCurrentStepId("");
        ardVideoInspectTask.setCurrentStepStartTime("");
        ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
        InspectionTask task = new InspectionTask(taskId);
        task.start();
        taskMap.put(taskId, task);
        log.info("巡检任务已启动:" + taskId);
    }
    public void stopInspectionTask(String taskId) {
        ArdVideoInspectTask ardVideoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(taskId);
        ardVideoInspectTask.setCurrentStepId("");
        ardVideoInspectTask.setCurrentStepStartTime("");
        ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
        Integer userId = GlobalVariable.loginMap.get(ardVideoInspectTask.getCameraId());//获取当前相机的登录ID
        if( GlobalVariable.user_real_Map.containsKey(userId))
        {   //当前相机正在录像,则停止录像
            CameraCmd cmd = new CameraCmd();
            cmd.setCameraId(ardVideoInspectTask.getCameraId());
            cmd.setChannelNum(ardVideoInspectTask.getChannel());
            cmd.setEnable(false);//停止录像
            hikClientService.recordToMinio(cmd);
        }
        InspectionTask task = taskMap.get(taskId);
        if (task != null) {
            task.stop();
            taskMap.remove(taskId);
            log.info("巡检任务已停止:" + taskId);
        } else {
            log.info("找不到指定的巡检任务:" + taskId);
        }
    }
}
ruoyi-admin/src/main/resources/application-ard.yml
@@ -1,6 +1,6 @@
# minio配置
minio:
  endpoint: http://192.168.1.55:9001
  endpoint: http://192.168.1.15:9001
  accessKey: admin
  secretKey: xzx12345
# forest配置
ruoyi-admin/src/main/resources/application.yml
@@ -70,7 +70,7 @@
  # redis é…ç½®
  redis:
    # åœ°å€
    host: 192.168.1.55
    host: 192.168.1.15
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java
@@ -38,7 +38,7 @@
    //巡检任务
    public void scanRun() {
        ardVideoInspectTaskService.taskRun();
        ardVideoInspectTaskService.autoTaskRun();
    }
    //自动巡检任务