package com.fdkankan.task.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.constant.ConstantFilePath;
import com.fdkankan.common.constant.UploadFilePath;
import com.fdkankan.fyun.oss.UploadToOssUtil;
import com.fdkankan.redis.constant.RedisKey;
import com.fdkankan.redis.util.RedisUtil;
import com.fdkankan.task.constant.TaskConstant;
import com.fdkankan.task.entity.ScenePlus;
import com.fdkankan.task.entity.ScenePlusExt;
import com.fdkankan.task.mapper.IScenePlusMapper;
import com.fdkankan.task.service.IScenePlusExtService;
import com.fdkankan.task.service.IScenePlusService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* 场景主表 服务实现类
*
*
* @author
* @since 2022-03-16
*/
@Slf4j
@Service
public class ScenePlusServiceImpl extends ServiceImpl implements IScenePlusService {
@Autowired
private IScenePlusExtService scenePlusExtService;
@Autowired
private UploadToOssUtil uploadToOssUtil;
@Autowired
private RedisUtil redisUtil;
@Override
public ScenePlus getScenePlusByNumWithDelete(String num) {
return null;
}
@Override
public ScenePlus getScenePlusByNum(String num) {
return this.getOne(new LambdaQueryWrapper().eq(ScenePlus::getNum, num));
}
public void deleteV3DirHandler(String num){
try {
log.info("删除v3目录开始,num:{}", num);
String dataPath = String.format(TaskConstant.dataPathFormat, num);
ScenePlus scenePlus = this.getScenePlusByNum(num);
ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
String bucket = scenePlusExt.getYunFileBucket();
String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
String sceneJsonPath = dataViewPath + "scene.json";
if(StrUtil.isNotEmpty(scenePlusExt.getVideos()) && scenePlusExt.getVideos().contains(dataPath)){
scenePlusExt.setVideos(scenePlusExt.getVideos().replaceAll(dataPath, dataViewPath));
scenePlusExtService.updateById(scenePlusExt);
String sceneJson = uploadToOssUtil.getObjectContent(bucket, sceneJsonPath);
JSONObject sceneJsonObj = JSON.parseObject(sceneJson);
sceneJsonObj.put("videos", JSON.parseObject(scenePlusExt.getVideos()));
uploadToOssUtil.upload(bucket, sceneJsonObj.toJSONString().getBytes(), sceneJsonPath);
redisUtil.del(String.format(RedisKey.SCENE_JSON, num));
}
//删除data目录
List dataList = uploadToOssUtil.listKeys(bucket, dataPath);
if(CollUtil.isNotEmpty(dataList)){
uploadToOssUtil.deleteFile(bucket, dataPath);
}
//删除img目录
String imgPath = String.format(TaskConstant.imgPathFormat, num);
List imgList = uploadToOssUtil.listKeys(bucket, imgPath);
if(CollUtil.isNotEmpty(imgList)){
uploadToOssUtil.deleteFile(bucket, imgPath);
}
//删除video目录
String videoPath = String.format(TaskConstant.videoPathFormat, num);
List videoList = uploadToOssUtil.listKeys(bucket, videoPath);
if(CollUtil.isNotEmpty(videoList)){
uploadToOssUtil.deleteFile(bucket, videoPath);
}
//删除voice目录
String voicePath = String.format(TaskConstant.voicePathFormat, num);
List voiceList = uploadToOssUtil.listKeys(bucket, voicePath);
if(CollUtil.isNotEmpty(voiceList)){
uploadToOssUtil.deleteFile(bucket, voicePath);
}
redisUtil.sSet(TaskConstant.numKey, num);
log.info("删除v3目录完毕,num:{}", num);
}catch (Exception e){
log.info("删除v3目录失败,num:" + num, e);
}
}
public void deleteSceneHandler(String num){
try {
log.info("删除场景全部数据开始,num:{}", num);
ScenePlus scenePlus = this.baseMapper.selectDeleteScene(num);
ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
String bucket = scenePlusExt.getYunFileBucket();
//删除data目录
String dataPath = String.format(TaskConstant.dataPathFormat, num);
List dataList = uploadToOssUtil.listKeys(bucket, dataPath);
if(CollUtil.isNotEmpty(dataList)){
uploadToOssUtil.deleteFile(bucket, dataPath);
}
//删除img目录
String imgPath = String.format(TaskConstant.imgPathFormat, num);
List imgList = uploadToOssUtil.listKeys(bucket, imgPath);
if(CollUtil.isNotEmpty(imgList)){
uploadToOssUtil.deleteFile(bucket, imgPath);
}
//删除video目录
String videoPath = String.format(TaskConstant.videoPathFormat, num);
List videoList = uploadToOssUtil.listKeys(bucket, videoPath);
if(CollUtil.isNotEmpty(videoList)){
uploadToOssUtil.deleteFile(bucket, videoPath);
}
//删除voice目录
String voicePath = String.format(TaskConstant.voicePathFormat, num);
List voiceList = uploadToOssUtil.listKeys(bucket, voicePath);
if(CollUtil.isNotEmpty(voiceList)){
uploadToOssUtil.deleteFile(bucket, voicePath);
}
//删除dataview目录
String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
List dataViewList = uploadToOssUtil.listKeys(bucket, dataViewPath);
if(CollUtil.isNotEmpty(dataViewList)){
uploadToOssUtil.deleteFile(bucket, dataViewPath);
}
//删除img目录
String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
List imgViewList = uploadToOssUtil.listKeys(bucket, imgViewPath);
if(CollUtil.isNotEmpty(imgViewList)){
uploadToOssUtil.deleteFile(bucket, imgViewPath);
}
//删除video目录
String videoViewPath = String.format(UploadFilePath.VIDEOS_VIEW_PATH, num);
List videoViewList = uploadToOssUtil.listKeys(bucket, videoViewPath);
if(CollUtil.isNotEmpty(videoViewList)){
uploadToOssUtil.deleteFile(bucket, videoViewPath);
}
//删除voice目录
String voiceViewPath = String.format(UploadFilePath.VOICE_VIEW_PATH, num);
List voiceViewList = uploadToOssUtil.listKeys(bucket, voiceViewPath);
if(CollUtil.isNotEmpty(voiceViewList)){
uploadToOssUtil.deleteFile(bucket, voiceViewPath);
}
//删除user目录
String userViewPath = String.format(UploadFilePath.USER_VIEW_PATH, num);
List userViewList = uploadToOssUtil.listKeys(bucket, userViewPath);
if(CollUtil.isNotEmpty(userViewList)){
uploadToOssUtil.deleteFile(bucket, userViewPath);
}
//删除user目录
String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
List userEditList = uploadToOssUtil.listKeys(bucket, userEditPath);
if(CollUtil.isNotEmpty(userEditList)){
uploadToOssUtil.deleteFile(bucket, userEditPath);
}
//删除nas目录
String dataSource = scenePlusExt.getDataSource();
if(dataSource.length() > "/mnt/data/".length()){
FileUtil.del(dataSource);
}
redisUtil.sSet(TaskConstant.deleteNumKey, num);
log.info("删除场景全部数据结束,num:{}", num);
}catch (Exception e){
log.error("删除场景全部数据失败,num:" + num, e);
}
}
}