You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
6.9 KiB
160 lines
6.9 KiB
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);
|
|
}
|
|
}
|
|
|
|
}
|