Browse Source

校验下载状态

dengsixing 3 years ago
parent
commit
e959cfe0a9

+ 10 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/UserSceneController.java

@@ -61,6 +61,16 @@ public class UserSceneController extends BaseController {
     }
     }
 
 
     /**
     /**
+     * 校验该场景有无下载资格
+     * @param param
+     * @return
+     */
+    @RequestMapping(value = "/checkDownload", method = RequestMethod.POST)
+    public ResultData checkDownload(@RequestBody @Validated SceneDownloadParamVO param) throws Exception{
+        return userSceneService.checkDownload(this.getUserId(), param);
+    }
+
+    /**
      * 场景下载
      * 场景下载
      * @param param
      * @param param
      * @return
      * @return

+ 1 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/entity/SceneDownloadLog.java

@@ -59,7 +59,7 @@ public class SceneDownloadLog implements Serializable {
      * 下载失败原因
      * 下载失败原因
      */
      */
     @TableField("reason")
     @TableField("reason")
-    private Integer reason;
+    private String reason;
 
 
     /**
     /**
      * 创建时间
      * 创建时间

+ 2 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneDownloadLogService.java

@@ -20,6 +20,8 @@ public interface ISceneDownloadLogService extends IService<SceneDownloadLog> {
 
 
     SceneDownloadLog findByStatusAndNum(String sceneNum, Integer status);
     SceneDownloadLog findByStatusAndNum(String sceneNum, Integer status);
 
 
+    SceneDownloadLog findLastOneByNum(String sceneNum);
+
     void updateSceneDownloadLog(String num, Integer status, String url, String reason);
     void updateSceneDownloadLog(String num, Integer status, String url, String reason);
 
 
 }
 }

+ 2 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/IUserSceneService.java

@@ -34,5 +34,7 @@ public interface IUserSceneService {
 
 
     ResultData getSceneDownloadProcess(Long userId, SceneDownloadParamVO param);
     ResultData getSceneDownloadProcess(Long userId, SceneDownloadParamVO param);
 
 
+    ResultData checkDownload(Long userId, SceneDownloadParamVO param) throws Exception;
+
 
 
 }
 }

+ 13 - 6
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneDownloadLogServiceImpl.java

@@ -52,17 +52,24 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
 
 
     @Override
     @Override
     public SceneDownloadLog findByStatusAndNum(String sceneNum, Integer status) {
     public SceneDownloadLog findByStatusAndNum(String sceneNum, Integer status) {
-
-        List<SceneDownloadLog> list = this.list(new QueryWrapper<SceneDownloadLog>()
-                .eq("tb_status", TbStatus.VALID.code())
-                .eq("num", sceneNum)
-                .eq("download_status", status)
-                .orderByDesc("id"));
+        List<SceneDownloadLog> list =
+            this.list(new LambdaQueryWrapper<SceneDownloadLog>()
+                .eq(SceneDownloadLog::getNum, sceneNum)
+                .eq(SceneDownloadLog::getDownloadStatus, status)
+                .orderByDesc(SceneDownloadLog::getId));
         if(CollUtil.isEmpty(list)){
         if(CollUtil.isEmpty(list)){
             return null;
             return null;
         }
         }
         return list.get(0);
         return list.get(0);
+    }
 
 
+    @Override
+    public SceneDownloadLog findLastOneByNum(String sceneNum) {
+        SceneDownloadLog downloadLog =
+            this.getOne(new LambdaQueryWrapper<SceneDownloadLog>()
+                .eq(SceneDownloadLog::getNum, sceneNum)
+                .orderByDesc(SceneDownloadLog::getId).last("limit 1"));
+        return downloadLog;
     }
     }
 
 
     @Override
     @Override

+ 49 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/UserSceneServiceImpl.java

@@ -370,6 +370,55 @@ public class UserSceneServiceImpl implements IUserSceneService {
         return ResultData.ok(JSON.parseObject(processStr, DownLoadProgressBean.class));
         return ResultData.ok(JSON.parseObject(processStr, DownLoadProgressBean.class));
     }
     }
 
 
+    @Override
+    public ResultData checkDownload(Long userId, SceneDownloadParamVO param) throws Exception {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getSceneNum());
+        if(scenePlus == null){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        if(sceneEditInfo == null){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+
+        Map<String, Object> result = new HashMap<>();
+
+        //downloadStatus,1打包资源下载,2已下载过,3下载过,并且没有修改过,无需打包直接返回下载地址,-1没下载次数不足
+        //下载中
+        SceneDownloadLog sceneDownloadLog = sceneDownloadLogService.findLastOneByNum(param.getSceneNum());
+
+        //未下载过
+        if(Objects.isNull(sceneDownloadLog)){
+            result.put("downloadStatus", 0);
+            return ResultData.ok(result);
+        }
+
+        if(sceneDownloadLog.getDownloadStatus() == DownloadStatus.DOWNLOADING.code()){
+            result.put("downloadStatus", 1);
+            return ResultData.ok(result);
+        }
+
+
+        //下载过,并且没有修改过
+        if(sceneDownloadLog.getSceneVersion() == sceneEditInfo.getVersion()
+            && sceneDownloadLog.getDownloadStatus() == DownloadStatus.SUCCESS.code()){
+
+            result.put("downloadStatus", 3);
+            result.put("downloadUrl", sceneDownloadLog.getDownloadUrl());
+            return ResultData.ok(result);
+        }
+
+        //下载过,且修改过
+        result.put("downloadStatus", 2);
+        // 清除旧的下载信息
+        redisUtil.del(String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4, param.getSceneNum()));
+
+        return ResultData.ok(result);
+
+    }
+
     public Map<String, Object> getNewScenesPagerByUserId(Long userId, SceneParamVO param) throws Exception {
     public Map<String, Object> getNewScenesPagerByUserId(Long userId, SceneParamVO param) throws Exception {
 
 
         List<SceneProPO> sceneList = new ArrayList<>();
         List<SceneProPO> sceneList = new ArrayList<>();