临时提交
parent
74ce2be55b
commit
31ab6eb174
|
@ -93,12 +93,10 @@ public class SubscribeHolder {
|
||||||
dynamicTask.stop(taskOverdueKey);
|
dynamicTask.stop(taskOverdueKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getAllCatalogSubscribePlatform() {
|
public List<Integer> getAllCatalogSubscribePlatform() {
|
||||||
List<String> platforms = new ArrayList<>();
|
List<Integer> platforms = new ArrayList<>();
|
||||||
if(catalogMap.size() > 0) {
|
if(!catalogMap.isEmpty()) {
|
||||||
for (Integer key : catalogMap.keySet()) {
|
platforms.addAll(catalogMap.keySet());
|
||||||
platforms.add(catalogMap.get(key).getId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return platforms;
|
return platforms;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
// 如果事件没有要通知的上级,那么需要自己查询到所有要通知的上级进行通知
|
// 如果事件没有要通知的上级,那么需要自己查询到所有要通知的上级进行通知
|
||||||
List<String> platforms = subscribeHolder.getAllCatalogSubscribePlatform();
|
List<Integer> platforms = subscribeHolder.getAllCatalogSubscribePlatform();
|
||||||
if (event.getChannels() != null) {
|
if (event.getChannels() != null) {
|
||||||
if (!platforms.isEmpty()) {
|
if (!platforms.isEmpty()) {
|
||||||
for (CommonGbChannel channel : event.getChannels()) {
|
for (CommonGbChannel channel : event.getChannels()) {
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog;
|
||||||
|
|
||||||
|
|
||||||
|
public enum CatalogEventType{
|
||||||
|
|
||||||
|
|
||||||
|
ON("ON"), // 上线
|
||||||
|
OFF("OFF"), // 离线
|
||||||
|
VLOST("VLOST"), // 视频丢失
|
||||||
|
DEFECT("DEFECT"), // 故障
|
||||||
|
ADD("ADD"), // 增加
|
||||||
|
DEL("DEL"), // 删除
|
||||||
|
UPDATE("UPDATE"), // 更新
|
||||||
|
;
|
||||||
|
|
||||||
|
private final String val;
|
||||||
|
CatalogEventType(String val) {
|
||||||
|
this.val = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVal() {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,6 @@ import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
|
||||||
import com.google.common.primitives.Bytes;
|
import com.google.common.primitives.Bytes;
|
||||||
import gov.nist.javax.sip.message.SIPRequest;
|
import gov.nist.javax.sip.message.SIPRequest;
|
||||||
import gov.nist.javax.sip.message.SIPResponse;
|
import gov.nist.javax.sip.message.SIPResponse;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
import org.dom4j.Document;
|
import org.dom4j.Document;
|
||||||
import org.dom4j.DocumentException;
|
import org.dom4j.DocumentException;
|
||||||
import org.dom4j.Element;
|
import org.dom4j.Element;
|
||||||
|
@ -31,9 +30,9 @@ import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description:处理接收IPCamera发来的SIP协议请求消息
|
* 处理接收IPCamera发来的SIP协议请求消息
|
||||||
* @author: songww
|
* songww
|
||||||
* @date: 2020年5月3日 下午4:42:22
|
* 2020年5月3日 下午4:42:22
|
||||||
*/
|
*/
|
||||||
public abstract class SIPRequestProcessorParent {
|
public abstract class SIPRequestProcessorParent {
|
||||||
|
|
||||||
|
@ -60,7 +59,7 @@ public abstract class SIPRequestProcessorParent {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ResponseAckExtraParam{
|
static class ResponseAckExtraParam{
|
||||||
String content;
|
String content;
|
||||||
ContentTypeHeader contentTypeHeader;
|
ContentTypeHeader contentTypeHeader;
|
||||||
SipURI sipURI;
|
SipURI sipURI;
|
||||||
|
|
|
@ -277,9 +277,6 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent
|
||||||
ArrayList<DeviceChannel> deviceChannels = new ArrayList<>(updateChannelMap.values());
|
ArrayList<DeviceChannel> deviceChannels = new ArrayList<>(updateChannelMap.values());
|
||||||
updateChannelMap.clear();
|
updateChannelMap.clear();
|
||||||
deviceChannelService.batchUpdateChannel(deviceChannels);
|
deviceChannelService.batchUpdateChannel(deviceChannels);
|
||||||
if (device.isAutoSyncChannel()) {
|
|
||||||
commonGbChannelService.updateChannelFromGb28181DeviceInList(device, deviceChannels);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -311,4 +311,18 @@ public class SipUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SubscribeInfo buildVirtuallyCatalogSubSubscribe(ParentPlatform platform) {
|
||||||
|
// 模拟一条订阅信息
|
||||||
|
SubscribeInfo subscribeInfo = new SubscribeInfo();
|
||||||
|
subscribeInfo.setId(platform.getServerGBId());
|
||||||
|
subscribeInfo.setExpires(-1);
|
||||||
|
subscribeInfo.setEventType("Catalog");
|
||||||
|
int random = (int) Math.floor(Math.random() * 10000);
|
||||||
|
subscribeInfo.setEventId(random + "");
|
||||||
|
subscribeInfo.setSimulatedCallId(UUID.randomUUID().toString().replace("-", "") + "@" + platform.getServerIP());
|
||||||
|
subscribeInfo.setSimulatedFromTag(UUID.randomUUID().toString().replace("-", ""));
|
||||||
|
subscribeInfo.setSimulatedToTag(UUID.randomUUID().toString().replace("-", ""));
|
||||||
|
return subscribeInfo;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -28,16 +28,6 @@ public interface ICommonGbChannelService {
|
||||||
|
|
||||||
boolean checkChannelInPlatform(String channelId, String platformServerId);
|
boolean checkChannelInPlatform(String channelId, String platformServerId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 从国标设备中同步通道
|
|
||||||
*
|
|
||||||
* @param gbDeviceId 国标设备编号
|
|
||||||
* @param syncKeys 要同步的字段
|
|
||||||
*/
|
|
||||||
boolean syncChannelFromGb28181Device(String gbDeviceId, List<String> syncKeys, Boolean syncGroup, Boolean syncRegion);
|
|
||||||
|
|
||||||
CommonGbChannel getCommonChannelFromDeviceChannel(DeviceChannel deviceChannel, List<String> syncKeys);
|
|
||||||
|
|
||||||
PageInfo<CommonGbChannel> getChannelsInRegion(String regionDeviceId, String query, int page, int count);
|
PageInfo<CommonGbChannel> getChannelsInRegion(String regionDeviceId, String query, int page, int count);
|
||||||
|
|
||||||
List<CommonGbChannel> getChannelsInBusinessGroup(String businessGroupID);
|
List<CommonGbChannel> getChannelsInBusinessGroup(String businessGroupID);
|
||||||
|
|
|
@ -24,7 +24,7 @@ public interface IPlatformChannelService {
|
||||||
/**
|
/**
|
||||||
* 在一个给定的范围内查出分享了这个通道的上级平台
|
* 在一个给定的范围内查出分享了这个通道的上级平台
|
||||||
*/
|
*/
|
||||||
List<ParentPlatform> querySharePlatformListByChannelId(int commonGbId, List<String> platforms);
|
List<ParentPlatform> querySharePlatformListByChannelId(int commonGbId, List<Integer> platforms);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询关联了上级平台的所有通道
|
* 查询关联了上级平台的所有通道
|
||||||
|
@ -36,5 +36,13 @@ public interface IPlatformChannelService {
|
||||||
*/
|
*/
|
||||||
CommonGbChannel queryChannelByPlatformIdAndChannelDeviceId(Integer platformId, String channelId);
|
CommonGbChannel queryChannelByPlatformIdAndChannelDeviceId(Integer platformId, String channelId);
|
||||||
|
|
||||||
List<CommonGbChannel> queryCommonGbChannellList(Integer id);
|
/**
|
||||||
|
* 获取指定平台关联的通道
|
||||||
|
*/
|
||||||
|
List<CommonGbChannel> queryCommonGbChannellList(Integer platformId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定平台范围已经共享的通道
|
||||||
|
*/
|
||||||
|
List<CommonGbChannel> queryChannelListInRange(Integer platformId, List<CommonGbChannel> channelList);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package com.genersoft.iot.vmp.service;
|
package com.genersoft.iot.vmp.service;
|
||||||
|
|
||||||
|
import com.genersoft.iot.vmp.common.CommonGbChannel;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
|
import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 国标平台的业务类
|
* 国标平台的业务类
|
||||||
* @author lin
|
* @author lin
|
||||||
|
@ -67,4 +70,14 @@ public interface IPlatformService {
|
||||||
* 根据ID查询上级平台
|
* 根据ID查询上级平台
|
||||||
*/
|
*/
|
||||||
ParentPlatform query(Integer platformId);
|
ParentPlatform query(Integer platformId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开启所有开启了共享所有通道的上级
|
||||||
|
*/
|
||||||
|
List<ParentPlatform> queryAllWithShareAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定范围内共享了指定通道的上级平台
|
||||||
|
*/
|
||||||
|
List<ParentPlatform> querySharePlatform(List<CommonGbChannel> channel, List<Integer> platformIdList);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,12 @@ import com.genersoft.iot.vmp.common.BatchLimit;
|
||||||
import com.genersoft.iot.vmp.common.CivilCodePo;
|
import com.genersoft.iot.vmp.common.CivilCodePo;
|
||||||
import com.genersoft.iot.vmp.common.CommonGbChannel;
|
import com.genersoft.iot.vmp.common.CommonGbChannel;
|
||||||
import com.genersoft.iot.vmp.conf.CivilCodeFileConf;
|
import com.genersoft.iot.vmp.conf.CivilCodeFileConf;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.Gb28181CodeType;
|
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEventType;
|
||||||
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
|
||||||
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
|
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
|
||||||
import com.genersoft.iot.vmp.service.ICommonGbChannelService;
|
import com.genersoft.iot.vmp.service.*;
|
||||||
import com.genersoft.iot.vmp.service.IResourcePlayCallback;
|
|
||||||
import com.genersoft.iot.vmp.service.IResourceService;
|
|
||||||
import com.genersoft.iot.vmp.service.bean.*;
|
import com.genersoft.iot.vmp.service.bean.*;
|
||||||
import com.genersoft.iot.vmp.storager.dao.CommonChannelMapper;
|
import com.genersoft.iot.vmp.storager.dao.CommonChannelMapper;
|
||||||
import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
|
import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
|
||||||
|
@ -32,6 +31,9 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.TransactionDefinition;
|
import org.springframework.transaction.TransactionDefinition;
|
||||||
import org.springframework.transaction.TransactionStatus;
|
import org.springframework.transaction.TransactionStatus;
|
||||||
|
|
||||||
|
import javax.sip.InvalidArgumentException;
|
||||||
|
import javax.sip.SipException;
|
||||||
|
import java.text.ParseException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@ -60,25 +62,78 @@ public class CommonGbChannelServiceImpl implements ICommonGbChannelService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private CivilCodeFileConf civilCodeFileConf;
|
private CivilCodeFileConf civilCodeFileConf;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IPlatformService platformService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IPlatformChannelService platformChannelService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private Map<String, IResourceService> resourceServiceMap;
|
private Map<String, IResourceService> resourceServiceMap;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SubscribeHolder subscribeHolder;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ISIPCommanderForPlatform sipCommanderForPlatform;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommonGbChannel getChannel(String channelId) {
|
public CommonGbChannel getChannel(String channelId) {
|
||||||
return commonGbChannelMapper.queryByDeviceID(channelId);
|
return commonGbChannelMapper.queryByDeviceID(channelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送catalog消息
|
||||||
|
*/
|
||||||
|
private void sendCatalogEvent(List<CommonGbChannel> channelList, CatalogEventType catalogEventType) {
|
||||||
|
// 获取开启了目录订阅且关联了这些通道的
|
||||||
|
List<Integer> allCatalogSubscribePlatformList = subscribeHolder.getAllCatalogSubscribePlatform();
|
||||||
|
// 获取所有开启了共享所有通道的上级与订阅通道的上级平台
|
||||||
|
List<ParentPlatform> platformList = platformService.querySharePlatform(channelList, allCatalogSubscribePlatformList);
|
||||||
|
|
||||||
|
for (ParentPlatform platform : platformList) {
|
||||||
|
SubscribeInfo catalogSubscribe = subscribeHolder.getCatalogSubscribe(platform.getId());
|
||||||
|
if (catalogSubscribe == null) {
|
||||||
|
catalogSubscribe = SipUtils.buildVirtuallyCatalogSubSubscribe(platform);
|
||||||
|
}
|
||||||
|
// 获取关联的通道
|
||||||
|
List<CommonGbChannel> channelListForShare = platformChannelService.queryChannelListInRange(platform.getId(), channelList);
|
||||||
|
logger.warn("[发送Catalog事件] 类型: {}, 平台:{}, 通道个数: {}",
|
||||||
|
catalogEventType.getVal(), platform.getServerGBId(), channelListForShare.size());
|
||||||
|
try {
|
||||||
|
if (catalogEventType.equals(CatalogEventType.ADD) || catalogEventType.equals(CatalogEventType.UPDATE)) {
|
||||||
|
sipCommanderForPlatform.sendNotifyForCatalogAddOrUpdate(catalogEventType.getVal(), platform, channelListForShare, catalogSubscribe, 0);
|
||||||
|
}else {
|
||||||
|
sipCommanderForPlatform.sendNotifyForCatalogOther(catalogEventType.getVal(), platform, channelListForShare, catalogSubscribe, 0);
|
||||||
|
}
|
||||||
|
} catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |
|
||||||
|
IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int add(CommonGbChannel channel) {
|
public int add(CommonGbChannel channel) {
|
||||||
// TODO 给标记了共享所有通道的上级·平台发送数据
|
int result = commonGbChannelMapper.add(channel);
|
||||||
return commonGbChannelMapper.add(channel);
|
if (result == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
List<CommonGbChannel> channelList = new ArrayList<>();
|
||||||
|
sendCatalogEvent(channelList, CatalogEventType.ADD);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int delete(String channelId) {
|
public int delete(String channelId) {
|
||||||
|
int result = commonGbChannelMapper.deleteByDeviceID(channelId);
|
||||||
return commonGbChannelMapper.deleteByDeviceID(channelId);
|
if (result == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
List<CommonGbChannel> channelList = new ArrayList<>();
|
||||||
|
sendCatalogEvent(channelList, CatalogEventType.DEL);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -86,8 +141,13 @@ public class CommonGbChannelServiceImpl implements ICommonGbChannelService {
|
||||||
assert channel.getCommonGbId() >= 0;
|
assert channel.getCommonGbId() >= 0;
|
||||||
assert channel.getCommonGbDeviceID() != null;
|
assert channel.getCommonGbDeviceID() != null;
|
||||||
assert channel.getCommonGbName() != null;
|
assert channel.getCommonGbName() != null;
|
||||||
// TODO 如果状态变化,需要发送消息给级联的上级
|
int result = commonGbChannelMapper.update(channel);
|
||||||
return commonGbChannelMapper.update(channel);
|
if (result == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
List<CommonGbChannel> channelList = new ArrayList<>();
|
||||||
|
sendCatalogEvent(channelList, CatalogEventType.UPDATE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -95,464 +155,6 @@ public class CommonGbChannelServiceImpl implements ICommonGbChannelService {
|
||||||
return commonGbChannelMapper.checkChannelInPlatform(channelId, platformServerId) > 0;
|
return commonGbChannelMapper.checkChannelInPlatform(channelId, platformServerId) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean syncChannelFromGb28181Device(String gbDeviceId, List<String> syncKeys, Boolean syncGroup, Boolean syncRegion) {
|
|
||||||
logger.info("[同步通用通道]来自国标设备,国标编号: {}", gbDeviceId);
|
|
||||||
List<DeviceChannel> deviceChannels = deviceChannelMapper.queryAllChannels(gbDeviceId);
|
|
||||||
if (deviceChannels.isEmpty()) {
|
|
||||||
logger.info("[同步通用通道]来自国标设备,结束, 通道数为0, 国标编号: {}", gbDeviceId);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
List<CommonGbChannel> commonGbChannelList = new ArrayList<>();
|
|
||||||
// 存储得到的10到13位为215的业务分组数据
|
|
||||||
Map<String, Group> businessGroupMap = new HashMap<>();
|
|
||||||
// 存储得到的10到13位为216的虚拟组织 数据
|
|
||||||
Map<String, Group> virtuallyGroupMap = new HashMap<>();
|
|
||||||
// 存储得到的行政区划数据
|
|
||||||
Map<String, Region> regionMap = new HashMap<>();
|
|
||||||
// 存储得到的所有行政区划, 后续检验civilCode是否已传输对应的行政区划数据,从而确定是否需要自动创建节点。
|
|
||||||
Set<String> civilCodeSet = new HashSet<>();
|
|
||||||
List<String> clearChannels = new ArrayList<>();
|
|
||||||
// 对数据进行分类
|
|
||||||
deviceChannels.stream().forEach(deviceChannel -> {
|
|
||||||
if (deviceChannel.getCommonGbChannelId() > 0) {
|
|
||||||
clearChannels.add(deviceChannel.getChannelId());
|
|
||||||
}
|
|
||||||
Gb28181CodeType channelIdType = SipUtils.getChannelIdType(deviceChannel.getChannelId());
|
|
||||||
if (channelIdType != null) {
|
|
||||||
if (
|
|
||||||
(
|
|
||||||
channelIdType == Gb28181CodeType.CIVIL_CODE_PROVINCE
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_CITY
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_COUNTY
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_GRASS_ROOTS
|
|
||||||
)
|
|
||||||
&&
|
|
||||||
!regionMap.containsKey(deviceChannel.getChannelId())
|
|
||||||
) {
|
|
||||||
CivilCodePo parentCivilCodePo = civilCodeFileConf.getParentCode(deviceChannel.getChannelId());
|
|
||||||
String civilCode = null;
|
|
||||||
if (parentCivilCodePo != null) {
|
|
||||||
civilCode = parentCivilCodePo.getCode();
|
|
||||||
}
|
|
||||||
// 行政区划条目
|
|
||||||
Region region = Region.getInstance(deviceChannel.getChannelId(), deviceChannel.getName(),
|
|
||||||
civilCode);
|
|
||||||
regionMap.put(deviceChannel.getChannelId(), region);
|
|
||||||
}
|
|
||||||
if (channelIdType == Gb28181CodeType.BUSINESS_GROUP
|
|
||||||
&& !businessGroupMap.containsKey(deviceChannel.getChannelId())) {
|
|
||||||
Group group = Group.getInstance(deviceChannel.getChannelId(), deviceChannel.getName(),
|
|
||||||
null, deviceChannel.getChannelId());
|
|
||||||
businessGroupMap.put(deviceChannel.getChannelId(), group);
|
|
||||||
}
|
|
||||||
if (channelIdType == Gb28181CodeType.VIRTUAL_ORGANIZATION
|
|
||||||
&& !virtuallyGroupMap.containsKey(deviceChannel.getChannelId())) {
|
|
||||||
Group group = Group.getInstance(deviceChannel.getChannelId(), deviceChannel.getName(), deviceChannel.getParentId(), deviceChannel.getBusinessGroupId());
|
|
||||||
virtuallyGroupMap.put(deviceChannel.getChannelId(), group);
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
if (!StringUtils.isEmpty(deviceChannel.getCivilCode())) {
|
|
||||||
civilCodeSet.add(deviceChannel.getCivilCode());
|
|
||||||
}
|
|
||||||
CommonGbChannel commonGbChannel = getCommonChannelFromDeviceChannel(deviceChannel, syncKeys);
|
|
||||||
commonGbChannelList.add(commonGbChannel);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!commonGbChannelList.isEmpty()) {
|
|
||||||
// 检查是否存在已存在通道与将写入通道相同的情况
|
|
||||||
List<CommonGbChannel> commonGbChannelInDbList = commonGbChannelMapper.queryInList(commonGbChannelList);
|
|
||||||
if (!commonGbChannelInDbList.isEmpty()) {
|
|
||||||
// 这里可以控制新数据覆盖旧数据还是丢弃重复的新数据
|
|
||||||
// 目前使用新数据覆盖旧数据,后续分局实际业务需求再做修改
|
|
||||||
commonGbChannelInDbList.stream().forEach(commonGbChannel->{
|
|
||||||
clearChannels.add(commonGbChannel.getCommonGbDeviceID());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检测分组境况
|
|
||||||
if (businessGroupMap.isEmpty()) {
|
|
||||||
virtuallyGroupMap.clear();
|
|
||||||
}else {
|
|
||||||
// 检查业务分组与虚拟组织
|
|
||||||
if (!virtuallyGroupMap.isEmpty()) {
|
|
||||||
for (String key : virtuallyGroupMap.keySet()) {
|
|
||||||
Group virtuallyGroup = virtuallyGroupMap.get(key);
|
|
||||||
if (virtuallyGroup.getCommonGroupTopId() == null
|
|
||||||
|| !businessGroupMap.containsKey(virtuallyGroup.getCommonGroupTopId())
|
|
||||||
) {
|
|
||||||
virtuallyGroupMap.remove(key);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (virtuallyGroup.getCommonGroupParentId() != null && !virtuallyGroupMap.containsKey(virtuallyGroup.getCommonGroupParentId())) {
|
|
||||||
virtuallyGroup.setCommonGroupParentId(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (virtuallyGroupMap.isEmpty()) {
|
|
||||||
businessGroupMap.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 检测行政区划信息是否完整
|
|
||||||
for (String civilCode : civilCodeSet) {
|
|
||||||
if (!regionMap.containsKey(civilCode)) {
|
|
||||||
logger.warn("[通道信息中缺少地区信息]补充地区信息 国标编号: {}, civilCode: {}", gbDeviceId, civilCode );
|
|
||||||
Region region = civilCodeFileConf.createRegion(civilCode);
|
|
||||||
if (region != null) {
|
|
||||||
regionMap.put(region.getCommonRegionDeviceId(), region);
|
|
||||||
}else {
|
|
||||||
logger.warn("[获取地区信息]失败 国标编号: {}, civilCode: {}", gbDeviceId, civilCode );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 对待写入的数据做处理
|
|
||||||
if (!commonGbChannelList.isEmpty()) {
|
|
||||||
commonGbChannelList.stream().forEach(commonGbChannel -> {
|
|
||||||
if (commonGbChannel.getCommonGbParentID() != null
|
|
||||||
&& !virtuallyGroupMap.containsKey(commonGbChannel.getCommonGbParentID())) {
|
|
||||||
commonGbChannel.setCommonGbParentID(null);
|
|
||||||
}
|
|
||||||
if (commonGbChannel.getCommonGbBusinessGroupID() != null
|
|
||||||
&& !businessGroupMap.containsKey(commonGbChannel.getCommonGbBusinessGroupID())) {
|
|
||||||
commonGbChannel.setCommonGbBusinessGroupID(null);
|
|
||||||
}
|
|
||||||
if (commonGbChannel.getCommonGbCivilCode() != null
|
|
||||||
&& !regionMap.containsKey(commonGbChannel.getCommonGbCivilCode())) {
|
|
||||||
commonGbChannel.setCommonGbCivilCode(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// ====开始写入数据====
|
|
||||||
// 清理重复数据
|
|
||||||
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
|
|
||||||
if (!clearChannels.isEmpty()) {
|
|
||||||
if (clearChannels.size() <= BatchLimit.count) {
|
|
||||||
commonGbChannelMapper.deleteByDeviceIDs(clearChannels);
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < clearChannels.size(); i += BatchLimit.count) {
|
|
||||||
int toIndex = i + BatchLimit.count;
|
|
||||||
if (i + BatchLimit.count > clearChannels.size()) {
|
|
||||||
toIndex = clearChannels.size();
|
|
||||||
}
|
|
||||||
List<String> clearChannelsSun = clearChannels.subList(i, toIndex);
|
|
||||||
int currentResult = commonGbChannelMapper.deleteByDeviceIDs(clearChannelsSun);
|
|
||||||
if (currentResult <= 0) {
|
|
||||||
dataSourceTransactionManager.rollback(transactionStatus);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 写入通道数据
|
|
||||||
boolean result;
|
|
||||||
if (!commonGbChannelList.isEmpty()) {
|
|
||||||
if (commonGbChannelList.size() <= BatchLimit.count) {
|
|
||||||
result = commonGbChannelMapper.addAll(commonGbChannelList) > 0;
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < commonGbChannelList.size(); i += BatchLimit.count) {
|
|
||||||
int toIndex = i + BatchLimit.count;
|
|
||||||
if (i + BatchLimit.count > commonGbChannelList.size()) {
|
|
||||||
toIndex = commonGbChannelList.size();
|
|
||||||
}
|
|
||||||
List<CommonGbChannel> commonGbChannelListSub = commonGbChannelList.subList(i, toIndex);
|
|
||||||
int currentResult = commonGbChannelMapper.addAll(commonGbChannelListSub);
|
|
||||||
if (currentResult <= 0) {
|
|
||||||
dataSourceTransactionManager.rollback(transactionStatus);
|
|
||||||
logger.info("[同步通用通道]来自国标设备,失败, 写入数据库失败, 国标编号: {}", gbDeviceId);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
deviceChannelMapper.updateCommonChannelId(gbDeviceId);
|
|
||||||
// 写入分组数据
|
|
||||||
List<Group> allGroup = new ArrayList<>(businessGroupMap.values());
|
|
||||||
allGroup.addAll(virtuallyGroupMap.values());
|
|
||||||
if (!allGroup.isEmpty()) {
|
|
||||||
// 这里也采取只插入新数据的方式
|
|
||||||
List<Group> groupInDBList = groupMapper.queryInList(allGroup);
|
|
||||||
if (!groupInDBList.isEmpty()) {
|
|
||||||
groupInDBList.stream().forEach(groupInDB -> {
|
|
||||||
for (int i = 0; i < allGroup.size(); i++) {
|
|
||||||
if (groupInDB.getCommonGroupDeviceId().equalsIgnoreCase(allGroup.get(i).getCommonGroupDeviceId())) {
|
|
||||||
allGroup.remove(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!allGroup.isEmpty()) {
|
|
||||||
if (allGroup.size() <= BatchLimit.count) {
|
|
||||||
if (groupMapper.addAll(allGroup) <= 0) {
|
|
||||||
dataSourceTransactionManager.rollback(transactionStatus);
|
|
||||||
logger.info("[同步通用通道]来自国标设备,失败,添加分组信息失败, 国标编号: {}", gbDeviceId);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < allGroup.size(); i += BatchLimit.count) {
|
|
||||||
int toIndex = i + BatchLimit.count;
|
|
||||||
if (i + BatchLimit.count > allGroup.size()) {
|
|
||||||
toIndex = allGroup.size();
|
|
||||||
}
|
|
||||||
List<Group> allGroupSub = allGroup.subList(i, toIndex);
|
|
||||||
if (groupMapper.addAll(allGroupSub) <= 0) {
|
|
||||||
dataSourceTransactionManager.rollback(transactionStatus);
|
|
||||||
logger.info("[同步通用通道]来自国标设备,失败,添加分组信息失败, 国标编号: {}", gbDeviceId);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 写入地区
|
|
||||||
List<Region> allRegion = new ArrayList<>(regionMap.values());
|
|
||||||
|
|
||||||
if (!allRegion.isEmpty()) {
|
|
||||||
// 这里也采取只插入新数据的方式
|
|
||||||
List<Region> regionInDBList = regionMapper.queryInList(allRegion);
|
|
||||||
List<Region> regionInForUpdate = new ArrayList<>();
|
|
||||||
if (!regionInDBList.isEmpty()) {
|
|
||||||
regionInDBList.stream().forEach(regionInDB -> {
|
|
||||||
for (int i = 0; i < allRegion.size(); i++) {
|
|
||||||
if (regionInDB.getCommonRegionDeviceId().equalsIgnoreCase(allRegion.get(i).getCommonRegionDeviceId())) {
|
|
||||||
if (!regionInDB.getCommonRegionName().equals(allRegion.get(i).getCommonRegionName())) {
|
|
||||||
regionInForUpdate.add(allRegion.get(i));
|
|
||||||
}
|
|
||||||
allRegion.remove(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!allRegion.isEmpty()) {
|
|
||||||
if (allRegion.size() <= BatchLimit.count) {
|
|
||||||
if (regionMapper.addAll(allRegion) <= 0) {
|
|
||||||
dataSourceTransactionManager.rollback(transactionStatus);
|
|
||||||
logger.info("[同步通用通道]来自国标设备,失败,添加行政区划信息失败, 国标编号: {}", gbDeviceId);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < allRegion.size(); i += BatchLimit.count) {
|
|
||||||
int toIndex = i + BatchLimit.count;
|
|
||||||
if (i + BatchLimit.count > allRegion.size()) {
|
|
||||||
toIndex = allRegion.size();
|
|
||||||
}
|
|
||||||
List<Region> allRegionSub = allRegion.subList(i, toIndex);
|
|
||||||
if (regionMapper.addAll(allRegionSub) <= 0) {
|
|
||||||
dataSourceTransactionManager.rollback(transactionStatus);
|
|
||||||
logger.info("[同步通用通道]来自国标设备,失败,添加行政区划信息失败, 国标编号: {}", gbDeviceId);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 对于名称变化的地区进行修改
|
|
||||||
if (!regionInForUpdate.isEmpty()) {
|
|
||||||
regionMapper.updateAllForName(regionInForUpdate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dataSourceTransactionManager.commit(transactionStatus);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getTopGroupId(Map<String, Group> businessGroupMap, Map<String, Group> virtuallyGroupMap, String commonGroupId, int depth) {
|
|
||||||
if (depth >= 16) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Group group = virtuallyGroupMap.get(commonGroupId);
|
|
||||||
if (group == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Gb28181CodeType channelIdType = SipUtils.getChannelIdType(group.getCommonGroupParentId());
|
|
||||||
if (channelIdType == Gb28181CodeType.BUSINESS_GROUP) {
|
|
||||||
if (businessGroupMap.containsKey(group.getCommonGroupParentId())) {
|
|
||||||
return group.getCommonGroupParentId();
|
|
||||||
}else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
depth ++;
|
|
||||||
return getTopGroupId(businessGroupMap, virtuallyGroupMap, group.getCommonGroupParentId(), depth);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommonGbChannel getCommonChannelFromDeviceChannel(DeviceChannel deviceChannel, List<String> syncKeys) {
|
|
||||||
if (deviceChannel == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
CommonGbChannel commonGbChannel = new CommonGbChannel();
|
|
||||||
commonGbChannel.setCommonGbDeviceID(deviceChannel.getChannelId());
|
|
||||||
commonGbChannel.setCommonGbStatus(deviceChannel.isStatus());
|
|
||||||
commonGbChannel.setType(CommonGbChannelType.GB28181);
|
|
||||||
commonGbChannel.setCreateTime(DateUtil.getNow());
|
|
||||||
commonGbChannel.setUpdateTime(DateUtil.getNow());
|
|
||||||
if (syncKeys == null || syncKeys.isEmpty()) {
|
|
||||||
commonGbChannel.setCommonGbName(deviceChannel.getName());
|
|
||||||
commonGbChannel.setCommonGbManufacturer(deviceChannel.getManufacture());
|
|
||||||
commonGbChannel.setCommonGbModel(deviceChannel.getModel());
|
|
||||||
commonGbChannel.setCommonGbOwner(deviceChannel.getOwner());
|
|
||||||
if (deviceChannel.getCivilCode() != null) {
|
|
||||||
Gb28181CodeType channelIdType = SipUtils.getChannelIdType(deviceChannel.getCivilCode());
|
|
||||||
if (channelIdType == Gb28181CodeType.CIVIL_CODE_PROVINCE
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_CITY
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_COUNTY
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_GRASS_ROOTS
|
|
||||||
){
|
|
||||||
commonGbChannel.setCommonGbCivilCode(deviceChannel.getCivilCode());
|
|
||||||
}else {
|
|
||||||
logger.warn("[不规范的CivilCode],deviceId: {}, channel: {}, civilCode: {}",
|
|
||||||
deviceChannel.getDeviceId(),
|
|
||||||
deviceChannel.getChannelId(),
|
|
||||||
deviceChannel.getCivilCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
commonGbChannel.setCommonGbCivilCode(deviceChannel.getCivilCode());
|
|
||||||
commonGbChannel.setCommonGbBlock(deviceChannel.getBlock());
|
|
||||||
commonGbChannel.setCommonGbAddress(deviceChannel.getAddress());
|
|
||||||
commonGbChannel.setCommonGbParental(0);
|
|
||||||
// 不符合国标的parentId,可以在未分组中找到并重新设置分组信息
|
|
||||||
Gb28181CodeType parentIdIdType = SipUtils.getChannelIdType(deviceChannel.getParentId());
|
|
||||||
if (parentIdIdType == Gb28181CodeType.VIRTUAL_ORGANIZATION) {
|
|
||||||
commonGbChannel.setCommonGbParentID(deviceChannel.getParentId());
|
|
||||||
}
|
|
||||||
|
|
||||||
commonGbChannel.setCommonGbSafetyWay(deviceChannel.getSafetyWay());
|
|
||||||
commonGbChannel.setCommonGbRegisterWay(deviceChannel.getRegisterWay());
|
|
||||||
commonGbChannel.setCommonGbCertNum(deviceChannel.getCertNum());
|
|
||||||
commonGbChannel.setCommonGbCertifiable(deviceChannel.getCertifiable());
|
|
||||||
commonGbChannel.setCommonGbErrCode(deviceChannel.getErrCode());
|
|
||||||
commonGbChannel.setCommonGbEndTime(deviceChannel.getEndTime());
|
|
||||||
if (NumberUtils.isParsable(deviceChannel.getSecrecy())) {
|
|
||||||
commonGbChannel.setCommonGbSecrecy(Integer.parseInt(deviceChannel.getSecrecy()));
|
|
||||||
}
|
|
||||||
commonGbChannel.setCommonGbIPAddress(deviceChannel.getIpAddress());
|
|
||||||
commonGbChannel.setCommonGbPort(deviceChannel.getPort());
|
|
||||||
commonGbChannel.setCommonGbPassword(deviceChannel.getPassword());
|
|
||||||
commonGbChannel.setCommonGbLongitude(deviceChannel.getLongitude());
|
|
||||||
commonGbChannel.setCommonGbLatitude(deviceChannel.getLatitude());
|
|
||||||
commonGbChannel.setCommonGbPtzType(deviceChannel.getPTZType());
|
|
||||||
// commonGbChannel.setCommonGbPositionType(deviceChannel.getCommonGbPositionType());
|
|
||||||
commonGbChannel.setCommonGbBusinessGroupID(deviceChannel.getBusinessGroupId());
|
|
||||||
} else {
|
|
||||||
for (String key : syncKeys) {
|
|
||||||
switch (key) {
|
|
||||||
case "commonGbName":
|
|
||||||
commonGbChannel.setCommonGbName(deviceChannel.getName());
|
|
||||||
break;
|
|
||||||
case "commonGbManufacturer":
|
|
||||||
commonGbChannel.setCommonGbManufacturer(deviceChannel.getManufacture());
|
|
||||||
break;
|
|
||||||
case "commonGbModel":
|
|
||||||
commonGbChannel.setCommonGbModel(deviceChannel.getModel());
|
|
||||||
break;
|
|
||||||
case "commonGbOwner":
|
|
||||||
commonGbChannel.setCommonGbOwner(deviceChannel.getOwner());
|
|
||||||
break;
|
|
||||||
case "commonGbCivilCode":
|
|
||||||
if (deviceChannel.getCivilCode() == null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Gb28181CodeType channelIdType = SipUtils.getChannelIdType(deviceChannel.getCivilCode());
|
|
||||||
if (channelIdType == Gb28181CodeType.CIVIL_CODE_PROVINCE
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_CITY
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_COUNTY
|
|
||||||
|| channelIdType == Gb28181CodeType.CIVIL_CODE_GRASS_ROOTS
|
|
||||||
){
|
|
||||||
commonGbChannel.setCommonGbCivilCode(deviceChannel.getCivilCode());
|
|
||||||
}else {
|
|
||||||
logger.warn("[不规范的CivilCode],deviceId: {}, channel: {}, civilCode: {}",
|
|
||||||
deviceChannel.getDeviceId(),
|
|
||||||
deviceChannel.getChannelId(),
|
|
||||||
deviceChannel.getCivilCode());
|
|
||||||
}
|
|
||||||
commonGbChannel.setCommonGbCivilCode(deviceChannel.getCivilCode());
|
|
||||||
break;
|
|
||||||
case "commonGbBlock":
|
|
||||||
commonGbChannel.setCommonGbBlock(deviceChannel.getBlock());
|
|
||||||
break;
|
|
||||||
case "commonGbAddress":
|
|
||||||
commonGbChannel.setCommonGbAddress(deviceChannel.getAddress());
|
|
||||||
break;
|
|
||||||
case "commonGbParental":
|
|
||||||
commonGbChannel.setCommonGbParental(deviceChannel.getParental());
|
|
||||||
break;
|
|
||||||
case "commonGbParentID":
|
|
||||||
commonGbChannel.setCommonGbParentID(deviceChannel.getParentId());
|
|
||||||
break;
|
|
||||||
case "commonGbSafetyWay":
|
|
||||||
commonGbChannel.setCommonGbSafetyWay(deviceChannel.getSafetyWay());
|
|
||||||
break;
|
|
||||||
case "commonGbRegisterWay":
|
|
||||||
commonGbChannel.setCommonGbRegisterWay(deviceChannel.getRegisterWay());
|
|
||||||
break;
|
|
||||||
case "commonGbCertNum":
|
|
||||||
commonGbChannel.setCommonGbCertNum(deviceChannel.getCertNum());
|
|
||||||
break;
|
|
||||||
case "commonGbCertifiable":
|
|
||||||
commonGbChannel.setCommonGbCertifiable(deviceChannel.getCertifiable());
|
|
||||||
break;
|
|
||||||
case "commonGbErrCode":
|
|
||||||
commonGbChannel.setCommonGbErrCode(deviceChannel.getErrCode());
|
|
||||||
break;
|
|
||||||
case "commonGbEndTime":
|
|
||||||
commonGbChannel.setCommonGbEndTime(deviceChannel.getEndTime());
|
|
||||||
break;
|
|
||||||
case "commonGbSecrecy":
|
|
||||||
if (NumberUtils.isParsable(deviceChannel.getSecrecy())) {
|
|
||||||
commonGbChannel.setCommonGbSecrecy(Integer.parseInt(deviceChannel.getSecrecy()));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "commonGbIPAddress":
|
|
||||||
commonGbChannel.setCommonGbIPAddress(deviceChannel.getIpAddress());
|
|
||||||
break;
|
|
||||||
case "commonGbPort":
|
|
||||||
commonGbChannel.setCommonGbPort(deviceChannel.getPort());
|
|
||||||
break;
|
|
||||||
case "commonGbPassword":
|
|
||||||
commonGbChannel.setCommonGbPassword(deviceChannel.getPassword());
|
|
||||||
break;
|
|
||||||
case "commonGbLongitude":
|
|
||||||
commonGbChannel.setCommonGbLongitude(deviceChannel.getLongitude());
|
|
||||||
break;
|
|
||||||
case "commonGbLatitude":
|
|
||||||
commonGbChannel.setCommonGbLatitude(deviceChannel.getLatitude());
|
|
||||||
break;
|
|
||||||
case "commonGbPtzType":
|
|
||||||
commonGbChannel.setCommonGbPtzType(deviceChannel.getPTZType());
|
|
||||||
break;
|
|
||||||
case "commonGbPositionType":
|
|
||||||
// commonGbChannel.setCommonGbPositionType(deviceChannel.getCommonGbPositionType());
|
|
||||||
break;
|
|
||||||
case "commonGbRoomType":
|
|
||||||
break;
|
|
||||||
case "commonGbUseType":
|
|
||||||
break;
|
|
||||||
case "commonGbSupplyLightType":
|
|
||||||
break;
|
|
||||||
case "commonGbDirectionType":
|
|
||||||
break;
|
|
||||||
case "commonGbResolution":
|
|
||||||
break;
|
|
||||||
case "commonGbBusinessGroupID":
|
|
||||||
commonGbChannel.setCommonGbBusinessGroupID(deviceChannel.getBusinessGroupId());
|
|
||||||
break;
|
|
||||||
case "commonGbDownloadSpeed":
|
|
||||||
break;
|
|
||||||
case "commonGbSVCTimeSupportMode":
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return commonGbChannel;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CommonGbChannel> getChannelsInBusinessGroup(String businessGroupID) {
|
public List<CommonGbChannel> getChannelsInBusinessGroup(String businessGroupID) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -740,7 +342,7 @@ public class CommonGbChannelServiceImpl implements ICommonGbChannelService {
|
||||||
throw new RuntimeException("batch update commonGbChannel fail");
|
throw new RuntimeException("batch update commonGbChannel fail");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO 向国标级联发送catalog
|
sendCatalogEvent(commonGbChannels, CatalogEventType.UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -255,12 +255,21 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void batchUpdateChannel(List<DeviceChannel> channels) {
|
public void batchUpdateChannel(List<DeviceChannel> channels) {
|
||||||
|
if (channels.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
channelMapper.batchUpdate(channels);
|
channelMapper.batchUpdate(channels);
|
||||||
for (DeviceChannel channel : channels) {
|
for (DeviceChannel channel : channels) {
|
||||||
if (channel.getParentId() != null) {
|
if (channel.getParentId() != null) {
|
||||||
channelMapper.updateChannelSubCount(channel.getDeviceId(), channel.getParentId());
|
channelMapper.updateChannelSubCount(channel.getDeviceId(), channel.getParentId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
List<CommonGbChannel> commonGbChannelList = new ArrayList<>();
|
||||||
|
for (DeviceChannel channel : channels) {
|
||||||
|
CommonGbChannel commonGbChannel = CommonGbChannel.getInstance(null, channel);
|
||||||
|
commonGbChannelList.add(commonGbChannel);
|
||||||
|
}
|
||||||
|
commonGbChannelService.batchUpdate(commonGbChannelList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -269,6 +278,7 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService {
|
||||||
channels.stream().forEach(channel->{
|
channels.stream().forEach(channel->{
|
||||||
commonGbChannelList.add(CommonGbChannel.getInstance(null, channel));
|
commonGbChannelList.add(CommonGbChannel.getInstance(null, channel));
|
||||||
});
|
});
|
||||||
|
commonGbChannelService.batchAdd(commonGbChannelList);
|
||||||
|
|
||||||
channelMapper.batchAdd(channels);
|
channelMapper.batchAdd(channels);
|
||||||
for (DeviceChannel channel : channels) {
|
for (DeviceChannel channel : channels) {
|
||||||
|
|
|
@ -121,7 +121,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ParentPlatform> querySharePlatformListByChannelId(int commonGbId, List<String> platforms) {
|
public List<ParentPlatform> querySharePlatformListByChannelId(int commonGbId, List<Integer> platforms) {
|
||||||
return platformChannelMapper.querySharePlatformListByChannelId(commonGbId, platforms);
|
return platformChannelMapper.querySharePlatformListByChannelId(commonGbId, platforms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,11 +151,16 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommonGbChannel queryChannelByPlatformIdAndChannelDeviceId(Integer platformId, String channelId) {
|
public CommonGbChannel queryChannelByPlatformIdAndChannelDeviceId(Integer platformId, String channelId) {
|
||||||
return null;
|
return platformChannelMapper.queryChannelByPlatformIdAndChannelDeviceId(platformId, channelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CommonGbChannel> queryCommonGbChannellList(Integer platformId) {
|
public List<CommonGbChannel> queryCommonGbChannellList(Integer platformId) {
|
||||||
return platformChannelMapper.queryCommonGbChannellList(platformId);
|
return platformChannelMapper.queryCommonGbChannellList(platformId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CommonGbChannel> queryChannelListInRange(Integer platformId, List<CommonGbChannel> channelList) {
|
||||||
|
return platformChannelMapper.queryChannelListInRange(platformId, channelList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -275,15 +275,7 @@ public class PlatformServiceImpl implements IPlatformService {
|
||||||
@Override
|
@Override
|
||||||
public void addSimulatedSubscribeInfo(ParentPlatform parentPlatform) {
|
public void addSimulatedSubscribeInfo(ParentPlatform parentPlatform) {
|
||||||
// 自动添加一条模拟的订阅信息
|
// 自动添加一条模拟的订阅信息
|
||||||
SubscribeInfo subscribeInfo = new SubscribeInfo();
|
SubscribeInfo subscribeInfo = SipUtils.buildVirtuallyCatalogSubSubscribe(parentPlatform);
|
||||||
subscribeInfo.setId(parentPlatform.getServerGBId());
|
|
||||||
subscribeInfo.setExpires(-1);
|
|
||||||
subscribeInfo.setEventType("Catalog");
|
|
||||||
int random = (int) Math.floor(Math.random() * 10000);
|
|
||||||
subscribeInfo.setEventId(random + "");
|
|
||||||
subscribeInfo.setSimulatedCallId(UUID.randomUUID().toString().replace("-", "") + "@" + parentPlatform.getServerIP());
|
|
||||||
subscribeInfo.setSimulatedFromTag(UUID.randomUUID().toString().replace("-", ""));
|
|
||||||
subscribeInfo.setSimulatedToTag(UUID.randomUUID().toString().replace("-", ""));
|
|
||||||
subscribeHolder.putCatalogSubscribe(parentPlatform.getId(), subscribeInfo);
|
subscribeHolder.putCatalogSubscribe(parentPlatform.getId(), subscribeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -473,4 +465,14 @@ public class PlatformServiceImpl implements IPlatformService {
|
||||||
public ParentPlatform query(Integer platformId) {
|
public ParentPlatform query(Integer platformId) {
|
||||||
return platformMapper.getParentPlatById(platformId);
|
return platformMapper.getParentPlatById(platformId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ParentPlatform> queryAllWithShareAll() {
|
||||||
|
return platformMapper.queryAllWithShareAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ParentPlatform> querySharePlatform(List<CommonGbChannel> channel, List<Integer> platformIdList) {
|
||||||
|
return platformMapper.querySharePlatform(channel, platformIdList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,13 +46,35 @@ public interface CommonChannelPlatformMapper {
|
||||||
@Param("commonGbChannelIds") List<Integer> commonGbChannelIds);
|
@Param("commonGbChannelIds") List<Integer> commonGbChannelIds);
|
||||||
|
|
||||||
@Select("<script>" +
|
@Select("<script>" +
|
||||||
"select p.* from wvp_platform p left join wvp_common_channel_platform cp on p.id = cp.platform_id where cp.common_gb_channel_id = #{commonGbId} and p.server_gb_id in " +
|
"select p.* from wvp_platform p left join wvp_common_channel_platform cp on p.id = cp.platform_id where cp.common_gb_channel_id = #{commonGbId} and p.id in " +
|
||||||
"<foreach collection='platforms' item='item' open='(' separator=',' close=')' >#{item}</foreach>" +
|
"<foreach collection='platforms' item='item' open='(' separator=',' close=')' >#{item}</foreach>" +
|
||||||
" </script>")
|
" </script>")
|
||||||
List<ParentPlatform> querySharePlatformListByChannelId(@Param("commonGbId") int commonGbId, @Param("platforms") List<String> platforms);
|
List<ParentPlatform> querySharePlatformListByChannelId(@Param("commonGbId") int commonGbId, @Param("platforms") List<Integer> platforms);
|
||||||
|
|
||||||
@Select("<script>" +
|
@Select("<script>" +
|
||||||
"select cc.* from wvp_common_channel cc left join wvp_common_channel_platform cp on cc.common_gb_id = cp.common_gb_channel_id where cp.platform_id = #{platformId}" +
|
"select cc.* from wvp_common_channel cc left join wvp_common_channel_platform cp on cc.common_gb_id = cp.common_gb_channel_id where cp.platform_id = #{platformId}" +
|
||||||
" </script>")
|
" </script>")
|
||||||
List<CommonGbChannel> queryCommonGbChannellList(@Param("platformId") Integer platformId);
|
List<CommonGbChannel> queryCommonGbChannellList(@Param("platformId") Integer platformId);
|
||||||
|
|
||||||
|
|
||||||
|
@Select("<script>" +
|
||||||
|
" select cc.* from wvp_common_channel cc " +
|
||||||
|
" left join wvp_common_channel_platform cp " +
|
||||||
|
" on cc.common_gb_id = cp.common_gb_channel_id " +
|
||||||
|
" where cp.platform_id = #{platformId}" +
|
||||||
|
" and cp.common_gb_channel_id = #{channelId}" +
|
||||||
|
" </script>")
|
||||||
|
CommonGbChannel queryChannelByPlatformIdAndChannelDeviceId(@Param("platformId") Integer platformId,
|
||||||
|
@Param("channelId") String channelId);
|
||||||
|
|
||||||
|
@Select("<script>" +
|
||||||
|
" select cc.* from wvp_common_channel cc " +
|
||||||
|
" left join wvp_common_channel_platform cp " +
|
||||||
|
" on cc.common_gb_id = cp.common_gb_channel_id " +
|
||||||
|
" where cp.platform_id = #{platformId}" +
|
||||||
|
" and cp.common_gb_channel_id in " +
|
||||||
|
"<foreach collection='channelList' item='item' open='(' separator=',' close=')' >#{item.commonGbId}</foreach>" +
|
||||||
|
" </script>")
|
||||||
|
List<CommonGbChannel> queryChannelListInRange(@Param("platformId") Integer platformId,
|
||||||
|
@Param("channelList") List<CommonGbChannel> channelList);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.genersoft.iot.vmp.storager.dao;
|
package com.genersoft.iot.vmp.storager.dao;
|
||||||
|
|
||||||
|
import com.genersoft.iot.vmp.common.CommonGbChannel;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
||||||
import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
|
import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
|
||||||
import org.apache.ibatis.annotations.*;
|
import org.apache.ibatis.annotations.*;
|
||||||
|
@ -104,4 +105,21 @@ public interface ParentPlatformMapper {
|
||||||
"union " +
|
"union " +
|
||||||
"select 'stream' as name, count(pgs.platform_id) count from wvp_platform_gb_stream pgs left join wvp_gb_stream gs on pgs.gb_stream_id = gs.gb_stream_id where pgs.platform_id=#{platform_id} and gs.gb_id =#{gbId}")
|
"select 'stream' as name, count(pgs.platform_id) count from wvp_platform_gb_stream pgs left join wvp_gb_stream gs on pgs.gb_stream_id = gs.gb_stream_id where pgs.platform_id=#{platform_id} and gs.gb_id =#{gbId}")
|
||||||
List<ChannelSourceInfo> getChannelSource(@Param("platform_id") String platform_id, @Param("gbId") String gbId);
|
List<ChannelSourceInfo> getChannelSource(@Param("platform_id") String platform_id, @Param("gbId") String gbId);
|
||||||
|
|
||||||
|
@Select("SELECT * FROM wvp_platform WHERE share_all_channel=true")
|
||||||
|
List<ParentPlatform> queryAllWithShareAll();
|
||||||
|
|
||||||
|
|
||||||
|
@Select("<script>" +
|
||||||
|
"select wp.*" +
|
||||||
|
"from wvp_platform wp\n" +
|
||||||
|
" left join wvp_common_channel_platform wccp on wp.id = wccp.platform_id\n" +
|
||||||
|
"where wp.share_all_channel = true " +
|
||||||
|
"or (wccp.common_gb_channel_id in " +
|
||||||
|
"<foreach collection='channelList' item='item' open='(' separator=',' close=')' >#{item.commonGbId}</foreach>" +
|
||||||
|
"and wccp.platform_id in " +
|
||||||
|
"<foreach collection='platformIdList' item='item' open='(' separator=',' close=')' >#{item}</foreach>" +
|
||||||
|
"</script>")
|
||||||
|
List<ParentPlatform> querySharePlatform(@Param("channelList") List<CommonGbChannel> channelList,
|
||||||
|
@Param("platformIdList") List<Integer> platformIdList);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,22 +51,6 @@ public class CommonChannelController {
|
||||||
private UserSetting userSetting;
|
private UserSetting userSetting;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从下级设备中同步通道 TODO 存疑 放在国标的接口里可能更合适
|
|
||||||
*
|
|
||||||
* @param deviceId 设备编号
|
|
||||||
*/
|
|
||||||
@GetMapping("/sync/device")
|
|
||||||
@Operation(summary = "从下级设备中同步通道")
|
|
||||||
@Parameter(name = "deviceId", description = "设备编号")
|
|
||||||
@Parameter(name = "syncKeys", description = "选择性同步的字段")
|
|
||||||
public boolean syncFromDevice(String deviceId, String[] syncKeys,
|
|
||||||
@RequestParam(required = false) Boolean syncGroup,
|
|
||||||
@RequestParam(required = false) Boolean syncRegion) {
|
|
||||||
return commonGbChannelService.syncChannelFromGb28181Device(deviceId, Lists.newArrayList(syncKeys), syncGroup, syncRegion);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Operation(summary = "更新通道信息")
|
@Operation(summary = "更新通道信息")
|
||||||
@Parameter(name = "CommonGbChannel", description = "commonGbChannel", required = true)
|
@Parameter(name = "CommonGbChannel", description = "commonGbChannel", required = true)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
|
|
Loading…
Reference in New Issue