From b498e2fcf21ee4f612dfaf0b45a945c52da37c60 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 12 五月 2023 12:36:38 +0800
Subject: [PATCH] 更新文档
---
src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java | 104 +++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 94 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
index 2d568a1..d51ab9f 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
@@ -1,10 +1,9 @@
package com.genersoft.iot.vmp.gb28181.utils;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.TreeType;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.utils.DateUtil;
import org.dom4j.Attribute;
@@ -15,12 +14,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
+import org.springframework.util.ReflectionUtils;
import javax.sip.RequestEvent;
import javax.sip.message.Request;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
import java.util.*;
/**
@@ -203,12 +206,6 @@
return null;
}
deviceChannel.setChannelId(channelId);
- int channelTypeCode = Integer.parseInt(channelId.substring(10, 13));
- if (channelTypeCode == 136 || channelTypeCode == 137 || channelTypeCode == 138) {
- deviceChannel.setHasAudio(true);
- }else {
- deviceChannel.setHasAudio(false);
- }
if (event != null && !event.equals(CatalogEvent.ADD) && !event.equals(CatalogEvent.UPDATE)) {
// 闄や簡ADD鍜寀pdate鎯呭喌涓嬮渶瑕佽瘑鍒叏閮ㄥ唴瀹癸紝
return deviceChannel;
@@ -217,17 +214,26 @@
ChannelType channelType = ChannelType.Other;
if (channelId.length() <= 8) {
channelType = ChannelType.CivilCode;
+ deviceChannel.setHasAudio(false);
}else {
if (channelId.length() == 20) {
int code = Integer.parseInt(channelId.substring(10, 13));
switch (code){
case 215:
channelType = ChannelType.BusinessGroup;
+ deviceChannel.setHasAudio(false);
break;
case 216:
channelType = ChannelType.VirtualOrganization;
+ deviceChannel.setHasAudio(false);
+ break;
+ case 136:
+ case 137:
+ case 138:
+ deviceChannel.setHasAudio(true);
break;
default:
+ deviceChannel.setHasAudio(false);
break;
}
@@ -294,6 +300,10 @@
deviceChannel.setParentId(lastParentId);
}else {
deviceChannel.setParentId(parentId);
+ }
+ // 鍏煎璁惧閫氶亾淇℃伅涓嚜宸变负鑷繁鐖惰妭鐐圭殑鎯呭喌
+ if (deviceChannel.getParentId().equals(deviceChannel.getChannelId())) {
+ deviceChannel.setParentId(null);
}
}
deviceChannel.setBusinessGroupId(businessGroupID);
@@ -388,6 +398,7 @@
} else {
deviceChannel.setLatitude(0.00);
}
+
deviceChannel.setGpsTime(DateUtil.getNow());
@@ -402,6 +413,79 @@
} else {
deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
}
+
return deviceChannel;
}
+
+ /**
+ * 鏂板鏂规硶鏀寔鍐呴儴宓屽
+ *
+ * @param element xmlElement
+ * @param clazz 缁撴灉绫�
+ * @param <T> 娉涘瀷
+ * @return 缁撴灉瀵硅薄
+ * @throws NoSuchMethodException
+ * @throws InvocationTargetException
+ * @throws InstantiationException
+ * @throws IllegalAccessException
+ */
+ public static <T> T loadElement(Element element, Class<T> clazz) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
+ Field[] fields = clazz.getDeclaredFields();
+ T t = clazz.getDeclaredConstructor().newInstance();
+ for (Field field : fields) {
+ ReflectionUtils.makeAccessible(field);
+ MessageElement annotation = field.getAnnotation(MessageElement.class);
+ if (annotation == null) {
+ continue;
+ }
+ String value = annotation.value();
+ String subVal = annotation.subVal();
+ Element element1 = element.element(value);
+ if (element1 == null) {
+ continue;
+ }
+ if ("".equals(subVal)) {
+ // 鏃犱笅绾ф暟鎹�
+ Object fieldVal = element1.isTextOnly() ? element1.getText() : loadElement(element1, field.getType());
+ Object o = simpleTypeDeal(field.getType(), fieldVal);
+ ReflectionUtils.setField(field, t, o);
+ } else {
+ // 瀛樺湪涓嬬骇鏁版嵁
+ ArrayList<Object> list = new ArrayList<>();
+ Type genericType = field.getGenericType();
+ if (!(genericType instanceof ParameterizedType)) {
+ continue;
+ }
+ Class<?> aClass = (Class<?>) ((ParameterizedType) genericType).getActualTypeArguments()[0];
+ for (Element element2 : element1.elements(subVal)) {
+ list.add(loadElement(element2, aClass));
+ }
+ ReflectionUtils.setField(field, t, list);
+ }
+ }
+ return t;
+ }
+
+ /**
+ * 绠�鍗曠被鍨嬪鐞�
+ *
+ * @param tClass
+ * @param val
+ * @return
+ */
+ private static Object simpleTypeDeal(Class<?> tClass, Object val) {
+ if (tClass.equals(String.class)) {
+ return val.toString();
+ }
+ if (tClass.equals(Integer.class)) {
+ return Integer.valueOf(val.toString());
+ }
+ if (tClass.equals(Double.class)) {
+ return Double.valueOf(val.toString());
+ }
+ if (tClass.equals(Long.class)) {
+ return Long.valueOf(val.toString());
+ }
+ return val;
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0