优化部分sql实现
This commit is contained in:
@@ -3,7 +3,6 @@ package com.genersoft.iot.vmp.storager.dao;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
|
||||
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
|
||||
import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
@@ -74,8 +73,8 @@ public interface DeviceChannelMapper {
|
||||
"dc.device_id = #{deviceId} " +
|
||||
" <if test='query != null'> AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%'))</if> " +
|
||||
" <if test='parentChannelId != null'> AND (dc.parent_id=#{parentChannelId} OR dc.civil_code = #{parentChannelId}) </if> " +
|
||||
" <if test='online == true' > AND dc.status=1</if>" +
|
||||
" <if test='online == false' > AND dc.status=0</if>" +
|
||||
" <if test='online == true' > AND dc.status= true</if>" +
|
||||
" <if test='online == false' > AND dc.status= false</if>" +
|
||||
" <if test='hasSubChannel == true' > AND dc.sub_count > 0 </if>" +
|
||||
" <if test='hasSubChannel == false' > AND dc.sub_count = 0 </if>" +
|
||||
"<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" +
|
||||
@@ -97,8 +96,8 @@ public interface DeviceChannelMapper {
|
||||
" <if test='device_id != null'> AND dc.device_id = #{deviceId} </if> " +
|
||||
" <if test='query != null'> AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
|
||||
" <if test='parentChannelId != null'> AND dc.parent_id=#{parentChannelId} </if> " +
|
||||
" <if test='online == true' > AND dc.status=1</if>" +
|
||||
" <if test='online == false' > AND dc.status=0</if>" +
|
||||
" <if test='online == true' > AND dc.status=true</if>" +
|
||||
" <if test='online == false' > AND dc.status=false</if>" +
|
||||
" <if test='hasSubChannel == true' > AND dc.sub_count > 0 </if>" +
|
||||
" <if test='hasSubChannel == false' > AND dc.sub_count = 0 </if>" +
|
||||
"<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" +
|
||||
@@ -121,8 +120,8 @@ public interface DeviceChannelMapper {
|
||||
" <if test='deviceId != null'> AND dc.device_id = #{deviceId} </if> " +
|
||||
" <if test='query != null'> AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
|
||||
" <if test='parentChannelId != null'> AND dc.parent_id=#{parentChannelId} </if> " +
|
||||
" <if test='online == true' > AND dc.status=1</if>" +
|
||||
" <if test='online == false' > AND dc.status=0</if>" +
|
||||
" <if test='online == true' > AND dc.status=true</if>" +
|
||||
" <if test='online == false' > AND dc.status=false</if>" +
|
||||
" <if test='hasSubChannel == true' > AND dc.sub_count > 0 </if>" +
|
||||
" <if test='hasSubChannel == false' > AND dc.sub_count = 0 </if>" +
|
||||
"<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" +
|
||||
@@ -165,8 +164,8 @@ public interface DeviceChannelMapper {
|
||||
" LEFT JOIN wvp_platform_gb_channel pgc on pgc.device_channel_id = dc.id " +
|
||||
" WHERE 1=1 " +
|
||||
" <if test='query != null'> AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%'))</if> " +
|
||||
" <if test='online == true' > AND dc.status=1</if> " +
|
||||
" <if test='online == false' > AND dc.status=0</if> " +
|
||||
" <if test='online == true' > AND dc.status=true</if> " +
|
||||
" <if test='online == false' > AND dc.status=false</if> " +
|
||||
" <if test='hasSubChannel!= null and has_sub_channel == true' > AND dc.sub_count > 0</if> " +
|
||||
" <if test='hasSubChannel!= null and has_sub_channel == false' > AND dc.sub_count = 0</if> " +
|
||||
" <if test='catalogId == null ' > AND dc.id not in (select device_channel_id from wvp_platform_gb_channel where platform_id=#{platformId} ) </if> " +
|
||||
@@ -191,10 +190,10 @@ public interface DeviceChannelMapper {
|
||||
@Select("SELECT * FROM wvp_device_channel WHERE channel_id=#{channelId}")
|
||||
List<DeviceChannel> queryChannelByChannelId( String channelId);
|
||||
|
||||
@Update(value = {"UPDATE wvp_device_channel SET status=0 WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
|
||||
@Update(value = {"UPDATE wvp_device_channel SET status=false WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
|
||||
void offline(String deviceId, String channelId);
|
||||
|
||||
@Update(value = {"UPDATE wvp_device_channel SET status=0 WHERE device_id=#{deviceId}"})
|
||||
@Update(value = {"UPDATE wvp_device_channel SET status=fasle WHERE device_id=#{deviceId}"})
|
||||
void offlineByDeviceId(String deviceId);
|
||||
|
||||
@Insert("<script> " +
|
||||
@@ -271,7 +270,7 @@ public interface DeviceChannelMapper {
|
||||
"</script>")
|
||||
int batchAddOrUpdate(List<DeviceChannel> addChannels);
|
||||
|
||||
@Update(value = {"UPDATE wvp_device_channel SET status=1 WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
|
||||
@Update(value = {"UPDATE wvp_device_channel SET status=true WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
|
||||
void online(String deviceId, String channelId);
|
||||
|
||||
@Update({"<script>" +
|
||||
@@ -283,7 +282,7 @@ public interface DeviceChannelMapper {
|
||||
"<if test='item.manufacture != null'>, manufacture=#{item.manufacture}</if>" +
|
||||
"<if test='item.model != null'>, model=#{item.model}</if>" +
|
||||
"<if test='item.owner != null'>, owner=#{item.owner}</if>" +
|
||||
"<if test='item.civil_code != null'>, civil_code=#{item.civilCode}</if>" +
|
||||
"<if test='item.civilCode != null'>, civil_code=#{item.civilCode}</if>" +
|
||||
"<if test='item.block != null'>, block=#{item.block}</if>" +
|
||||
"<if test='item.subCount != null'>, sub_count=#{item.subCount}</if>" +
|
||||
"<if test='item.address != null'>, address=#{item.address}</if>" +
|
||||
@@ -317,7 +316,7 @@ public interface DeviceChannelMapper {
|
||||
int batchUpdate(List<DeviceChannel> updateChannels);
|
||||
|
||||
|
||||
@Select("SELECT * FROM wvp_device_channel WHERE device_id=#{deviceId} AND status=1")
|
||||
@Select("SELECT * FROM wvp_device_channel WHERE device_id=#{deviceId} AND status=true")
|
||||
List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId);
|
||||
|
||||
@Delete(value = {" <script>" +
|
||||
@@ -406,9 +405,6 @@ public interface DeviceChannelMapper {
|
||||
List<DeviceChannel> queryAllChannels(String deviceId);
|
||||
|
||||
|
||||
@Select("select count(1) as total, sum(status) as online from wvp_device_channel")
|
||||
ResourceBaceInfo getOverview();
|
||||
|
||||
@Select("select channelId" +
|
||||
", device_id" +
|
||||
", latitude" +
|
||||
@@ -420,7 +416,7 @@ public interface DeviceChannelMapper {
|
||||
"from wvp_device_channel where device_id = #{deviceId} " +
|
||||
"and latitude != 0 " +
|
||||
"and longitude != 0 " +
|
||||
"and(latitude_gcj02=0orlatitude_wgs84=0orlongitude_wgs84= 0 or longitude_gcj02 = 0)")
|
||||
"and(latitude_gcj02=0 or latitude_wgs84=0 or longitude_wgs84= 0 or longitude_gcj02 = 0)")
|
||||
List<DeviceChannel> getChannelsWithoutTransform(String deviceId);
|
||||
|
||||
@Select("select de.* from wvp_device de left join wvp_device_channel dc on de.device_id = dc.deviceId where dc.channel_id=#{channelId}")
|
||||
@@ -436,15 +432,22 @@ public interface DeviceChannelMapper {
|
||||
|
||||
@Update({"<script>" +
|
||||
"<foreach collection='channels' item='item' separator=';'>" +
|
||||
"UPDATE wvp_device_channel SET status=1 WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
|
||||
"UPDATE wvp_device_channel SET status=true WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
|
||||
"</foreach>" +
|
||||
"</script>"})
|
||||
int batchOnline(List<DeviceChannel> channels);
|
||||
|
||||
@Update({"<script>" +
|
||||
"<foreach collection='channels' item='item' separator=';'>" +
|
||||
"UPDATE wvp_device_channel SET status=0 WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
|
||||
"UPDATE wvp_device_channel SET status= false WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
|
||||
"</foreach>" +
|
||||
"</script>"})
|
||||
int batchOffline(List<DeviceChannel> channels);
|
||||
|
||||
|
||||
@Select("select count(1) from wvp_device_channel where status = true")
|
||||
int getOnlineCount();
|
||||
|
||||
@Select("select count(1) from wvp_device_channel")
|
||||
int getAllChannelCount();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.genersoft.iot.vmp.storager.dao;
|
||||
|
||||
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@@ -162,8 +161,10 @@ public interface DeviceMapper {
|
||||
"tree_type,"+
|
||||
"online,"+
|
||||
"media_server_id,"+
|
||||
"(SELECT count(0) FROM wvp_device_channel WHERE device_id=de.device_id) as channel_count FROM wvp_device de" +
|
||||
"(SELECT count(0) FROM wvp_device_channel WHERE device_id=de.device_id) as channel_count " +
|
||||
"FROM wvp_device de" +
|
||||
"<if test=\"online != null\"> where online=${online}</if>"+
|
||||
" order by create_time desc "+
|
||||
" </script>"
|
||||
)
|
||||
List<Device> getDevices(Boolean online);
|
||||
@@ -288,9 +289,6 @@ public interface DeviceMapper {
|
||||
")")
|
||||
void addCustomDevice(Device device);
|
||||
|
||||
@Select("select count(1) as total, sum(online) as online FROM wvp_device")
|
||||
ResourceBaceInfo getOverview();
|
||||
|
||||
@Select("select * FROM wvp_device")
|
||||
List<Device> getAll();
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ public interface GbStreamMapper {
|
||||
void batchDelForGbStream(List<GbStream> gbStreams);
|
||||
|
||||
@Insert("<script> " +
|
||||
"INSERT IGNORE into wvp_gb_stream " +
|
||||
"INSERT into wvp_gb_stream " +
|
||||
"(app, stream, gb_id, name, " +
|
||||
"longitude, latitude, stream_type,media_server_id,create_time)" +
|
||||
"values " +
|
||||
@@ -127,7 +127,7 @@ public interface GbStreamMapper {
|
||||
"#{item.mediaServerId}, #{item.createTime}) "+
|
||||
"</foreach> " +
|
||||
"</script>")
|
||||
@Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gbStreamId")
|
||||
@Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gb_stream_id")
|
||||
void batchAdd(List<StreamPushItem> subList);
|
||||
|
||||
@Update({"<script>" +
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.genersoft.iot.vmp.storager.dao;
|
||||
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@@ -78,5 +78,12 @@ public interface StreamProxyMapper {
|
||||
List<StreamProxyItem> selectAutoRemoveItemByMediaServerId(String mediaServerId);
|
||||
|
||||
@Select("select count(1) as total, sum(status) as online from wvp_stream_proxy")
|
||||
ResourceBaceInfo getOverview();
|
||||
ResourceBaseInfo getOverview();
|
||||
|
||||
@Select("select count(1) from wvp_stream_proxy")
|
||||
|
||||
int getAllCount();
|
||||
|
||||
@Select("select count(1) from wvp_stream_proxy where status = true")
|
||||
int getOnline();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.genersoft.iot.vmp.storager.dao;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
||||
import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@@ -89,7 +88,7 @@ public interface StreamPushMapper {
|
||||
StreamPushItem selectOne(String app, String stream);
|
||||
|
||||
@Insert("<script>" +
|
||||
"Insert IGNORE INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " +
|
||||
"Insert INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " +
|
||||
"create_time, alive_second, media_server_id, status, push_ing) " +
|
||||
"VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" +
|
||||
"( #{item.app}, #{item.stream}, #{item.totalReaderCount}, #{item.originType}, " +
|
||||
@@ -171,9 +170,20 @@ public interface StreamPushMapper {
|
||||
@Select("SELECT CONCAT(app,stream) from wvp_gb_stream")
|
||||
List<String> getAllAppAndStream();
|
||||
|
||||
@Select("select count(1) from wvp_stream_push ")
|
||||
int getAllCount();
|
||||
|
||||
@Select(value = {" <script>" +
|
||||
" <if test='pushIngAsOnline == true'> select count(1) as total, sum(push_ing) as online from wvp_stream_push </if>" +
|
||||
" <if test='pushIngAsOnline == false'> select count(1) as total, sum(status) as online from wvp_stream_push </if>" +
|
||||
" <if test='pushIngAsOnline == true'> select count(1) from wvp_stream_push where push_ing = true </if>" +
|
||||
" <if test='pushIngAsOnline == false'> select count(1)from wvp_stream_push where status = true </if>" +
|
||||
" </script>"})
|
||||
ResourceBaceInfo getOverview(boolean pushIngAsOnline);
|
||||
int getAllOnline(Boolean usePushingAsStatus);
|
||||
|
||||
@Select("<script> " +
|
||||
"select app, stream from wvp_stream_push where (app, stream) in " +
|
||||
"<foreach collection='streamPushItems' item='item' separator=','>" +
|
||||
"(#{item.app}, #{item.stream}) " +
|
||||
"</foreach>" +
|
||||
"</script>")
|
||||
List<StreamPushItem> getListIn(List<StreamPushItem> streamPushItems);
|
||||
}
|
||||
|
||||
@@ -123,6 +123,9 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
||||
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
|
||||
// 数据去重
|
||||
List<DeviceChannel> channels = new ArrayList<>();
|
||||
|
||||
List<DeviceChannel> updateChannels = new ArrayList<>();
|
||||
List<DeviceChannel> addChannels = new ArrayList<>();
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
Map<String, Integer> subContMap = new HashMap<>();
|
||||
if (deviceChannelList.size() > 0) {
|
||||
@@ -131,18 +134,22 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
||||
for (DeviceChannel deviceChannel : deviceChannelList) {
|
||||
if (!gbIdSet.contains(deviceChannel.getChannelId())) {
|
||||
gbIdSet.add(deviceChannel.getChannelId());
|
||||
deviceChannel.setUpdateTime(DateUtil.getNow());
|
||||
if (allChannelMap.containsKey(deviceChannel.getChannelId())) {
|
||||
deviceChannel.setStreamId(allChannelMap.get(deviceChannel.getChannelId()).getStreamId());
|
||||
deviceChannel.setHasAudio(allChannelMap.get(deviceChannel.getChannelId()).isHasAudio());
|
||||
if (allChannelMap.get(deviceChannel.getChannelId()).getStatus() !=deviceChannel.getStatus()){
|
||||
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.getStatus()==1?CatalogEvent.ON:CatalogEvent.OFF);
|
||||
eventPublisher.catalogEventPublish(platformId, deviceChannel, deviceChannel.isStatus()?CatalogEvent.ON:CatalogEvent.OFF);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
updateChannels.add(deviceChannel);
|
||||
}else {
|
||||
deviceChannel.setCreateTime(DateUtil.getNow());
|
||||
addChannels.add(deviceChannel);
|
||||
}
|
||||
channels.add(deviceChannel);
|
||||
if (!ObjectUtils.isEmpty(deviceChannel.getParentId())) {
|
||||
@@ -175,21 +182,36 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
||||
}
|
||||
try {
|
||||
int cleanChannelsResult = deviceChannelMapper.cleanChannelsNotInList(deviceId, channels);
|
||||
|
||||
int limitCount = 300;
|
||||
boolean result = cleanChannelsResult < 0;
|
||||
if (!result && channels.size() > 0) {
|
||||
if (channels.size() > limitCount) {
|
||||
for (int i = 0; i < channels.size(); i += limitCount) {
|
||||
if (!result && addChannels.size() > 0) {
|
||||
if (addChannels.size() > limitCount) {
|
||||
for (int i = 0; i < addChannels.size(); i += limitCount) {
|
||||
int toIndex = i + limitCount;
|
||||
if (i + limitCount > channels.size()) {
|
||||
toIndex = channels.size();
|
||||
if (i + limitCount > addChannels.size()) {
|
||||
toIndex = addChannels.size();
|
||||
}
|
||||
result = result || deviceChannelMapper.batchAddOrUpdate(channels.subList(i, toIndex)) < 0;
|
||||
result = result || deviceChannelMapper.batchAdd(addChannels.subList(i, toIndex)) < 0;
|
||||
}
|
||||
}else {
|
||||
result = result || deviceChannelMapper.batchAddOrUpdate(channels) < 0;
|
||||
result = result || deviceChannelMapper.batchAdd(addChannels) < 0;
|
||||
}
|
||||
}
|
||||
if (!result && updateChannels.size() > 0) {
|
||||
if (updateChannels.size() > limitCount) {
|
||||
for (int i = 0; i < updateChannels.size(); i += limitCount) {
|
||||
int toIndex = i + limitCount;
|
||||
if (i + limitCount > updateChannels.size()) {
|
||||
toIndex = updateChannels.size();
|
||||
}
|
||||
result = result || deviceChannelMapper.batchUpdate(updateChannels.subList(i, toIndex)) < 0;
|
||||
}
|
||||
}else {
|
||||
result = result || deviceChannelMapper.batchUpdate(updateChannels) < 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
//事务回滚
|
||||
dataSourceTransactionManager.rollback(transactionStatus);
|
||||
@@ -919,7 +941,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
||||
deviceChannel.setLatitude(0.0);
|
||||
deviceChannel.setDeviceId(platform.getDeviceGBId());
|
||||
deviceChannel.setManufacture("wvp-pro");
|
||||
deviceChannel.setStatus(1);
|
||||
deviceChannel.setStatus(true);
|
||||
deviceChannel.setParental(1);
|
||||
|
||||
deviceChannel.setRegisterWay(1);
|
||||
|
||||
Reference in New Issue
Block a user