package com.fdkankan.contro.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.constant.ErrorCode;
import com.fdkankan.common.constant.SceneStatus;
import com.fdkankan.common.response.ResultData;
import com.fdkankan.contro.entity.ScenePro;
import com.fdkankan.contro.entity.SceneProExt;
import com.fdkankan.contro.entity.SceneProPO;
import com.fdkankan.contro.mapper.ISceneProMapper;
import com.fdkankan.contro.service.ICameraDetailService;
import com.fdkankan.contro.service.ISceneProExtService;
import com.fdkankan.contro.service.ISceneProService;
import com.fdkankan.fyun.oss.UploadToOssUtil;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
*
* pro场景表 服务实现类
*
*
* @author dengsixing
* @since 2021-12-23
*/
@Slf4j
@Service
public class SceneProServiceImpl extends ServiceImpl implements ISceneProService {
@Autowired
@Qualifier("uploadToOssUtil")
UploadToOssUtil uploadToOssUtil;
@Autowired
private ISceneProExtService sceneProExtService;
@Autowired
private ICameraDetailService cameraDetailService;
@Override
public ScenePro findBySceneNum(String sceneNum) {
return this.getOne(new LambdaQueryWrapper()
.eq(ScenePro::getNum, sceneNum));
}
@Override
public void updateStatus(String sceneNum, int sceneStatus) {
this.update(new LambdaUpdateWrapper()
.eq(ScenePro::getNum, sceneNum)
.set(ScenePro::getSceneStatus, sceneStatus));
}
@Override
public void updateTime(String sceneNum, Long space, int payStatus, String videos, long computeTime) {
List list = this.list(new LambdaQueryWrapper().eq(ScenePro::getNum, sceneNum));
if(CollUtil.isEmpty(list))
return;
//修改场景状态 空间 支付状态 计算时间
List sceneProIds = list.stream().map(scenePro -> {
return scenePro.getId();
}).collect(Collectors.toList());
this.update(new LambdaUpdateWrapper()
.in(ScenePro::getId, sceneProIds)
.set(ScenePro::getSceneStatus, SceneStatus.NO_DISPLAY.code())
.set(ScenePro::getCreateTime, Calendar.getInstance().getTime())
.set(ScenePro::getUpdateTime, Calendar.getInstance().getTime())
.set(ScenePro::getPayStatus, payStatus)
.set(ScenePro::getVideos, videos));
sceneProExtService.update(new LambdaUpdateWrapper()
.in(SceneProExt::getSceneProId, sceneProIds)
.set(SceneProExt::getSpace, space)
.set(SceneProExt::getComputeTime, computeTime));
}
@Override
public SceneProPO getSceneStatusByUnicode(String unicode) {
return baseMapper.getSceneStatusByUnicode(unicode);
}
@Override
public ResultData rebuildReduceSpaceBySceneNum(String sceneNum) throws Exception{
ScenePro scenePro = this.findBySceneNum(sceneNum);
if(scenePro == null){
log.info("该场景不存在无法扣除容量,场景码为:" + sceneNum);
return ResultData.error(ErrorCode.FAILURE_CODE_5054);
}
if (scenePro.getSceneScheme() < 4){
log.info("该场景不属于八目相机无法扣除容量,场景码为:" + sceneNum);
return ResultData.error(ErrorCode.FAILURE_CODE_5055);
}
SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId());
cameraDetailService.updateCameraDetailByCameraIdAndSpace(scenePro.getCameraId(), -sceneProExt.getSpace());
sceneProExt.setSpace(Long.parseLong("0"));
sceneProExt.setUpdateTime(Calendar.getInstance().getTime());
sceneProExtService.updateById(sceneProExt);
return ResultData.ok();
}
@Override
public SceneProPO findByFileId(String fileId) {
return baseMapper.findByFileId(fileId);
}
}