package com.fdkankan.scene.service.impl;
import com.alibaba.fastjson.JSONObject;
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.RecStatus;
import com.fdkankan.common.constant.ZipStatus;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.common.response.ResultData;
import com.fdkankan.common.util.CreateObjUtil;
import com.fdkankan.common.util.FileUtils;
import com.fdkankan.common.util.UploadToOssUtil;
import com.fdkankan.scene.entity.Scene3dfamily;
import com.fdkankan.scene.mapper.IScene3dfamilyMapper;
import com.fdkankan.scene.service.IScene3dfamilyService;
import com.fdkankan.scene.service.ISceneProService;
import com.fdkankan.scene.vo.Scene3dfamilyVO;
import com.fdkankan.scene.vo.SceneProVO;
import com.fdkankan.scene.vo.SceneVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
*
* 三维家表 服务实现类
*
*
* @author dengsixing
* @since 2021-12-23
*/
@Slf4j
@Service
public class Scene3dfamilyServiceImpl extends ServiceImpl implements IScene3dfamilyService {
private static String DIR_NAME = "downloads/furnished/";
@Value("${oss.prefix.ali}")
private String prefixAli;
@Autowired
ISceneProService sceneProService;
@Autowired
@Qualifier("uploadToOssUtil")
UploadToOssUtil uploadToOssUtil;
@Override
public ResultData createZip(SceneProVO sceneProVo) {
Scene3dfamily scene3dfamily =
baseMapper.findSceneCodeByCode(
Scene3dfamilyVO
.builder()
.sceneCode(sceneProVo.getSceneCode())
.zipStatus(ZipStatus.DOING.code())
.build());
String path = sceneProVo.getDataSource() + "_3df" + File.separator + sceneProVo.getSceneCode();
try {
if(scene3dfamily == null){
throw new BusinessException(ErrorCode.FAILURE_CODE_5032);
}
log.info("三维家 信息保存 路径 : " + path);
//创建文件夹
FileUtils.createDir(path);
//生成vision.json
sceneProService.downloadVisionData(sceneProVo.getSceneCode());
//拉取data
CreateObjUtil.ossUtilCp("data" + File.separator + "data" + sceneProVo.getSceneCode() + File.separator,
path + File.separator + "scene" + File.separator + "data" + File.separator + "data" + sceneProVo.getSceneCode());
//写入 scene.json 改名为 getinfo.json
SceneVO sceneVo = sceneProService.getInfo(sceneProVo.getSceneCode());
JSONObject dataJson = (JSONObject) JSONObject.toJSON(sceneVo);
FileUtils.writeFile(path + File.separator + "scene" + File.separator + "data" + File.separator + "data"
+ sceneProVo.getSceneCode() + File.separator + "getinfo.json", dataJson.toString());
//拉取images
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "floorLogoImg.png",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "floorplan.png",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "logo-main.png",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "logo-main-en.png",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "smallPic.jpg",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "thumbBigImg.jpg",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "thumbSmallImg.jpg",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "pan",
path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
//拉取video
CreateObjUtil.ossUtilCp("video" + File.separator + "video" + sceneProVo.getSceneCode() + File.separator,
path + File.separator + "scene" + File.separator + "video" + File.separator + "video" + sceneProVo.getSceneCode());
//拉取voice
CreateObjUtil.ossUtilCp("voice" + File.separator + "voice" + sceneProVo.getSceneCode() + File.separator,
path + File.separator + "scene" + File.separator + "voice" + File.separator + "voice" + sceneProVo.getSceneCode());
//压缩zip
FileUtils.zipFile(path + ".zip", path);
log.info("三维家 zip完成 : " + path);
//上传oss
// 上传到阿里云sso
uploadToOssUtil.upload(path + ".zip", DIR_NAME + sceneProVo.getSceneCode() + ".zip");
log.info("upload success");
String url = prefixAli + DIR_NAME + sceneProVo.getSceneCode() + ".zip";
log.info("upload url: {}" + url);
scene3dfamily.setZipLink(url);
scene3dfamily.setZipStatus(ZipStatus.SUCCESS.code());
scene3dfamily.setZipEndTime(new Date());
scene3dfamily.setUpdateTime(new Date());
baseMapper.updateById(scene3dfamily);
}catch (Exception e){
scene3dfamily.setZipStatus(ZipStatus.FAILD.code());
scene3dfamily.setZipEndTime(new Date());
scene3dfamily.setUpdateTime(new Date());
baseMapper.updateById(scene3dfamily);
log.error("场景打包失败", e);
}finally {
FileUtils.deleteDirectory(path);
FileUtils.deleteDirectory(path + ".zip");
}
return ResultData.ok();
}
@Override
public Scene3dfamily findSceneNumByNum(Scene3dfamilyVO scene3dfamilyVO) {
return baseMapper.findSceneCodeByCode(scene3dfamilyVO);
}
@Override
public Map findSceneNumByNum2(Scene3dfamilyVO scene3dfamilyVO) {
Map result = new HashMap<>();
result.put("url","");
result.put("status",ZipStatus.OTHER.code().toString());
Scene3dfamily scene3dfamily = baseMapper.findSceneCodeByCode(scene3dfamilyVO);
if(Objects.nonNull(scene3dfamily)){
result.put("url",scene3dfamily.getZipLink() == null ?"":scene3dfamily.getZipLink());
result.put("status",scene3dfamily.getZipStatus().toString());
}
//验证是否在打包
return result;
}
@Override
public void updateSceneNumByNum(Scene3dfamily scene3dfamily) {
this.update(new LambdaUpdateWrapper()
.eq(Scene3dfamily::getSceneCode, scene3dfamily.getSceneCode())
.set(Scene3dfamily::getRecStatus, RecStatus.DISABLE.code()));
}
}