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 | 147 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 116 insertions(+), 31 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 b19b27c..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,13 +11,23 @@ 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; +import com.ruoyi.utils.gis.Point; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; 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鎺ュ彛 @@ -36,6 +46,9 @@ private ICameraSdkService cameraSdkService; @Resource private IArdCamerasService ardCamerasService; + + @Autowired + private IArdCameraNoGuideZoneService ardCameraNoGuideZoneService; @RequestMapping("/preview") @@ -83,7 +96,7 @@ public @ResponseBody AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.pTZControl(cmd)); + return cameraSdkService.pTZControl(cmd); } @ApiOperation("璋冪敤棰勭疆鐐�") @@ -93,7 +106,7 @@ public @ResponseBody AjaxResult gotoPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.gotoPreset(cmd)); + return cameraSdkService.gotoPreset(cmd); } @ApiOperation("璁剧疆棰勭疆鐐�") @@ -103,7 +116,7 @@ public @ResponseBody AjaxResult setPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.setPreset(cmd)); + return cameraSdkService.setPreset(cmd); } @ApiOperation("鑾峰彇鑱氱劍鍊�") @@ -113,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("璁剧疆鑱氱劍鍊�") @@ -124,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") @@ -134,9 +146,9 @@ 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鑼冨洿") @PostMapping("/getPTZScope") @Log(title = "鑾峰彇PTZ鑼冨洿", businessType = BusinessType.CONTROL) @@ -144,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") @@ -155,7 +166,7 @@ public @ResponseBody AjaxResult setPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.setPtz(cmd)); + return cameraSdkService.setPtz(cmd); } @ApiOperation("鎸囧悜鐩爣") @@ -165,9 +176,45 @@ public @ResponseBody AjaxResult setTargetPosition(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.guideTargetPosition(cmd)); + //鎷︽埅鎵嬪姩寮曞 + ArdCameraNoGuideZone ardCameraNoGuideZone = new ArdCameraNoGuideZone(); + ardCameraNoGuideZone.setCameraId(cmd.getCameraId()); + ardCameraNoGuideZone.setEnabled("1"); + //鑾峰彇褰撳墠鐩告満鐨勭寮曞彲瑙嗗煙鍒楄〃 + List<ArdCameraNoGuideZone> ardCameraNoGuideZones = ardCameraNoGuideZoneService.selectArdCameraNoGuideZoneList(ardCameraNoGuideZone); + if (ardCameraNoGuideZones.size() > 0) { + //鑾峰彇鍒板綋鍓嶇浉鏈虹殑鍧愭爣闆嗗悎 + 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("寮曞鍧愭爣浣嶄簬绂佸紩鍙鍩熷唴"); + } + } + } + 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") @@ -176,7 +223,7 @@ public @ResponseBody AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.setZeroPtz(cmd)); + return cameraSdkService.setZeroPtz(cmd); } @ApiOperation("璁剧疆閿佸畾") @@ -186,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攣") @@ -196,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("鑾峰彇浜戝彴閿佸畾淇℃伅") @@ -206,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) { @@ -223,7 +271,7 @@ public @ResponseBody AjaxResult defogcfg(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlDefogcfg(cmd)); + return cameraSdkService.controlDefogcfg(cmd); } @ApiOperation("绾㈠寮�鍏�") @@ -233,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鑷姩") @@ -243,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鑷姩") @@ -252,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("浜戝彴鍔犵儹") @@ -263,7 +310,7 @@ public @ResponseBody AjaxResult heateRpwron(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlPTHeateRpwron(cmd)); + return cameraSdkService.controlPTHeateRpwron(cmd); } @@ -274,7 +321,7 @@ public @ResponseBody AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(cameraSdkService.controlCameraDeicing(cmd)); + return cameraSdkService.controlCameraDeicing(cmd); } @ApiOperation("鐩告満鎶撳浘") @@ -288,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) @@ -295,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()); @@ -309,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()); @@ -320,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