|
@@ -0,0 +1,173 @@
|
|
|
|
+package com.fdkankan.job.job;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.fdkankan.common.constant.PayStatus;
|
|
|
|
+import com.fdkankan.common.util.FileUtils;
|
|
|
|
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
|
|
|
|
+import com.fdkankan.job.entity.ScenePlus;
|
|
|
|
+import com.fdkankan.job.entity.ScenePlusExt;
|
|
|
|
+import com.fdkankan.job.entity.ScenePro;
|
|
|
|
+import com.fdkankan.job.entity.SceneProEdit;
|
|
|
|
+import com.fdkankan.job.entity.SceneEditInfo;
|
|
|
|
+import com.fdkankan.job.service.*;
|
|
|
|
+import com.fdkankan.model.constants.ConstantFilePath;
|
|
|
|
+import com.fdkankan.model.constants.UploadFilePath;
|
|
|
|
+import com.fdkankan.redis.util.RedisUtil;
|
|
|
|
+import com.xxl.job.core.context.XxlJobHelper;
|
|
|
|
+import com.xxl.job.core.handler.annotation.XxlJob;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
|
+
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.util.*;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * <p>
|
|
|
|
+ * v4场景回退v3
|
|
|
|
+ * </p>
|
|
|
|
+ *
|
|
|
|
+ * @author dengsixing
|
|
|
|
+ * @since 2022/12/16
|
|
|
|
+ **/
|
|
|
|
+@Slf4j
|
|
|
|
+@Component
|
|
|
|
+public class V4toV3Handler {
|
|
|
|
+
|
|
|
|
+ @Value("${main.url}")
|
|
|
|
+ private String mainUrl;
|
|
|
|
+ @Value("${scene.pro.v3.url}")
|
|
|
|
+ private String sceneProV3Url;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IScenePlusService scenePlusService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private IScenePlusExtService scenePlusExtService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private FYunFileServiceInterface fYunFileService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private RedisUtil redisUtil;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ISceneProService sceneProService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ISceneProEditService sceneProEditService;
|
|
|
|
+ @Autowired
|
|
|
|
+ ISceneEditInfoService sceneEditInfoService;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @XxlJob("V4toV3Handler")
|
|
|
|
+ private void V4toV3Handler(){
|
|
|
|
+ XxlJobHelper.log("V4toV3Handler start.....");
|
|
|
|
+
|
|
|
|
+ String active = SpringUtil.getActiveProfile();
|
|
|
|
+ XxlJobHelper.log("当前环境:{}", active);
|
|
|
|
+
|
|
|
|
+ List<String> faildNumList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ List<String> numList = null;
|
|
|
|
+ String nums = XxlJobHelper.getJobParam();
|
|
|
|
+ if(StrUtil.isNotEmpty(nums)){
|
|
|
|
+ numList = Arrays.asList(nums.split(","));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ LambdaQueryWrapper<ScenePlus> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ if(CollUtil.isNotEmpty(numList)){
|
|
|
|
+ queryWrapper.in(ScenePlus::getNum, numList);
|
|
|
|
+ }
|
|
|
|
+ List<ScenePlus> list = scenePlusService.list(queryWrapper);
|
|
|
|
+
|
|
|
|
+ if(CollUtil.isNotEmpty(list)){
|
|
|
|
+ list.parallelStream().forEach(plus->{
|
|
|
|
+ String num = plus.getNum();
|
|
|
|
+ try {
|
|
|
|
+ ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(plus.getId());
|
|
|
|
+ SceneEditInfo sceneEditInfo = sceneEditInfoService.getOne(new LambdaQueryWrapper<SceneEditInfo>().eq(SceneEditInfo::getScenePlusId, plus.getId()));
|
|
|
|
+
|
|
|
|
+ ScenePro scenePro = new ScenePro();
|
|
|
|
+ scenePro.setNum(plus.getNum());
|
|
|
|
+ scenePro.setWebSite(mainUrl + "/" + sceneProV3Url + plus.getNum());
|
|
|
|
+ scenePro.setThumb("https://4dkk.4dage.com/loading/thumb.jpg");
|
|
|
|
+ scenePro.setCreateTime(plus.getCreateTime());
|
|
|
|
+ scenePro.setStatus(-2);
|
|
|
|
+ scenePro.setDataSource(scenePlusExt.getDataSource());
|
|
|
|
+ scenePro.setUserId(plus.getUserId());
|
|
|
|
+ scenePro.setPayStatus(PayStatus.PAY.code());
|
|
|
|
+ scenePro.setCameraId(plus.getCameraId());
|
|
|
|
+ scenePro.setPhoneId(plus.getPhoneId());
|
|
|
|
+ scenePro.setSceneName(plus.getTitle());
|
|
|
|
+ scenePro.setSceneDec(plus.getDescription());
|
|
|
|
+ scenePro.setSceneType(plus.getSceneType());
|
|
|
|
+ scenePro.setViewCount(scenePlusExt.getViewCount());
|
|
|
|
+ scenePro.setShootCount(scenePlusExt.getShootCount());
|
|
|
|
+ if(StrUtil.isNotEmpty(scenePlusExt.getVideos())){
|
|
|
|
+ scenePro.setVideos(scenePlusExt.getVideos().replaceAll("scene_view_data/" + plus.getNum() + "/data", "data/data" + plus.getNum()));
|
|
|
|
+ }
|
|
|
|
+ scenePro.setGps(scenePlusExt.getGps());
|
|
|
|
+ scenePro.setSceneScheme(scenePlusExt.getSceneScheme());
|
|
|
|
+ scenePro.setAlgorithm(scenePlusExt.getAlgorithm());
|
|
|
|
+ scenePro.setEcs(scenePlusExt.getEcs());
|
|
|
|
+ scenePro.setSpace(scenePlusExt.getSpace());
|
|
|
|
+ scenePro.setFirmwareVersion(scenePlusExt.getFirmwareVersion());
|
|
|
|
+ scenePro.setBuildType(scenePlusExt.getBuildType());
|
|
|
|
+ scenePro.setComputeTime(scenePlusExt.getComputeTime());
|
|
|
|
+ scenePro.setSceneSource(plus.getSceneSource());
|
|
|
|
+ sceneProService.save(scenePro);
|
|
|
|
+
|
|
|
|
+ SceneProEdit sceneProEdit = new SceneProEdit();
|
|
|
|
+ sceneProEdit.setProId(scenePro.getId());
|
|
|
|
+ sceneProEdit.setCreateTime(plus.getCreateTime());
|
|
|
|
+ sceneProEdit.setVersion(sceneEditInfo.getVersion());
|
|
|
|
+ sceneProEdit.setImagesVersion(sceneEditInfo.getImgVersion());
|
|
|
|
+ sceneProEditService.save(sceneProEdit);
|
|
|
|
+
|
|
|
|
+ //复制oss
|
|
|
|
+ String dataPath = String.format("data/data%s/", num);
|
|
|
|
+ String imagePath = String.format("images/images%s/", num);
|
|
|
|
+ String videoPath = String.format("video/video%s/", num);
|
|
|
|
+ String voicePath = String.format("voice/voice%s/", num);
|
|
|
|
+ String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
|
|
|
|
+ String imageViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
|
|
|
|
+ String videoViewPath = String.format(UploadFilePath.VIDEOS_VIEW_PATH, num);
|
|
|
|
+ String voiceViewPath = String.format(UploadFilePath.VOICE_VIEW_PATH, num);
|
|
|
|
+
|
|
|
|
+ fYunFileService.copyFileInBucket(dataViewPath, dataPath);
|
|
|
|
+ fYunFileService.copyFileInBucket(imageViewPath, imagePath);
|
|
|
|
+ fYunFileService.copyFileInBucket(videoViewPath, videoPath);
|
|
|
|
+ fYunFileService.copyFileInBucket(voiceViewPath, voicePath);
|
|
|
|
+
|
|
|
|
+ //写入本地文件
|
|
|
|
+ JSONObject sceneJson = JSONObject.parseObject(JSONObject.toJSONString(scenePro));
|
|
|
|
+ sceneJson.put("videos",JSON.parseObject(scenePro.getVideos()).toJSONString());
|
|
|
|
+ sceneJson.put("version",sceneProEdit.getVersion());
|
|
|
|
+ sceneJson.put("imagesVersion",sceneProEdit.getImagesVersion());
|
|
|
|
+ sceneJson.put("floorEditVer",sceneProEdit.getFloorEditVer());
|
|
|
|
+ sceneJson.put("floorPublishVer",sceneProEdit.getFloorPublishVer());
|
|
|
|
+ String sceneJsonStr = JSON.toJSONString(sceneJson);
|
|
|
|
+
|
|
|
|
+ FileUtils.writeFile(ConstantFilePath.SCENE_PATH + "data/data" + num + File.separator + "scene.json", sceneJsonStr);
|
|
|
|
+ //上传sceneJson文件
|
|
|
|
+ fYunFileService.uploadFile(sceneJsonStr.getBytes(), dataViewPath + "scene.json");
|
|
|
|
+
|
|
|
|
+ fYunFileService.downloadFile(dataViewPath + "floorplan_cad.json", ConstantFilePath.SCENE_PATH + "data" + File.separator + "data" + num + File.separator + "floorplan_cad.json");
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ faildNumList.add(plus.getNum());
|
|
|
|
+ log.error("转换失败,num:" + num, e);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ XxlJobHelper.log("V4toV3Handler end.....");
|
|
|
|
+ XxlJobHelper.log("失败场景码:" + JSON.toJSONString(faildNumList));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|