diff --git a/storeroom/src/main/java/com/storeroom/modules/device/controller/CameraController.java b/storeroom/src/main/java/com/storeroom/modules/device/controller/CameraController.java index 36f8155..4eed0d8 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/controller/CameraController.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/controller/CameraController.java @@ -7,22 +7,30 @@ import com.storeroom.annotaion.rest.AnonymousPostMapping; import com.storeroom.annotaion.rest.AnonymousPutMapping; import com.storeroom.exception.BaseException; import com.storeroom.modules.device.domain.DeviceCamerBind; +import com.storeroom.modules.device.service.CameraInfoService; import com.storeroom.modules.device.service.DeviceCamerBindService; import com.storeroom.modules.device.service.DeviceService; import com.storeroom.modules.device.service.dto.DeviceCamerBindCrieria; import com.storeroom.modules.device.service.dto.DeviceInfoDto; import com.storeroom.utils.ApiResponse; +import com.storeroom.utils.FileUtil; import com.storeroom.utils.StringUtils; import com.storeroom.utils.enums.ResponseStatus; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Pageable; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; import java.util.List; import java.util.Set; @@ -35,7 +43,10 @@ public class CameraController { private final DeviceService deviceService; private final DeviceCamerBindService deviceCamerBindService; + private final CameraInfoService cameraInfoService; + @Value("${file.windows.path}") + private String path; @ApiOperation("创建摄像机") @AnonymousPostMapping("create") @@ -97,6 +108,13 @@ public class CameraController { return ApiResponse.success(ResponseStatus.SUCCESS); } + @ApiOperation("下载视频") + @AnonymousGetMapping("download") + public void downloadVideo(@RequestParam("fileName") String fileName, HttpServletResponse response, HttpServletRequest request) { + File file = new File(path + "/videos/", fileName); + FileUtil.downloadFile(request, response, file, false); + } + /** * 验证必填值 * diff --git a/storeroom/src/main/java/com/storeroom/modules/device/controller/DeviceController.java b/storeroom/src/main/java/com/storeroom/modules/device/controller/DeviceController.java index 42ba66c..b4ed59c 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/controller/DeviceController.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/controller/DeviceController.java @@ -2,21 +2,16 @@ package com.storeroom.modules.device.controller; import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.annotation.JsonProperty; + import com.storeroom.annotaion.rest.AnonymousDeleteMapping; import com.storeroom.annotaion.rest.AnonymousGetMapping; import com.storeroom.annotaion.rest.AnonymousPostMapping; import com.storeroom.exception.BaseException; -import com.storeroom.modules.device.domain.AlarmDeseCaBinetLog; -import com.storeroom.modules.device.domain.DeviceInfo; -import com.storeroom.modules.device.service.ArchivesCasesService; -import com.storeroom.modules.device.service.DeviceService; -import com.storeroom.modules.device.service.OperatingStateService; +import com.storeroom.modules.device.domain.*; +import com.storeroom.modules.device.service.*; import com.storeroom.modules.storeroom3d.service.AlarmInfoService; import com.storeroom.modules.storeroom3d.service.ThirdApiService; -import com.storeroom.utils.ApiResponse; -import com.storeroom.utils.HttpUtils; -import com.storeroom.utils.StringUtils; +import com.storeroom.utils.*; import com.storeroom.utils.enums.ResponseStatus; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -30,10 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; @RestController @RequiredArgsConstructor @@ -46,6 +38,8 @@ public class DeviceController { private final ArchivesCasesService archivesCaseService; private final AlarmInfoService alarmInfoService; private final ThirdApiService thirdApiService; + private final CameraInfoService cameraInfoService; + private final DeviceCamerBindService deviceCamerBindService; @ApiOperation("获取所有设备") @AnonymousGetMapping("all") @@ -121,7 +115,7 @@ public class DeviceController { JSONObject json = new JSONObject(); json.put("StoreCode", storeroomCode); - json.put("QuNo",QuNo); + json.put("QuNo", QuNo); try { HashMap llmap = new HashMap<>(); llmap.put("Content-type", "application/json"); @@ -129,7 +123,7 @@ public class DeviceController { "POST", llmap, null, json.toJSONString()); String retust = EntityUtils.toString(response.getEntity()); count = deviceService.getDeviceTypeNum("DD656054BE3D1DF1E2F1FC"); - }catch (Exception e){ + } catch (Exception e) { count = 0; } // Object obj = thirdApiService.getCabinetState(url1, storeroomCode, QuNo); @@ -166,8 +160,31 @@ public class DeviceController { @ApiOperation("第三方对接-上传密集架报警信息") @AnonymousPostMapping("log") public Object deseCabinetAlarmLog(@RequestBody AlarmDeseCaBinetLog alarmDeseCaBinetLog) { - + if (StringUtils.isEmpty(alarmDeseCaBinetLog.getI64Ts())) { + alarmDeseCaBinetLog.setI64Ts(DateUtils.getNowTimeInMillis()); + } deviceService.upLoadAlarmLog(alarmDeseCaBinetLog); + + //只记录报警日志下载视频,操作开架视频下载由自己接口提供 + if (alarmDeseCaBinetLog.getUsLevel() == 1) { + List cameraInfoList = new ArrayList<>(); + + List list = deviceCamerBindService.queryStoreroomCode(alarmDeseCaBinetLog.getStoreCode()); + list.forEach(item -> { + CameraInfo cameraInfo = new CameraInfo(); + cameraInfo.setId(NanoIdUtils.randomNanoId()); + cameraInfo.setDeviceCamerBindId(item); + cameraInfo.setDescription(alarmDeseCaBinetLog.getCContext()); + cameraInfo.setEvent("密集架报警"); + //循环从第三方设备下载视频到服务器 + String fileName = deviceCamerBindService.downloadVideo(alarmDeseCaBinetLog.getI64Ts(), item.getDeviceInfoId(), item.getId()); + cameraInfo.setDownloadLink(fileName); + cameraInfoList.add(cameraInfo); + + + }); + cameraInfoService.createAll(cameraInfoList); + } Map objectMap = new HashMap<>(); objectMap.put("code", ""); objectMap.put("errorinfo", ""); diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/CameraInfoService.java b/storeroom/src/main/java/com/storeroom/modules/device/service/CameraInfoService.java index c3137ac..e6eb27c 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/CameraInfoService.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/CameraInfoService.java @@ -4,20 +4,22 @@ import com.storeroom.modules.device.domain.CameraInfo; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; public interface CameraInfoService { /** * 创建视频监控信息 + * * @param cameraInfo */ void create(CameraInfo cameraInfo); /** - * 下载视频 - * @param response - * @throws IOException + * 创建视频监控信息 + * @param cameraInfoList */ - void downloadVideo(HttpServletResponse response) throws IOException; + void createAll(List cameraInfoList); + } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/CameraInfoServiceImpl.java b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/CameraInfoServiceImpl.java index 6c11eb6..d9b139f 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/CameraInfoServiceImpl.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/CameraInfoServiceImpl.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; @Service @RequiredArgsConstructor @@ -19,12 +20,13 @@ public class CameraInfoServiceImpl implements CameraInfoService { @Override public void create(CameraInfo cameraInfo) { - - + cameraInfoRepository.save(cameraInfo); } @Override - public void downloadVideo(HttpServletResponse response) throws IOException { - + public void createAll(List cameraInfoList) { + cameraInfoRepository.saveAll(cameraInfoList); } + + } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceCamerBindImpl.java b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceCamerBindImpl.java index 58d7670..599f7dd 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceCamerBindImpl.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceCamerBindImpl.java @@ -10,6 +10,7 @@ import com.storeroom.modules.device.service.dto.DeviceCamerBindCrieria; import com.storeroom.modules.storeroom3d.config.common.VideoClient; import com.storeroom.utils.*; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -28,6 +29,9 @@ public class DeviceCamerBindImpl implements DeviceCamerBindService { private final DeviceCamerBindRepository deviceCamerBindRepository; private final DeviceInfoRepository deviceInfoRepository; + @Value("${file.windows.path}") + private String path; + @Override public void bind(List deviceCamerBind) { @@ -71,6 +75,7 @@ public class DeviceCamerBindImpl implements DeviceCamerBindService { } + @Override public List queryStoreroomCode(String storeroomCode) { return deviceCamerBindRepository.findByStoreroomCode(storeroomCode); @@ -101,9 +106,8 @@ public class DeviceCamerBindImpl implements DeviceCamerBindService { VideoClient videoClient = new VideoClient(); int result = videoClient.LogonDevice(deviceInfo.getDeviceIp(), deviceInfo.getDevicePort(), deviceInfo.getDeviceAccount(), deviceInfo.getDevicePassword()); if (result == 0) { - String i = deviceInfo.getVideoRoute(); - videoClient.PlaybackByTimespanMode(strStartTime, strEndTime, Integer.parseInt(deviceInfo.getVideoRoute())); - return "成功"; + + return videoClient.PlaybackByTimespanMode(strStartTime, strEndTime, Integer.parseInt(deviceInfo.getVideoRoute()), path); } throw new BaseException("无法连接该设备"); } diff --git a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java b/storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java index 03bceec..c81409b 100644 --- a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java +++ b/storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java @@ -8,6 +8,9 @@ import com.storeroom.modules.storeroom3d.config.common.NVSSDK.*; import com.storeroom.utils.DateUtils; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; import java.io.File; import java.io.FileOutputStream; @@ -21,6 +24,7 @@ public class VideoClient { int m_iCurrentCount = 0; String[] suffix = {".sdv", "", "", ".ps", "", "", ".ts"}; + public void LogonNotify(String strIP, String strID, int iLogonID, int iLogonState) { String strMsg = new String(); m_iLogonID = -1; @@ -164,7 +168,6 @@ public class VideoClient { return 0; } - ; /** * 登录设备 @@ -271,20 +274,20 @@ public class VideoClient { } - public int PlaybackByTimespanMode(String startTime, String endTime, int iChannelNO) { + public String PlaybackByTimespanMode(String startTime, String endTime, int iChannelNO, String path) { DOWNLOAD_TIMESPAN tDownloadTimeSpan = new DOWNLOAD_TIMESPAN(); tDownloadTimeSpan.m_iSize = tDownloadTimeSpan.size(); - //Scanner scanInput = new Scanner(System.in); - //System.out.print("请输入录像文件类型(sdv=0;PS=3;TS=6):"); int iSaveFileType = 6; tDownloadTimeSpan.m_iSaveFileType = iSaveFileType; tDownloadTimeSpan.m_iFileFlag = 0; //0:Download multiple files 1:Download into a single file + //判断文件夹是否存在 - File file = new File("videos/"); + File file = new File(path + "/videos/"); if (!file.exists() && !file.isDirectory()) { file.mkdirs(); } - String strLocalSaveFileName = new String(file + "/" + DateUtils.getNowTimeInMillis() + "" + suffix[iSaveFileType]); + String fileName = DateUtils.getNowTimeInMillis() + "" + suffix[iSaveFileType]; + String strLocalSaveFileName = file + "/" + DateUtils.getNowTimeInMillis() + "" + suffix[iSaveFileType]; tDownloadTimeSpan.m_cLocalFilename = strLocalSaveFileName.getBytes(); tDownloadTimeSpan.m_iChannelNO = iChannelNO; //通道号按实际下载的设备通道号赋值 tDownloadTimeSpan.m_iStreamNo = 0; //码流号:0-主码流,1-副码流 @@ -328,6 +331,6 @@ public class VideoClient { System.err.println("NetFileDownload:DOWNLOAD_CMD_TIMESPAN fail! iRet=" + iRet); } - return iRet; + return fileName; } }