|
|
@@ -9,26 +9,25 @@ import com.fdkankan.common.constant.ConstantFilePath;
|
|
|
import com.fdkankan.common.constant.ErrorCode;
|
|
|
import com.fdkankan.common.exception.BusinessException;
|
|
|
import com.fdkankan.common.response.PageInfo;
|
|
|
+import com.fdkankan.common.util.CreateObjUtil;
|
|
|
import com.fdkankan.common.util.FileUtils;
|
|
|
import com.fdkankan.fyun.oss.UploadToOssUtil;
|
|
|
-import com.fdkankan.manage.entity.Camera;
|
|
|
-import com.fdkankan.manage.entity.CameraDetail;
|
|
|
-import com.fdkankan.manage.entity.ScenePro;
|
|
|
+import com.fdkankan.manage.entity.*;
|
|
|
import com.fdkankan.manage.mapper.ISceneProMapper;
|
|
|
import com.fdkankan.manage.service.*;
|
|
|
import com.fdkankan.manage.util.SceneStatusUtil;
|
|
|
import com.fdkankan.manage.vo.request.SceneParam;
|
|
|
import com.fdkankan.manage.vo.response.GroupByCount;
|
|
|
import com.fdkankan.manage.vo.response.SceneVo;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.File;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
@@ -39,6 +38,7 @@ import java.util.Map;
|
|
|
* @since 2022-06-16
|
|
|
*/
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
|
|
|
|
|
|
@Autowired
|
|
|
@@ -52,9 +52,12 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
|
|
|
@Autowired
|
|
|
IUserIncrementService userIncrementService;
|
|
|
@Autowired
|
|
|
+ ISceneProEditService sceneProEditService;
|
|
|
+ @Autowired
|
|
|
private UploadToOssUtil uploadToOssUtil;
|
|
|
|
|
|
- private ScenePro getByNum(String num) {
|
|
|
+ @Override
|
|
|
+ public ScenePro getByNum(String num) {
|
|
|
LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
|
|
|
wrapper.eq(ScenePro::getNum,num);
|
|
|
List<ScenePro> list = this.list(wrapper);
|
|
|
@@ -221,17 +224,152 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void copy(String num) {
|
|
|
- ScenePro sourceScene = this.getByNum(num);
|
|
|
+ public void copy(String sceneNum) {
|
|
|
+ ScenePro sourceScene = this.getByNum(sceneNum);
|
|
|
if(sourceScene == null){
|
|
|
throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
|
|
|
}
|
|
|
-
|
|
|
- Long count = copyLogService.getCountBySceneNum(num);
|
|
|
+ Long count = copyLogService.getCountBySceneNum(sceneNum);
|
|
|
+ String newNum = sourceScene.getNum() + "-cp-" + count + 1; //复制场景在原场景上添加标识
|
|
|
ScenePro targetScene = new ScenePro();
|
|
|
BeanUtils.copyProperties(sourceScene,targetScene);
|
|
|
targetScene.setId(null);
|
|
|
- targetScene.setNum(sourceScene.getNum() +"-cp-"+ count + 1); //复制场景在原场景上添加标识
|
|
|
+ targetScene.setNum(newNum);
|
|
|
+ targetScene.setWebSite(sourceScene.getWebSite().replace(sceneNum, newNum));
|
|
|
+ targetScene.setThumb(sourceScene.getThumb().replace(sceneNum, newNum));
|
|
|
+ //更新video
|
|
|
+ HashMap<String,Object> map = new HashMap<>();
|
|
|
+ JSONObject object = new JSONObject();
|
|
|
+ if(StringUtils.isNotEmpty(sourceScene.getVideos())){
|
|
|
+ object = JSONObject.parseObject(sourceScene.getVideos());
|
|
|
+ if(object.containsKey("upPath")){
|
|
|
+ String upPath = object.getString("upPath");
|
|
|
+
|
|
|
+ upPath = upPath.replace(sceneNum,newNum);
|
|
|
+ object.put("upPath",upPath);
|
|
|
+ }
|
|
|
+ targetScene.setVideos(object.toJSONString());
|
|
|
+ map.put("videos",targetScene.getVideos());
|
|
|
+ }
|
|
|
+ this.save(targetScene);
|
|
|
+ SceneProEdit oldEditScene = sceneProEditService.getByProId(sourceScene.getId());
|
|
|
+ if(oldEditScene != null){
|
|
|
+ oldEditScene.setId(null);
|
|
|
+ oldEditScene.setProId(sourceScene.getId());
|
|
|
+ oldEditScene.setScreencapVoiceSrc(oldEditScene.getScreencapVoiceSrc() == null ? null : oldEditScene.getScreencapVoiceSrc().replace(sceneNum, newNum));
|
|
|
+ oldEditScene.setScreencapVoiceSound(oldEditScene.getScreencapVoiceSound() == null ? null : oldEditScene.getScreencapVoiceSound().replace(sceneNum, newNum));
|
|
|
+ oldEditScene.setScreencapVoiceSoundsync(oldEditScene.getScreencapVoiceSoundsync() == null ? null : oldEditScene.getScreencapVoiceSoundsync().replace(sceneNum, newNum));
|
|
|
+ oldEditScene.setPlayData(oldEditScene.getPlayData() == null ? null : oldEditScene.getPlayData().replace(sceneNum, newNum));
|
|
|
+ oldEditScene.setScreencapThumb(oldEditScene.getScreencapThumb() == null ? null : oldEditScene.getScreencapThumb().replace(sceneNum, newNum));
|
|
|
+ oldEditScene.setFloorPlanPng(oldEditScene.getFloorPlanPng() == null ? null : oldEditScene.getFloorPlanPng().replace(sceneNum, newNum));
|
|
|
+ sceneProEditService.save(oldEditScene);
|
|
|
+ }
|
|
|
+ new Thread(){
|
|
|
+ //重写run方法
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ try{
|
|
|
+ log.info("开始复制场景-{}", new Date());
|
|
|
+ //oss复制资源
|
|
|
+ downloadFromOldNumFromOss(sceneNum, newNum);
|
|
|
+ // 复制本地secen.json
|
|
|
+ copyOldSceneLocalToNew(sceneNum, newNum);
|
|
|
+
|
|
|
+ FileUtils.writeJsonFile(ConstantFilePath.SCENE_PATH + "data/data" + newNum + File.separator + "scene.json", map);
|
|
|
+
|
|
|
+ //上传资源到oss
|
|
|
+ uploadNewSceneToOss(newNum);
|
|
|
+
|
|
|
+ log.info("复制场景结束-{}", new Date());
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("复制场景异常", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }.start();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从旧场景下载资源
|
|
|
+ * @param sceneNum
|
|
|
+ * @param newNum
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ private void downloadFromOldNumFromOss(String sceneNum, String newNum) throws Exception {
|
|
|
+ CreateObjUtil.ossUtilCp("images/images" + sceneNum + "/",
|
|
|
+ ConstantFilePath.SCENE_PATH + "images/images" + newNum);
|
|
|
+ CreateObjUtil.ossUtilCp("data/data" + sceneNum + "/",
|
|
|
+ ConstantFilePath.SCENE_PATH + "data/data" + newNum);
|
|
|
+ CreateObjUtil.ossUtilCp("voice/voice" + sceneNum + "/",
|
|
|
+ ConstantFilePath.SCENE_PATH + "voice/voice" + newNum);
|
|
|
+ CreateObjUtil.ossUtilCp("video/video" + sceneNum + "/",
|
|
|
+ ConstantFilePath.SCENE_PATH + "video/video" + newNum);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上传新场景资源到oss
|
|
|
+ * @param newNum
|
|
|
+ */
|
|
|
+ private void uploadNewSceneToOss(String newNum) {
|
|
|
+ Map<String, String> map = new HashMap();
|
|
|
+ List<String> urlList = new ArrayList<>();
|
|
|
+ FileUtils.readfilePath(ConstantFilePath.SCENE_PATH + "images/images" + newNum, urlList);
|
|
|
+ FileUtils.readfilePath(ConstantFilePath.SCENE_PATH + "data/data" + newNum, urlList);
|
|
|
+ FileUtils.readfilePath(ConstantFilePath.SCENE_PATH + "voice/voice" + newNum, urlList);
|
|
|
+ FileUtils.readfilePath(ConstantFilePath.SCENE_PATH + "video/video" + newNum, urlList);
|
|
|
+ for(String url : urlList){
|
|
|
+ map.put(url, url.replace(ConstantFilePath.SCENE_PATH, ""));
|
|
|
+ }
|
|
|
+ uploadToOssUtil.uploadMulFiles(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从本地旧场景拷贝资源到新场景
|
|
|
+ * @param sceneNum
|
|
|
+ * @param newNum
|
|
|
+ */
|
|
|
+ private void copyOldSceneLocalToNew(String sceneNum, String newNum) throws IOException {
|
|
|
+ FileUtils.copyFolderAllFiles(ConstantFilePath.SCENE_PATH + "data/data" + sceneNum + "/",
|
|
|
+ ConstantFilePath.SCENE_PATH + "data/data" + newNum + "/", true);
|
|
|
+// log.info("成功拷贝完data文件夹-{}", sceneNum);
|
|
|
+
|
|
|
+ // 复制本地视频
|
|
|
+ FileUtils.copyFolderAllFiles(ConstantFilePath.SCENE_PATH + "video/video" + sceneNum + "/",
|
|
|
+ ConstantFilePath.SCENE_PATH + "video/video" + newNum + "/", true);
|
|
|
+// log.info("成功拷贝完video文件夹-{}", sceneNum);
|
|
|
|
|
|
+ // 复制本地二维码
|
|
|
+ boolean copySucc = FileUtils.copyFile(ConstantFilePath.SCENE_QR_CODE_PATH + sceneNum + ".png",
|
|
|
+ ConstantFilePath.SCENE_QR_CODE_PATH + newNum + ".png", true);
|
|
|
+// log.info("成功拷贝完二维码文件-{}", sceneNum);
|
|
|
+//
|
|
|
+// if (!copySucc) {
|
|
|
+// log.info("拷贝png失败,场景码-{}", sceneNum);
|
|
|
+// }
|
|
|
+
|
|
|
+ // 复制本地二维码
|
|
|
+ copySucc = FileUtils.copyFile(ConstantFilePath.SCENE_QR_CODE_PATH + sceneNum + "_en.png",
|
|
|
+ ConstantFilePath.SCENE_QR_CODE_PATH + newNum + "_en.png", true);
|
|
|
+// log.info("成功拷贝完国际二维码文件-{}", sceneNum);
|
|
|
+
|
|
|
+// log.info("旧的场景码-{}", ConstantFilePath.SCENE_QR_CODE_PATH + sceneNum + "_en.png");
|
|
|
+// log.info("新的场景码-{}", ConstantFilePath.SCENE_QR_CODE_PATH + newNum + "_en.png");
|
|
|
+// if (!copySucc) {
|
|
|
+// log.info("拷贝png失败,场景码-{}", sceneNum);
|
|
|
+// }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteByNum(String num) {
|
|
|
+ ScenePro scenePro = this.getByNum(num);
|
|
|
+ if(scenePro!=null){
|
|
|
+ this.removeById(scenePro);
|
|
|
+ }
|
|
|
+ Scene scene = sceneService.getByNum(num);
|
|
|
+ if(scene!=null){
|
|
|
+ sceneService.removeById(scene);
|
|
|
+ }
|
|
|
}
|
|
|
}
|