liusuyi
2026-05-12 9f327c33730ba10cb2d89aff99b727502232e968
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
package com.ard.work.device.camera.controller;
 
import com.ard.common.core.domain.R;
import com.ard.common.core.web.controller.BaseController;
import com.ard.common.core.web.domain.AjaxResult;
import com.ard.common.log.annotation.Log;
import com.ard.common.log.enums.BusinessType;
import com.ard.common.security.annotation.InnerAuth;
import com.ard.common.security.utils.SecurityUtils;
import com.ard.work.api.domian.CameraCmd;
import com.ard.work.api.domian.PtzDto;
import com.ard.work.api.domian.VideoCompressionCfg;
import com.ard.work.sdk.model.PtzScope;
import com.ard.work.sdk.service.CameraSDKService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.*;
 
import java.io.IOException;
import java.io.OutputStream;
 
/**
 * @Description: 相机通用SDK接口
 * @ClassName: CameraSdkController
 * @Author: 刘苏义
 * @Date: 2023年10月14日17:02:56
 **/
 
@Tag(name = "相机通用SDK接口")
@RestController
@RequestMapping("/cameraSdk")
public class CameraSdkController extends BaseController {
 
    @Resource
    private CameraSDKService cameraSDK;
 
    @Operation(summary = "获取码流压缩参数")
    @PostMapping("/getVideoCompressionCfg")
    public R<VideoCompressionCfg> getVideoCompressionCfg(@RequestBody CameraCmd cmd) {
        return R.ok(cameraSDK.getVideoCompressionCfg(cmd));
    }
 
    @Operation(summary = "在线状态")
    @PostMapping("/state")
    public AjaxResult getOnlineState(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean onLine = cameraSDK.isOnLine(cmd);
        return AjaxResult.success(onLine);
    }
 
