修复对接金仓数据库中的问题

pull/1077/head
648540858 2023-09-12 15:32:17 +08:00
parent 5b8ffd5b61
commit d05bce8f7f
5 changed files with 41 additions and 32 deletions

View File

@ -50,8 +50,6 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService {
device = deviceMapper.getDeviceByDeviceId(deviceChannel.getDeviceId()); device = deviceMapper.getDeviceByDeviceId(deviceChannel.getDeviceId());
} }
if ("WGS84".equals(device.getGeoCoordSys())) { if ("WGS84".equals(device.getGeoCoordSys())) {
deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude()); deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude());
deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude()); deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude());
@ -143,7 +141,7 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService {
} }
} }
} }
int limitCount = 300; int limitCount = 50;
if (addChannels.size() > 0) { if (addChannels.size() > 0) {
if (addChannels.size() > limitCount) { if (addChannels.size() > limitCount) {
for (int i = 0; i < addChannels.size(); i += limitCount) { for (int i = 0; i < addChannels.size(); i += limitCount) {
@ -201,7 +199,7 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService {
deviceChannel.setUpdateTime(now); deviceChannel.setUpdateTime(now);
result.add(updateGps(deviceChannel, device)); result.add(updateGps(deviceChannel, device));
}); });
int limitCount = 300; int limitCount = 50;
if (result.size() > limitCount) { if (result.size() > limitCount) {
for (int i = 0; i < result.size(); i += limitCount) { for (int i = 0; i < result.size(); i += limitCount) {
int toIndex = i + limitCount; int toIndex = i + limitCount;

View File

@ -82,7 +82,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
int allCount = 0; int allCount = 0;
boolean result = false; boolean result = false;
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
int limitCount = 300; int limitCount = 50;
if (channelReducesToAdd.size() > 0) { if (channelReducesToAdd.size() > 0) {
if (channelReducesToAdd.size() > limitCount) { if (channelReducesToAdd.size() > limitCount) {
for (int i = 0; i < channelReducesToAdd.size(); i += limitCount) { for (int i = 0; i < channelReducesToAdd.size(); i += limitCount) {

View File

@ -14,7 +14,7 @@ import java.util.List;
@Repository @Repository
public interface GbStreamMapper { public interface GbStreamMapper {
@Insert("REPLACE INTO wvp_gb_stream (app, stream, gb_id, name, " + @Insert("INSERT INTO wvp_gb_stream (app, stream, gb_id, name, " +
"longitude, latitude, stream_type,media_server_id,create_time) VALUES" + "longitude, latitude, stream_type,media_server_id,create_time) VALUES" +
"(#{app}, #{stream}, #{gbId}, #{name}, " + "(#{app}, #{stream}, #{gbId}, #{name}, " +
"#{longitude}, #{latitude}, #{streamType}, " + "#{longitude}, #{latitude}, #{streamType}, " +

View File

@ -16,7 +16,7 @@ import java.util.List;
@Repository @Repository
public interface PlatformGbStreamMapper { public interface PlatformGbStreamMapper {
@Insert("REPLACE INTO wvp_platform_gb_stream (gb_stream_id, platform_id, catalog_id) VALUES" + @Insert("INSERT INTO wvp_platform_gb_stream (gb_stream_id, platform_id, catalog_id) VALUES" +
"( #{gbStreamId}, #{platformId}, #{catalogId})") "( #{gbStreamId}, #{platformId}, #{catalogId})")
int add(PlatformGbStream platformGbStream); int add(PlatformGbStream platformGbStream);

View File

@ -181,9 +181,19 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
return false; return false;
} }
try { try {
int cleanChannelsResult = deviceChannelMapper.cleanChannelsNotInList(deviceId, channels); int limitCount = 50;
int cleanChannelsResult = 0;
int limitCount = 300; if (channels.size() > limitCount) {
for (int i = 0; i < channels.size(); i += limitCount) {
int toIndex = i + limitCount;
if (i + limitCount > channels.size()) {
toIndex = channels.size();
}
cleanChannelsResult += this.deviceChannelMapper.cleanChannelsNotInList(deviceId, channels.subList(i, toIndex));
}
} else {
cleanChannelsResult = this.deviceChannelMapper.cleanChannelsNotInList(deviceId, channels);
}
boolean result = cleanChannelsResult < 0; boolean result = cleanChannelsResult < 0;
if (!result && addChannels.size() > 0) { if (!result && addChannels.size() > 0) {
if (addChannels.size() > limitCount) { if (addChannels.size() > limitCount) {
@ -239,12 +249,12 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
allChannelMap.put(deviceChannel.getChannelId(), deviceChannel); allChannelMap.put(deviceChannel.getChannelId(), deviceChannel);
} }
} }
List<DeviceChannel> addChannels = new ArrayList<>();
List<DeviceChannel> updateChannels = new ArrayList<>();
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
// 数据去重 // 数据去重
List<DeviceChannel> channels = new ArrayList<>();
List<DeviceChannel> updateChannels = new ArrayList<>();
List<DeviceChannel> addChannels = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
Map<String, Integer> subContMap = new HashMap<>(); Map<String, Integer> subContMap = new HashMap<>();
if (deviceChannelList.size() > 0) { if (deviceChannelList.size() > 0) {
@ -253,15 +263,24 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
for (DeviceChannel deviceChannel : deviceChannelList) { for (DeviceChannel deviceChannel : deviceChannelList) {
if (!gbIdSet.contains(deviceChannel.getChannelId())) { if (!gbIdSet.contains(deviceChannel.getChannelId())) {
gbIdSet.add(deviceChannel.getChannelId()); gbIdSet.add(deviceChannel.getChannelId());
deviceChannel.setUpdateTime(DateUtil.getNow());
if (allChannelMap.containsKey(deviceChannel.getChannelId())) { if (allChannelMap.containsKey(deviceChannel.getChannelId())) {
deviceChannel.setStreamId(allChannelMap.get(deviceChannel.getChannelId()).getStreamId()); deviceChannel.setStreamId(allChannelMap.get(deviceChannel.getChannelId()).getStreamId());
deviceChannel.setHasAudio(allChannelMap.get(deviceChannel.getChannelId()).isHasAudio()); deviceChannel.setHasAudio(allChannelMap.get(deviceChannel.getChannelId()).isHasAudio());
deviceChannel.setUpdateTime(DateUtil.getNow()); if (allChannelMap.get(deviceChannel.getChannelId()).isStatus() !=deviceChannel.isStatus()){
List<String> strings = platformChannelMapper.queryParentPlatformByChannelId(deviceChannel.getChannelId());
if (!CollectionUtils.isEmpty(strings)){
strings.forEach(platformId->{
eventPublisher.catalogEventPublish(platformId, deviceChannel, deviceChannel.isStatus()?CatalogEvent.ON:CatalogEvent.OFF);
});
}
}
updateChannels.add(deviceChannel); updateChannels.add(deviceChannel);
}else { }else {
deviceChannel.setCreateTime(DateUtil.getNow()); deviceChannel.setCreateTime(DateUtil.getNow());
addChannels.add(deviceChannel); addChannels.add(deviceChannel);
} }
channels.add(deviceChannel);
if (!ObjectUtils.isEmpty(deviceChannel.getParentId())) { if (!ObjectUtils.isEmpty(deviceChannel.getParentId())) {
if (subContMap.get(deviceChannel.getParentId()) == null) { if (subContMap.get(deviceChannel.getParentId()) == null) {
subContMap.put(deviceChannel.getParentId(), 1); subContMap.put(deviceChannel.getParentId(), 1);
@ -274,15 +293,8 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
stringBuilder.append(deviceChannel.getChannelId()).append(","); stringBuilder.append(deviceChannel.getChannelId()).append(",");
} }
} }
if (addChannels.size() > 0) { if (channels.size() > 0) {
for (DeviceChannel channel : addChannels) { for (DeviceChannel channel : channels) {
if (subContMap.get(channel.getChannelId()) != null){
channel.setSubCount(subContMap.get(channel.getChannelId()));
}
}
}
if (updateChannels.size() > 0) {
for (DeviceChannel channel : updateChannels) {
if (subContMap.get(channel.getChannelId()) != null){ if (subContMap.get(channel.getChannelId()) != null){
channel.setSubCount(subContMap.get(channel.getChannelId())); channel.setSubCount(subContMap.get(channel.getChannelId()));
} }
@ -293,12 +305,12 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
if (stringBuilder.length() > 0) { if (stringBuilder.length() > 0) {
logger.info("[目录查询]收到的数据存在重复: {}" , stringBuilder); logger.info("[目录查询]收到的数据存在重复: {}" , stringBuilder);
} }
if(CollectionUtils.isEmpty(updateChannels) && CollectionUtils.isEmpty(addChannels) ){ if(CollectionUtils.isEmpty(channels)){
logger.info("通道更新,数据为空={}" , deviceChannelList); logger.info("通道重设,数据为空={}" , deviceChannelList);
return false; return false;
} }
try { try {
int limitCount = 300; int limitCount = 50;
boolean result = false; boolean result = false;
if (addChannels.size() > 0) { if (addChannels.size() > 0) {
if (addChannels.size() > limitCount) { if (addChannels.size() > limitCount) {
@ -307,10 +319,10 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
if (i + limitCount > addChannels.size()) { if (i + limitCount > addChannels.size()) {
toIndex = addChannels.size(); toIndex = addChannels.size();
} }
result = result || deviceChannelMapper.batchAddOrUpdate(addChannels.subList(i, toIndex)) < 0; result = result || deviceChannelMapper.batchAdd(addChannels.subList(i, toIndex)) < 0;
} }
}else { }else {
result = result || deviceChannelMapper.batchAddOrUpdate(addChannels) < 0; result = result || deviceChannelMapper.batchAdd(addChannels) < 0;
} }
} }
if (updateChannels.size() > 0) { if (updateChannels.size() > 0) {
@ -326,13 +338,12 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
result = result || deviceChannelMapper.batchUpdate(updateChannels) < 0; result = result || deviceChannelMapper.batchUpdate(updateChannels) < 0;
} }
} }
if (result) { if (result) {
//事务回滚 //事务回滚
dataSourceTransactionManager.rollback(transactionStatus); dataSourceTransactionManager.rollback(transactionStatus);
}else {
//手动提交
dataSourceTransactionManager.commit(transactionStatus);
} }
dataSourceTransactionManager.commit(transactionStatus); //手动提交
return true; return true;
}catch (Exception e) { }catch (Exception e) {
logger.error("未处理的异常 ", e); logger.error("未处理的异常 ", e);