package com.fdkankan.contro.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fdkankan.common.constant.*;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.contro.entity.*;
import com.fdkankan.contro.mapper.IExceedSpaceSceneMapper;
import com.fdkankan.contro.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.fyun.face.FYunFileServiceInterface;
import com.fdkankan.model.constants.ConstantFilePath;
import com.fdkankan.model.constants.UploadFilePath;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.Objects;
/**
*
* 超出容量场景码表 服务实现类
*
*
* @author
* @since 2023-06-29
*/
@Service
public class ExceedSpaceSceneServiceImpl extends ServiceImpl implements IExceedSpaceSceneService {
@Autowired
private IScenePlusService scenePlusService;
@Autowired
private ISceneProService sceneProService;
@Autowired
private IUserIncrementService userIncrementService;
@Autowired
private IIncrementTypeService incrementTypeService;
@Autowired
private ICommonService commonService;
@Autowired
private FYunFileServiceInterface fYunFileService;
@Autowired
private ISceneCleanOrigService sceneCleanOrigService;
@Override
public boolean cehckExceedSpace(String num, CameraDetail cameraDetail, String snCode, String fileId, String unicode) {
if(!cameraDetail.getUnit().equals(SpaceType.SP.code())){
return false;
}
boolean exceedSpace = this.isExceedSpace(num, cameraDetail);
if(exceedSpace){
//写入超出容量场景表
ExceedSpaceScene scene = new ExceedSpaceScene();
scene.setNum(num);
scene.setUserId(cameraDetail.getUserId());
scene.setCameraId(cameraDetail.getCameraId());
scene.setFileId(fileId);
scene.setUnicode(unicode);
this.save(scene);
//删除原始资源
if(fileId.length() > 1 && unicode.length() > 1){
String homePath = ConstantFilePath.OSS_PREFIX.concat(snCode).concat("/").concat(fileId).concat("/").concat(unicode);
fYunFileService.deleteFolder(homePath);
}
//记录删除原始资源记录
SceneCleanOrig sceneCleanOrig = new SceneCleanOrig();
sceneCleanOrig.setNum(num);
sceneCleanOrig.setType(4);
sceneCleanOrig.setState(CommonSuccessStatus.SUCCESS.code());
sceneCleanOrigService.save(sceneCleanOrig);
//上传计算失败状态文件
//上传app状态文件
commonService.uploadStatusJson(num,SceneStatus.FAILD.code(),
null, null, PayStatus.NOT_PAY.code(),
String.format(UploadFilePath.DATA_VIEW_PATH, num));
}
return exceedSpace;
}
@Override
public boolean isExceedSpace(String num, CameraDetail cameraDetail) {
//查询权益统计容量的方式
Long limit = commonService.getSpaceLimit(cameraDetail);
if(limit == -1){
return false;
}
// TODO: 2023/6/30 现阶段只有按个数统计容量的方式再需要做上传拦截,所以这里暂时只做了统计个数统计
//统计场景个数
long v4Count = scenePlusService.count(
new LambdaQueryWrapper()
.eq(ScenePlus::getCameraId, cameraDetail.getCameraId())
.in(ScenePlus::getSceneStatus, SceneStatus.wait.code(), SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()));
long V3count = sceneProService.count(new LambdaQueryWrapper()
.eq(ScenePro::getCameraId, cameraDetail.getCameraId())
.in(ScenePro::getStatus, SceneStatus.wait.code(), SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()));
if(v4Count + V3count < limit){
return false;
}
return true;
}
@Override
public ExceedSpaceScene getByFileIdAndUnicode(long cameraId, String fileId, String unicode) {
return this.getOne(new LambdaQueryWrapper()
.eq(ExceedSpaceScene::getCameraId, cameraId)
.eq(ExceedSpaceScene::getFileId, fileId)
.eq(ExceedSpaceScene::getUnicode, unicode));
}
@Override
public void repeal(long cameraId, String fileId, String unicode) throws IOException {
ExceedSpaceScene scene = this.getByFileIdAndUnicode(cameraId, fileId, unicode);
if(Objects.isNull(scene)){
return;
}
this.removeById(scene);
//删除status.json
String statusJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH, scene.getNum()).concat("status.json");
fYunFileService.deleteFile(statusJsonPath);
}
}