From a32771ab13277ab24e4a88ddd2b75fb0224907b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Mon, 8 Jan 2024 14:43:20 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=BD=95=E5=83=8F=E5=90=8D=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?uuid=E9=98=B2=E6=AD=A2=E9=87=8D=E5=90=8D=202.=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=90=83=E6=9C=BA=E9=80=9A=E9=81=93=E4=BF=A1=E6=81=AF=EF=BC=88?= =?UTF-8?q?=E5=BD=95=E5=83=8F=E6=9C=BA=E8=A7=86=E9=A2=91=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=EF=BC=89=203.=E7=90=83=E6=9C=BA=E8=BF=9E=E6=8E=A5=E9=87=87?= =?UTF-8?q?=E7=94=A8=E5=AE=9A=E6=97=B6=EF=BC=88=E6=AF=8F=E5=88=86=E9=92=9F?= =?UTF-8?q?=EF=BC=89=E5=8E=BB=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=88=B0=EF=BC=8C=E4=B8=8D=E5=86=8D=E8=BF=90=E7=94=A8?= =?UTF-8?q?=E6=89=8D=E5=8E=BB=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CameraControlController.java | 21 +++++- .../java/com/leaper/web/entity/Camera.java | 1 + .../leaper/web/lib/CameraControlModule.java | 1 + .../lib/hik/HikCameraControlModuleImpl.java | 20 ++++++ .../JoywareCameraControlModuleImpl.java | 30 +++++++++ .../com/leaper/web/service/CameraService.java | 19 +++--- .../java/com/leaper/web/service/CronTab.java | 64 +++++++++++++++++++ 7 files changed, 145 insertions(+), 11 deletions(-) diff --git a/web/src/main/java/com/leaper/web/controller/CameraControlController.java b/web/src/main/java/com/leaper/web/controller/CameraControlController.java index 4639b73..b810f9a 100644 --- a/web/src/main/java/com/leaper/web/controller/CameraControlController.java +++ b/web/src/main/java/com/leaper/web/controller/CameraControlController.java @@ -26,6 +26,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; @Api(value = "CameraControl",tags = "球机控制管理") @@ -373,12 +374,30 @@ public class CameraControlController { @PostMapping("/mp4/record") @ApiOperation(value = "录像") public Result record(@RequestBody CameraRecord cameraRecord) { + Camera camera = cameraMapper.selectById(cameraRecord.getCameraId()); + checkLogin(cameraRecord.getCameraId()); + String url ="work/"+cameraRecord.getStartTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+"-"+ UUID.randomUUID() +".mp4"; + cameraRecord.setPath(url); + cameraRecordMapper.insert(cameraRecord); + ConfigProperties.SavePath savePath = configProperties.getSavePath(); + if (camera.getChannel() ==1){ + cameraControlModule.downloadMp4(cameraRecord.getCameraId(),"D:\\"+url, cameraRecord.getStartTime(),cameraRecord.getEndTime(),savePath); + }else { + Camera cameraNvr = cameraMapper.selectOne(new QueryWrapper().eq("type", 2)); + cameraControlModule.downloadMp4(cameraNvr.getId(), "D:\\" + url, cameraRecord.getStartTime(), cameraRecord.getEndTime(), savePath, camera.getChannel()); + } + return Result.success(configProperties.getServerOpenInfo().getDomain()+url); + } + + @PostMapping("/mp4/record1") + @ApiOperation(value = "录像") + public Result record1(@RequestBody CameraRecord cameraRecord) { checkLogin(cameraRecord.getCameraId()); String url ="work/"+cameraRecord.getStartTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".mp4"; cameraRecord.setPath(url); cameraRecordMapper.insert(cameraRecord); ConfigProperties.SavePath savePath = configProperties.getSavePath(); - cameraControlModule.downloadMp4(cameraRecord.getCameraId(),"D:\\"+url, cameraRecord.getStartTime(),cameraRecord.getEndTime(),savePath); + cameraControlModule.downloadMp4(cameraRecord.getCameraId(),"D:\\"+url, cameraRecord.getStartTime(),cameraRecord.getEndTime(),savePath,33); return Result.success(configProperties.getServerOpenInfo().getDomain()+url); } diff --git a/web/src/main/java/com/leaper/web/entity/Camera.java b/web/src/main/java/com/leaper/web/entity/Camera.java index 153dc2d..0815a0e 100644 --- a/web/src/main/java/com/leaper/web/entity/Camera.java +++ b/web/src/main/java/com/leaper/web/entity/Camera.java @@ -43,5 +43,6 @@ public class Camera { private LocalDateTime updateTime; private Integer rtspPort; + private Integer channel =1; private Integer cameraType = 1; } diff --git a/web/src/main/java/com/leaper/web/lib/CameraControlModule.java b/web/src/main/java/com/leaper/web/lib/CameraControlModule.java index a81b2fd..15471b1 100644 --- a/web/src/main/java/com/leaper/web/lib/CameraControlModule.java +++ b/web/src/main/java/com/leaper/web/lib/CameraControlModule.java @@ -110,6 +110,7 @@ public interface CameraControlModule { void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath); + void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath,Integer channel); /** * 设置预置点 * diff --git a/web/src/main/java/com/leaper/web/lib/hik/HikCameraControlModuleImpl.java b/web/src/main/java/com/leaper/web/lib/hik/HikCameraControlModuleImpl.java index b4d365e..9006b7b 100644 --- a/web/src/main/java/com/leaper/web/lib/hik/HikCameraControlModuleImpl.java +++ b/web/src/main/java/com/leaper/web/lib/hik/HikCameraControlModuleImpl.java @@ -278,8 +278,28 @@ public class HikCameraControlModuleImpl implements CameraControlModule { Timer downloadtimer = new Timer(); downloadtimer.schedule(new DownloadTask(result,downloadtimer,path,cameraId,savePath), 0, 5000); } + } + + + public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath,Integer channel) { + + PathUtil.checkDirc(path); + HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME(); + startTime.setTime(start.getYear(), start.getMonthValue(), start.getDayOfMonth(), start.getHour(), start.getMinute(), start.getSecond()); + HCNetSDK.NET_DVR_TIME endTime = new HCNetSDK.NET_DVR_TIME(); + endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond()); + log.info("start download mp4 path:{} ,cameraId:{},start_time:{},end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime()); + int lUserID = CameraConnMap.getConnId(cameraId).intValue(); + int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(lUserID, channel, startTime, endTime, path); + if (result == -1) { + log.error("downloadMp4 error code:{},cameraId:{},path:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path); + } else { + HikLoginModuleImpl.hcNetsdk.NET_DVR_PlayBackControl(result, HikLoginModuleImpl.hcNetsdk.NET_DVR_PLAYSTART,0,null); + Timer downloadtimer = new Timer(); + downloadtimer.schedule(new DownloadTask(result,downloadtimer,path,cameraId,savePath), 0, 5000); + } } class DownloadTask extends java.util.TimerTask { diff --git a/web/src/main/java/com/leaper/web/lib/joyware/JoywareCameraControlModuleImpl.java b/web/src/main/java/com/leaper/web/lib/joyware/JoywareCameraControlModuleImpl.java index 7650626..3747ebf 100644 --- a/web/src/main/java/com/leaper/web/lib/joyware/JoywareCameraControlModuleImpl.java +++ b/web/src/main/java/com/leaper/web/lib/joyware/JoywareCameraControlModuleImpl.java @@ -306,6 +306,36 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule { } } + + public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath,Integer channel) { + + PathUtil.checkDirc(path); + NetSDKLib.NET_TIME startTime = new NetSDKLib.NET_TIME(); + startTime.setTime(start.getYear(), start.getMonthValue(), start.getDayOfMonth(), start.getHour(), start.getMinute(), start.getSecond()); + NetSDKLib.NET_TIME endTime = new NetSDKLib.NET_TIME(); + endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond()); + + NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE download_by_data_type = new NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE(); + download_by_data_type.nChannelID = 0; + download_by_data_type.stStartTime = startTime; + download_by_data_type.stStopTime = endTime; + download_by_data_type.szSavedFileName = path; + download_by_data_type.emDataType = 3; + download_by_data_type.emRecordType = 0; + download_by_data_type.cbDownLoadPos = mp4ReceiveCB; + download_by_data_type.write(); + NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE net_out_download_by_data_type = new NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE(); + net_out_download_by_data_type.write(); + + NetSDKLib.LLong l = JoywareLoginModuleImpl.netsdk.CLIENT_DownloadByDataType(CameraConnMap.getConnId(cameraId), download_by_data_type.getPointer(), net_out_download_by_data_type.getPointer(), 8000); + if(l.longValue() != 0){ + log.info("start download mp4 path:{},startTime:{} ,endTime:{},now:{},status:{},cameraId:{}", path, start, end, LocalDateTime.now(),l.longValue(),cameraId); + }else { + + log.error("download mp4 error:{},startTime:{} ,endTime:{},cameraId:{}",ToolKits.getErrorCodePrint(),start,end,cameraId); + } + } + /** * 设置预置点 * diff --git a/web/src/main/java/com/leaper/web/service/CameraService.java b/web/src/main/java/com/leaper/web/service/CameraService.java index 0163ef9..53ca857 100644 --- a/web/src/main/java/com/leaper/web/service/CameraService.java +++ b/web/src/main/java/com/leaper/web/service/CameraService.java @@ -111,16 +111,11 @@ public class CameraService { public PageInfo cameras(StreetSearch streetSearch) { PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize()); List cameras = cameraMapper.selectByMap(new HashMap<>(0)); - if (cameras.size() > 0) { - CountDownLatch latch = new CountDownLatch(cameras.size()); - cameras.forEach(camera -> { - StatusThread statusThread = new StatusThread(camera, latch); - statusThread.start(); - }); - try { - latch.await(); - } catch (InterruptedException e) { - e.printStackTrace(); + for(Camera camera : cameras){ + if (CameraConnMap.cameraMap.containsKey(camera.getId())) { + camera.setStatus("连接成功"); + } else { + camera.setStatus("未连接"); } } @@ -141,7 +136,11 @@ public class CameraService { try { Boolean ok = false; if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) { + if(CameraConnMap.getConnId(camera.getId()) ==null){ + cameraLogin(camera); + } ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue()); + } else { ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId())); } diff --git a/web/src/main/java/com/leaper/web/service/CronTab.java b/web/src/main/java/com/leaper/web/service/CronTab.java index 11eba80..12d7aa0 100644 --- a/web/src/main/java/com/leaper/web/service/CronTab.java +++ b/web/src/main/java/com/leaper/web/service/CronTab.java @@ -4,9 +4,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.SftpATTRS; import com.leaper.web.config.ConfigProperties; +import com.leaper.web.entity.Camera; import com.leaper.web.entity.LightSource; import com.leaper.web.entity.OrderLive; import com.leaper.web.entity.PicData; +import com.leaper.web.lib.CameraConnMap; +import com.leaper.web.lib.hik.HikLoginModuleImpl; +import com.leaper.web.lib.joyware.JoywareLoginModuleImpl; +import com.leaper.web.mapper.CameraMapper; import com.leaper.web.mapper.LightSourceMapper; import com.leaper.web.mapper.OrderLiveMapper; import com.leaper.web.mapper.PicDataMapper; @@ -31,12 +36,16 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.concurrent.CountDownLatch; @Component @EnableScheduling @Slf4j public class CronTab { + + @Resource + private CameraMapper cameraMapper; @Resource private ConfigProperties configProperties; @Resource @@ -89,6 +98,61 @@ public class CronTab { } } + @Scheduled(cron = "0 * * * * ?") + //@Scheduled(cron = "0 0/1 * * * *") + public void cameraConn() { + log.info("球机连接判断"); + List cameras = cameraMapper.selectByMap(new HashMap<>(0)); + if (cameras.size() > 0) { + CountDownLatch latch = new CountDownLatch(cameras.size()); + cameras.forEach(camera -> { + StatusThread statusThread = new StatusThread(camera, latch); + statusThread.start(); + }); + try { + latch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + + public class StatusThread extends Thread { + private Camera camera; + private CountDownLatch latch; + + public StatusThread(Camera camera, CountDownLatch latch) { + this.camera = camera; + this.latch = latch; + } + + @Override + public void run() { + try { + Boolean ok = false; + if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) { + ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue()); + } else { + ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId())); + } + + if (ok) { + camera.setStatus("连接正常"); + } else { + CameraConnMap.disConn(camera.getId()); + camera.setStatus("未连接"); + } + } catch (Exception e) { + CameraConnMap.disConn(camera.getId()); + camera.setStatus("未连接"); + } finally { + latch.countDown(); + } + } + } + + public static void putTime(Integer streetId){ lightTimeMap.put(streetId,System.currentTimeMillis()); }