|
|
package com.bw.fileDownload.service.impl;
import java.util.List; import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject; import com.bw.fileDownload.components.SpringBootKafka; import com.bw.fileDownload.entity.Constants; import com.bw.fileDownload.service.DownloadExecService; import com.bw.fileDownload.service.FileDownloadService;
import lombok.extern.slf4j.Slf4j;
/** * 附件下载逻辑实现类 * @author jian.mao * @date 2025年2月6日 * @description */ @Service @Slf4j public class FileDownloadServiceImpl implements FileDownloadService {
@Autowired private SpringBootKafka springBootKafka; @Autowired private DownloadExecService downloadExecService; @Value("${kafka.producer.topic}") private String topic; @Override public void video(Map<String, Object> task) { //视频队列的任务不仅仅做视频下载,还需要判断是否进行图片和文档的下载
Map<String, Object> parseData = (Map<String, Object>) task.get(Constants.PARSEDATA); Map<String, Object> data = (Map<String, Object>) parseData.get(Constants.DATA); String cid = (String) data.get(Constants.CID); String url = (String) data.get(Constants.URL); //获取视频链接
List<String> videoList = (List<String>) data.get(Constants.VIDEOLIST); //视频下载
Map<String, Object> resultMap = downloadExecService.downloadAndUploadVidoAndAudio(videoList, data); int downloadStatusCode = (int) resultMap.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("视频下载成功: url={},cid={}",url,cid); } else { log.info("视频下载失败: url={},cid={}",url,cid); } //判断文档和图片,包含进行下载操作
List<String> fileList = (List<String>) data.get(Constants.FILELIST); if(fileList != null && fileList.size() > 0) { //有文档
Map docRes = downloadExecService.DownloadAndUploadFile(fileList, data); downloadStatusCode = (int) docRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("文档下载成功: url={},cid={}",url,cid); } else { log.warn("文档下载失败,尝试无ua请求下载----"); docRes = downloadExecService.DownloadAndUploadFileNoUa(fileList, data); downloadStatusCode = (int) docRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("文档下载成功: url={},cid={}",url,cid); } else { log.error("文档下载失败: url={},cid={}",url,cid); } } } List<String> imgList = (List<String>) data.get(Constants.IMGLIST); if(imgList != null && imgList.size() > 0) { //有图片
Map imgRes = downloadExecService.DownloadAndUploadImg(imgList, data); downloadStatusCode = (int) imgRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("download task success: url=" + url + ",cid=" + cid); } else { log.warn("图片下载失败,切换无ua方式下载---"); imgRes = downloadExecService.DownloadAndUploadImgNoUa(imgList, data); downloadStatusCode = (int) imgRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("图片下载成功: url={},cid={}",url,cid); } else { log.error("图片下载失败: url={},cid={}",url,cid); } } } //发送kafka,完成数据流闭环
try { springBootKafka.send(topic, JSONObject.toJSONString(task)); } catch (Exception e) { log.error("视频类型任务发送失败。task:{},异常:{}",JSONObject.toJSON(task),e); } } @Override public void docOrImg(Map<String, Object> task) { //文档or图潘队列的任务
Map<String, Object> parseData = (Map<String, Object>) task.get(Constants.PARSEDATA); Map<String, Object> data = (Map<String, Object>) parseData.get(Constants.DATA); String cid = (String) data.get(Constants.CID); String url = (String) data.get(Constants.URL); //判断文档和图片,包含进行下载操作
List<String> fileList = (List<String>) data.get(Constants.FILELIST); if(fileList != null && fileList.size() > 0) { //有文档
Map docRes = downloadExecService.DownloadAndUploadFile(fileList, data); int downloadStatusCode = (int) docRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("文档下载成功: url={},cid={}",url,cid); } else { log.warn("文档下载失败,尝试无ua请求下载----"); docRes = downloadExecService.DownloadAndUploadFileNoUa(fileList, data); downloadStatusCode = (int) docRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("文档下载成功: url={},cid={}",url,cid); } else { log.error("文档下载失败: url={},cid={}",url,cid); } } } List<String> imgList = (List<String>) data.get(Constants.IMGLIST); if(imgList != null && imgList.size() > 0) { //有图片
Map imgRes = downloadExecService.DownloadAndUploadImg(imgList, data); int downloadStatusCode = (int) imgRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("download task success: url=" + url + ",cid=" + cid); } else { log.warn("图片下载失败,切换无ua方式下载---"); imgRes = downloadExecService.DownloadAndUploadImgNoUa(imgList, data); downloadStatusCode = (int) imgRes.get("downloadStatusCode"); if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) { log.info("图片下载成功: url={},cid={}",url,cid); } else { log.error("图片下载失败: url={},cid={}",url,cid); } } } //发送kafka,完成数据流闭环
try { springBootKafka.send(topic, JSONObject.toJSONString(task)); } catch (Exception e) { log.error("文档or图片类型任务发送失败。task:{},异常:{}",JSONObject.toJSON(task),e); } } @Override public void notFile(Map<String, Object> task) { try { //无附件不进行处理,直接发送kafka
springBootKafka.send(topic, JSONObject.toJSONString(task)); } catch (Exception e) { log.error("无附件类型任务发送失败。task:{},异常:{}",JSONObject.toJSON(task),e); } } }
|