Explorar o código

change:
1. 优化日志输出,更方便断点,设备自定义名称更改

kindring %!s(int64=2) %!d(string=hai) anos
pai
achega
559a24268c

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java

@@ -67,7 +67,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
     @Override
     public void process(RequestEvent evt) {
         SIPRequest sipRequest = (SIPRequest)evt.getRequest();
-        logger.info("接收到消息:" + evt.getRequest());
+//        logger.info("接收到消息:" + evt.getRequest());
         String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
         CallIdHeader callIdHeader = sipRequest.getCallIdHeader();
         // 先从会话内查找

+ 8 - 9
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java

@@ -57,18 +57,19 @@ public class DeviceInfoResponseMessageHandler extends SIPRequestProcessorParent
 
     @Override
     public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-        logger.debug("接收到DeviceInfo应答消息");
+        logger.info("接收到DeviceInfo应答消息");
         // 检查设备是否存在, 不存在则不回复
         if (device == null || device.getOnline() == 0) {
             logger.warn("[接收到DeviceInfo应答消息,但是设备已经离线]:" + (device != null ? device.getDeviceId():"" ));
             return;
         }
+//        Iterator isAutoUpdate = de
         SIPRequest request = (SIPRequest) evt.getRequest();
         try {
             rootElement = getRootElement(evt, device.getCharset());
 
             if (rootElement == null) {
-                logger.warn("[ 接收到DeviceInfo应答消息 ] content cannot be null, {}", evt.getRequest());
+                logger.warn("[ 接收到DeviceInfo应答消息] content cannot be null, {}", evt.getRequest());
                 try {
                     responseAck((SIPRequest) evt.getRequest(), Response.BAD_REQUEST);
                 } catch (SipException | InvalidArgumentException | ParseException e) {
@@ -80,18 +81,16 @@ public class DeviceInfoResponseMessageHandler extends SIPRequestProcessorParent
             String channelId = deviceIdElement.getTextTrim();
             String key = DeferredResultHolder.CALLBACK_CMD_DEVICEINFO + device.getDeviceId() + channelId;
 
-            if(device.getAutoUpdate() == 1){
-                logger.info("[device change] 更新设备信息");
-                device.setName(getText(rootElement, "DeviceName"));
-                device.setManufacturer(getText(rootElement, "Manufacturer"));
-                device.setModel(getText(rootElement, "Model"));
-            }
+            logger.info("[设备信息更新] 更新设备信息");
+            device.setName(getText(rootElement, "DeviceName"));
+            device.setManufacturer(getText(rootElement, "Manufacturer"));
+            device.setModel(getText(rootElement, "Model"));
+
             // 设备固件版本此项需要动态更新
             device.setFirmware(getText(rootElement, "Firmware"));
             if (ObjectUtils.isEmpty(device.getStreamMode())) {
                 device.setStreamMode("UDP");
             }
-            // todo 检查设备是否开启自动更新数据,默认为开启状态
             deviceService.updateDevice(device);
 
             RequestMessage msg = new RequestMessage();

+ 32 - 14
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java

@@ -41,6 +41,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
+
 /**
  * 设备业务(目录订阅)
  */
@@ -121,27 +123,26 @@ public class DeviceServiceImpl implements IDeviceService {
             logger.info("[设备上线,首次注册]: {},查询设备信息以及通道信息", device.getDeviceId());
             deviceMapper.add(device);
             redisCatchStorage.updateDevice(device);
-            try {
-                commander.deviceInfoQuery(device);
-            } catch (InvalidArgumentException | SipException | ParseException e) {
-                logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage());
-            }
+//            try {
+//                commander.deviceInfoQuery(device);
+//            } catch (InvalidArgumentException | SipException | ParseException e) {
+//                logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage());
+//            }
             sync(device);
         }else {
             if(device.getOnline() == 0){
                 device.setOnline(1);
                 device.setCreateTime(now);
-                logger.info("[设备上线,离线状态下重新注册]: {},查询设备信息以及通道信息", device.getDeviceId());
+                logger.info("[设备上线,离线状态下重新注册1]: {},查询设备信息以及通道信息", device.getDeviceId());
                 deviceMapper.update(device);
                 redisCatchStorage.updateDevice(device);
                 if (userSetting.getSyncChannelOnDeviceOnline()) {
-                    logger.info("[设备上线,离线状态下重新注册]: {},查询设备信息以及通道信息", device.getDeviceId());
-                    try {
-                        commander.deviceInfoQuery(device);
-                    } catch (InvalidArgumentException | SipException | ParseException e) {
-                        logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage());
-                    }
-                    sync(device);
+                    logger.info("[设备上线,离线状态下重新注册2]: {},查询设备信息以及通道信息", device.getDeviceId());
+//                    try {
+//                        commander.deviceInfoQuery(device);
+//                    } catch (InvalidArgumentException | SipException | ParseException e) {
+//                        logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage());
+//                    }
                     // TODO 如果设备下的通道级联到了其他平台,那么需要发送事件或者notify给上级平台
                 }
             }else {
@@ -155,6 +156,14 @@ public class DeviceServiceImpl implements IDeviceService {
             }
 
         }
+        try {
+            logger.info("下发deviceInfo 获取设备信息");
+            commander.deviceInfoQuery(device);
+        } catch (InvalidArgumentException | SipException | ParseException e) {
+            logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage());
+        }
+        sync(device);
+
 
         // 上线添加订阅
         if (device.getSubscribeCycleForCatalog() > 0) {
@@ -345,12 +354,21 @@ public class DeviceServiceImpl implements IDeviceService {
     public void updateDevice(Device device) {
 
         String now = DateUtil.getNow();
+        Device deviceInDb = deviceMapper.getDeviceByDeviceId(device.getDeviceId());
         device.setUpdateTime(now);
         device.setCharset(device.getCharset().toUpperCase());
         device.setUpdateTime(DateUtil.getNow());
+
+        // 如果设备存在,且自动更新为0,则不更新设备名称等信息
+        if(deviceInDb.getAutoUpdate() == 0) {
+            logger.info("[设备更新] 设备{} 不跟随sip跟新设备信息",deviceInDb.getDeviceId());
+            device.setName(deviceInDb.getName());
+            device.setManufacturer(deviceInDb.getManufacturer());
+            device.setModel(device.getModel());
+        }
+        logger.info("[设备更新] 设备{} 更新设备信息",device.getDeviceId());
         if (deviceMapper.update(device) > 0) {
             redisCatchStorage.updateDevice(device);
-
         }
     }