package com.ard.work.device.camera.controller; import com.ard.common.core.constant.DeviceConstants; import com.ard.common.core.domain.R; import com.ard.common.core.utils.poi.ExcelUtil; 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.InnerAuth; import com.ard.common.security.annotation.RequiresPermissions; import com.ard.common.security.utils.SecurityUtils; import com.ard.work.api.domian.ArdCamera; import com.ard.work.api.domian.CameraCmd; import com.ard.work.device.camera.domain.CameraFilterDTO; import com.ard.work.device.camera.domain.GeoDTO; import com.ard.work.device.camera.service.IArdCameraService; 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 lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; import java.util.TreeMap; /** * 相机设备Controller * * @author ard * @date 2024-08-20 */ @Slf4j @RestController @RequestMapping("/device/camera") @Tag(name = "相机管理接口") public class ArdCameraController extends BaseController { @Resource private IArdCameraService ardCameraService; /** * 查询相机设备列表 */ @RequiresPermissions("device:camera:list") @GetMapping("/list") @Operation(summary = "查询相机设备列表") public TableDataInfo list(ArdCamera ardCamera) { startPage(); List list = ardCameraService.selectArdCameraList(ardCamera); return getDataTable(list); } /** * 查询相机设备列表 */ @InnerAuth @GetMapping("/list/all") public R> listAll() { List list = ardCameraService.selectArdCameraListAll(new ArdCamera()); return R.ok(list); } /** * 根据条件查询相机设备列表 */ @InnerAuth @PostMapping("/list/rpc") public R> listAllRpc(@RequestBody ArdCamera ardCamera) { List list = ardCameraService.selectArdCameraListAll(ardCamera); return R.ok(list); } /** * 导出相机设备列表 */ @Operation(summary = "导出相机设备列表") @RequiresPermissions("device:camera:export") @Log(title = "相机设备", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ArdCamera ardCamera) { List list = ardCameraService.selectArdCameraList(ardCamera); ExcelUtil util = new ExcelUtil<>(ArdCamera.class); util.exportExcel(response, list, "相机设备数据"); } /** * 获取相机设备详细信息 */ @Operation(summary = "获取相机设备详细信息") @RequiresPermissions("device:camera:query") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { return success(ardCameraService.selectArdCameraById(id)); } /** * 获取相机设备详细信息 */ @Operation(summary = "获取相机设备详细信息") @GetMapping(value = "/getCameraByName/{name}") public R getCameraByName(@PathVariable("name") String name) { return R.ok(ardCameraService.selectArdCameraByName(name)); } /** * 获取相机设备详细信息 */ @InnerAuth @GetMapping(value = "/{id}/rpc") public R getInfoRpc(@PathVariable("id") String id) { return R.ok(ardCameraService.selectArdCameraById(id)); } /** * 新增相机设备 */ @Operation(summary = "新增相机设备") @RequiresPermissions("device:cameras:add") @Log(title = "相机设备", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ArdCamera camera) { if (DeviceConstants.NOT_UNIQUE.equals(ardCameraService.checkCameraIpAndPortUnique(camera))) { return error("新增相机'" + camera.getIp() + ":" + camera.getPort() + "'失败,相机已存在"); } int i = ardCameraService.insertArdCamera(camera); if (i > 0) { return success("新增相机'" + camera.getIp() + ":" + camera.getPort() + "'成功"); } return error("新增相机'" + camera.getIp() + ":" + camera.getPort() + "'失败"); } /** * 修改相机设备 */ @Operation(summary = "修改相机设备") @RequiresPermissions("device:camera:edit") @Log(title = "相机设备", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ArdCamera camera) { if (DeviceConstants.NOT_UNIQUE.equals(ardCameraService.checkCameraIpAndPortUnique(camera))) { return error("修改相机'" + camera.getIp() + ":" + camera.getPort() + "'失败,相机已存在"); } int i = ardCameraService.updateArdCamera(camera); if (i > 0) { return success("修改相机'" + camera.getIp() + ":" + camera.getPort() + "'成功"); } return error("修改相机'" + camera.getIp() + ":" + camera.getPort() + "'失败"); } /** * 修改相机设备 */ @InnerAuth @Log(title = "相机设备", businessType = BusinessType.UPDATE) @PutMapping("/rpc") public AjaxResult editRPC(@RequestBody ArdCamera camera) { if (DeviceConstants.NOT_UNIQUE.equals(ardCameraService.checkCameraIpAndPortUnique(camera))) { return error("修改相机'" + camera.getIp() + ":" + camera.getPort() + "'失败,相机已存在"); } int i = ardCameraService.updateArdCamera(camera); if (i > 0) { return success("修改相机'" + camera.getIp() + ":" + camera.getPort() + "'成功"); } return error("修改相机'" + camera.getIp() + ":" + camera.getPort() + "'失败"); } @Operation(summary = "开关自动引导") @RequestMapping(value = "/updateAlarmGuideEnable",method = RequestMethod.POST) public AjaxResult updateAlarmGuideEnable(@RequestBody ArdCamera camera) { ardCameraService.updateAlarmGuideEnable(camera); return success(); } /** * 修改相机坐标/基座偏航角 */ @InnerAuth @PutMapping("/rpc/updateCameraLocationAndYaw") public R updateCameraLocationAndYaw(@RequestParam String cameraId, @RequestParam(required = false) Double longitude, @RequestParam(required = false) Double latitude, @RequestParam(required = false) Double altitude, @RequestParam(required = false) Float baseYaw) { return R.ok(ardCameraService.updateCameraLocationAndYaw(cameraId, longitude, latitude, altitude, baseYaw)); } /** * 删除相机设备 */ @Operation(summary = "删除相机设备") @RequiresPermissions("device:camera:remove") @Log(title = "相机设备", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable String[] ids) { return toAjax(ardCameraService.deleteArdCameraByIds(ids)); } /** * 导入相机设备 */ @Operation(summary = "导入相机设备") @Log(title = "导入相机设备", businessType = BusinessType.IMPORT) @RequiresPermissions("device:camera:import") @PostMapping("/importData") public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { ExcelUtil util = new ExcelUtil(ArdCamera.class); List cameraList = util.importExcel(file.getInputStream()); String operName = SecurityUtils.getLoginUser().getUsername(); String message = ardCameraService.importCamera(cameraList, updateSupport, operName); return success(message); } /** * 相机设备导入模板 */ @Operation(summary = "相机设备导入模板") @PostMapping("/importTemplate") public void importTemplate(HttpServletResponse response) { ExcelUtil util = new ExcelUtil(ArdCamera.class); util.importTemplateExcel(response, "相机设备数据"); } /** * 设置锁定 */ @Operation(summary = "设置锁定") @PostMapping("/setPTZLock") public AjaxResult setPTZLock(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); return ardCameraService.controlLock(cmd); } /** * 设置锁定 */ @InnerAuth @PostMapping("/setPTZLock/rpc") public R setPTZLockRpc(@RequestBody CameraCmd cmd) { // cmd.setOperator(SecurityUtils.getUserId().toString()); return R.ok(ardCameraService.controlLock(cmd)); } /** * 设置解锁 */ @Operation(summary = "设置解锁") @PostMapping("/setPTZUnLock") public AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); return ardCameraService.controlUnLock(cmd); } /** * 获取附近的相机 */ @RequiresPermissions("device:camera:list") @Operation(tags = "获取附近的相机") @PostMapping("/getNearbyCameras") public AjaxResult getNearbyCameras(@RequestBody CameraCmd cmd) { return AjaxResult.success(ardCameraService.getNearbyCameras(cmd)); } /** * 获取附近的相机 */ @InnerAuth @PostMapping("/getNearbyCameras/rpc") public R> getNearbyCamerasRpc(@RequestBody CameraCmd cmd) { return R.ok(ardCameraService.getNearbyCameras(cmd)); } /** * 获取圆内的相机 */ @Operation(summary = "获取圆内的相机") @RequiresPermissions("device:camera:list") @PostMapping("/getCircularCameras") public AjaxResult getCircularCameras(@RequestBody GeoDTO geoDTO) { return AjaxResult.success(ardCameraService.getCircularCameras(geoDTO)); } /** * 获取多边形内的相机 */ @Operation(summary = "获取多边形内的相机") @RequiresPermissions("device:camera:list") @PostMapping("/getPolygonCameras") public AjaxResult getPolygonCameras(@RequestBody GeoDTO geoDTO) { return AjaxResult.success(ardCameraService.getPolygonCameras(geoDTO)); } /** * 获取雷达所在塔上的大光电 */ @Operation(summary = "获取雷达所在塔上的大光电") @GetMapping(value = "/{radarId}/getCameraByRadar") public AjaxResult getCameraByRadar(@PathVariable("radarId") String radarId) { return AjaxResult.success(ardCameraService.getCameraByRadar(radarId)); } /** * 获取雷达所在塔上的大光电 */ @InnerAuth @GetMapping(value = "/{radarId}/getCameraByRadar/rpc") public R getCameraByRadarRpc(@PathVariable("radarId") String radarId) { return R.ok(ardCameraService.getCameraByRadar(radarId)); } /** * 获取可视范围内的相机列表 */ @RequiresPermissions("device:camera:list") @PostMapping("/getCamerasInVisibleRange") @Operation(summary = "获取可视范围内的相机列表") public AjaxResult getCamerasInVisibleRange(@RequestBody CameraFilterDTO cameraFilterDTO) { return AjaxResult.success(ardCameraService.getCamerasInVisibleRange(cameraFilterDTO)); } /** * 根据主键获取相机设备全部详细信息 */ @Operation(summary = "根据主键获取相机设备全部详细信息") @RequiresPermissions("device:camera:query") @GetMapping(value = "/getAllInfo/{id}") public AjaxResult getAllInfo(@PathVariable("id") String id) { return success(ardCameraService.selectArdCameraAllInfoById(id)); } /** * 根据用户主键获取相机设备全部详细信息 */ @Operation(summary = "根据用户主键获取相机设备全部详细信息") @RequiresPermissions("device:camera:query") @GetMapping(value = "/getAllInfoByUserId") public AjaxResult getAllInfoByUserId() { return success(ardCameraService.selectArdCameraAllInfoByUserId(SecurityUtils.getUserId())); } /** * 根据经纬度获取设定范围内光电 */ @Operation(summary = "根据经纬度获取设定范围内光电") @RequiresPermissions("device:camera:getCameraAllInfoByPosition") @PostMapping(value = "/getCameraAllInfoByPosition") public AjaxResult getCameraAllInfoByPosition(@RequestBody Map para) { return success(ardCameraService.getCameraAllInfoByPosition(SecurityUtils.getUserId(),para)); } }