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); } }