123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package com.fdkankan.scene.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.constant.SceneVersionType;
- import com.fdkankan.common.exception.BusinessException;
- import com.fdkankan.common.util.JwtUtil;
- import com.fdkankan.redis.constant.RedisKey;
- import com.fdkankan.redis.util.RedisUtil;
- import com.fdkankan.scene.bean.SceneJsonBean;
- import com.fdkankan.scene.entity.SceneDownloadLog;
- import com.fdkankan.scene.entity.SceneEditInfo;
- import com.fdkankan.scene.entity.ScenePlus;
- import com.fdkankan.scene.mapper.ISceneDownloadLogMapper;
- import com.fdkankan.scene.oss.OssUtil;
- import com.fdkankan.scene.service.ISceneDownloadLogService;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fdkankan.scene.service.ISceneEditInfoService;
- import com.fdkankan.scene.service.IScenePlusService;
- import com.fdkankan.web.bean.DownLoadProgressBean;
- import com.fdkankan.web.response.ResultData;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Objects;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author
- * @since 2023-03-06
- */
- @Service
- public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMapper, SceneDownloadLog> implements ISceneDownloadLogService {
- private static String keyFormat = "touch:scene:download:num:%s";
- @Autowired
- private IScenePlusService scenePlusService;
- @Autowired
- private ISceneEditInfoService sceneEditInfoService;
- @Autowired
- private OssUtil ossUtil;
- @Autowired
- private RedisUtil redisUtil;
- @Override
- public ResultData downOfflineScene(String num) {
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
- if(Objects.isNull(scenePlus)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- Map<String, Object> result = new HashMap<>();
- String sceneJson = ossUtil.getFileContent(String.format(RedisKey.SCENE_JSON, num));
- SceneJsonBean sceneJsonBean = JSON.parseObject(sceneJson, SceneJsonBean.class);
- int version = sceneJsonBean.getVersion();
- SceneDownloadLog sceneDownloadLog = this.getOne(
- new LambdaQueryWrapper<SceneDownloadLog>()
- .eq(SceneDownloadLog::getSceneNum, num)
- .orderByDesc(SceneDownloadLog::getId)
- .last("limit 1"));
- boolean download = false;//是否需要生成
- if(Objects.nonNull(sceneDownloadLog)){
- if(sceneDownloadLog.getStatus() == 0){
- result.put("status", 0);
- return ResultData.ok(result);
- }
- if(sceneDownloadLog.getStatus() == 2){
- result.put("status", -1);
- return ResultData.ok(result);
- }
- if(version == sceneDownloadLog.getSceneVersion()){
- result.put("status", 2);
- result.put("url", sceneDownloadLog.getDownloadUrl());
- redisUtil.set(String.format(keyFormat, num), "1");
- return ResultData.ok(result);
- }else{
- result.put("status", 3);
- download = true;
- }
- }else{
- result.put("status", 1);
- download = true;
- }
- if(download){
- redisUtil.set(String.format(keyFormat, num), "1");
- //清除之前的下载记录
- this.remove(new LambdaQueryWrapper<SceneDownloadLog>().eq(SceneDownloadLog::getSceneNum, num));
- //写入新的记录
- sceneDownloadLog = new SceneDownloadLog();
- sceneDownloadLog.setSceneNum(num);
- sceneDownloadLog.setSceneVersion(version);
- sceneDownloadLog.setSysVersion("v4");
- this.save(sceneDownloadLog);
- Map<String,String> params = new HashMap<>(2);
- params.put("type","local");
- params.put("num",num);
- redisUtil.lRightPush(RedisKey.SCENE_DOWNLOADS_TASK_V4, JSONObject.toJSONString(params));
- }
- return ResultData.ok(result);
- }
- @Override
- public ResultData downloadProcess(String num) {
- String processStr = redisUtil.get(String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4,num));
- DownLoadProgressBean downLoadProgressBean = JSONObject.parseObject(processStr, DownLoadProgressBean.class);
- return ResultData.ok(downLoadProgressBean);
- }
- @Override
- public ResultData downloadUpDateStatus(String num) {
- redisUtil.del(String.format(keyFormat, num));
- return ResultData.ok();
- }
- }
|