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

  1. package com.bw.fileDownload.service.impl;
  2. import java.util.List;
  3. import java.util.Map;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.stereotype.Service;
  7. import com.alibaba.fastjson.JSONObject;
  8. import com.bw.fileDownload.components.SpringBootKafka;
  9. import com.bw.fileDownload.entity.Constants;
  10. import com.bw.fileDownload.service.DownloadExecService;
  11. import com.bw.fileDownload.service.FileDownloadService;
  12. import lombok.extern.slf4j.Slf4j;
  13. /**
  14. * 附件下载逻辑实现类
  15. * @author jian.mao
  16. * @date 2025年2月6日
  17. * @description
  18. */
  19. @Service
  20. @Slf4j
  21. public class FileDownloadServiceImpl implements FileDownloadService {
  22. @Autowired
  23. private SpringBootKafka springBootKafka;
  24. @Autowired
  25. private DownloadExecService downloadExecService;
  26. @Value("${kafka.producer.topic}")
  27. private String topic;
  28. @Override
  29. public void video(Map<String, Object> task) {
  30. //视频队列的任务不仅仅做视频下载,还需要判断是否进行图片和文档的下载
  31. Map<String, Object> parseData = (Map<String, Object>) task.get(Constants.PARSEDATA);
  32. Map<String, Object> data = (Map<String, Object>) parseData.get(Constants.DATA);
  33. String cid = (String) data.get(Constants.CID);
  34. String url = (String) data.get(Constants.URL);
  35. //获取视频链接
  36. List<String> videoList = (List<String>) data.get(Constants.VIDEOLIST);
  37. //视频下载
  38. Map<String, Object> resultMap = downloadExecService.downloadAndUploadVidoAndAudio(videoList, data);
  39. int downloadStatusCode = (int) resultMap.get("downloadStatusCode");
  40. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  41. log.info("视频下载成功: url={},cid={}",url,cid);
  42. } else {
  43. log.info("视频下载失败: url={},cid={}",url,cid);
  44. }
  45. //判断文档和图片,包含进行下载操作
  46. List<String> fileList = (List<String>) data.get(Constants.FILELIST);
  47. if(fileList != null && fileList.size() > 0) {
  48. //有文档
  49. Map docRes = downloadExecService.DownloadAndUploadFile(fileList, data);
  50. downloadStatusCode = (int) docRes.get("downloadStatusCode");
  51. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  52. log.info("文档下载成功: url={},cid={}",url,cid);
  53. } else {
  54. log.warn("文档下载失败,尝试无ua请求下载----");
  55. docRes = downloadExecService.DownloadAndUploadFileNoUa(fileList, data);
  56. downloadStatusCode = (int) docRes.get("downloadStatusCode");
  57. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  58. log.info("文档下载成功: url={},cid={}",url,cid);
  59. } else {
  60. log.error("文档下载失败: url={},cid={}",url,cid);
  61. }
  62. }
  63. }
  64. List<String> imgList = (List<String>) data.get(Constants.IMGLIST);
  65. if(imgList != null && imgList.size() > 0) {
  66. //有图片
  67. Map imgRes = downloadExecService.DownloadAndUploadImg(imgList, data);
  68. downloadStatusCode = (int) imgRes.get("downloadStatusCode");
  69. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  70. log.info("download task success: url=" + url + ",cid=" + cid);
  71. } else {
  72. log.warn("图片下载失败,切换无ua方式下载---");
  73. imgRes = downloadExecService.DownloadAndUploadImgNoUa(imgList, data);
  74. downloadStatusCode = (int) imgRes.get("downloadStatusCode");
  75. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  76. log.info("图片下载成功: url={},cid={}",url,cid);
  77. } else {
  78. log.error("图片下载失败: url={},cid={}",url,cid);
  79. }
  80. }
  81. }
  82. //发送kafka,完成数据流闭环
  83. try {
  84. springBootKafka.send(topic, JSONObject.toJSONString(task));
  85. } catch (Exception e) {
  86. log.error("视频类型任务发送失败。task:{},异常:{}",JSONObject.toJSON(task),e);
  87. }
  88. }
  89. @Override
  90. public void docOrImg(Map<String, Object> task) {
  91. //文档or图潘队列的任务
  92. Map<String, Object> parseData = (Map<String, Object>) task.get(Constants.PARSEDATA);
  93. Map<String, Object> data = (Map<String, Object>) parseData.get(Constants.DATA);
  94. String cid = (String) data.get(Constants.CID);
  95. String url = (String) data.get(Constants.URL);
  96. //判断文档和图片,包含进行下载操作
  97. List<String> fileList = (List<String>) data.get(Constants.FILELIST);
  98. if(fileList != null && fileList.size() > 0) {
  99. //有文档
  100. Map docRes = downloadExecService.DownloadAndUploadFile(fileList, data);
  101. int downloadStatusCode = (int) docRes.get("downloadStatusCode");
  102. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  103. log.info("文档下载成功: url={},cid={}",url,cid);
  104. } else {
  105. log.warn("文档下载失败,尝试无ua请求下载----");
  106. docRes = downloadExecService.DownloadAndUploadFileNoUa(fileList, data);
  107. downloadStatusCode = (int) docRes.get("downloadStatusCode");
  108. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  109. log.info("文档下载成功: url={},cid={}",url,cid);
  110. } else {
  111. log.error("文档下载失败: url={},cid={}",url,cid);
  112. }
  113. }
  114. }
  115. List<String> imgList = (List<String>) data.get(Constants.IMGLIST);
  116. if(imgList != null && imgList.size() > 0) {
  117. //有图片
  118. Map imgRes = downloadExecService.DownloadAndUploadImg(imgList, data);
  119. int downloadStatusCode = (int) imgRes.get("downloadStatusCode");
  120. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  121. log.info("download task success: url=" + url + ",cid=" + cid);
  122. } else {
  123. log.warn("图片下载失败,切换无ua方式下载---");
  124. imgRes = downloadExecService.DownloadAndUploadImgNoUa(imgList, data);
  125. downloadStatusCode = (int) imgRes.get("downloadStatusCode");
  126. if (downloadStatusCode == Constants.DOWNLOAD_SUCCESS) {
  127. log.info("图片下载成功: url={},cid={}",url,cid);
  128. } else {
  129. log.error("图片下载失败: url={},cid={}",url,cid);
  130. }
  131. }
  132. }
  133. //发送kafka,完成数据流闭环
  134. try {
  135. springBootKafka.send(topic, JSONObject.toJSONString(task));
  136. } catch (Exception e) {
  137. log.error("文档or图片类型任务发送失败。task:{},异常:{}",JSONObject.toJSON(task),e);
  138. }
  139. }
  140. @Override
  141. public void notFile(Map<String, Object> task) {
  142. try {
  143. //无附件不进行处理,直接发送kafka
  144. springBootKafka.send(topic, JSONObject.toJSONString(task));
  145. } catch (Exception e) {
  146. log.error("无附件类型任务发送失败。task:{},异常:{}",JSONObject.toJSON(task),e);
  147. }
  148. }
  149. }