    @Operation(summary = "云台控制", description = "Code:1-左上 2-上 ... 16-雨刷开启")
    @PostMapping("/PTZControlWithSpeed")
    public AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        // 调用统一 SDK
        Boolean success = cameraSDK.pTZControl(cmd);
        // 根据返回值返回 AjaxResult
        return Boolean.TRUE.equals(success) ? AjaxResult.success("云台控制成功") : AjaxResult.warn("云台控制失败");
    }
 
 
    @Operation(summary = "调用预置点")
    @PostMapping("/gotoPreset")
    public AjaxResult gotoPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.gotoPreset(cmd);
        return success ? AjaxResult.success("调用预置点成功")
                : AjaxResult.warn("调用预置点失败");
    }
 
    @Operation(summary = "设置预置点")
    @PostMapping("/setPreset")
    public AjaxResult setPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.setPreset(cmd);
        return success ? AjaxResult.success("设置预置点成功")
                : AjaxResult.warn("设置预置点失败");
    }
 
    @Operation(summary = "获取聚焦值")
    @PostMapping("/getFocusPos")
    public AjaxResult getFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        Integer focus = cameraSDK.getFocusPos(cmd);
        if (focus != null) {
            return AjaxResult.success("获取聚焦值成功", focus);
        } else {
            return AjaxResult.warn("获取聚焦值失败");
        }
    }
 
 
    @Operation(summary = "设置聚焦值")
    @PostMapping("/setFocusPos")
    public AjaxResult setFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        // 调用底层 SDK(返回 Boolean)
        return cameraSDK.setFocusPos(cmd) ? AjaxResult.success("设置聚焦值成功") : AjaxResult.warn("设置聚焦值失败");
    }
 
    @InnerAuth
    @PostMapping("/getPTZ/rpc")
    public R<PtzDto> getPTZRpc(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        return R.ok(cameraSDK.getPtz(cmd));
    }
 
    @Operation(summary = "获取PTZ")
    @PostMapping("/getPTZ")
    public AjaxResult getPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        PtzDto ptzDto = cameraSDK.getPtz(cmd);
        if (ptzDto == null) {
            return AjaxResult.error("获取PTZ失败");
        }
        return AjaxResult.success(ptzDto);
    }
 
    @Operation(summary = "获取PTZ范围")
    @PostMapping("/getPTZScope")
    public AjaxResult getPTZScope(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        PtzScope ptzScope = cameraSDK.getPtzScope(cmd);
        return ptzScope != null ? AjaxResult.success(ptzScope) : AjaxResult.error("获取PTZ范围失败");
    }
 
    @Operation(summary = "设置PTZ")
    @PostMapping("/setPTZ")
    public AjaxResult setPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        return cameraSDK.setPtz(cmd) ? AjaxResult.success("设置PTZ成功") : AjaxResult.error("设置PTZ失败");
    }
 
    @Operation(summary = "3D定位")
    @PostMapping("/set3DPosition")
    public AjaxResult set3DPosition(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        return cameraSDK.set3DPosition(cmd) ? AjaxResult.success("3D定位成功") : AjaxResult.error("3D定位失败");
    }
 
    @InnerAuth
    @PostMapping("/setPTZ/rpc")
    public R<Boolean> setPTZRpc(@RequestBody CameraCmd cmd) {
//        cmd.setOperator(SecurityUtils.getUserId().toString());
        return R.ok(cameraSDK.setPtz(cmd));
    }
 
 
    @Operation(summary = "设置零方位角")
    @PostMapping("/setZeroPTZ")
    public AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        return cameraSDK.setZeroPtz(cmd) ? AjaxResult.success("设置零方位角成功") : AjaxResult.error("设置零方位角失败");
    }
 
    @Operation(summary = "透雾开关")
    @PostMapping("/defogcfg")
    public AjaxResult controlDefog(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.controlDefog(cmd);
        return success ? AjaxResult.success("透雾切换成功")
                : AjaxResult.warn("透雾切换失败");
    }
 
 
    @Operation(summary = "查询透雾状态")
    @PostMapping("/isEnableDefog")
    public AjaxResult isEnableDefog(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        // SDK 层返回 Boolean
        Boolean enabled = cameraSDK.isEnableDefog(cmd);
        return AjaxResult.success(enabled ? "开启" : "关闭", enabled);
    }
 
 
    @Operation(summary = "红外开关")
    @PostMapping("/infrarecfg")
    public AjaxResult controlInfrared(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.controlInfrared(cmd);
        return success ? AjaxResult.success("红外切换成功")
                : AjaxResult.warn("红外切换失败");
    }
 
    @Operation(summary = "查询红外状态")
    @PostMapping("/isEnableInfrared")
    public AjaxResult isEnableInfrared(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        // SDK 层返回 Boolean
        Boolean enabled = cameraSDK.isEnableInfrared(cmd);
        return AjaxResult.success(enabled ? "开启" : "关闭", enabled);
    }
 
    @Operation(summary = "手动/自动聚焦", description = "true 手动 false 自动")
    @PostMapping("/focusMode")
    public AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        Boolean enabled = cameraSDK.controlFocusMode(cmd);
        return AjaxResult.success(enabled ? "设置成功" : "设置失败");
    }
 
    @Operation(summary = "获取聚焦模式", description = "true 手动 false 自动")
    @PostMapping("/getFocusMode")
    public AjaxResult getFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        Boolean enabled = cameraSDK.getFocusMode(cmd);
        return AjaxResult.success(enabled ? "手动" : "自动", enabled);
    }
 
    @Operation(summary = "云台加热")
    @PostMapping("/controlPTHeater")
    public AjaxResult controlPTHeater(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.controlPTHeater(cmd);
        return success ? AjaxResult.success("云台加热成功")
                : AjaxResult.warn("云台加热失败");
    }
 
 
    @Operation(summary = "镜头加热")
    @PostMapping("/cameraDeicing")
    public AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.controlCameraDeicing(cmd);
        return success ? AjaxResult.success("镜头加热成功")
                : AjaxResult.warn("镜头加热失败");
    }
 
    @Operation(summary = "相机抓图")
    @PostMapping("/picCutCate")
    public R<?> picCutCate(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        String path = cameraSDK.picCutCate(cmd);
        return R.ok(path, "相机抓图成功");
    }
 
    @InnerAuth
    @PostMapping("/picCutCate/rpc/{bucketName}/{objectName}")
    public R<String> picCutCateRpc(@RequestBody CameraCmd cmd, @PathVariable("bucketName") String bucketName,
                                   @PathVariable("objectName") String objectName) {
//        cmd.setOperator(SecurityUtils.getUserId().toString());
        String path = cameraSDK.picCutCate(cmd, bucketName, objectName).toString();
        return R.ok(path, "相机抓图");
    }
 
    @Operation(summary = "本地抓图")
    @PostMapping("/localCapture")
    public void localCapture(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        response.setContentType("image/jpeg");
        byte[] data = cameraSDK.localCapture(cmd);
        OutputStream outputStream = response.getOutputStream();
        outputStream.write(data);
    }
 
    @Operation(summary = "获取相机架设参数")
    @PostMapping("/getGisInfo")
    public AjaxResult getGisInfo(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        return AjaxResult.success(cameraSDK.getGisInfo(cmd));
    }
 
    @Operation(summary = "云台锁定")
    @PostMapping("/setPTZLockInfo")
    public AjaxResult setPTZLockInfo(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.setPTZLockInfo(cmd);
        return success ? AjaxResult.success("云台锁定成功")
                : AjaxResult.warn("云台锁定失败");
    }
 
    @Operation(summary = "云台锁定状态")
    @PostMapping("/getPTZLockInfo")
    public AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean success = cameraSDK.getPTZLockInfo(cmd);
        return AjaxResult.success(success ? "云台锁定" : "云台未锁定");
    }
 
    //@Operation(summary = "录像")
    @PostMapping("/record")
    public AjaxResult record(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        String url = cameraSDK.record(cmd);
        return AjaxResult.success(url);
    }
 
    @InnerAuth
    @PostMapping("/recordStart/rpc")
    public R<Boolean> recordStartRpc(@RequestBody CameraCmd cmd) {
        boolean b = cameraSDK.recordStart(cmd);
        return R.ok(b);
    }
 
    @InnerAuth
    @PostMapping("/recordStop/rpc")
    public R<String> recordStopRpc(@RequestBody CameraCmd cmd) {
        String url = cameraSDK.recordStop(cmd);
        return R.ok(url);
    }
 
    @Operation(summary = "录像开始")
    @PostMapping("/recordStart")
    public AjaxResult recordStart(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        boolean b = cameraSDK.recordStart(cmd);
        return toAjax(b);
    }
 
    @Operation(summary = "录像停止")
    @PostMapping("/recordStop")
    public AjaxResult recordStop(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        String url = cameraSDK.recordStop(cmd);
        return AjaxResult.success(url);
    }
 
    @Operation(summary = "引导目标位置")
    @PostMapping("/guideTargetPosition")
    public R<?> guideTargetPosition(@RequestBody CameraCmd cmd) {
        if (cmd.getOperator() == null) {
            cmd.setOperator(SecurityUtils.getUserId().toString());
        }
        Double correctPitch = cameraSDK.correctPitch(cmd);
        return cameraSDK.guideTargetPosition(cmd) ? R.ok(correctPitch, "引导成功") :
                R.fail(correctPitch, "引导失败");
    }
 
    @Operation(summary = "获取相机架设参数")
    @PostMapping("/getCameraVideoLable")
    public AjaxResult getCameraVideoLable(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId().toString());
        //return AjaxResult.success(sdk.getGisInfo(cmd));
        return cameraSDK.getCameraVideoLable(cmd);
    }
}