package com.ard.qs.controller;
|
|
import com.ard.common.core.web.controller.BaseController;
|
import com.ard.common.core.web.domain.AjaxResult;
|
import com.ard.common.core.web.page.TableDataInfo;
|
import com.ard.common.log.annotation.Log;
|
import com.ard.common.log.enums.BusinessType;
|
import com.ard.common.security.annotation.RequiresPermissions;
|
import com.ard.common.security.utils.SecurityUtils;
|
import com.ard.qs.api.domain.QsDevice;
|
import com.ard.qs.domain.*;
|
import com.ard.qs.service.IQsDeviceService;
|
import com.ard.qs.utils.VideoSnapshotUtil;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.util.Assert;
|
import org.springframework.util.ObjectUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.util.List;
|
|
/**
|
* 视频监控设备Controller
|
*
|
* @author fengcheng
|
* @date 2026-03-27
|
*/
|
@Slf4j
|
@Tag(name = "视频监控设备")
|
@RestController
|
@RequestMapping("/device")
|
public class QsDeviceController extends BaseController {
|
@Autowired
|
private IQsDeviceService qsDeviceService;
|
|
/**
|
* 查询视频监控设备列表
|
*/
|
@Operation(summary = "查询视频监控设备列表")
|
@GetMapping("/list")
|
public TableDataInfo list(QsDevice qsDevice) {
|
startPage();
|
List<QsDevice> list = qsDeviceService.selectQsDeviceList(qsDevice);
|
return getDataTable(list);
|
}
|
|
/**
|
* 根据行政区域获取视频监控设备列表
|
*/
|
@Operation(summary = "根据行政区域获取视频监控设备列表")
|
@GetMapping("/queryListByCivilCode")
|
public TableDataInfo queryListByCivilCode(QsDevice qsDevice) {
|
startPage();
|
List<QsDevice> list = qsDeviceService.queryListByCivilCode(qsDevice);
|
return getDataTable(list);
|
}
|
|
/**
|
* 获取视频监控设备详细信息
|
*/
|
@Operation(summary = "获取视频监控设备详细信息")
|
@GetMapping(value = "/{id}")
|
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
return success(qsDeviceService.selectQsDeviceById(id));
|
}
|
|
/**
|
* 新增视频监控设备
|
*/
|
@Operation(summary = "新增视频监控设备")
|
@Log(title = "视频监控设备", businessType = BusinessType.INSERT)
|
@PostMapping
|
public AjaxResult add(@RequestBody QsDevice qsDevice) {
|
return toAjax(qsDeviceService.insertQsDevice(qsDevice));
|
}
|
|
/**
|
* 修改视频监控设备
|
*/
|
@Operation(summary = "修改视频监控设备")
|
@Log(title = "视频监控设备", businessType = BusinessType.UPDATE)
|
@PutMapping
|
public AjaxResult edit(@RequestBody QsDevice qsDevice) {
|
return toAjax(qsDeviceService.updateQsDevice(qsDevice));
|
}
|
|
/**
|
* 删除视频监控设备
|
*/
|
@Operation(summary = "删除视频监控设备")
|
@Log(title = "视频监控设备", businessType = BusinessType.DELETE)
|
@DeleteMapping("/{ids}")
|
public AjaxResult remove(@PathVariable Long[] ids) {
|
return toAjax(qsDeviceService.deleteQsDeviceByIds(ids));
|
}
|
|
/**
|
* 状态修改
|
*/
|
@Operation(summary = "状态修改")
|
@Log(title = "视频监控设备", businessType = BusinessType.UPDATE)
|
@PutMapping("/changeStatus")
|
public AjaxResult changeStatus(@RequestBody QsDevice qsDevice) {
|
qsDevice.setUpdateBy(SecurityUtils.getUsername());
|
return toAjax(qsDeviceService.updateQsDeviceStatus(qsDevice));
|
}
|
|
/**
|
* 获取计划记录对应的视频监控设备
|
*/
|
@GetMapping("/listPlanRecord")
|
public TableDataInfo listPlanRecordQsDevice(QsDevice qsDevice) {
|
startPage();
|
List<QsDevice> list = qsDeviceService.listPlanRecordQsDevice(qsDevice);
|
return getDataTable(list);
|
}
|
|
/**
|
* 设备关联录制计划
|
*
|
* @param param
|
* @return
|
*/
|
@PostMapping("/link")
|
public AjaxResult link(@RequestBody RecordPlanParam param) {
|
if (param.getAllLink() != null) {
|
if (param.getAllLink()) {
|
qsDeviceService.linkAll(param.getPlanId());
|
} else {
|
qsDeviceService.cleanAll(param.getPlanId());
|
}
|
return success();
|
}
|
|
if (param.getDeviceIds() == null) {
|
throw new RuntimeException("设备ID不可都为NULL");
|
}
|
|
qsDeviceService.link(param.getDeviceIds(), param.getPlanId());
|
|
return success();
|
}
|
|
|
/**
|
* 设备设置行政区划
|
*
|
* @param param
|
*/
|
@Operation(summary = "设备设置行政区划")
|
@PostMapping("/region/add")
|
public AjaxResult addChannelToRegion(@RequestBody DeviceToRegionParam param) {
|
Assert.notEmpty(param.getDeviceIds(), "设备ID不可为空");
|
Assert.hasLength(param.getCivilCode(), "未添加行政区划");
|
qsDeviceService.addDeviceToRegion(param.getCivilCode(), param.getDeviceIds());
|
return success();
|
}
|
|
/**
|
* 设备删除行政区划
|
*
|
* @param param
|
*/
|
@Operation(summary = "设备删除行政区划")
|
@PostMapping("/region/delete")
|
public AjaxResult deleteDeviceToRegion(@RequestBody DeviceToRegionParam param) {
|
Assert.isTrue(!param.getDeviceIds().isEmpty() || !ObjectUtils.isEmpty(param.getCivilCode()), "参数异常");
|
qsDeviceService.deleteDeviceToRegion(param.getCivilCode(), param.getDeviceIds());
|
return success();
|
}
|
|
|
/**
|
* 存在行政区划但无法挂载的设备列表
|
*/
|
@Operation(summary = "存在行政区划但无法挂载的设备列表")
|
@GetMapping("/civilCode/unusual/list")
|
public TableDataInfo queryListByCivilCodeForUnusual(QsDevice qsDevice) {
|
startPage();
|
List<QsDevice> list = qsDeviceService.queryListByCivilCodeForUnusual(qsDevice);
|
return getDataTable(list);
|
}
|
|
/**
|
* 清除存在行政区划但无法挂载的设备列表
|
*
|
* @param param
|
*/
|
@Operation(summary = "清除存在行政区划但无法挂载的设备列表")
|
@PostMapping("/civilCode/unusual/clear")
|
public AjaxResult clearDeviceCivilCode(@RequestBody DeviceToRegionParam param) {
|
qsDeviceService.clearDeviceCivilCode(param.getAll(), param.getDeviceIds());
|
return success();
|
}
|
|
/**
|
* 获取编码列表
|
*
|
* @return
|
*/
|
@Operation(summary = "获取编码列表")
|
@GetMapping("/network/identification/list")
|
public AjaxResult getNetworkIdentificationTypeList() {
|
List<NetworkIdentificationType> list = qsDeviceService.getNetworkIdentificationTypeList();
|
return success(list);
|
}
|
|
/**
|
* 获取编码列表
|
*
|
* @return
|
*/
|
@Operation(summary = "获取编码列表")
|
@GetMapping("/type/list")
|
public AjaxResult getDeviceTypeList() {
|
List<DeviceType> list = qsDeviceService.getDeviceTypeList();
|
return success(list);
|
}
|
|
/**
|
* 获取行业编码列表
|
*
|
* @return
|
*/
|
@GetMapping("/industry/list")
|
public AjaxResult getIndustryCodeList() {
|
List<IndustryCodeType> list = qsDeviceService.getIndustryCodeList();
|
return success(list);
|
}
|
|
/**
|
* 获取关联业务分组设备列表
|
*/
|
@GetMapping("/parent/list")
|
public TableDataInfo queryListByParentId(QsDevice qsDevice) {
|
startPage();
|
List<QsDevice> list = qsDeviceService.queryListByParentId(qsDevice);
|
return getDataTable(list);
|
}
|
|
/**
|
* 设备设置业务分组
|
*
|
* @param param
|
*/
|
@PostMapping("/group/add")
|
public AjaxResult addChannelToGroup(@RequestBody DeviceToGroupParam param) {
|
Assert.notEmpty(param.getDeviceIds(), "设备ID不可为空");
|
Assert.hasLength(param.getParentId(), "未添加上级分组编号");
|
Assert.hasLength(param.getBusinessGroup(), "未添加业务分组");
|
qsDeviceService.addChannelToGroup(param.getParentId(), param.getBusinessGroup(), param.getDeviceIds());
|
return success();
|
}
|
|
/**
|
* 删除业务分组设备
|
*
|
* @param param
|
*/
|
@PostMapping("/group/delete")
|
public AjaxResult deleteDeviceToGroup(@RequestBody DeviceToGroupParam param) {
|
Assert.isTrue(!param.getDeviceIds().isEmpty() || (!ObjectUtils.isEmpty(param.getParentId()) && !ObjectUtils.isEmpty(param.getBusinessGroup())), "参数异常");
|
qsDeviceService.deleteDeviceToGroup(param.getParentId(), param.getBusinessGroup(), param.getDeviceIds());
|
return success();
|
}
|
|
/**
|
* 存在父节点编号但无法挂载的设备列表
|
*/
|
@GetMapping("/parent/unusual/list")
|
public TableDataInfo queryListByParentForUnusual(QsDevice qsDevice) {
|
startPage();
|
List<QsDevice> list = qsDeviceService.queryListByParentForUnusual(qsDevice);
|
return getDataTable(list);
|
}
|
|
/**
|
* 清除存在分组节点但无法挂载的设备列表
|
*
|
* @param param
|
*/
|
@PostMapping("/parent/unusual/clear")
|
public AjaxResult clearDeviceParent(@RequestBody DeviceToGroupParam param) {
|
qsDeviceService.clearDeviceParent(param.getAll(), param.getDeviceIds());
|
return success();
|
}
|
|
/**
|
* 获取本地mp4截图
|
*/
|
@RequiresPermissions("qs:device:edit")
|
@Log(title = "视频监控设备", businessType = BusinessType.UPDATE)
|
@PutMapping("/getVideoSnapshot/{id}")
|
public AjaxResult getVideoSnapshot(@PathVariable("id") Long id) {
|
|
|
return success();
|
}
|
|
/**
|
* 开始云台控制
|
*
|
* @param id 设备id
|
* @param direction 方向
|
* @param controlSpeed 控制速度
|
* @return 结果
|
*/
|
@Log(title = "云台控制", businessType = BusinessType.OTHER)
|
@GetMapping("/startPtz/{id}")
|
public AjaxResult startPtz(@PathVariable Long id, @RequestParam String direction, @RequestParam Integer controlSpeed) {
|
qsDeviceService.startPtz(id, direction, controlSpeed);
|
return AjaxResult.success();
|
}
|
|
/**
|
* 结束云台控制
|
*
|
* @param id 设备id
|
* @param direction 方向
|
* @param controlSpeed 控制速度
|
* @return 结果
|
*/
|
@Log(title = "云台控制", businessType = BusinessType.OTHER)
|
@GetMapping("/endPtz/{id}")
|
public AjaxResult endPtz(@PathVariable Long id, @RequestParam String direction, @RequestParam Integer controlSpeed) {
|
qsDeviceService.endPtz(id, direction, controlSpeed);
|
return AjaxResult.success();
|
}
|
|
/**
|
* 获取预置点列表
|
*
|
* @param id 设备id
|
* @param channelId 通道id
|
* @return 预置点列表
|
*/
|
@Log(title = "预置点控制", businessType = BusinessType.OTHER)
|
@GetMapping("/preset/list/{id}")
|
public AjaxResult getPresetList(@PathVariable Long id, @RequestParam(required = false) Integer channelId) {
|
List<Preset> presetList = qsDeviceService.getPresetList(id, channelId);
|
return AjaxResult.success(presetList);
|
}
|
|
/**
|
* 设置预置点
|
*
|
* @param id 设备id
|
* @param channelId 通道id
|
* @param presetIndex 预置点索引
|
* @param presetName 预置点名称
|
* @return 结果
|
*/
|
@Log(title = "预置点控制", businessType = BusinessType.OTHER)
|
@GetMapping("/preset/set/{id}")
|
public AjaxResult setPreset(@PathVariable Long id, @RequestParam(required = false) Integer channelId, @RequestParam Integer presetIndex, @RequestParam(required = false) String presetName) {
|
qsDeviceService.setPreset(id, channelId, presetIndex, presetName);
|
return AjaxResult.success();
|
}
|
|
/**
|
* 调用预置点
|
*
|
* @param id 设备id
|
* @param channelId 通道id
|
* @param presetIndex 预置点索引
|
* @param speed 速度
|
* @return 结果
|
*/
|
@Log(title = "预置点控制", businessType = BusinessType.OTHER)
|
@GetMapping("/preset/goto/{id}")
|
public AjaxResult gotoPreset(@PathVariable Long id, @RequestParam(required = false) Integer channelId, @RequestParam Integer presetIndex, @RequestParam(required = false) Integer speed) {
|
qsDeviceService.gotoPreset(id, channelId, presetIndex, speed);
|
return AjaxResult.success();
|
}
|
|
/**
|
* 删除预置点
|
*
|
* @param id 设备id
|
* @param channelId 通道id
|
* @param presetIndex 预置点索引
|
* @return 结果
|
*/
|
@Log(title = "预置点控制", businessType = BusinessType.OTHER)
|
@GetMapping("/preset/delete/{id}")
|
public AjaxResult deletePreset(@PathVariable Long id, @RequestParam(required = false) Integer channelId, @RequestParam Integer presetIndex) {
|
qsDeviceService.deletePreset(id, channelId, presetIndex);
|
return AjaxResult.success();
|
}
|
}
|