package com.fdkankan.ucenter.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fdkankan.common.constant.UploadFilePath;
import com.fdkankan.common.util.FileUtils;
import com.fdkankan.fyun.oss.UploadToOssUtil;
import com.fdkankan.ucenter.entity.*;
import com.fdkankan.ucenter.mapper.IScenePlusMapper;
import com.fdkankan.ucenter.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
/**
*
* 场景主表 服务实现类
*
*
* @author
* @since 2022-07-04
*/
@Service
public class ScenePlusServiceImpl extends ServiceImpl implements IScenePlusService {
@Autowired
private IScenePlusExtService scenePlusExtService;
@Autowired
private ISceneEditInfoService sceneEditInfoService;
@Autowired
private ISceneEditInfoExtService sceneEditInfoExtService;
@Autowired
private ISceneEditControlsService sceneEditControlsService;
@Autowired
private ICameraDetailService cameraDetailService;
@Autowired
private ISceneCopyLogService sceneCopyLogService;
@Autowired
UploadToOssUtil uploadToOssUtil;
@Autowired
ISceneProService sceneProService;
@Override
public Long getCountByUserId(Long userId, List sceneSourceList) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ScenePlus::getUserId, userId);
wrapper.in(ScenePlus::getSceneSource, sceneSourceList);
return this.count(wrapper);
}
@Override
public Long getCountByUserId(Long userId, Integer cameraType) {
return this.getBaseMapper().getCountByUserId(userId,cameraType);
}
@Override
public List getListByCameraId(Long cameraId) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ScenePlus::getCameraId,cameraId);
return this.list(wrapper);
}
@Override
public void bindOrUnCamera(List cameraIds, Long userId) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.set(ScenePlus::getUserId,userId)
.in(ScenePlus::getCameraId,cameraIds);
this.update(wrapper);
}
@Override
public List getListByCameraIds(List cameraIds) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(ScenePlus::getCameraId,cameraIds);
return this.list(wrapper);
}
@Override
public List getListByNums(List numList) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(ScenePlus::getNum,numList);
return this.list(wrapper);
}
@Override
public HashMap getMapByIds(List sceneIds) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(ScenePlus::getId,sceneIds);
List list = this.list(wrapper);
HashMap map = new HashMap<>();
list.forEach(entity -> map.put(entity.getId(),entity));
return map;
}
@Override
public ScenePlus getByNum(String sceneNum) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ScenePlus::getNum,sceneNum);
List list = this.list(wrapper);
if(list!=null && list.size() >0){
return list.get(0);
}
return null;
}
@Override
public void copyV4Scene(ScenePlus scenePlus,String newNum, CameraDetail cameraDetail) throws Exception {
String num = scenePlus.getNum();
Long plusId = scenePlus.getId();
scenePlus.setSceneStatus(0);
scenePlus.setNum(newNum);
scenePlus.setId(null);
scenePlus.setTitle(scenePlus.getTitle().concat("(copy)"));
this.save(scenePlus);
ScenePlusExt plusExt = scenePlusExtService.getByPlusId(plusId);
String videos ;
if(plusExt.getVideos().contains("scene_view_data")){
videos = plusExt.getVideos().replace(num,newNum);
}else {
videos = plusExt.getVideos().replaceAll("https://4dkk.4dage.com/data/data"+num, "https://4dkk.4dage.com/scene_view_data/"+newNum+"/data");
}
plusExt.setId(null);
plusExt.setPlusId(scenePlus.getId());
plusExt.setWebSite(plusExt.getWebSite().replace(num,newNum));
plusExt.setThumb(plusExt.getThumb().replace(num,newNum));
plusExt.setVideos(videos);
plusExt.setViewCount(0);
String newDataSource = sceneProService.setDataSource(plusExt.getDataSource(), scenePlus.getSceneSource());
plusExt.setDataSource(newDataSource);
scenePlusExtService.save(plusExt);
//保存复制日志
sceneCopyLogService.saveByNum(num,newNum,scenePlus.getUserId());
//复制完成更新相机容量
cameraDetail.setUsedSpace(cameraDetail.getUsedSpace() + plusExt.getSpace());
cameraDetailService.updateById(cameraDetail);
SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(plusId);
Long sceneEditInfoId = sceneEditInfo.getId();
sceneEditInfo.setId(null);
sceneEditInfo.setScenePlusId(scenePlus.getId());
sceneEditInfo.setTitle(scenePlus.getTitle());
sceneEditInfoService.save(sceneEditInfo);
SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoId);
sceneEditInfoExt.setId(null);
sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
sceneEditInfoExt.setScenePlusId(scenePlus.getId());
sceneEditInfoExtService.save(sceneEditInfoExt);
SceneEditControls sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfoId);
sceneEditControls.setId(null);
sceneEditControls.setEditInfoId(sceneEditInfo.getId());
sceneEditControlsService.save(sceneEditControls);
sceneProService.setQrCode("V3",newNum);
sceneProService.copyOssSource("v4",num,newNum);
sceneProService.copyLocalSource(num,newNum);
sceneProService.updateSceneJson("v4",plusExt.getVideos(),newNum,scenePlus.getTitle(),plusExt.getWebSite(),plusExt.getThumb(),scenePlus.getId());
scenePlus.setSceneStatus(-2);
this.updateById(scenePlus);
}
}