From b663a8ab41efc072ca629391bb14ff42e26eb0cb Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期五, 11 二月 2022 18:01:58 +0800 Subject: [PATCH] Merge remote-tracking branch 'github/wvp-28181-2.0' into wvp-28181-2.0 --- src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 100 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java index d440e4d..2f94709 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java @@ -5,46 +5,136 @@ import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.IStreamPushService; import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; +import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.List; +import java.util.*; public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPushExcelDto> { + private ErrorDataHandler errorDataHandler; private IStreamPushService pushService; private String defaultMediaServerId; private List<StreamPushItem> streamPushItems = new ArrayList<>(); + private Map<String, UploadData> streamPushItemsForPlatform = new HashMap<>(); + private Set<String> streamPushStreamSet = new HashSet<>(); + private Set<String> streamPushGBSet = new HashSet<>(); + private List<String> errorStreamList = new ArrayList<>(); + private List<String> errorGBList = new ArrayList<>(); + // 璇诲彇鏁伴噺璁℃暟鍣� + private int loadedSize = 0; - public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId) { + public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId, ErrorDataHandler errorDataHandler) { this.pushService = pushService; this.defaultMediaServerId = defaultMediaServerId; + this.errorDataHandler = errorDataHandler; + } + + public interface ErrorDataHandler{ + void handle(List<String> streams, List<String> gbId); + } + + private class UploadData{ + public String platformId; + public Map<String, List<StreamPushItem>> catalogData = new HashMap<>(); + public List<StreamPushItem> streamPushItems = new ArrayList<>(); + + public UploadData(String platformId) { + this.platformId = platformId; + } } @Override public void invoke(StreamPushExcelDto streamPushExcelDto, AnalysisContext analysisContext) { + if (StringUtils.isEmpty(streamPushExcelDto.getApp()) + || StringUtils.isEmpty(streamPushExcelDto.getStream()) + || StringUtils.isEmpty(streamPushExcelDto.getGbId())) { + return; + } + if (streamPushGBSet.contains(streamPushExcelDto.getGbId())) { + errorGBList.add(streamPushExcelDto.getGbId()); + } + if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) { + errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()); + } + if (streamPushGBSet.contains(streamPushExcelDto.getGbId()) || streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) { + return; + } + StreamPushItem streamPushItem = new StreamPushItem(); streamPushItem.setApp(streamPushExcelDto.getApp()); streamPushItem.setStream(streamPushExcelDto.getStream()); streamPushItem.setGbId(streamPushExcelDto.getGbId()); streamPushItem.setStatus(false); streamPushItem.setStreamType("push"); - streamPushItem.setCreateStamp(System.currentTimeMillis()/1000); + streamPushItem.setCreateStamp(System.currentTimeMillis()); streamPushItem.setMediaServerId(defaultMediaServerId); streamPushItem.setName(streamPushExcelDto.getName()); streamPushItem.setOriginType(2); streamPushItem.setOriginTypeStr("rtsp_push"); streamPushItem.setTotalReaderCount("0"); - streamPushItems.add(streamPushItem); - if (streamPushItems.size() > 300) { - pushService.batchAdd(streamPushItems); - // 瀛樺偍瀹屾垚娓呯悊 list - streamPushItems.clear(); + streamPushItem.setPlatformId(streamPushExcelDto.getPlatformId()); + streamPushItem.setCatalogId(streamPushExcelDto.getCatalogId()); + if (StringUtils.isEmpty(streamPushExcelDto.getPlatformId())) { + streamPushItems.add(streamPushItem); + }else { + UploadData uploadData = streamPushItemsForPlatform.get(streamPushExcelDto.getPlatformId()); + if (uploadData == null) { + uploadData = new UploadData(streamPushExcelDto.getPlatformId()); + streamPushItemsForPlatform.put(streamPushExcelDto.getPlatformId(), uploadData); + } + if (!StringUtils.isEmpty(streamPushExcelDto.getCatalogId())) { + List<StreamPushItem> streamPushItems = uploadData.catalogData.get(streamPushExcelDto.getCatalogId()); + if (streamPushItems == null) { + streamPushItems = new ArrayList<>(); + uploadData.catalogData.put(streamPushExcelDto.getCatalogId(), streamPushItems); + } + streamPushItems.add(streamPushItem); + }else { + uploadData.streamPushItems.add(streamPushItem); + } + } + + streamPushGBSet.add(streamPushExcelDto.getGbId()); + streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream()); + loadedSize ++; + if (loadedSize > 1000) { + saveData(); + streamPushItems.clear(); + streamPushItemsForPlatform.clear(); + loadedSize = 0; + } + } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 杩欓噷涔熻淇濆瓨鏁版嵁锛岀‘淇濇渶鍚庨仐鐣欑殑鏁版嵁涔熷瓨鍌ㄥ埌鏁版嵁搴� - pushService.batchAdd(streamPushItems); + saveData(); + streamPushGBSet.clear(); + streamPushStreamSet.clear(); + errorDataHandler.handle(errorStreamList, errorGBList); + } + + private void saveData(){ + if (streamPushItems.size() > 0) { + pushService.batchAddForUpload(null, null, streamPushItems); + } + // 澶勭悊宸插垎閰嶅埌骞冲彴鐨勬祦 + if (streamPushItemsForPlatform.size() > 0){ + for (String platformId : streamPushItemsForPlatform.keySet()) { + UploadData uploadData = streamPushItemsForPlatform.get(platformId); + if (uploadData.streamPushItems.size() > 0) { + pushService.batchAddForUpload(platformId, null, uploadData.streamPushItems); + } + if (uploadData.catalogData.size() > 0) { + for (String catalogId : uploadData.catalogData.keySet()) { + if (uploadData.catalogData.get(catalogId).size() > 0) { + pushService.batchAddForUpload(platformId, catalogId, uploadData.catalogData.get(catalogId)); + } + } + } + } + } } } -- Gitblit v1.8.0