From 8db1726e104fabfc2f3ca2278b80b94daab3b5a6 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Thu, 7 Sep 2023 15:43:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=9F=A5=E8=AF=A2/=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gb28181/wvp/api/VideoController.java | 2 +- .../wvp/api/device/DeviceController.java | 47 +++++++++++++++++++ .../device/convertor/DeviceDTOConvertor.java | 13 +++++ .../wvp/api/device/dto/AddDeviceDTO.java | 24 ++++++++++ .../wvp/api/device/dto/DevicePageDTO.java | 19 ++++++++ .../wvp/api/video/RecordController.java | 6 ++- .../gb28181/wvp/common/dto/PageDTO.java | 17 +++++++ .../wvp/service/device/DeviceService.java | 13 +++-- 8 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/DeviceController.java create mode 100644 gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/convertor/DeviceDTOConvertor.java create mode 100644 gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/AddDeviceDTO.java create mode 100644 gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/DevicePageDTO.java create mode 100644 gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/common/dto/PageDTO.java diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/VideoController.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/VideoController.java index 670da1a..3ac8d05 100644 --- a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/VideoController.java +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/VideoController.java @@ -32,7 +32,7 @@ public class VideoController { return SwaggerConfig.api("VideoApi", "/video"); } - @Operation(summary = "获取视频") + @Operation(summary = "获取视频 (目前仅供测试)") @GetMapping(produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) @ResponseBody public void video(HttpServletRequest request, HttpServletResponse response) { diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/DeviceController.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/DeviceController.java new file mode 100644 index 0000000..b5978dd --- /dev/null +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/DeviceController.java @@ -0,0 +1,47 @@ +package cn.skcks.docking.gb28181.wvp.api.device; + +import cn.skcks.docking.gb28181.annotation.web.methods.GetJson; +import cn.skcks.docking.gb28181.annotation.web.methods.PostJson; +import cn.skcks.docking.gb28181.common.json.JsonResponse; +import cn.skcks.docking.gb28181.common.page.PageWrapper; +import cn.skcks.docking.gb28181.wvp.api.device.convertor.DeviceDTOConvertor; +import cn.skcks.docking.gb28181.wvp.api.device.dto.AddDeviceDTO; +import cn.skcks.docking.gb28181.wvp.api.device.dto.DevicePageDTO; +import cn.skcks.docking.gb28181.wvp.config.SwaggerConfig; +import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDevice; +import cn.skcks.docking.gb28181.wvp.service.device.DeviceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springdoc.core.annotations.ParameterObject; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +@Slf4j +@Tag(name = "设备信息") +@RestController +@RequestMapping("/device") +@RequiredArgsConstructor +public class DeviceController { + private final DeviceService deviceService; + + @Bean + public GroupedOpenApi deviceApi() { + return SwaggerConfig.api("DeviceApi", "/device"); + } + + @Operation(summary = "分页查询设备列表") + @GetJson("/page") + public JsonResponse> getDevicesWithPagePage(@ParameterObject @Validated DevicePageDTO dto) { + return JsonResponse.success(PageWrapper.of(deviceService.getDevicesWithPage(dto.getPage(), dto.getSize()))); + } + + @PostJson("/add") + public JsonResponse addDevice(@RequestBody AddDeviceDTO dto){ + return JsonResponse.success(deviceService.addDevice(DeviceDTOConvertor.INSTANCE.dto2dao(dto))); + } +} diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/convertor/DeviceDTOConvertor.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/convertor/DeviceDTOConvertor.java new file mode 100644 index 0000000..a489def --- /dev/null +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/convertor/DeviceDTOConvertor.java @@ -0,0 +1,13 @@ +package cn.skcks.docking.gb28181.wvp.api.device.convertor; + +import cn.skcks.docking.gb28181.wvp.api.device.dto.AddDeviceDTO; +import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDevice; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public abstract class DeviceDTOConvertor { + public static final DeviceDTOConvertor INSTANCE = Mappers.getMapper(DeviceDTOConvertor.class); + + abstract public WvpProxyDevice dto2dao(AddDeviceDTO dto); +} diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/AddDeviceDTO.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/AddDeviceDTO.java new file mode 100644 index 0000000..6e2ced4 --- /dev/null +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/AddDeviceDTO.java @@ -0,0 +1,24 @@ +package cn.skcks.docking.gb28181.wvp.api.device.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class AddDeviceDTO { + @NotBlank(message = "设备编码 不能为空") + @Schema(description = "设备编码") + private String deviceCode; + @NotBlank(message = "国标编码 不能为空") + @Schema(description = "国标编码") + private String gbDeviceId; + @NotBlank(message = "国标通道id 不能为空") + @Schema(description = "国标通道id") + private String gbDeviceChannelId; + @NotBlank(message = "设备名称 不能为空") + @Schema(description = "设备名称") + private String name; + + @Schema(description = "地址") + private String address; +} diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/DevicePageDTO.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/DevicePageDTO.java new file mode 100644 index 0000000..3481905 --- /dev/null +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/device/dto/DevicePageDTO.java @@ -0,0 +1,19 @@ +package cn.skcks.docking.gb28181.wvp.api.device.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class DevicePageDTO { + @Schema(description = "页数", example = "1") + @NotNull(message = "page 不能为空") + @Min(value = 1, message = "page 必须为正整数") + int page; + + @Schema(description = "每页条数", example = "10") + @NotNull(message = "size 不能为空") + @Min(value = 1, message = "size 必须为正整数") + int size; +} diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/RecordController.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/RecordController.java index 2af9c86..210d359 100644 --- a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/RecordController.java +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/RecordController.java @@ -1,7 +1,8 @@ package cn.skcks.docking.gb28181.wvp.api.video; import cn.skcks.docking.gb28181.wvp.service.video.RecordService; -import jakarta.servlet.AsyncContext; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @@ -9,17 +10,20 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @Slf4j +@Tag(name = "录像api") @RequiredArgsConstructor @RestController @RequestMapping("/video/record") public class RecordController { private final RecordService recordService; + @Operation(summary = "返回文件下载 http 头信息",description = "禁止多线程下载, 默认文件名为 record.flv") @RequestMapping(method = {RequestMethod.HEAD,RequestMethod.OPTIONS}) public void record(HttpServletResponse response){ recordService.header(response); } + @Operation(summary = "录制flv视频流, 并下载为flv文件") @GetMapping public void record(HttpServletRequest request, HttpServletResponse response, @RequestParam String url, @RequestParam long time){ recordService.record(request, response,url,time); diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/common/dto/PageDTO.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/common/dto/PageDTO.java new file mode 100644 index 0000000..0b19f61 --- /dev/null +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/common/dto/PageDTO.java @@ -0,0 +1,17 @@ +package cn.skcks.docking.gb28181.wvp.common.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; + +public class PageDTO { + @Schema(description = "页数", example = "10") + @NotNull(message = "page 不能为空") + @Min(value = 1, message = "page 必须为正整数") + int page; + + @Schema(description = "每页条数", example = "10") + @NotNull(message = "size 不能为空") + @Min(value = 1, message = "size 必须为正整数") + int size; +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/device/DeviceService.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/device/DeviceService.java index 7b78604..9b9a0f0 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/device/DeviceService.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/device/DeviceService.java @@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.text.MessageFormat; import java.util.Optional; import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; @@ -48,15 +49,19 @@ public class DeviceService { } String deviceCode = device.getDeviceCode(); + if(StringUtils.isBlank(deviceCode)){ + throw new RuntimeException("设备编码不能为空"); + } if(getDeviceByDeviceCode(deviceCode).isPresent()){ - log.info("设备编码 {} 已存在" ,deviceCode); - return false; + throw new RuntimeException(MessageFormat.format("设备编码 {0} 已存在" ,deviceCode)); } String gbDeviceId = device.getGbDeviceId(); + if(StringUtils.isBlank(gbDeviceId)){ + throw new RuntimeException("国标编码不能为空"); + } if(getDeviceByGbDeviceId(gbDeviceId).isPresent()){ - log.info("国标编码 {} 已存在" ,gbDeviceId); - return false; + throw new RuntimeException(MessageFormat.format("国标编码 {0} 已存在" ,gbDeviceId)); } return deviceMapper.insert(device) > 0;