From 5b017324148ea92d96f9f16ade215463d6c712e5 Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期六, 10 八月 2024 14:15:02 +0800 Subject: [PATCH] 优化:海康大华sdk断线重连机制 --- ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java | 133 ++++++++++++++++++++++++++++++-------------- 1 files changed, 91 insertions(+), 42 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java index e3904b4..5ca32d2 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java @@ -11,6 +11,7 @@ import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.camera.service.ICameraSdkService; + import com.ruoyi.device.noguidezone.domain.ArdCameraNoGuideZone; import com.ruoyi.device.noguidezone.service.IArdCameraNoGuideZoneService; import com.ruoyi.utils.gis.GisUtil; @@ -22,9 +23,11 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import java.util.Map; /** * @Description: 鐩告満閫氱敤SDK鎺ュ彛 @@ -43,8 +46,10 @@ private ICameraSdkService cameraSdkService; @Resource private IArdCamerasService ardCamerasService; + @Autowired private IArdCameraNoGuideZoneService ardCameraNoGuideZoneService; + @RequestMapping("/preview") private String preview() { @@ -91,7 +96,7 @@ public @ResponseBody AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.pTZControl(cmd)); + return cameraSdkService.pTZControl(cmd); } @ApiOperation("璋冪敤棰勭疆鐐�") @@ -101,7 +106,7 @@ public @ResponseBody AjaxResult gotoPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.gotoPreset(cmd)); + return cameraSdkService.gotoPreset(cmd); } @ApiOperation("璁剧疆棰勭疆鐐�") @@ -111,7 +116,7 @@ public @ResponseBody AjaxResult setPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.setPreset(cmd)); + return cameraSdkService.setPreset(cmd); } @ApiOperation("鑾峰彇鑱氱劍鍊�") @@ -121,8 +126,7 @@ public @ResponseBody AjaxResult getFocusPos(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - int focus = cameraSdkService.getFocusPos(cmd); - return AjaxResult.success("鑾峰彇鑱氱劍鍊�", focus); + return cameraSdkService.getFocusPos(cmd); } @ApiOperation("璁剧疆鑱氱劍鍊�") @@ -132,7 +136,7 @@ public @ResponseBody AjaxResult setFocusPos(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.setFocusPos(cmd)); + return cameraSdkService.setFocusPos(cmd); } @ApiOperation("鑾峰彇PTZ") @@ -142,8 +146,7 @@ public @ResponseBody AjaxResult getPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - Map<String, Object> ptzMap = cameraSdkService.getPtz(cmd); - return AjaxResult.success("鑾峰彇ptz", ptzMap); + return cameraSdkService.getPtz(cmd); } @ApiOperation("鑾峰彇PTZ鑼冨洿") @@ -153,8 +156,7 @@ public @ResponseBody AjaxResult getPTZScope(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - Map<String, Object> ptzMap = cameraSdkService.getPtzScope(cmd); - return AjaxResult.success("鑾峰彇ptz鑼冨洿", ptzMap); + return cameraSdkService.getPtzScope(cmd); } @ApiOperation("璁剧疆PTZ") @@ -164,7 +166,7 @@ public @ResponseBody AjaxResult setPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.setPtz(cmd)); + return cameraSdkService.setPtz(cmd); } @ApiOperation("鎸囧悜鐩爣") @@ -177,33 +179,42 @@ //鎷︽埅鎵嬪姩寮曞 ArdCameraNoGuideZone ardCameraNoGuideZone = new ArdCameraNoGuideZone(); ardCameraNoGuideZone.setCameraId(cmd.getCameraId()); + ardCameraNoGuideZone.setEnabled("1"); //鑾峰彇褰撳墠鐩告満鐨勭寮曞彲瑙嗗煙鍒楄〃 List<ArdCameraNoGuideZone> ardCameraNoGuideZones = ardCameraNoGuideZoneService.selectArdCameraNoGuideZoneList(ardCameraNoGuideZone); if (ardCameraNoGuideZones.size() > 0) { //鑾峰彇鍒板綋鍓嶇浉鏈虹殑鍧愭爣闆嗗悎 - List<Point> pointList = new ArrayList<>(); - for(ArdCameraNoGuideZone zone:ardCameraNoGuideZones) { + for (ArdCameraNoGuideZone zone : ardCameraNoGuideZones) { String[] parts = zone.getPoi().split(","); + List<Point> pointList = new ArrayList<>(); for (int i = 0; i < parts.length; i += 3) { Point point = new Point(); point.setLongitude(Double.valueOf(parts[i])); point.setLatitude(Double.valueOf(parts[i + 1])); pointList.add(point); } - } - double lon = cmd.getTargetPosition()[0]; - double lat = cmd.getTargetPosition()[1]; - Point targetPoint = new Point(lon, lat); - //鍒ゆ柇寮曞鐩爣鏄惁鍦ㄥ潗鏍囬泦鍚堢粍鎴愮殑澶氳竟褰㈠唴 - boolean inPolygon = GisUtil.isInPolygon(targetPoint, pointList); - if(inPolygon) - { - return AjaxResult.error("寮曞鍧愭爣浣嶄簬绂佸紩鍙鍩熷唴"); + double lon = cmd.getTargetPosition()[0]; + double lat = cmd.getTargetPosition()[1]; + Point targetPoint = new Point(lon, lat); + //鍒ゆ柇寮曞鐩爣鏄惁鍦ㄥ潗鏍囬泦鍚堢粍鎴愮殑澶氳竟褰㈠唴 + boolean inPolygon = GisUtil.isInPolygon(targetPoint, pointList); + if (inPolygon) { + return AjaxResult.error("寮曞鍧愭爣浣嶄簬绂佸紩鍙鍩熷唴"); + } } } - return toAjax(cameraSdkService.guideTargetPosition(cmd)); + return cameraSdkService.guideTargetPosition(cmd); } + @ApiOperation("鎸囧悜鐩爣浜�") + @PostMapping("/setTargetWell") + @Log(title = "鎸囧悜鐩爣浜�", businessType = BusinessType.CONTROL) + @ApiOperationSupport(includeParameters = {"cmd.wellId"}) + public @ResponseBody + AjaxResult setTargetWell(@RequestBody CameraCmd cmd) { + cmd.setOperator(SecurityUtils.getUserId()); + return cameraSdkService.guideTargetWell(cmd); + } @ApiOperation("璁剧疆闆舵柟浣嶈") @PostMapping("/setZeroPTZ") @@ -212,7 +223,7 @@ public @ResponseBody AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.setZeroPtz(cmd)); + return cameraSdkService.setZeroPtz(cmd); } @ApiOperation("璁剧疆閿佸畾") @@ -222,7 +233,7 @@ public @ResponseBody AjaxResult setPTZLock(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return AjaxResult.success(cameraSdkService.controlLock(cmd)); + return cameraSdkService.controlLock(cmd); } @ApiOperation("璁剧疆瑙i攣") @@ -232,7 +243,7 @@ public @ResponseBody AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return AjaxResult.success(cameraSdkService.controlUnLock(cmd)); + return cameraSdkService.controlUnLock(cmd); } @ApiOperation("鑾峰彇浜戝彴閿佸畾淇℃伅") @@ -242,7 +253,8 @@ public @ResponseBody AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - int byWorkMode = cameraSdkService.getPTZLockInfo(cmd); + AjaxResult ajaxResult = cameraSdkService.getPTZLockInfo(cmd); + Integer byWorkMode = (Integer) ajaxResult.get("msg"); if (byWorkMode == 0) { return AjaxResult.success("浜戝彴閿佸畾鐘舵�侊細瑙i攣"); } else if (byWorkMode == 1) { @@ -259,7 +271,7 @@ public @ResponseBody AjaxResult defogcfg(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlDefogcfg(cmd)); + return cameraSdkService.controlDefogcfg(cmd); } @ApiOperation("绾㈠寮�鍏�") @@ -269,7 +281,7 @@ public @ResponseBody AjaxResult infrarecfg(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlInfrarecfg(cmd)); + return cameraSdkService.controlInfrarecfg(cmd); } @ApiOperation(value = "鎵嬪姩/鑷姩鑱氱劍", notes = "true鎵嬪姩flase鑷姩") @@ -279,7 +291,7 @@ public @ResponseBody AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlFocusMode(cmd)); + return cameraSdkService.controlFocusMode(cmd); } @ApiOperation(value = "鑾峰彇鑱氱劍妯″紡", notes = "1鎵嬪姩2鑷姩") @@ -288,8 +300,7 @@ public @ResponseBody AjaxResult getFocusMode(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - String focusMode = cameraSdkService.getFocusMode(cmd); - return AjaxResult.success(focusMode); + return cameraSdkService.getFocusMode(cmd); } @ApiOperation("浜戝彴鍔犵儹") @@ -299,7 +310,7 @@ public @ResponseBody AjaxResult heateRpwron(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlPTHeateRpwron(cmd)); + return cameraSdkService.controlPTHeateRpwron(cmd); } @@ -310,7 +321,7 @@ public @ResponseBody AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlCameraDeicing(cmd)); + return cameraSdkService.controlCameraDeicing(cmd); } @ApiOperation("鐩告満鎶撳浘") @@ -324,6 +335,20 @@ return toAjaxString(path, "鐩告満鎶撳浘"); } + @ApiOperation("鏈湴鎶撳浘") + @PostMapping("/localCapture") + @Log(title = "鐩告満鎶撳浘", businessType = BusinessType.CONTROL) + @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) + public @ResponseBody + void localCapture(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { + cmd.setOperator(SecurityUtils.getUserId()); + response.setContentType("image/jpeg"); + AjaxResult result = cameraSdkService.localCapture(cmd); + OutputStream outputStream = response.getOutputStream(); + byte[] data = (byte[]) result.get("data"); + outputStream.write(data); + } + @ApiOperation("鑾峰彇鐩告満鏋惰鍙傛暟") @PostMapping("/getGisInfo") @Log(title = "鑾峰彇鐩告満鏋惰鍙傛暟", businessType = BusinessType.CONTROL) @@ -331,13 +356,13 @@ public @ResponseBody AjaxResult getGisInfo(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return AjaxResult.success(cameraSdkService.getGisInfo(cmd)); + return cameraSdkService.getGisInfo(cmd); } - @ApiOperation("褰曞儚") + //@ApiOperation("褰曞儚") @PostMapping("/record") @Log(title = "鎵嬪姩褰曞儚寮�濮�", businessType = BusinessType.CONTROL) - @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) + //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult record(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); @@ -345,10 +370,10 @@ return AjaxResult.success(url); } - @ApiOperation("鎵嬪姩褰曞儚寮�濮�") + //@ApiOperation("鎵嬪姩褰曞儚寮�濮�") @PostMapping("/recordStart") @Log(title = "鎵嬪姩褰曞儚寮�濮�", businessType = BusinessType.CONTROL) - @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) + //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult recordStart(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); @@ -356,14 +381,38 @@ return toAjax(b); } - @ApiOperation("鎵嬪姩褰曞儚鍋滄") + //@ApiOperation("鎵嬪姩褰曞儚鍋滄") @PostMapping("/recordStop") @Log(title = "鎵嬪姩褰曞儚鍋滄", businessType = BusinessType.CONTROL) - @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.recordBucketName", "cmd.recordObjectName"}) + //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.recordBucketName", "cmd.recordObjectName"}) public @ResponseBody AjaxResult recordStop(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); String url = cameraSdkService.recordStopToMinio(cmd); return AjaxResult.success(url); } + + @ApiOperation("鏈湴褰曞儚寮�濮�") + @PostMapping("/localRecordStart") + @Log(title = "鏈湴褰曞儚寮�濮�", businessType = BusinessType.CONTROL) + @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) + public @ResponseBody + AjaxResult localRecordStart(@RequestBody CameraCmd cmd) { + cmd.setOperator(SecurityUtils.getUserId()); + return cameraSdkService.localRecordStart(cmd); + } + + @ApiOperation("鏈湴褰曞儚鍋滄") + @PostMapping("/localRecordStop") + @Log(title = "鏈湴褰曞儚鍋滄", businessType = BusinessType.CONTROL) + @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.recordId"}) + public @ResponseBody + void localRecordStop(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { + cmd.setOperator(SecurityUtils.getUserId()); + response.setContentType("video/mp4"); + AjaxResult result = cameraSdkService.localRecordStop(cmd); + byte[] recordBytes = (byte[]) result.get("data"); + OutputStream outputStream = response.getOutputStream(); + outputStream.write(recordBytes); + } } -- Gitblit v1.9.3