| 
					
				 | 
			
			
				@@ -95,6 +95,7 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final CrawlerVideoExtMapper crawlerVideoExtMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final CrawlerUserV3Mapper crawlerUserV3Mapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Value("${download.file.path:/data/crawler/videos}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String downloadPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Value("${aliyun.oss.video.bucket:art-pubbucket}") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -145,9 +146,10 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         long id = 0L; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 参数校验 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String errorMessage = CustomValidator.validate(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!Strings.isNullOrEmpty(errorMessage)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw new CommonException(ExceptionEnum.PARAM_ERROR, "param validate failed." + errorMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CustomValidator.Result result = CustomValidator.validate(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (result.notSuccess()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("param validate failed. {}", result.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 保存数据库(去重校验) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -177,7 +179,7 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 crawlerVideo.setVideoId(videoId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 crawlerVideo.setTitleScore(data.getTitleScore()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return crawlerVideoMapper.updateByPrimaryKeySelective(crawlerVideo) > 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }, "synthesis", String.format("update video info [%s] to db", crawlerVideo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, "video2db", String.format("update video info [%s] to db", crawlerVideo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 视频写入飞书 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             async2Feishu(data, videoId); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -187,9 +189,16 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.error("etl server deal {} failed.", param, e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 回滚数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (id > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                crawlerVideoMapper.deleteByPrimaryKey(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    int i = crawlerVideoMapper.deleteByPrimaryKey(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (i <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        log.error("delete data from db failed of {}", id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } catch (Exception e1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    log.error("delete data from db failed of {}", id, e1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            throw new CommonException(ExceptionEnum.SYSTEM_ERROR, "etl server deal error: " + e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            throw new CommonException(ExceptionEnum.SYSTEM_ERROR, "etl server deal error: " + e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             metric(MetricTypeEnum.DURATION, sw.stop()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tlParam.remove(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -317,10 +326,10 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String strategy = data.getStrategy(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String audioUrl = data.getAudioUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String videoPath = urlDownload(data.getVideoUrl(), "longvideo/crawler_local/video", title); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String videoPath = urlDownload(data.getVideoUrl(), "longvideo/crawler_local/video", title, data.getOutVideoId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 音、视频合成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!Strings.isNullOrEmpty(audioUrl)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String audioPath = urlDownload(data.getAudioUrl(), "longvideo/crawler_local/audio", title); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String audioPath = urlDownload(data.getAudioUrl(), "longvideo/crawler_local/audio", title, data.getOutVideoId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             retryFunc(t -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     VideoUtils.videoSynthesis(ffmpegPath, downloadPath + File.separator + t, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -357,7 +366,7 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Files.deleteIfExists(Paths.get(new File(tempFilePath).getPath())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 视频封面下载、上传 OSS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String coverPath = urlDownload(data.getCoverUrl(), "longvideo/crawler_local/image", title); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String coverPath = urlDownload(data.getCoverUrl(), "longvideo/crawler_local/image", title, data.getOutVideoId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         file2oss(downloadPath + File.separator + coverPath, coverPath, platform, strategy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         data.setCoverOssPath(coverPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tempFilePath = downloadPath + File.separator + coverPath; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -367,21 +376,24 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Files.deleteIfExists(Paths.get(new File(tempFilePath).getPath())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private String urlDownload(String fileUrl, String filePath, String title) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String titleMmd5 = MD5Util.md5(title); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String urlDownload(String fileUrl, String filePath, String title, String outVideoId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String fileName = MD5Util.md5(title) + outVideoId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String curDate = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String videoFilePath = filePath + File.separator + env + File.separator + curDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String localFilePath = downloadPath + File.separator + videoFilePath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         File localFile = new File(localFilePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!localFile.exists() && (!localFile.mkdirs())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.warn("mkdir dir [{}] failed!", localFilePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("mkdir dir [{}] failed!", localFilePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            localFilePath = "/data"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String finalLocalFilePath = localFilePath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         retrySupplier(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 下载文件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                FileUtils.download(fileUrl, localFilePath + File.separator + titleMmd5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FileUtils.download(fileUrl, finalLocalFilePath + File.separator + fileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } catch (CommonException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (e.getCode() == ExceptionEnum.URL_FORBIDDEN.getCode()) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -394,7 +406,7 @@ public class EtlServiceImpl implements EtlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, "download", String.format("download file from [%s] to [%s]", fileUrl, filePath)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return videoFilePath + File.separator + titleMmd5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return videoFilePath + File.separator + fileName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void file2oss(String localFile, String ossBucketKey, String crawler, String mode) { 
			 |