|
|
@@ -0,0 +1,206 @@
|
|
|
+package com.fdkankan.contro.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.lang.UUID;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.fdkankan.common.constant.ErrorCode;
|
|
|
+import com.fdkankan.common.constant.ModelKind;
|
|
|
+import com.fdkankan.common.constant.SceneStatus;
|
|
|
+import com.fdkankan.common.exception.BusinessException;
|
|
|
+import com.fdkankan.contro.entity.*;
|
|
|
+import com.fdkankan.contro.service.*;
|
|
|
+import com.fdkankan.contro.util.SceneSourceUtil;
|
|
|
+import com.fdkankan.contro.vo.UploadSceneOrigParamVo;
|
|
|
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
|
|
|
+import com.fdkankan.model.constants.ConstantFilePath;
|
|
|
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.io.File;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class JmgaServiceImpl implements IJmgaService {
|
|
|
+
|
|
|
+ @Value("${scene.pro.new.url}")
|
|
|
+ private String sceneProNewUrl;
|
|
|
+ @Value("${model.modelKind:3dtiles}")
|
|
|
+ private String modelKind;
|
|
|
+ @Value("#{'${model.3dtiles.sceneSource:}'.split(',')}")
|
|
|
+ private List<Integer> sdTilesSceneSourceList;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private RabbitMqProducer mqProducer;
|
|
|
+ @Resource
|
|
|
+ private FYunFileServiceInterface fYunFileService;
|
|
|
+ @Autowired
|
|
|
+ private ISceneFileBuildService sceneFileBuildService;
|
|
|
+ @Autowired
|
|
|
+ private IUserService userService;
|
|
|
+ @Autowired
|
|
|
+ private IScenePlusService scenePlusService;
|
|
|
+ @Autowired
|
|
|
+ private IScenePlusExtService scenePlusExtService;
|
|
|
+ @Autowired
|
|
|
+ private IScene3dNumService scene3dNumService;
|
|
|
+ @Autowired
|
|
|
+ private ICameraService cameraService;
|
|
|
+ @Autowired
|
|
|
+ private ISceneEditInfoService sceneEditInfoService;
|
|
|
+ @Autowired
|
|
|
+ private ISceneEditInfoExtService sceneEditInfoExtService;
|
|
|
+ @Autowired
|
|
|
+ private ISceneEditControlsService sceneEditControlsService;
|
|
|
+ @Autowired
|
|
|
+ private ICameraDetailService cameraDetailService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void uploadScene(UploadSceneOrigParamVo param) throws Exception {
|
|
|
+
|
|
|
+ User user = userService.getById(param.getUserId());
|
|
|
+ if(Objects.isNull(user)){
|
|
|
+ throw new BusinessException(ErrorCode.USER_NOT_EXIST);
|
|
|
+ }
|
|
|
+
|
|
|
+ String uuid = UUID.randomUUID().toString();
|
|
|
+ String zipName = uuid + ".zip";
|
|
|
+ String zipDir = "/mnt/data/temp/";
|
|
|
+ fYunFileService.downloadFileByCommand(zipDir + zipName, param.getFilePath());
|
|
|
+
|
|
|
+ Camera camera = null;
|
|
|
+ CameraDetail cameraDetail = null;
|
|
|
+ String sceneNum = null;
|
|
|
+ if(param.getSourceType().equals("orig")){//原始资源
|
|
|
+ String dataFdageStr = com.fdkankan.contro.util.ZipUtil.readUtf8(zipDir + zipName, "data.fdage");
|
|
|
+ if(StrUtil.isEmpty(dataFdageStr) || !JSONUtil.isJson(dataFdageStr)){
|
|
|
+ throw new BusinessException(60027, "data.fdage文件数据异常");
|
|
|
+ }
|
|
|
+ JSONObject dataFdage = JSON.parseObject(dataFdageStr);
|
|
|
+ String snCode = dataFdage.getJSONObject("cam").getString("uuid");
|
|
|
+ String uuidTime = dataFdage.getString("uuidtime");
|
|
|
+ String uniCode = snCode + "_" + uuidTime;
|
|
|
+ camera = cameraService.getBySnCode(snCode);
|
|
|
+ if(camera == null){
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_7010);
|
|
|
+ }
|
|
|
+ cameraDetail = cameraDetailService.getByCameraId(camera.getId());
|
|
|
+ if(cameraDetail == null){
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_7010);
|
|
|
+ }
|
|
|
+
|
|
|
+ ScenePlus scenePlus = scenePlusService.getByFileId(uniCode);
|
|
|
+ if(scenePlus == null){
|
|
|
+ scenePlus = new ScenePlus();
|
|
|
+ sceneNum = scene3dNumService.generateSceneNum(cameraDetail.getType());
|
|
|
+ scenePlus.setNum(sceneNum);
|
|
|
+ scenePlus.setCameraId(cameraDetail.getCameraId());
|
|
|
+ scenePlus.setSceneSource(SceneSourceUtil.getSceneSourceByCamType(cameraDetail.getType()));
|
|
|
+ }else{
|
|
|
+ if(scenePlus.getSceneStatus() == SceneStatus.wait.code()){
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
|
|
|
+ }
|
|
|
+ sceneNum = scenePlus.getNum();
|
|
|
+ }
|
|
|
+ scenePlus.setTitle(dataFdage.getString("name"));
|
|
|
+ scenePlus.setUserId(user.getId());
|
|
|
+ scenePlus.setUpdateTime(null);
|
|
|
+ scenePlus.setSceneStatus(SceneStatus.wait.code());
|
|
|
+ scenePlusService.saveOrUpdate(scenePlus);
|
|
|
+
|
|
|
+ ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
|
|
|
+ if(scenePlusExt == null){
|
|
|
+ scenePlusExt = new ScenePlusExt();
|
|
|
+ scenePlusExt.setPlusId(scenePlus.getId());
|
|
|
+ scenePlusExt.setWebSite("/" + sceneProNewUrl + scenePlus.getNum());
|
|
|
+ String fileId = sceneFileBuildService.getFileId(snCode, uniCode);
|
|
|
+ scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_PATH + snCode + File.separator + fileId + File.separator + uniCode);
|
|
|
+ if(ModelKind.THREE_D_TILE.code().equals(modelKind)
|
|
|
+ && CollUtil.isNotEmpty(sdTilesSceneSourceList)
|
|
|
+ && sdTilesSceneSourceList.contains(scenePlus.getSceneSource())){
|
|
|
+ scenePlusExt.setModelKind(modelKind);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ JSONArray points = dataFdage.getJSONArray("points");
|
|
|
+ scenePlusExt.setShootCount(points.size());
|
|
|
+ scenePlusExtService.saveOrUpdate(scenePlusExt);
|
|
|
+
|
|
|
+ SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
|
|
|
+ if(sceneEditInfo == null){
|
|
|
+ sceneEditInfo = new SceneEditInfo();
|
|
|
+ sceneEditInfo.setScenePlusId(scenePlus.getId());
|
|
|
+ sceneEditInfoService.save(sceneEditInfo);
|
|
|
+ }
|
|
|
+ SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId());
|
|
|
+ if(sceneEditInfoExt == null){
|
|
|
+ sceneEditInfoExt = new SceneEditInfoExt();
|
|
|
+ sceneEditInfoExt.setScenePlusId(scenePlus.getId());
|
|
|
+ sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
|
|
|
+ sceneEditInfoExtService.save(sceneEditInfoExt);
|
|
|
+ }
|
|
|
+ SceneEditControls sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfo.getId());
|
|
|
+ if(sceneEditControls == null){
|
|
|
+ sceneEditControls = new SceneEditControls();
|
|
|
+ sceneEditControls.setEditInfoId(sceneEditInfo.getId());
|
|
|
+ sceneEditControlsService.save(sceneEditControls);
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{//离线包
|
|
|
+// String sceneJsonStr = com.fdkankan.contro.util.ZipUtil.readUtf8(zipDir + zipName, "scene.json");
|
|
|
+// if(StrUtil.isEmpty(sceneJsonStr) || !JSONUtil.isJson(sceneJsonStr)){
|
|
|
+// throw new BusinessException(60027, "scene.json文件数据异常");
|
|
|
+// }
|
|
|
+// JSONObject sceneJson = JSON.parseObject(sceneJsonStr);
|
|
|
+// sceneNum = sceneJson.getString("num");
|
|
|
+//
|
|
|
+// ScenePlus scenePlusDb = scenePlusService.getDeletedByNum(sceneNum);
|
|
|
+// if(scenePlusDb != null && scenePlusDb.getRecStatus().equalsIgnoreCase(RecStatus.VALID.code())){
|
|
|
+// throw new BusinessException(ModelingControlRespCode.NUM_EXISTS.code(), ModelingControlRespCode.NUM_EXISTS.message());
|
|
|
+// }
|
|
|
+// if(scenePlusDb != null && scenePlusDb.getRecStatus().equalsIgnoreCase(RecStatus.DISABLE.code())){
|
|
|
+// scenePlusService.updateNumById(scenePlusDb.getId(), scenePlusDb.getNum() + "-" + scenePlusDb.getId());
|
|
|
+// }
|
|
|
+//
|
|
|
+// int camType = sceneJson.getInteger("camType");
|
|
|
+// String snCode = sceneJson.getString("snCode");
|
|
|
+// Map<String, Object> instorage = cameraService.instorage(camType, snCode);
|
|
|
+// cameraDetail = (CameraDetail) instorage.get("cameraDetail");
|
|
|
+// ScenePlus scenePlus = new ScenePlus();
|
|
|
+// scenePlus.setNum(sceneNum);
|
|
|
+// scenePlus.setCameraId(cameraDetail.getCameraId());
|
|
|
+// scenePlus.setSceneSource(SceneSourceUtil.getSceneSourceByCamType(cameraDetail.getType()));
|
|
|
+// scenePlus.setTitle(sceneJson.getString("title"));
|
|
|
+// scenePlus.setUserId(user.getId());
|
|
|
+// scenePlus.setUpdateTime(null);
|
|
|
+// scenePlus.setSceneStatus(SceneStatus.wait.code());
|
|
|
+// scenePlus.setUploadType("offline");
|
|
|
+// scenePlus.setPayStatus(PayStatus.PAY.code());
|
|
|
+// scenePlus.setStartBuildTime(new Date());
|
|
|
+// scenePlusService.save(scenePlus);
|
|
|
+// ScenePlusExt scenePlusExt = new ScenePlusExt();
|
|
|
+// scenePlusExt.setPlusId(scenePlus.getId());
|
|
|
+// String uniCode = snCode + DateExtUtil.format(new Date(), DateExtUtil.dateStyle11);
|
|
|
+// String fileId = sceneFileBuildService.getFileId(snCode, uniCode);
|
|
|
+// scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_PATH + snCode + File.separator + fileId + File.separator + uniCode);
|
|
|
+// scenePlusExtService.save(scenePlusExt);
|
|
|
+ }
|
|
|
+
|
|
|
+ //发mq做异步处理
|
|
|
+ JSONObject content = new JSONObject();
|
|
|
+ content.put("zipPath", zipDir + zipName);
|
|
|
+ content.put("num", sceneNum);
|
|
|
+ content.put("sourceType", param.getSourceType());
|
|
|
+ mqProducer.sendByWorkQueue("manage-upload-scene", content);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|