package com.fdkankan.scene.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.constant.CommonStatus;
import com.fdkankan.common.constant.ErrorCode;
import com.fdkankan.common.constant.ServerCode;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.fyun.face.FYunFileServiceInterface;
import com.fdkankan.model.constants.UploadFilePath;
import com.fdkankan.scene.entity.*;
import com.fdkankan.scene.mapper.ISurveillanceMapper;
import com.fdkankan.scene.service.*;
import com.fdkankan.scene.vo.BaseSidParamVO;
import com.fdkankan.scene.vo.SurveillanceParamVO;
import com.fdkankan.scene.vo.SurveillanceVO;
import com.fdkankan.web.response.ResultData;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
*
* 监控推拉流信息 服务实现类
*
*
* @author
* @since 2022-09-16
*/
@Service
public class SurveillanceServiceImpl extends ServiceImpl implements ISurveillanceService {
@Autowired
private IScenePlusService scenePlusService;
@Autowired
private ISceneEditInfoExtService sceneEditInfoExtService;
@Autowired
private ISceneEditInfoService sceneEditInfoService;
@Resource
private FYunFileServiceInterface yunFileService;
@Autowired
private IScenePlusExtService scenePlusExtService;
@Autowired
private ICommonService commonService;
@Override
public ResultData saveSurveillance(SurveillanceParamVO param) throws Exception {
if(param.getUrlType() == 1){
if(StrUtil.isEmpty(param.getPlayUrl())){
throw new BusinessException(ServerCode.PARAM_REQUIRED.code(), ServerCode.PARAM_REQUIRED.formatMessage("playUrl"));
}
}else{
if(StrUtil.isEmpty(param.getFileName()) || StrUtil.isEmpty(param.getPoster())){
throw new BusinessException(ServerCode.PARAM_REQUIRED.code(), ServerCode.PARAM_REQUIRED.formatMessage("fileName、poster"));
}
}
ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
if(Objects.isNull(scenePlus)){
throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
}
ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
//转换视频格式
if(param.getUrlType() == 2){
commonService.transferToFlv(param.getNum(), param.getFileName(), scenePlusExt.getYunFileBucket());
}
SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
Surveillance surveillance = this.getBySid(param.getNum(), param.getSid());
if(Objects.isNull(surveillance)){
surveillance = new Surveillance();
}
surveillance.setSid(param.getSid());
surveillance.setPanoId(param.getPanoId());
surveillance.setNum(param.getNum());
surveillance.setName(param.getName());
surveillance.setData(param.getData().toJSONString());
surveillance.setPlayUrl(param.getPlayUrl());
surveillance.setUrlType(param.getUrlType());
surveillance.setFileName(param.getFileName());
surveillance.setPoster(param.getPoster());
this.saveOrUpdate(surveillance);
sceneEditInfoExt.setSurveillances(CommonStatus.YES.code().intValue());
sceneEditInfoExtService.updateById(sceneEditInfoExt);
sceneEditInfoService.upgradeVersionById(sceneEditInfo.getId());
return ResultData.ok();
}
@Override
public ResultData deleteSurveillance(BaseSidParamVO param) throws IOException {
ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
if(Objects.isNull(scenePlus)){
throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
}
Surveillance surveillance = this.getBySid(param.getNum(), param.getSid());
if(Objects.isNull(surveillance)){
return ResultData.ok("sid不存在");
}
ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
String bucket = scenePlusExt.getYunFileBucket();
this.remove(new LambdaQueryWrapper().eq(Surveillance::getSid, param.getSid()));
long count = this.count(new LambdaQueryWrapper().eq(Surveillance::getNum, param.getNum()));
if(count < 1){
sceneEditInfoExt.setSurveillances(CommonStatus.NO.code().intValue());
}
//如果是视频类型监控,需要删除oss文件
if(surveillance.getUrlType() == 2){
String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
if(StrUtil.isNotEmpty(surveillance.getFileName())){
yunFileService.deleteFile(bucket, userEditPath.concat(surveillance.getFileName()));
}
if(StrUtil.isNotEmpty(surveillance.getPoster())){
yunFileService.deleteFile(bucket, userEditPath.concat(surveillance.getPoster()));
}
}
sceneEditInfoExtService.updateById(sceneEditInfoExt);
sceneEditInfoService.upgradeVersionById(sceneEditInfo.getId());
return ResultData.ok();
}
@Override
public List listSurveillance(String num) {
List list = this.list(new LambdaQueryWrapper().eq(Surveillance::getNum, num).orderByDesc(Surveillance::getId));
if(Objects.isNull(list)){
return null;
}
List voList = list.stream().map(item -> {
SurveillanceVO vo = BeanUtil.copyProperties(item, SurveillanceVO.class, "data");
vo.setData(JSON.parseObject(item.getData()));
return vo;
}).collect(Collectors.toList());
return voList;
}
@Override
public Surveillance getBySid(String num, String sid) {
return this.getOne(new LambdaQueryWrapper().eq(Surveillance::getSid, sid).eq(Surveillance::getNum, num));
}
}