|
@@ -9,10 +9,13 @@ import static com.fdkankan.push.PushMessageConfig.IOS_KEY_Z;
|
|
|
import static com.fdkankan.push.PushMessageConfig.IOS_SECRET;
|
|
|
import static com.fdkankan.push.PushMessageConfig.IOS_SECRET_Z;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fdkankan.common.constant.ConstantFilePath;
|
|
|
+import com.fdkankan.common.constant.ConstantUrl;
|
|
|
import com.fdkankan.common.constant.UploadFilePath;
|
|
|
import com.fdkankan.common.util.CreateObjUtil;
|
|
|
import com.fdkankan.common.util.FileUtil;
|
|
@@ -23,7 +26,14 @@ import com.fdkankan.fyun.oss.UploadToOssUtil;
|
|
|
import com.fdkankan.mq.message.BuildSceneMqMessage;
|
|
|
import com.fdkankan.push.PushMessageConfig;
|
|
|
import com.fdkankan.push.PushMsgUtil;
|
|
|
+import com.fdkankan.scene.bean.SceneJsonBean;
|
|
|
+import com.fdkankan.scene.entity.SceneEditControls;
|
|
|
+import com.fdkankan.scene.entity.SceneEditInfo;
|
|
|
+import com.fdkankan.scene.entity.ScenePro;
|
|
|
+import com.fdkankan.scene.entity.SceneProExt;
|
|
|
import com.fdkankan.scene.service.IBuildScenePreService;
|
|
|
+import com.fdkankan.scene.vo.SceneEditControlsVO;
|
|
|
+import com.fdkankan.scene.vo.SceneEditInfoVO;
|
|
|
import com.taobao.api.ApiException;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
@@ -38,6 +48,7 @@ import java.util.Map.Entry;
|
|
|
import java.util.Objects;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -54,6 +65,8 @@ import org.springframework.stereotype.Service;
|
|
|
@Service
|
|
|
public class BuildScenePreServiceImpl implements IBuildScenePreService {
|
|
|
|
|
|
+ @Value("${oss.prefix.ali}")
|
|
|
+ private String prefixAli;
|
|
|
@Autowired
|
|
|
UploadToOssUtil uploadToOssUtil;
|
|
|
@Value("${upload.type}")
|
|
@@ -341,4 +354,127 @@ public class BuildScenePreServiceImpl implements IBuildScenePreService {
|
|
|
uploadToOssUtil.upload(dataSource+File.separator+"console.log",
|
|
|
dataPath+"console.log");
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getVideosJson(String path, Integer videoVersion, String projectNum, int cameraType) throws Exception {
|
|
|
+ //读取videos_hdr_param.json, 保存点位视频的value
|
|
|
+ Map<String, Object> videoMap = new HashMap<>();
|
|
|
+ String videosHdr = FileUtils.readFile(path + File.separator + "results/videos/videos_hdr_param.json");
|
|
|
+ JSONArray videoArray = null;
|
|
|
+ if(StringUtils.isNotEmpty(videosHdr)){
|
|
|
+ videoArray = JSONObject.parseObject(videosHdr).getJSONArray("hdr_param");
|
|
|
+ }
|
|
|
+ if(videoArray != null){
|
|
|
+ for(int i = 0, len = videoArray.size(); i < len; i++) {
|
|
|
+ videoMap.put(videoArray.getJSONObject(i).getString("name"), videoArray.getJSONObject(i).getString("value"));
|
|
|
+ if(videoArray.getJSONObject(i).containsKey("fov")){
|
|
|
+ videoMap.put(videoArray.getJSONObject(i).getString("name") + "_fov", videoArray.getJSONObject(i).getString("fov"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取upload中的video视频名称
|
|
|
+ String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
|
|
|
+ JSONObject uploadJson = null;
|
|
|
+ JSONArray array = null;
|
|
|
+ if(uploadData!=null) {
|
|
|
+ uploadJson = JSONObject.parseObject(uploadData);
|
|
|
+ array = uploadJson.getJSONArray("upload");
|
|
|
+ }
|
|
|
+ JSONObject fileJson = null;
|
|
|
+ String fileName = "";
|
|
|
+
|
|
|
+ //计算ts文件的大小,并拼接成json格式
|
|
|
+ JSONArray jsonArray = new JSONArray();
|
|
|
+ JSONObject videoJson = null;
|
|
|
+ JSONObject videosJson = new JSONObject();
|
|
|
+ long videoSize = 0L;
|
|
|
+ for(int i = 0, len = array.size(); i < len; i++) {
|
|
|
+ fileJson = array.getJSONObject(i);
|
|
|
+ fileName = fileJson.getString("file");
|
|
|
+ if(fileJson.getIntValue("clazz") == 11 && fileName.contains(".mp4") && !fileName.contains("-ios.mp4")){
|
|
|
+ videoJson = new JSONObject();
|
|
|
+ videoJson.put("id", fileName.substring(
|
|
|
+ 0, fileName.lastIndexOf(".")).replace("videos/", ""));
|
|
|
+
|
|
|
+ //如果ts文件存在,就计算ts大小
|
|
|
+ if(new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).exists()){
|
|
|
+ videoSize = new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).length();
|
|
|
+ videoJson.put("tsSize", videoSize);
|
|
|
+ }
|
|
|
+ if(videoMap.containsKey(videoJson.get("id"))){
|
|
|
+ videoJson.put("value", videoMap.get(videoJson.get("id")));
|
|
|
+ }
|
|
|
+ if(videoMap.containsKey(videoJson.get("id") + "_fov")){
|
|
|
+ videoJson.put("blend_fov", videoMap.get(videoJson.get("id") + "_fov"));
|
|
|
+ }else {
|
|
|
+ videoJson.put("blend_fov", 7);
|
|
|
+ }
|
|
|
+ jsonArray.add(videoJson);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ videosJson.put("data", jsonArray);
|
|
|
+ if(Objects.nonNull(videoVersion) && videoVersion >= 4){
|
|
|
+ videosJson.put("version", 3);
|
|
|
+ if(StorageType.OSS.code().equals(ossType)){
|
|
|
+ videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up.xml");
|
|
|
+ }
|
|
|
+ if(StorageType.AWS.code().equals(ossType)){
|
|
|
+ videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up.xml");
|
|
|
+ }
|
|
|
+ if(cameraType == 13){
|
|
|
+ //转台相机
|
|
|
+ videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ videosJson.put("version", 1);
|
|
|
+ if("oss".equals(ossType)){
|
|
|
+ videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up2.xml");
|
|
|
+ }
|
|
|
+ if("aws".equals(ossType)){
|
|
|
+ videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up2.xml");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(cameraType == 13){
|
|
|
+ //转台相机
|
|
|
+ videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(cameraType == 5 || cameraType == 6){
|
|
|
+ videosJson.put("version", 1);
|
|
|
+ if("oss".equals(ossType)){
|
|
|
+ videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/stitch_params.txt");
|
|
|
+ }
|
|
|
+ if("aws".equals(ossType)){
|
|
|
+ videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/stitch_params.txt");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return videosJson.toJSONString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String writeSceneJson(String num, String videosJson, SceneEditInfo sceneEditInfo,
|
|
|
+ SceneEditControls sceneEditControls, ScenePro scenePro, SceneProExt sceneProExt) throws Exception{
|
|
|
+ String sceneJsonPath = String.format(ConstantFilePath.SCENE_PATH_FORMAT, num);
|
|
|
+ String strsceneInfos = FileUtils.readFile(sceneJsonPath);
|
|
|
+ JSONObject scenejson = new JSONObject();
|
|
|
+ if(strsceneInfos!=null){
|
|
|
+ scenejson = JSONObject.parseObject(strsceneInfos);
|
|
|
+ }else{
|
|
|
+ SceneJsonBean sceneJson = BeanUtil.copyProperties(sceneEditInfo, SceneJsonBean.class);
|
|
|
+ SceneEditControlsVO sceneEditControlsVO = BeanUtil.copyProperties(sceneEditControls, SceneEditControlsVO.class);
|
|
|
+ sceneJson.setControls(sceneEditControlsVO);
|
|
|
+ sceneJson.setNum(num);
|
|
|
+ sceneJson.setCreateTime(scenePro.getCreateTime());
|
|
|
+ sceneJson.setSceneResolution(sceneProExt.getSceneResolution());
|
|
|
+ sceneJson.setSceneFrom(sceneProExt.getSceneFrom());
|
|
|
+ sceneJson.setVideos(videosJson);
|
|
|
+ }
|
|
|
+ scenejson.put("videos", videosJson);
|
|
|
+ FileUtils.writeFile(sceneJsonPath, scenejson.toString());
|
|
|
+ return scenejson.toString();
|
|
|
+ }
|
|
|
}
|