|  |  | 
 |  |  |  | 
 |  |  | package com.genersoft.iot.vmp.vmanager.gb28181.device; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.alibaba.fastjson2.JSONObject; | 
 |  |  | import com.genersoft.iot.vmp.conf.exception.ControllerException; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.bean.Device; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; | 
 |  |  | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; | 
 |  |  |  | 
 |  |  | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; | 
 |  |  | import io.swagger.v3.oas.annotations.Operation; | 
 |  |  | import io.swagger.v3.oas.annotations.Parameter; | 
 |  |  | import io.swagger.v3.oas.annotations.tags.Tag; | 
 |  |  | 
 |  |  | import org.springframework.web.bind.annotation.*; | 
 |  |  | import org.springframework.web.context.request.async.DeferredResult; | 
 |  |  |  | 
 |  |  | import javax.sip.InvalidArgumentException; | 
 |  |  | import javax.sip.SipException; | 
 |  |  | import java.text.ParseException; | 
 |  |  | import java.util.UUID; | 
 |  |  |  | 
 |  |  | @Tag(name = "国标设备配置") | 
 |  |  | 
 |  |  |       Device device = storager.queryVideoDevice(deviceId); | 
 |  |  |       String uuid = UUID.randomUUID().toString(); | 
 |  |  |       String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + deviceId + channelId; | 
 |  |  |       cmder.deviceBasicConfigCmd(device, channelId, name, expiration, heartBeatInterval, heartBeatCount, event -> { | 
 |  |  |          RequestMessage msg = new RequestMessage(); | 
 |  |  |          msg.setId(uuid); | 
 |  |  |          msg.setKey(key); | 
 |  |  |          msg.setData(String.format("设备配置操作失败,错误码: %s, %s", event.statusCode, event.msg)); | 
 |  |  |          resultHolder.invokeResult(msg); | 
 |  |  |       }); | 
 |  |  |         DeferredResult<String> result = new DeferredResult<String>(3 * 1000L); | 
 |  |  |       try { | 
 |  |  |          cmder.deviceBasicConfigCmd(device, channelId, name, expiration, heartBeatInterval, heartBeatCount, event -> { | 
 |  |  |             RequestMessage msg = new RequestMessage(); | 
 |  |  |             msg.setId(uuid); | 
 |  |  |             msg.setKey(key); | 
 |  |  |             msg.setData(String.format("设备配置操作失败,错误码: %s, %s", event.statusCode, event.msg)); | 
 |  |  |             resultHolder.invokeResult(msg); | 
 |  |  |          }); | 
 |  |  |       } catch (InvalidArgumentException | SipException | ParseException e) { | 
 |  |  |          logger.error("[命令发送失败] 设备配置: {}", e.getMessage()); | 
 |  |  |          throw new ControllerException(ErrorCode.ERROR100.getCode(), "命令发送失败: " + e.getMessage()); | 
 |  |  |       } | 
 |  |  |       DeferredResult<String> result = new DeferredResult<String>(3 * 1000L); | 
 |  |  |       result.onTimeout(() -> { | 
 |  |  |          logger.warn(String.format("设备配置操作超时, 设备未返回应答指令")); | 
 |  |  |          // 释放rtpserver | 
 |  |  | 
 |  |  |       String key = DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + (ObjectUtils.isEmpty(channelId) ? deviceId : channelId); | 
 |  |  |       String uuid = UUID.randomUUID().toString(); | 
 |  |  |       Device device = storager.queryVideoDevice(deviceId); | 
 |  |  |       cmder.deviceConfigQuery(device, channelId, configType, event -> { | 
 |  |  |          RequestMessage msg = new RequestMessage(); | 
 |  |  |          msg.setId(uuid); | 
 |  |  |          msg.setKey(key); | 
 |  |  |          msg.setData(String.format("获取设备配置失败,错误码: %s, %s", event.statusCode, event.msg)); | 
 |  |  |          resultHolder.invokeResult(msg); | 
 |  |  |       }); | 
 |  |  |         DeferredResult<String> result = new DeferredResult<String > (3 * 1000L); | 
 |  |  |       try { | 
 |  |  |          cmder.deviceConfigQuery(device, channelId, configType, event -> { | 
 |  |  |             RequestMessage msg = new RequestMessage(); | 
 |  |  |             msg.setId(uuid); | 
 |  |  |             msg.setKey(key); | 
 |  |  |             msg.setData(String.format("获取设备配置失败,错误码: %s, %s", event.statusCode, event.msg)); | 
 |  |  |             resultHolder.invokeResult(msg); | 
 |  |  |          }); | 
 |  |  |       } catch (InvalidArgumentException | SipException | ParseException e) { | 
 |  |  |          logger.error("[命令发送失败] 获取设备配置: {}", e.getMessage()); | 
 |  |  |          throw new ControllerException(ErrorCode.ERROR100.getCode(), "命令发送失败: " + e.getMessage()); | 
 |  |  |       } | 
 |  |  |       DeferredResult<String> result = new DeferredResult<String > (3 * 1000L); | 
 |  |  |       result.onTimeout(()->{ | 
 |  |  |          logger.warn(String.format("获取设备配置超时")); | 
 |  |  |          // 释放rtpserver |