附件补充下载
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

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);
}
}
}