新增 deviceControl/recordCmd
This commit is contained in:
parent
440b316c4c
commit
e36befe7ef
@ -5,6 +5,7 @@ import cn.skcks.docking.gb28181.annotation.web.methods.GetJson;
|
||||
import cn.skcks.docking.gb28181.common.json.JsonResponse;
|
||||
import cn.skcks.docking.gb28181.wvp.config.SwaggerConfig;
|
||||
import cn.skcks.docking.gb28181.wvp.service.catalog.CatalogService;
|
||||
import cn.skcks.docking.gb28181.wvp.service.device.control.DeviceControlService;
|
||||
import cn.skcks.docking.gb28181.wvp.sip.message.message.catalog.dto.CatalogItemDTO;
|
||||
import cn.skcks.docking.gb28181.wvp.sip.message.message.catalog.dto.CatalogResponseDTO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -23,6 +24,7 @@ import java.util.concurrent.CompletableFuture;
|
||||
@JsonMapping("/gb28181")
|
||||
public class Gb28181Controller {
|
||||
private final CatalogService catalogService;
|
||||
private final DeviceControlService deviceControlService;
|
||||
@Bean
|
||||
public GroupedOpenApi gb28181Api() {
|
||||
return SwaggerConfig.api("Gb28181Api", "/gb28181");
|
||||
@ -40,4 +42,11 @@ public class Gb28181Controller {
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@GetJson("/deviceControl/recordCmd")
|
||||
public JsonResponse<Void> recordCmd(@RequestParam String deviceCode,@RequestParam String cmd){
|
||||
deviceControlService.sendRecordControl(deviceCode, cmd);
|
||||
return JsonResponse.success(null);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,66 @@
|
||||
package cn.skcks.docking.gb28181.wvp.service.device.control;
|
||||
|
||||
import cn.skcks.docking.gb28181.common.json.JsonException;
|
||||
import cn.skcks.docking.gb28181.common.xml.XmlUtils;
|
||||
import cn.skcks.docking.gb28181.core.sip.utils.SipUtil;
|
||||
import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDevice;
|
||||
import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDocking;
|
||||
import cn.skcks.docking.gb28181.wvp.service.device.DeviceService;
|
||||
import cn.skcks.docking.gb28181.wvp.service.docking.DockingService;
|
||||
import cn.skcks.docking.gb28181.wvp.sip.message.message.device.control.DeviceControlDTO;
|
||||
import cn.skcks.docking.gb28181.wvp.sip.request.SipRequestBuilder;
|
||||
import cn.skcks.docking.gb28181.wvp.sip.sender.SipSender;
|
||||
import cn.skcks.docking.gb28181.wvp.sip.subscribe.SipSubscribe;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Optional;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class DeviceControlService {
|
||||
private final SipSender sipSender;
|
||||
private final SipSubscribe sipSubscribe;
|
||||
private final DockingService dockingService;
|
||||
private final DeviceService deviceService;
|
||||
|
||||
@SneakyThrows
|
||||
public void sendRecordControl(String deviceCode, String recordCmd){
|
||||
Optional<WvpProxyDevice> deviceByDeviceCode = deviceService.getDeviceByDeviceCode(deviceCode);
|
||||
if (deviceByDeviceCode.isEmpty()) {
|
||||
String reason = MessageFormat.format("未能找到 设备编码 为 {0} 的设备", deviceCode);
|
||||
log.error("{}",reason);
|
||||
throw new JsonException(reason);
|
||||
} else {
|
||||
WvpProxyDevice device = deviceByDeviceCode.get();
|
||||
sendRecordControl(device.getGbDeviceId(), device.getGbDeviceChannelId(), recordCmd);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendRecordControl(String gbDeviceId, String channel, String recordCmd){
|
||||
Optional<WvpProxyDocking> deviceByGbDeviceId = dockingService.getDeviceByGbDeviceId(gbDeviceId);
|
||||
if(deviceByGbDeviceId.isEmpty()){
|
||||
log.info("未能找到 国标编码 {} 的注册信息", gbDeviceId);
|
||||
return;
|
||||
}
|
||||
Optional<WvpProxyDevice> deviceByGbDeviceIdAndChannel = deviceService.getDeviceByGbDeviceIdAndChannel(gbDeviceId, channel);
|
||||
if (deviceByGbDeviceIdAndChannel.isEmpty()) {
|
||||
log.info("未能找到 编码 {}, 通道 {} 的设备", gbDeviceId, channel);
|
||||
return;
|
||||
}
|
||||
WvpProxyDocking device = deviceByGbDeviceId.get();
|
||||
|
||||
String sn = String.valueOf((int) (Math.random() * 9 + 1) * 100000);
|
||||
DeviceControlDTO deviceControlDTO = DeviceControlDTO.builder()
|
||||
.sn(sn)
|
||||
.deviceId(channel)
|
||||
.recordCmd(recordCmd)
|
||||
.build();
|
||||
sipSender.sendRequest((provider, ip, port)-> SipRequestBuilder.createMessageRequest(device,ip,port,SipRequestBuilder.getCSeq(), XmlUtils.toXml(deviceControlDTO), SipUtil.generateViaTag(),
|
||||
SipUtil.generateFromTag(), provider.getNewCallId()));
|
||||
}
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package cn.skcks.docking.gb28181.wvp.sip.message.message.device.control;
|
||||
|
||||
import cn.skcks.docking.gb28181.core.sip.gb28181.constant.CmdType;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
|
||||
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@JacksonXmlRootElement(localName = "Control")
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class DeviceControlDTO {
|
||||
@Builder.Default
|
||||
private String cmdType = CmdType.DEVICE_CONTROL;
|
||||
|
||||
@JacksonXmlProperty(localName = "SN")
|
||||
private String sn;
|
||||
|
||||
/**
|
||||
* 目标设备的设备编码(必选)
|
||||
*/
|
||||
@JacksonXmlProperty(localName = "DeviceID")
|
||||
private String deviceId;
|
||||
|
||||
/**
|
||||
* 录像控制命令
|
||||
*/
|
||||
private String recordCmd;
|
||||
|
||||
/**
|
||||
* 云台控制命令
|
||||
*/
|
||||
@JacksonXmlProperty(localName = "PTZCmd")
|
||||
private String ptzCmd;
|
||||
|
||||
/**
|
||||
* 远程启动
|
||||
*/
|
||||
private String teleBoot;
|
||||
|
||||
/**
|
||||
* 布防撤防
|
||||
*/
|
||||
private String guardCmd;
|
||||
|
||||
/**
|
||||
* 告警控制
|
||||
*/
|
||||
private String alarmCmd;
|
||||
|
||||
/**
|
||||
* 强制关键帧
|
||||
*/
|
||||
@JacksonXmlProperty(localName = "IFameCmd")
|
||||
private String iFameCmd;
|
||||
|
||||
/**
|
||||
* 拉框放大
|
||||
*/
|
||||
private String dragZoomIn;
|
||||
|
||||
/**
|
||||
* 拉框缩小
|
||||
*/
|
||||
private String dragZoomOut;
|
||||
|
||||
/**
|
||||
* 看守位
|
||||
*/
|
||||
private String homePosition;
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package cn.skcks.docking.gb28181.wvp.test;
|
||||
|
||||
import cn.skcks.docking.gb28181.common.xml.XmlUtils;
|
||||
import cn.skcks.docking.gb28181.wvp.sip.message.message.device.control.DeviceControlDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@Slf4j
|
||||
public class XmlTest {
|
||||
@Test
|
||||
public void test(){
|
||||
DeviceControlDTO deviceControlDTO = DeviceControlDTO.builder()
|
||||
.sn("100")
|
||||
.deviceId("123456")
|
||||
.recordCmd("PreRecord")
|
||||
.build();
|
||||
log.info("\n{}", XmlUtils.toXml(deviceControlDTO));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user