ard-work/src/main/java/com/ruoyi/constant/Global.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.constant; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Description: å ¨å±ç±» * @ClassName: Global * @Author: åèä¹ * @Date: 2023å¹´06æ03æ¥10:30 * @Version: 1.0 **/ public class Global { public static List<String> task_record=new ArrayList<>(); } ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.constant.sdkPriority; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; @@ -1302,7 +1303,6 @@ return; } Integer userId = GlobalVariable.loginMap.get(cameraId); String path = ""; //强å¶Iå¸§ç»æä½å¯¹è±¡ HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡ netDvrIFrame.read(); @@ -1310,7 +1310,6 @@ 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()); } @@ -1333,15 +1332,8 @@ return; } log.info("åæµæå"); File file = new File("D:/recordTemp/" + cameraId + ".mp4"); if (!file.exists()) { File fileParent = file.getParentFile(); if (!fileParent.exists()) { fileParent.mkdirs(); } file.createNewFile(); } path = file.getCanonicalPath(); String path= FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); recordInfo info = new recordInfo(); info.setLRealHandle(lRealHandle); info.setRecordPath(path); ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -5,6 +5,7 @@ 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.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; @@ -13,6 +14,7 @@ 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; @@ -51,12 +53,14 @@ @PostConstruct public void initTask() { List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(new ArdVideoInspectTask()); /*å¯å¨åå°æææå¨ä»»å¡ç½®ä¸ºå ³é*/ for (ArdVideoInspectTask ardVideoInspectTask : ardVideoInspectTasks) { /*å¯å¨åå°æææå¨ä»»å¡ç½®ä¸ºå ³é,ææä»»å¡å½åæ¥éª¤ä¿¡æ¯æ¸ 空*/ if (ardVideoInspectTask.getInspectMode().equals("æå¨")) { ardVideoInspectTask.setMenualSwitch("å ³"); ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); } ardVideoInspectTask.setCurrentStepId(""); ardVideoInspectTask.setCurrentStepStartTime(""); ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); } } @@ -325,6 +329,22 @@ } } } 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.isEmpty(videoInspectTask.getCurrentStepId()) || StringUtils.isEmpty(videoInspectTask.getCurrentStepStartTime())) { continue; } @@ -429,25 +449,24 @@ 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 avit = new ArdVideoInspectTask(); avit.setId(ardVideoInspectTask.getId()); avit.setCurrentStepId(step.getId()); avit.setCurrentStepStartTime(DateUtils.getTime()); ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit); ardVideoInspectTask.setCurrentStepId(step.getId()); ardVideoInspectTask.setCurrentStepStartTime(DateUtils.getTime()); ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); } else { cmd.setEnable(false);//忢å½å cmd.setUploadMinio(true); hikClientService.recordToMinio(cmd); /*æ§å¶å¤±è´¥,å½åæ¥éª¤å¯å¨æ¶é´ç½®null*/ ArdVideoInspectTask avit = new ArdVideoInspectTask(); avit.setId(ardVideoInspectTask.getId()); avit.setCurrentStepId(step.getId()); avit.setCurrentStepStartTime(""); ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit); ardVideoInspectTask.setCurrentStepStartTime(""); ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); } } } @@ -455,7 +474,6 @@ log.error("å·¡æ£å¼å§å¼å¸¸ï¼" + ex.getMessage()); } } //æ¥éª¤åæ¢ private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) { try { @@ -486,6 +504,7 @@ cmd.setRecordObjectName(recordName); cmd.setUploadMinio(true); hikClientService.recordToMinio(cmd); Global.task_record.remove(ardVideoInspectTask.getId()); /*æå ¥å·¡æ£è®°å½*/ ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord(); ardVideoInspectRecord.setStepId(step.getId()); ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
@@ -1,5 +1,6 @@ package com.ruoyi.inspect.service.impl; import com.ruoyi.constant.Global; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.hiksdk.service.IHikClientService; @@ -53,7 +54,21 @@ ardVideoInspectTask.setCurrentStepId(""); ardVideoInspectTask.setCurrentStepStartTime(""); ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); /*å°å ³èçç¸æºå½åå ³é*/ if( Global.task_record.contains(taskId)) { // 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);//忢å½å // cmd.setUploadMinio(false); // hikClientService.recordToMinio(cmd); // } Global.task_record.remove(taskId); } InspectionTask task = new InspectionTask(taskId); task.start(); taskMap.put(taskId, task); @@ -76,6 +91,7 @@ cmd.setEnable(false);//忢å½å cmd.setUploadMinio(false); hikClientService.recordToMinio(cmd); GlobalVariable.user_real_Map.remove(userId); } InspectionTask task = taskMap.get(taskId); if (task != null) { ard-work/src/main/resources/mapper/inspect/ArdVideoInspectRecordMapper.xml
@@ -33,6 +33,7 @@ <select id="selectArdVideoInspectRecordListByStartTime" parameterType="ArdVideoInspectRecord" resultType="java.util.HashMap"> select r.*,s.well_id,w.well_id as well_name from ard_video_inspect_record r ,ard_video_inspect_task_step s,ard_alarmpoints_well w where start_time like ('${startTime}%') and r.step_id = s.id and s.well_id = w.id order by start_time desc </select> <!--ææä»½ç»è®¡æä»¶æ°é--> <select id="selectArdVideoInspectRecordCountByStartMonth" parameterType="String" resultType="java.util.HashMap"> ard-work/src/main/resources/mapper/inspect/ArdVideoInspectTaskMapper.xml
@@ -51,7 +51,7 @@ <if test="cameraId != null and cameraId != ''"> and camera_id = #{cameraId}</if> <if test="channel != null "> and channel = #{channel}</if> </where> order by id order by start_time </select> <select id="selectArdVideoInspectTaskById" parameterType="String" resultMap="ArdVideoInspectTaskArdVideoInspectTaskStepResult"> ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
@@ -11,6 +11,7 @@ import java.nio.charset.StandardCharsets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; import com.ruoyi.common.config.ARDConfig; @@ -24,8 +25,7 @@ * * @author ruoyi */ public class FileUtils { public class FileUtils { public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; /** @@ -35,30 +35,22 @@ * @param os è¾åºæµ * @return */ public static void writeBytes(String filePath, OutputStream os) throws IOException { public static void writeBytes(String filePath, OutputStream os) throws IOException { FileInputStream fis = null; try { try { File file = new File(filePath); if (!file.exists()) { if (!file.exists()) { throw new FileNotFoundException(filePath); } fis = new FileInputStream(file); byte[] b = new byte[1024]; int length; while ((length = fis.read(b)) > 0) { while ((length = fis.read(b)) > 0) { os.write(b, 0, length); } } catch (IOException e) { } catch (IOException e) { throw e; } finally { } finally { IOUtils.close(os); IOUtils.close(fis); } @@ -71,8 +63,7 @@ * @return ç®æ æä»¶ * @throws IOException IOå¼å¸¸ */ public static String writeImportBytes(byte[] data) throws IOException { public static String writeImportBytes(byte[] data) throws IOException { return writeBytes(data, ARDConfig.getImportPath()); } @@ -84,20 +75,16 @@ * @return ç®æ æä»¶ * @throws IOException IOå¼å¸¸ */ public static String writeBytes(byte[] data, String uploadDir) throws IOException { public static String writeBytes(byte[] data, String uploadDir) throws IOException { FileOutputStream fos = null; String pathName = ""; try { try { String extension = getFileExtendName(data); pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); fos = new FileOutputStream(file); fos.write(data); } finally { } finally { IOUtils.close(fos); } return FileUploadUtils.getPathFileName(uploadDir, pathName); @@ -109,13 +96,11 @@ * @param filePath æä»¶ * @return */ public static boolean deleteFile(String filePath) { public static boolean deleteFile(String filePath) { boolean flag = false; File file = new File(filePath); // è·¯å¾ä¸ºæä»¶ä¸ä¸ä¸ºç©ºåè¿è¡å é¤ if (file.isFile() && file.exists()) { if (file.isFile() && file.exists()) { flag = file.delete(); } return flag; @@ -127,8 +112,7 @@ * @param filename æä»¶åç§° * @return true æ£å¸¸ false éæ³ */ public static boolean isValidFilename(String filename) { public static boolean isValidFilename(String filename) { return filename.matches(FILENAME_PATTERN); } @@ -138,17 +122,14 @@ * @param resource éè¦ä¸è½½çæä»¶ * @return true æ£å¸¸ false éæ³ */ public static boolean checkAllowDownload(String resource) { public static boolean checkAllowDownload(String resource) { // ç¦æ¢ç®å½ä¸è·³çº§å« if (StringUtils.contains(resource, "..")) { if (StringUtils.contains(resource, "..")) { return false; } // æ£æ¥å 许ä¸è½½çæä»¶è§å if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) { if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) { return true; } @@ -163,28 +144,20 @@ * @param fileName æä»¶å * @return ç¼ç åçæä»¶å */ public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { final String agent = request.getHeader("USER-AGENT"); String filename = fileName; if (agent.contains("MSIE")) { if (agent.contains("MSIE")) { // IEæµè§å¨ filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { } else if (agent.contains("Firefox")) { // ç«çæµè§å¨ filename = new String(fileName.getBytes(), "ISO8859-1"); } else if (agent.contains("Chrome")) { } else if (agent.contains("Chrome")) { // googleæµè§å¨ filename = URLEncoder.encode(filename, "utf-8"); } else { } else { // å ¶å®æµè§å¨ filename = URLEncoder.encode(filename, "utf-8"); } @@ -197,8 +170,7 @@ * @param response ååºå¯¹è±¡ * @param realFileName ç宿件å */ public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { String percentEncodedFileName = percentEncode(realFileName); StringBuilder contentDispositionValue = new StringBuilder(); @@ -220,8 +192,7 @@ * @param s éè¦ç¾åå·ç¼ç çå符串 * @return ç¾åå·ç¼ç åçå符串 */ public static String percentEncode(String s) throws UnsupportedEncodingException { public static String percentEncode(String s) throws UnsupportedEncodingException { String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); return encode.replaceAll("\\+", "%20"); } @@ -232,24 +203,16 @@ * @param photoByte å¾åæ°æ® * @return åç¼å */ public static String getFileExtendName(byte[] photoByte) { public static String getFileExtendName(byte[] photoByte) { String strFileExtendName = "jpg"; if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) { && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) { strFileExtendName = "gif"; } else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) { } else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) { strFileExtendName = "jpg"; } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) { } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) { strFileExtendName = "bmp"; } else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) { } else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) { strFileExtendName = "png"; } return strFileExtendName; @@ -261,10 +224,8 @@ * @param fileName è·¯å¾åç§° * @return 没ææä»¶è·¯å¾çåç§° */ public static String getName(String fileName) { if (fileName == null) { public static String getName(String fileName) { if (fileName == null) { return null; } int lastUnixPos = fileName.lastIndexOf('/'); @@ -279,13 +240,34 @@ * @param fileName è·¯å¾åç§° * @return 没ææä»¶è·¯å¾ååç¼çåç§° */ public static String getNameNotSuffix(String fileName) { if (fileName == null) { public static String getNameNotSuffix(String fileName) { if (fileName == null) { return null; } String baseName = FilenameUtils.getBaseName(fileName); return baseName; } /** * å建ä¸ä¸ªæä»¶è·åæä»¶è·¯å¾ * * @param fileName è·¯å¾åç§° * @return æä»¶è·¯å¾ååç¼çåç§° */ public static String createFile(String fileName) { try { File file = new File(fileName); if (!file.exists()) { File fileParent = file.getParentFile(); if (!fileParent.exists()) { fileParent.mkdirs(); } file.createNewFile(); } return file.getCanonicalPath(); } catch (Exception ex) { return ""; } } }