NsqMesgDeal.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package com.fdkankan.contro.mq.nsq;
  2. import cn.hutool.core.exceptions.ExceptionUtil;
  3. import cn.hutool.core.io.FileUtil;
  4. import cn.hutool.core.util.ZipUtil;
  5. import cn.hutool.crypto.digest.MD5;
  6. import cn.hutool.http.HttpUtil;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.fdkankan.common.constant.CommonSuccessStatus;
  10. import com.fdkankan.contro.common.Result;
  11. import com.fdkankan.contro.entity.SceneOrigBd;
  12. import com.fdkankan.contro.httpclient.MjHttpClient;
  13. import com.fdkankan.contro.service.ISceneOrigBdService;
  14. import com.fdkankan.model.constants.ConstantFilePath;
  15. import com.github.brainlag.nsq.NSQMessage;
  16. import com.github.brainlag.nsq.callbacks.NSQMessageCallback;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Component;
  20. import javax.annotation.Resource;
  21. import java.io.File;
  22. import java.io.IOException;
  23. import java.io.InputStream;
  24. import java.util.zip.ZipFile;
  25. @Component
  26. @Slf4j
  27. public class NsqMesgDeal implements NSQMessageCallback {
  28. private static final String BD_BASE_PATH = ConstantFilePath.BUILD_MODEL_PATH + "bd/";
  29. @Autowired
  30. private ISceneOrigBdService sceneOrigBdService;
  31. @Resource
  32. private MjHttpClient mjHttpClient;
  33. @Override
  34. public void message(NSQMessage nsqMessage) {
  35. String msg = new String(nsqMessage.getMessage());
  36. String id = new String(nsqMessage.getId());
  37. log.info("start deal call msg, id:{}, content:{}", id, msg);
  38. nsqMessage.finished();
  39. Result content = JSON.parseObject(msg, Result.class);
  40. // SceneOrigBd data = content.getData();
  41. JSONObject obj = (JSONObject) content.getData();
  42. SceneOrigBd data = JSON.parseObject(obj.toJSONString(), SceneOrigBd.class);
  43. try {
  44. String path = data.getPath();
  45. String fileHash = data.getFileHash();
  46. String localPath = BD_BASE_PATH + fileHash + File.separator + fileHash + ".zip";
  47. HttpUtil.downloadFile(path, new File(localPath), 1000 * 60 * 60 * 4);
  48. String md5 = MD5.create().digestHex(new File(localPath));
  49. data.setLocalPath(localPath);
  50. //比对md5是否一致
  51. if(!md5.equals(fileHash)){
  52. throw new RuntimeException("md5不匹配");
  53. }
  54. //data.fdage临时文件路径
  55. String tempFdagePath = null;
  56. try (
  57. ZipFile zipFile = new ZipFile(localPath);
  58. InputStream ins = ZipUtil.get(zipFile, "data.fdage")
  59. ){
  60. tempFdagePath = BD_BASE_PATH + fileHash + File.separator + fileHash + ".fdage";
  61. FileUtil.writeFromStream(ins, tempFdagePath);
  62. JSONObject dataFdage = JSON.parseObject(FileUtil.readUtf8String(tempFdagePath));
  63. String unicode = dataFdage.getString("creator") + "_" + dataFdage.getString("uuidtime");
  64. data.setUnicode(unicode);
  65. } catch (IOException e) {
  66. throw new RuntimeException(e);
  67. }finally {
  68. FileUtil.del(tempFdagePath);
  69. }
  70. //通知平台文件已下载(删除文件)
  71. JSONObject param = new JSONObject();
  72. param.put("filename", data.getFilename());
  73. Result notify = mjHttpClient.notify(param);
  74. log.info("distributeDetail-notify:{}", notify);
  75. }catch (Exception e){
  76. data.setReason(ExceptionUtil.stacktraceToString(e, 5000));
  77. data.setStatus(CommonSuccessStatus.FAIL.code());
  78. }
  79. sceneOrigBdService.save(data);
  80. nsqMessage.finished();
  81. log.info("end deal call msg, id:{}, content:{}", id, msg);
  82. }
  83. public static void main(String[] args) {
  84. try (
  85. ZipFile zipFile = new ZipFile("D:\\Downloads\\916ed6689_202501101516307030\\916ed6689_202501101516307030.zip");
  86. InputStream ins = ZipUtil.get(zipFile, "data.fdage")
  87. ){
  88. String tempFdagePath = "D:\\Downloads\\aaa.fdage";
  89. FileUtil.writeFromStream(ins, tempFdagePath);
  90. JSONObject dataFdage = JSON.parseObject(FileUtil.readUtf8String(tempFdagePath));
  91. String unicode = dataFdage.getString("creator") + "_" + dataFdage.getString("uuidtime");
  92. System.out.println(unicode);
  93. } catch (IOException e) {
  94. throw new RuntimeException(e);
  95. }
  96. }
  97. }