SceneDownloadLogServiceImpl.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package com.fdkankan.scene.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.fdkankan.common.constant.ErrorCode;
  6. import com.fdkankan.common.constant.SceneVersionType;
  7. import com.fdkankan.common.exception.BusinessException;
  8. import com.fdkankan.common.util.JwtUtil;
  9. import com.fdkankan.redis.constant.RedisKey;
  10. import com.fdkankan.redis.util.RedisUtil;
  11. import com.fdkankan.scene.bean.SceneJsonBean;
  12. import com.fdkankan.scene.entity.SceneDownloadLog;
  13. import com.fdkankan.scene.entity.SceneEditInfo;
  14. import com.fdkankan.scene.entity.ScenePlus;
  15. import com.fdkankan.scene.mapper.ISceneDownloadLogMapper;
  16. import com.fdkankan.scene.oss.OssUtil;
  17. import com.fdkankan.scene.service.ISceneDownloadLogService;
  18. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  19. import com.fdkankan.scene.service.ISceneEditInfoService;
  20. import com.fdkankan.scene.service.IScenePlusService;
  21. import com.fdkankan.web.bean.DownLoadProgressBean;
  22. import com.fdkankan.web.response.ResultData;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import java.util.HashMap;
  27. import java.util.Map;
  28. import java.util.Objects;
  29. /**
  30. * <p>
  31. * 服务实现类
  32. * </p>
  33. *
  34. * @author
  35. * @since 2023-03-06
  36. */
  37. @Service
  38. public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMapper, SceneDownloadLog> implements ISceneDownloadLogService {
  39. private static String keyFormat = "touch:scene:download:num:%s";
  40. @Autowired
  41. private IScenePlusService scenePlusService;
  42. @Autowired
  43. private ISceneEditInfoService sceneEditInfoService;
  44. @Autowired
  45. private OssUtil ossUtil;
  46. @Autowired
  47. private RedisUtil redisUtil;
  48. @Override
  49. public ResultData downOfflineScene(String num) {
  50. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  51. if(Objects.isNull(scenePlus)){
  52. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  53. }
  54. Map<String, Object> result = new HashMap<>();
  55. String sceneJson = ossUtil.getFileContent(String.format(RedisKey.SCENE_JSON, num));
  56. SceneJsonBean sceneJsonBean = JSON.parseObject(sceneJson, SceneJsonBean.class);
  57. int version = sceneJsonBean.getVersion();
  58. SceneDownloadLog sceneDownloadLog = this.getOne(
  59. new LambdaQueryWrapper<SceneDownloadLog>()
  60. .eq(SceneDownloadLog::getSceneNum, num)
  61. .orderByDesc(SceneDownloadLog::getId)
  62. .last("limit 1"));
  63. boolean download = false;//是否需要生成
  64. if(Objects.nonNull(sceneDownloadLog)){
  65. if(sceneDownloadLog.getStatus() == 0){
  66. result.put("status", 0);
  67. return ResultData.ok(result);
  68. }
  69. if(sceneDownloadLog.getStatus() == 2){
  70. result.put("status", -1);
  71. return ResultData.ok(result);
  72. }
  73. if(version == sceneDownloadLog.getSceneVersion()){
  74. result.put("status", 2);
  75. result.put("url", sceneDownloadLog.getDownloadUrl());
  76. redisUtil.set(String.format(keyFormat, num), "1");
  77. return ResultData.ok(result);
  78. }else{
  79. result.put("status", 3);
  80. download = true;
  81. }
  82. }else{
  83. result.put("status", 1);
  84. download = true;
  85. }
  86. if(download){
  87. redisUtil.set(String.format(keyFormat, num), "1");
  88. //清除之前的下载记录
  89. this.remove(new LambdaQueryWrapper<SceneDownloadLog>().eq(SceneDownloadLog::getSceneNum, num));
  90. //写入新的记录
  91. sceneDownloadLog = new SceneDownloadLog();
  92. sceneDownloadLog.setSceneNum(num);
  93. sceneDownloadLog.setSceneVersion(version);
  94. sceneDownloadLog.setSysVersion("v4");
  95. this.save(sceneDownloadLog);
  96. Map<String,String> params = new HashMap<>(2);
  97. params.put("type","local");
  98. params.put("num",num);
  99. redisUtil.lRightPush(RedisKey.SCENE_DOWNLOADS_TASK_V4, JSONObject.toJSONString(params));
  100. }
  101. return ResultData.ok(result);
  102. }
  103. @Override
  104. public ResultData downloadProcess(String num) {
  105. String processStr = redisUtil.get(String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4,num));
  106. DownLoadProgressBean downLoadProgressBean = JSONObject.parseObject(processStr, DownLoadProgressBean.class);
  107. return ResultData.ok(downLoadProgressBean);
  108. }
  109. @Override
  110. public ResultData downloadUpDateStatus(String num) {
  111. redisUtil.del(String.format(keyFormat, num));
  112. return ResultData.ok();
  113. }
  114. }