设备查询/添加 api

This commit is contained in:
shikong 2023-09-07 15:43:11 +08:00
parent a7e453fbda
commit 8db1726e10
8 changed files with 135 additions and 6 deletions

View File

@ -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) {

View File

@ -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<PageWrapper<WvpProxyDevice>> getDevicesWithPagePage(@ParameterObject @Validated DevicePageDTO dto) {
return JsonResponse.success(PageWrapper.of(deviceService.getDevicesWithPage(dto.getPage(), dto.getSize())));
}
@PostJson("/add")
public JsonResponse<Boolean> addDevice(@RequestBody AddDeviceDTO dto){
return JsonResponse.success(deviceService.addDevice(DeviceDTOConvertor.INSTANCE.dto2dao(dto)));
}
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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;