src/main/java/com/genersoft/iot/vmp/conf/CivilCodeFileConf.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.conf; import com.genersoft.iot.vmp.common.CivilCodePo; import org.ehcache.impl.internal.concurrent.ConcurrentHashMap; import com.genersoft.iot.vmp.utils.CivilCodeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -17,7 +17,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.file.Files; import java.util.Map; import java.util.ArrayList; import java.util.List; /** * 启动时读取行政区划表 @@ -27,8 +28,6 @@ public class CivilCodeFileConf implements CommandLineRunner { private final static Logger logger = LoggerFactory.getLogger(CivilCodeFileConf.class); private final Map<String, CivilCodePo> civilCodeMap= new ConcurrentHashMap<>(); @Autowired @Lazy @@ -62,6 +61,7 @@ BufferedReader inputStreamReader = new BufferedReader(new InputStreamReader(inputStream)); int index = -1; String line; List<CivilCodePo> civilCodePoList = new ArrayList<>(); while ((line = inputStreamReader.readLine()) != null) { index ++; if (index == 0) { @@ -69,36 +69,15 @@ } String[] infoArray = line.split(","); CivilCodePo civilCodePo = CivilCodePo.getInstance(infoArray); civilCodeMap.put(civilCodePo.getCode(), civilCodePo); civilCodePoList.add(civilCodePo); } CivilCodeUtil.INSTANCE.add(civilCodePoList); inputStreamReader.close(); inputStream.close(); if (civilCodeMap.size() == 0) { if (civilCodePoList.isEmpty()) { logger.warn("[行政区划] 文件内容为空,可能造成目录刷新结果不完整"); }else { logger.info("[行政区划] 加载成功,共加载数据{}条", civilCodeMap.size()); logger.info("[行政区划] 加载成功,共加载数据{}条", civilCodePoList.size()); } } public CivilCodePo getParentCode(String code) { if (code.length() > 8) { return null; } if (code.length() == 8) { String parentCode = code.substring(0, 6); return civilCodeMap.get(parentCode); }else { CivilCodePo civilCodePo = civilCodeMap.get(code); if (civilCodePo == null){ return null; } String parentCode = civilCodePo.getParentCode(); if (parentCode == null) { return null; } return civilCodeMap.get(parentCode); } } } src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestForCatalogProcessor.java
@@ -108,7 +108,7 @@ }else { event = eventElement.getText().toUpperCase(); } DeviceChannel channel = XmlUtil.channelContentHandler(itemDevice, device, event, civilCodeFileConf); DeviceChannel channel = XmlUtil.channelContentHandler(itemDevice, device, event); if (channel == null) { logger.info("[收到目录订阅]:但是解析失败 {}", new String(evt.getRequest().getRawContent())); continue; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -1,6 +1,5 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd; import com.genersoft.iot.vmp.conf.CivilCodeFileConf; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.session.CatalogDataCatch; @@ -56,9 +55,6 @@ @Qualifier("taskExecutor") @Autowired private ThreadPoolTaskExecutor taskExecutor; @Autowired private CivilCodeFileConf civilCodeFileConf; @Autowired private SipConfig sipConfig; @@ -118,7 +114,7 @@ if (channelDeviceElement == null) { continue; } DeviceChannel channel = XmlUtil.channelContentHandler(itemDevice, device, null, civilCodeFileConf); DeviceChannel channel = XmlUtil.channelContentHandler(itemDevice, device, null); if (channel == null) { logger.info("[收到目录订阅]:但是解析失败 {}", new String(evt.getRequest().getRawContent())); continue; src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
@@ -3,10 +3,10 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.common.CivilCodePo; import com.genersoft.iot.vmp.conf.CivilCodeFileConf; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.utils.CivilCodeUtil; import com.genersoft.iot.vmp.utils.DateUtil; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -240,7 +240,7 @@ CivilCode, BusinessGroup,VirtualOrganization,Other } public static DeviceChannel channelContentHandler(Element itemDevice, Device device, String event, CivilCodeFileConf civilCodeFileConf){ public static DeviceChannel channelContentHandler(Element itemDevice, Device device, String event){ DeviceChannel deviceChannel = new DeviceChannel(); deviceChannel.setDeviceId(device.getDeviceId()); Element channdelIdElement = itemDevice.element("DeviceID"); @@ -267,7 +267,7 @@ } if(channelId.length() <= 8) { deviceChannel.setHasAudio(false); CivilCodePo parentCode = civilCodeFileConf.getParentCode(channelId); CivilCodePo parentCode = CivilCodeUtil.INSTANCE.getParentCode(channelId); if (parentCode != null) { deviceChannel.setParentId(parentCode.getCode()); deviceChannel.setCivilCode(parentCode.getCode()); src/main/java/com/genersoft/iot/vmp/utils/CivilCodeUtil.java
New file @@ -0,0 +1,50 @@ package com.genersoft.iot.vmp.utils; import com.genersoft.iot.vmp.common.CivilCodePo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public enum CivilCodeUtil { INSTANCE; private final static Logger log = LoggerFactory.getLogger(CivilCodeUtil.class); // 用与消息的缓存 private final Map<String, CivilCodePo> civilCodeMap = new ConcurrentHashMap<>(); CivilCodeUtil() { } public void add(List<CivilCodePo> civilCodePoList) { if (!civilCodePoList.isEmpty()) { for (CivilCodePo civilCodePo : civilCodePoList) { civilCodeMap.put(civilCodePo.getCode(), civilCodePo); } } } public CivilCodePo getParentCode(String code) { if (code.length() > 8) { return null; } if (code.length() == 8) { String parentCode = code.substring(0, 6); return civilCodeMap.get(parentCode); }else { CivilCodePo civilCodePo = civilCodeMap.get(code); if (civilCodePo == null){ return null; } String parentCode = civilCodePo.getParentCode(); if (parentCode == null) { return null; } return civilCodeMap.get(parentCode); } } }