dengsixing 1 年之前
父节点
当前提交
1a99d5fb8a
共有 23 个文件被更改,包括 1688 次插入21 次删除
  1. 0 1
      src/main/java/com/fdkankan/common/ThreeDESUtil.java
  2. 41 0
      src/main/java/com/fdkankan/common/constant/ConstantFileName.java
  3. 156 0
      src/main/java/com/fdkankan/common/constant/ConstantFilePath.java
  4. 1 1
      src/main/java/com/fdkankan/common/ErrorCode.java
  5. 62 0
      src/main/java/com/fdkankan/common/constant/UploadFilePath.java
  6. 1 1
      src/main/java/com/fdkankan/common/exception/BusinessException.java
  7. 83 0
      src/main/java/com/fdkankan/common/util/BASE64DecodedMultipartFile.java
  8. 128 0
      src/main/java/com/fdkankan/common/util/FdfsUtil.java
  9. 1 0
      src/main/java/com/fdkankan/common/util/ThreeDESUtil.java
  10. 1 1
      src/main/java/com/fdkankan/common/UserAgentUtils.java
  11. 1 1
      src/main/java/com/fdkankan/common/WebUtil.java
  12. 3 4
      src/main/java/com/fdkankan/scene/Interceptor/ViewLogAspect.java
  13. 12 0
      src/main/java/com/fdkankan/scene/bean/TietaResBean.java
  14. 33 0
      src/main/java/com/fdkankan/scene/controller/OssFileMappingController.java
  15. 910 0
      src/main/java/com/fdkankan/scene/controller/SceneEditController.java
  16. 21 0
      src/main/java/com/fdkankan/scene/service/ISceneUploadService.java
  17. 2 0
      src/main/java/com/fdkankan/scene/service/SceneService.java
  18. 7 12
      src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java
  19. 198 0
      src/main/java/com/fdkankan/scene/service/impl/SceneUploadServiceImpl.java
  20. 7 0
      src/main/resources/application-dev.yml
  21. 7 0
      src/main/resources/application-preprod.yml
  22. 7 0
      src/main/resources/application-prod.yml
  23. 6 0
      src/main/resources/application-test.yml

文件差异内容过多而无法显示
+ 0 - 1
src/main/java/com/fdkankan/common/ThreeDESUtil.java


+ 41 - 0
src/main/java/com/fdkankan/common/constant/ConstantFileName.java

@@ -0,0 +1,41 @@
+package com.fdkankan.common.constant;
+
+public class ConstantFileName {
+    //背景音乐
+    public static final String BACKGROUND_MUSIC = "bg.mp3";
+    //编辑页面,第二代
+    public static final String MODEL_DATAFILE = "modeldata.json";
+    public static final String HOT_DATAFILE = "hot.json";
+    public static final String MEDIA_DATAFILE = "mediaInfo.json";
+    public static final String SCREEN_CRP_DATAFILE = "screenCap";
+    //导览(一代)
+    public static final String GUIDE_DATAFILE = "tour.json";
+
+    //文件夹名称
+    public static final String GUIDE_MEDIA_FOLDER = "guide";
+    public static final String HOT_MEDIA_FOLDER = "hot";
+    public static final String OTHER_MEDIA_FOLDER = "other";
+
+    //论坛过滤文档
+    public static final String BBS_SENSITIVE = "SensitiveWord.txt";
+    public static final String LOGO_NAME = "logo.jpg";
+
+    //app部分
+    public static final String APP_FOLDER = "appupload";
+
+    public static final String FLOOR_LOGO_PIC_NAME = "floorLogoImg.png";
+
+    public static final String TOUR_LIST = "tourList.json";
+    public static final String VOICE_NAME = "201810";
+    public static final String WECHAT_VOICE_NAME = "wechat";
+    public static final String APP_VOICE_NAME = "app";
+
+    public static final String TOURLIST_FOLDER = "tour";
+    //public static final String TEMPFILES = "tempFiles";
+
+    public static final String modelUUID = "dacf7dfa24ae47fab8fcebfe4dc41ab9";
+
+    public static final String BUCKET_NAME = "4dkankan";
+
+    public static final String SCENE_JSON = "scene.json";
+}

+ 156 - 0
src/main/java/com/fdkankan/common/constant/ConstantFilePath.java

@@ -0,0 +1,156 @@
+package com.fdkankan.common.constant;
+
+public class ConstantFilePath {
+    public static final String BASE_PATH = "/mnt/4Dkankan";
+    //论坛上传图片后,服务器存放的地址
+    public static final String BBS_IMAGES_PATH = "/mnt/4Dkankan/bbs/upload/image/";
+    // 用户上传图片
+    public static final String USER_IMAGES_PATH = "/mnt/4Dkankan/user/";
+    // 图片暂存地址(创建二维码等)
+    public static final String TEMP_IMAGES_PATH = "/mnt/4Dkankan/temp/upload/image/";
+    // 场景
+    public static final String SCENE_PATH = "/mnt/4Dkankan/scene/";
+    // 场景
+    public static final String SCENE_V4_PATH = "/mnt/4Dkankan/scene_v4/";
+    // 代理商
+    public static final String AGENT_PATH = "/mnt/4Dkankan/agent/";
+    //电子发票
+    public static final String INVOICE_PATH = "/mnt/4Dkankan/invoice/";
+    // 场景二维码
+    public static final String SCENE_QR_CODE_PATH = "/mnt/4Dkankan/sceneQRcode/";
+    // excel
+    public static final String EXCEL_PATH = "/mnt/4Dkankan/excel/";
+    //    public static final String EXCEL_PATH = "F:\\excel\\";
+    // medias
+    public static final String MEDIAS_PATH = "/mnt/4Dkankan/medias/";
+    // logo
+    public static final String LOGO_PATH = "/mnt/4Dkankan/logo/";
+    // login qr code
+    public static final String LOGIN_QR_CODE_PATH = "/mnt/4Dkankan/login/qrcode/";
+
+    public static final String WEIXIN_CERT = "/mnt/home/ubuntu/user/apiclient_cert.p12";
+
+    public static final String PREFIX = "/home/user";
+    public static final String CREATE_MODEL_PATH = PREFIX + "/photo_data/model/";
+    //大场景
+    public static final String CREATE_BIG_SCENE_PATH = PREFIX + "/photo_data/bigscene/";
+    //生成模型的路径
+    public static final String BUILD_MODEL_PATH = "/mnt/data/";
+    //生成模型的路径
+    public static String BUILD_MODEL_LASER_PATH ="/mnt/data/";
+
+    //支付二维码图片存放路径
+    public static final String ALI_QRCODE_FOLDER = "/mnt/4Dkankan/alicode/";
+    public static final String WEIXIN_QRCODE_FOLDER = "/mnt/4Dkankan/weixincode/";
+
+    public static final String OSS_PREFIX = "home/";
+
+    /**
+     * 场景数据文件路径
+     */
+    public static final String DATABUFFER_FORMAT = SCENE_PATH + "data/data%s/";
+
+    /**
+     * 场景数据文件路径
+     */
+    public static final String IMAGESBUFFER_FORMAT = SCENE_PATH + "images/images%s/";
+
+    /**
+     * 漫游文件路径
+     */
+    public static final String TOURLIST_PATH_FORMAT = SCENE_PATH + "data/data%s/" + ConstantFileName.TOUR_LIST;
+
+    /**
+     * 漫游文件路径
+     */
+    public static final String TOURLIST_FOLDER_PATH_FORMAT = SCENE_PATH + "data/data%s/" + ConstantFileName.TOURLIST_FOLDER;
+
+    /**
+     * scenejson文件本地路径
+     */
+    public static final String SCENE_PATH_FORMAT = DATABUFFER_FORMAT + ConstantFileName.SCENE_JSON;
+
+    /**
+     * scenejson文件本地路径 V4
+     */
+    public static final String SCENE_JSON_V4_PATH = SCENE_V4_PATH + "data/data%s/" + ConstantFileName.SCENE_JSON;
+
+    public static final String MEDIAINFO_PATH_FORMAT = DATABUFFER_FORMAT + ConstantFileName.MEDIA_DATAFILE;
+
+    public void setHardDiskLaser(String value){
+        ConstantFilePath.BUILD_MODEL_LASER_PATH = value;
+    }
+
+    /**
+     * 场景编辑数据目录
+     */
+    public static final String SCENE_EDIT_DATA = "scene_edit_data/";
+
+    /**
+     * 场景编辑用户上传数据目录
+     */
+    public static final String SCENE_EDIT_DATA_USER = SCENE_EDIT_DATA + "%s/user/";
+
+    /**
+     * 场景编辑数据data目录
+     */
+    public static final String SCENE_EDIT_DATA_DATA = SCENE_EDIT_DATA + "%s/data/";
+
+    /**
+     * 场景发布数据目录
+     */
+    public static final String SCENE_VIEW_DATA = "scene_view_data/";
+
+    /**
+     * 场景发布用户上传数据目录
+     */
+    public static final String SCENE_VIEW_DATA_USER = SCENE_VIEW_DATA + "%s/user/";
+
+    /**
+     * 场景发布数据data目录
+     */
+    public static final String SCENE_VIEW_DATA_DATA= SCENE_VIEW_DATA + "%s/data/";
+
+    /**
+     * 场景发布scene.json路径
+     */
+    public static final String SCENE_VIEW_DATA_DATA_SCENEJSON= SCENE_VIEW_DATA + "%s/data/scene.json";
+
+    public static final String DATA_PATH_FORMAT = "data/data%s/";
+    public static final String IMAGE_PATH_FORMAT = "images/images%s/";
+    public static final String VIDEO_PATH_FORMAT = "video/video%s/";
+
+    public static final String SCENE_CACHE_IMAGES = SCENE_PATH + "%s/caches/images/";
+
+    public static final String SCENE_CACHE = SCENE_PATH + "%s/caches/";
+
+    public static final String SCENE_DATA_PATH_V4 = SCENE_V4_PATH + "%s/data/";
+
+    public static final String SCENE_IMAGES_PATH_V4 = SCENE_V4_PATH + "%s/images/";
+
+    public static final String SCENE_VIDEOS_PATH_V4 = SCENE_V4_PATH + "%s/video/";
+
+    public static final String SCENE_VOICES_PATH_V4 = SCENE_V4_PATH + "%s/voice/";
+
+    public static final String SCENE_USER_PATH_V4 = SCENE_V4_PATH + "%s/user/";
+
+    public static final String SCENE_TMP_PATH_V4 = SCENE_V4_PATH + "%s/tmp/";
+
+    /**
+     * 文件转换目录
+     */
+    public static final String FILE_CONVERT_PATH = BASE_PATH + "/fileConvert/";
+
+    /**
+     * 文件转换目录
+     */
+    public static final String OPENAPI_DOWNLOAD_PATH = SCENE_V4_PATH + "%s/openApi/download/";
+
+
+
+
+    public static void main(String[] args) {
+
+        System.out.println(String.format(ConstantFilePath.SCENE_PATH_FORMAT, "123"));
+    }
+}

+ 1 - 1
src/main/java/com/fdkankan/common/ErrorCode.java

@@ -1,4 +1,4 @@
-package com.fdkankan.common;
+package com.fdkankan.common.constant;
 
 public enum ErrorCode {
 

+ 62 - 0
src/main/java/com/fdkankan/common/constant/UploadFilePath.java

@@ -0,0 +1,62 @@
+package com.fdkankan.common.constant;
+
+public class UploadFilePath {
+
+    /**
+     * oss.场景码目录
+     */
+    public static final String EDIT_PATH =  "scene_edit_data/%s/";
+    public static final String VIEW_PATH =  "scene_view_data/%s/";
+
+    /**
+     * oss.用户上传文件
+     */
+    public static final String USER_EDIT_PATH =  "scene_edit_data/%s/user/";
+    public static final String USER_VIEW_PATH =  "scene_view_data/%s/user/";
+    /**
+     * 场景数据
+     */
+    public static final String DATA_EDIT_PATH =  "scene_edit_data/%s/data/";
+    public static final String DATA_VIEW_PATH =  "scene_view_data/%s/data/";
+    /**
+     * 场景图片
+     */
+    public static final String IMG_EDIT_PATH =  "scene_edit_data/%s/images/";
+    public static final String IMG_VIEW_PATH =  "scene_view_data/%s/images/";
+    /**
+     * 场景视频
+     */
+    public static final String VIDEOS_EDIT_PATH =  "scene_edit_data/%s/video/";
+    public static final String VIDEOS_VIEW_PATH =  "scene_view_data/%s/video/";
+
+    /**
+     * 场景音频
+     */
+    public static final String VOICE_EDIT_PATH =  "scene_edit_data/%s/voice/";
+    public static final String VOICE_VIEW_PATH =  "scene_view_data/%s/voice/";
+
+    public static final String SCENE_NUM_PATH = "scene/%s";
+    public static final String IMG_CACHES_PATH =  "scene/%s/caches/images/";
+    public static final String VIDEOS_CACHES_PATH =  "scene/%s/caches/videos/";
+
+    public static final String DOWNLOADS_QRCODE = "downloads/scene/%s/QRcode/";
+
+    public static final String DOWNLOADS_TOUR_VIDEO = "downloads/scene/%s/tour/";
+
+    /**
+     * 场景计算日志文件地址
+     */
+    public static final String BUILD_LOG_PATH = "build_log/%s/";
+
+    /**
+     * 管理后台文件路径
+     */
+    public static final String MANAGE_FILE_PATH = "manage/%s/%s";
+
+    /**
+     * 场景计算结果数据存放路径
+     */
+    public static final String scene_result_data_path = "scene_result_data/%s/";
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/common/exception/BusinessException.java

@@ -1,6 +1,6 @@
 package com.fdkankan.common.exception;
 
-import com.fdkankan.common.ErrorCode;
+import com.fdkankan.common.constant.ErrorCode;
 import lombok.Data;
 
 /**

+ 83 - 0
src/main/java/com/fdkankan/common/util/BASE64DecodedMultipartFile.java

@@ -0,0 +1,83 @@
+package com.fdkankan.common.util;
+
+import org.springframework.web.multipart.MultipartFile;
+import sun.misc.BASE64Decoder;
+
+import java.io.*;
+
+public class BASE64DecodedMultipartFile implements MultipartFile {
+    private final byte[] imgContent;
+    private final String header;
+
+    public BASE64DecodedMultipartFile(byte[] imgContent, String header) {
+        this.imgContent = imgContent;
+        this.header = header.split(";")[0];
+    }
+
+    @Override
+    public String getName() {
+        // TODO - implementation depends on your requirements
+        return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
+    }
+
+    @Override
+    public String getOriginalFilename() {
+        // TODO - implementation depends on your requirements
+        return System.currentTimeMillis() + (int)Math.random() * 10000 + "." + header.split("/")[1];
+    }
+
+    @Override
+    public String getContentType() {
+        // TODO - implementation depends on your requirements
+        return header.split(":")[1];
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return imgContent == null || imgContent.length == 0;
+    }
+
+    @Override
+    public long getSize() {
+        return imgContent.length;
+    }
+
+    @Override
+    public byte[] getBytes() throws IOException {
+        return imgContent;
+    }
+
+    @Override
+    public InputStream getInputStream() throws IOException {
+        return new ByteArrayInputStream(imgContent);
+    }
+
+    @Override
+    public void transferTo(File dest) throws IOException, IllegalStateException {
+        try (FileOutputStream ios = new FileOutputStream(dest)){
+            ios.write(imgContent);
+        }
+    }
+
+
+    public static MultipartFile base64ToMultipart(String base64) {
+        try {
+            String[] baseStrs = base64.split(",");
+
+            BASE64Decoder decoder = new BASE64Decoder();
+            byte[] b = new byte[0];
+            b = decoder.decodeBuffer(baseStrs[1]);
+
+            for(int i = 0; i < b.length; ++i) {
+                if (b[i] < 0) {
+                    b[i] += 256;
+                }
+            }
+            return new BASE64DecodedMultipartFile(b, baseStrs[0]);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+}

+ 128 - 0
src/main/java/com/fdkankan/common/util/FdfsUtil.java

@@ -0,0 +1,128 @@
+package com.fdkankan.common.util;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.UUID;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import com.alibaba.fastjson.JSON;
+import com.fdkankan.scene.bean.TietaResBean;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@Slf4j
+public class FdfsUtil {
+
+    @Value("${fdfs.address}")
+    private String address;
+
+    @Value("${fdfs.api.getSignature}")
+    private String api_getSignature;
+
+    @Value("${fdfs.api.uploadFile}")
+    private String api_uploadFile;
+
+    @Value("${fdfs.sysCode}")
+    private String sysCode;
+
+    public String getSignature(String nonce, String timestamp){
+        Map<String, String> headers = new HashMap<>();
+        headers.put("timestamp", timestamp);
+        headers.put("nonce", nonce);
+        headers.put("sysCode", sysCode);
+        HttpRequest httpRequest = HttpRequest.post(address.concat(api_getSignature)).addHeaders(headers).timeout(5000);
+        HttpResponse res = httpRequest.execute();
+        String resBody = res.body();
+        res.close();
+        TietaResBean<String> tietaResBean = JSON.parseObject(resBody, TietaResBean.class);
+        String code = tietaResBean.getCode();
+        if(!"000000".equals(code)){
+            throw new RuntimeException("获取签名失败, code:" + code);
+        }
+        return tietaResBean.getData();
+    }
+
+    public Map<String, String> uploadFile(String nonce, String timestamp, String signature, String filePath){
+
+        Map<String, String> headers = new HashMap<>();
+        headers.put("timestamp", timestamp);
+        headers.put("nonce", nonce);
+        headers.put("sysCode", sysCode);
+        headers.put("signature", signature);
+
+        Map<String, Object> test = new HashMap<>();
+        test.put("visibilityLevel", "1003");
+        test.put("file", new File(filePath));
+        test.put("userId", "111111");
+        HttpRequest httpRequest = HttpRequest.post(address.concat(api_uploadFile)).form(test).addHeaders(headers).timeout(120000);
+        HttpResponse res = httpRequest.execute();
+        String resBody = res.body();
+        log.info("upload file response : {}", resBody);
+        res.close();
+        TietaResBean<Map<String, String>> tietaResBean = JSON.parseObject(resBody, TietaResBean.class);
+        String code = tietaResBean.getCode();
+        if(!"000000".equals(code)){
+            throw new RuntimeException("上传文件失败, code:" + code);
+        }
+        return tietaResBean.getData();
+    }
+
+    public Map<String, String> uploadFile(String filePath){
+        String nonce = UUID.fastUUID().toString();
+        String timestamp = String.valueOf(new Date().getTime());
+        String signature = getSignature(nonce, timestamp);
+        Map<String, String> stringStringMap = null;
+        for(int i = 0; i< 5; i++){
+            try {
+                stringStringMap = uploadFile(nonce, timestamp, signature, filePath);
+                if(CollUtil.isNotEmpty(stringStringMap)){
+                    break;
+                }
+            }catch (Exception e){
+                log.warn("第{}上传文件失败,path:{}", i + 1, filePath, e);
+            }
+        }
+        if(CollUtil.isEmpty(stringStringMap)){
+            throw new RuntimeException("上传文件FASTDFS失败,path:{}" + filePath);
+        }
+        return stringStringMap;
+    }
+
+    public static void main(String[] args) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("timestamp", "1719389524320");
+        headers.put("nonce", "123123");
+        headers.put("sysCode", "CT00017");
+        headers.put("signature", "3044022062501c9896a919d81d00216379a84c7d89b2d7315a22f89aee2ce7c1185f656c02206d4694fb685247a289e1c0d11e7492311ef66354c64cd2234fa593e02a635074");
+
+        Map<String, Object> test = new HashMap<>();
+        test.put("visibilityLevel", "1003");
+        test.put("file", new File("D:\\四维时代\\中国铁塔\\数据推送示例\\KK-R4YYV4yIZlT\\images\\4k\\ff54999789b970e64e2845a2337954f9.jpg"));
+        test.put("userId", "111111");
+        HttpRequest httpRequest = HttpRequest.post("http://10.180.22.41:8761/ChinatowerFileService/uploadFile/").form(test).addHeaders(headers).timeout(60000);
+        HttpResponse res = httpRequest.execute();
+        String resBody = res.body();
+        res.close();
+        TietaResBean<Map<String, String>> tietaResBean = JSON.parseObject(resBody, TietaResBean.class);
+        String code = tietaResBean.getCode();
+        if(!"000000".equals(code)){
+            throw new RuntimeException("上传文件失败, code:" + code);
+        }
+        Map<String, String> data = tietaResBean.getData();
+        System.out.println(data);
+    }
+
+
+
+
+
+
+
+
+}

文件差异内容过多而无法显示
+ 1 - 0
src/main/java/com/fdkankan/common/util/ThreeDESUtil.java


+ 1 - 1
src/main/java/com/fdkankan/common/UserAgentUtils.java

@@ -1,5 +1,5 @@
 
-package com.fdkankan.common;
+package com.fdkankan.common.util;
 
 import javax.servlet.http.HttpServletRequest;
 

+ 1 - 1
src/main/java/com/fdkankan/common/WebUtil.java

@@ -1,4 +1,4 @@
-package com.fdkankan.common;
+package com.fdkankan.common.util;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;

+ 3 - 4
src/main/java/com/fdkankan/scene/Interceptor/ViewLogAspect.java

@@ -4,13 +4,12 @@ import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.ThreeDESUtil;
-import com.fdkankan.common.UserAgentUtils;
-import com.fdkankan.common.WebUtil;
+import com.fdkankan.common.util.ThreeDESUtil;
+import com.fdkankan.common.util.UserAgentUtils;
+import com.fdkankan.common.util.WebUtil;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.feign.TietaFeignClient;
 import com.fdkankan.feign.WS4AServiceClient;
-import com.fdkankan.scene.bean.ResultData;
 import com.fdkankan.scene.entity.SceneViewLog;
 import com.fdkankan.scene.service.SceneViewLogService;
 import lombok.extern.log4j.Log4j2;

+ 12 - 0
src/main/java/com/fdkankan/scene/bean/TietaResBean.java

@@ -0,0 +1,12 @@
+package com.fdkankan.scene.bean;
+
+import lombok.Data;
+
+@Data
+public class TietaResBean<T> {
+
+    private String code;
+    private String mes;
+    private T data;
+
+}

+ 33 - 0
src/main/java/com/fdkankan/scene/controller/OssFileMappingController.java

@@ -0,0 +1,33 @@
+package com.fdkankan.scene.controller;
+
+import com.fdkankan.scene.service.SceneService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 场景编辑管理
+ */
+@Log4j2
+@RestController
+@RequestMapping({"/scene_edit_data", "/scene_view_data"})
+public class OssFileMappingController {
+
+    @Autowired
+    private SceneService sceneService;
+
+    @GetMapping("/{num}/{dir}/{fileName}")
+    public void outFileByKey2(@PathVariable("num") String num, @PathVariable("dir") String dir,
+                              @PathVariable("fileName") String fileName,
+                              HttpServletRequest request,
+                              HttpServletResponse response) throws IOException {
+        String key = request.getServletPath().replaceFirst("/", "");
+        sceneService.outFileByKey2(key, response);
+    }
+
+
+}

+ 910 - 0
src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -0,0 +1,910 @@
+package com.fdkankan.scene.controller;
+
+import com.fdkankan.scene.service.ISceneUploadService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 场景编辑管理
+ */
+@Log4j2
+@RestController
+@RequestMapping("/service/scene/edit")
+public class SceneEditController{
+
+//    @Value("${spring.profiles.active}")
+//    private String env;
+//
+//    @Autowired
+//    private ISceneProService sceneProService;
+//    @Autowired
+//    private ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    private ISceneUploadService sceneUploadService;
+//    @Autowired
+//    private ISceneEditService sceneEditService;
+//    @Autowired
+//    private IDownloadTourVideoService downloadTourVideoService;
+//    @Autowired
+//    private ISurveillanceService surveillanceService;
+//    @Autowired
+//    private IBoxModelService boxModelService;
+//    @Autowired
+//    private IScenePlusService scenePlusService;
+//    @Autowired
+//    private ISceneAsynOperLogService sceneAsynOperLogService;
+//    @Autowired
+//    private ISceneEditInfoExtService sceneEditInfoExtService;
+//    @Autowired
+//    private ICutModelService cutModelService;
+//
+//    /**
+//     * <p>
+//     保存场景编辑数据
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/12
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/base/save")
+//    public SceneEditInfoVO saveScene(@RequestBody @Validated SceneEditInfoParamVO param){
+//        return sceneEditInfoService.saveScene(param);
+//    }
+//
+//    /**
+//     * <p>
+//     发布场景数据
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/12
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/publicScene")
+//    public ResultData publicScene(@RequestBody @Validated SceneEditInfoParamVO param) throws Exception {
+//        return sceneEditInfoService.publicScene(param);
+//    }
+//
+//    /**
+//     * <p>
+//     保存初始页面
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/12
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/saveInitialPage")
+//    public ResultData saveInitialPage(@RequestBody @Validated FileNameAndDataParamVO param) throws Exception {
+//        return sceneProService.saveInitialPage(param);
+//    }
+//
+//    /**
+//     * <p>
+//        新增或修改场景热点
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/12
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/tag/save")
+//    public ResultData saveTag(@RequestBody @Validated SaveTagsParamVO param) throws Exception {
+//        return sceneProService.addOrUpdateTag(param);
+//    }
+//
+//    /**
+//     * <p>
+//            删除热点
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/16
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/tag/delete")
+//    public ResultData deleteTag(@RequestBody @Validated DeleteHotParamVO param) throws Exception {
+//        return sceneProService.deleteTag(param);
+//    }
+//
+//    /**
+//     * <p>
+//            热点列表
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param num
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @PostMapping(value = "/tag/list")
+//    public ResultData listTags(@RequestParam(value = "num") String num) throws Exception {
+//        return sceneProService.listTags(num);
+//    }
+//
+//    /**
+//     * <p>
+//     删除热点
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/16
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/icons/delete")
+//    public ResultData deleteIcons(@RequestBody @Validated DeleteHotIconParamVO param) throws Exception {
+//        return sceneProService.deleteIcons(param);
+//    }
+//
+//    /**
+//     * <p>
+//     保存漫游可行
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/12
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/saveRoam")
+//    public ResultData saveRoam(@RequestBody @Validated BaseDataParamVO param) throws Exception {
+//        return sceneProService.saveRoam(param);
+//    }
+//
+//    /**
+//     * <p>
+//     保存热点可见性的数据
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/saveTagsVisible")
+//    public ResultData saveTagsVisible(@RequestBody @Validated SaveTagsVisibleParamVO param) throws Exception {
+//        return sceneProService.saveTagsVisible(param);
+//    }
+//
+//    /**
+//     * <p>
+//            下载模型
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param num
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/downloadModel")
+//    public ResultData downloadModel(@RequestParam("num") String num) throws Exception {
+//        return sceneProService.downloadModel(num);
+//    }
+//
+//    /**
+//     * <p>
+//            上传模型
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param num
+//     * @param file
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/uploadModel")
+//    public ResultData uploadModel(@RequestParam("num") String num, @RequestParam("file") MultipartFile file) throws Exception {
+//        return sceneProService.uploadModel(num, file);
+//    }
+//
+//    /**
+//     * <p>
+//     保存关联全景图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param num
+//     * @param sid
+//     * @param fileName
+//     * @param file
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/linkPan/upload")
+//    public ResultData uploadLinkPan(
+//        @RequestParam(value = "num") String num,
+//        @RequestParam(value = "sid") String sid,
+//        @RequestParam(value = "fileName") String fileName,
+//        @RequestParam("file") MultipartFile file) throws Exception{
+//        return sceneEditInfoService.uploadLinkPan(num, sid, fileName, file);
+//    }
+//
+//    /**
+//     * <p>
+//     保存关联全景图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/linkPan/save")
+//    public ResultData saveLinkPan(@RequestBody @Validated SaveLinkPanParamVO param) throws Exception{
+//        return sceneEditInfoService.saveLinkPan(param);
+//    }
+//
+//    /**
+//     * <p>
+//            删除场景关联
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/linkPan/delete")
+//    public ResultData deleteLinkPan(@RequestBody @Validated DeleteLinkPanParamVO param) throws Exception {
+//        return sceneEditInfoService.deleteLinkPan(param);
+//    }
+//
+//    /**
+//     * <p>
+//            删除场景关联图标
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/styles/delete")
+//    public ResultData deleteStyles(@RequestBody @Validated DeleteStylesParamVO param) throws Exception {
+//        return sceneEditInfoService.deleteStyles(param);
+//    }
+//
+//    /**
+//     * <p>
+//            场景关联列表
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param num
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/linkPan/list")
+//    public ResultData listLinkPan(@RequestParam(value = "num") String num) throws Exception {
+//        return sceneEditInfoService.listLinkPan(num);
+//    }
+//
+//    /**
+//     * <p>
+//     保存户型图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/20
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/cad/save")
+//    public ResultData saveCad(@RequestBody @Validated BaseDataParamVO param) throws Exception{
+//        return sceneEditInfoService.saveCad(param);
+//    }
+//
+//    /**
+//     * <p>
+//     保存户型图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/20
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @GetMapping(value = "/cad/dxf/download")
+//    public ResultData saveCadDxf(@RequestParam String num) throws Exception{
+//        return sceneEditInfoService.downloadDxf(num);
+//    }
+//
+//    /**
+//     * <p>
+//     保存户型图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/1/20
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/cad/dxf/upload")
+//    public ResultData uploadDxf(@RequestParam MultipartFile file, @RequestParam String num) throws Exception{
+//        return sceneEditInfoService.uploadDxf(file, num);
+//    }
+//
+//    /**
+//     * <p>
+//     重置户型图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/16
+//     * @param num
+//     * @return
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/cad/reset")
+//    public ResultData resetCad(@RequestParam(value = "num") String num) throws Exception {
+//        return sceneEditInfoService.resetCad(num);
+//    }
+//
+//    /**
+//     * <p>
+//     楼层户型重命名
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/16
+//     * @return
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/cad/rename")
+//    public ResultData renameCad(@RequestBody @Validated RenameCadParamVO param) throws IOException {
+//        return sceneEditInfoService.renameCad(param);
+//    }
+//
+//    /**
+//     * <p>
+//     获取场景详情
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.scene.vo.SceneInfoVO
+//     **/
+//    @GetMapping(value = "/getInfo")
+//    public SceneInfoVO getInfo(@Validated SceneInfoParamVO param) throws Exception{
+//        param.setReqType(SceneInfoReqType.EDIT.code());
+//        return sceneEditInfoService.getSceneInfo(param);
+//    }
+//
+//    /**
+//     * <p>
+//            上传全景图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/16
+//     * @param num
+//     * @param file
+//     * @return java.util.List<java.lang.String>
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/uploadPanorama")
+//    public ResultData uploadPanorama(@RequestParam(value = "num") String num,
+//        @RequestParam("file") MultipartFile file) throws Exception {
+//        return sceneEditInfoService.uploadPanorama(num, file);
+//    }
+//
+//    /**
+//     * <p>
+//            下载全景图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/16
+//     * @return java.util.List<java.lang.String>
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/downloadPanorama")
+//    public ResultData downloadPanorama(@RequestBody @Validated FileParamVO param) throws Exception {
+//        return sceneEditInfoService.downloadPanorama(param);
+//    }
+//
+//    /**
+//     * <p>
+//            保存视频盒子
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/18
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/video/box/save")
+//    public ResultData saveVideoBox(@RequestBody @Validated FileNameAndDataParamVO param) throws Exception {
+//        return sceneEditInfoService.saveVideoBox(param);
+//    }
+//
+//    /**
+//     * <p>
+//            删除视频盒子
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/18
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/video/box/delete")
+//    public ResultData deleteVideoBox(@RequestBody @Validated DeleteSidParamVO param) throws Exception {
+//        return sceneEditInfoService.deleteVideoBox(param);
+//    }
+//
+//    /**
+//     * <p>
+//     保存空间贴图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/18
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/photo/box/save")
+//    public ResultData savePhotoBox(@RequestBody @Validated BaseDataParamVO param) throws Exception {
+//        return sceneEditInfoService.saveBoxPhoto(param);
+//    }
+//
+//    /**
+//     * <p>
+//     删除空间贴图
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/18
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/photo/box/delete")
+//    public ResultData deletePhotoBox(@RequestBody @Validated DeleteSidParamVO param) throws Exception {
+//        return sceneEditInfoService.deleteBoxPhoto(param);
+//    }
+//
+//
+//    /**
+//     * <p>
+//        下载视频
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/23
+//     * @param param
+//     * @return com.fdkankan.scene.vo.DownloadVO
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/downloadBallScreenVideo")
+//    public DownloadVO downloadBallScreenVideo(@RequestBody @Validated BallScreenVideoParamVO param){
+//        return sceneEditInfoService.downloadBallScreenVideo(param);
+//    }
+//
+//    /**
+//     * <p>
+//            上传视频
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/23
+//     * @param num
+//     * @param fileName
+//     * @param file
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/uploadBallScreenVideo")
+//    public ResultData uploadBallScreenVideo(
+//            @RequestParam("num") String num,
+//            @RequestParam("fileName") String fileName,
+//            @RequestParam("file") MultipartFile file) throws Exception {
+//        return sceneEditInfoService.uploadBallScreenVideo(num, fileName, file);
+//    }
+
+//    @CheckPermit
+    @RequestMapping(value = "/upload/files", method = RequestMethod.POST)
+    public String uploads(@RequestParam(value = "base64",required = false) String base64,
+        @RequestParam(value = "fileName",required = false) String fileName,
+        @RequestParam(value = "bizType",required = false) String bizType,
+        @RequestParam(value = "files",required = false) MultipartFile[] files,
+        @RequestParam(value = "num",required = false) String num,
+        @RequestParam(value = "type",required = false,defaultValue = "1") Integer type,
+        @RequestParam(value = "uploadPath",required = false) String uploadPath) throws Exception {
+        return sceneUploadService.uploads(base64,fileName,bizType,files,num,type,uploadPath);
+    }
+
+//    /**
+//     * <p>
+//     用户自定义上传文本内容上传
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return java.lang.String
+//     **/
+//    @RequestMapping(value = "/upload/content", method = RequestMethod.POST)
+//    public String uploadContent(@RequestBody @Validated UploadContentParamVO param) throws Exception {
+//        return sceneUploadService.uploadContent(param);
+//    }
+//
+//    /**
+//     * <p>
+//            删除文件
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/2/23
+//     * @param paramVO
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping("/delete/file")
+//    public ResultData delete(@RequestBody @Validated DeleteFileParamVO paramVO) throws Exception{
+//        return sceneUploadService.delete(paramVO);
+//    }
+//
+//    /**
+//     * <p>
+//     场景同步
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param num
+//     * @param type
+//     * @param floorPlanJson
+//     * @param ajkJson
+//     * @param cameraJson
+//     * @param files
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/sceneSync")
+//    public ResultData sceneSync(
+//        @RequestParam("num") String num,
+//        @RequestParam(value = "type", defaultValue = "ajk") String type,
+//        @RequestParam("floorPlanJson") String floorPlanJson,
+//        @RequestParam("ajkJson") String ajkJson,
+//        @RequestParam("cameraJson") String cameraJson,
+//        @RequestParam("files") MultipartFile[] files) throws Exception{
+//        return sceneEditInfoService.sceneSync(num, type, floorPlanJson, ajkJson, cameraJson, files);
+//    }
+//
+//    /**
+//     * <p>
+//     获取场景权限
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param num
+//     * @return com.fdkankan.scene.vo.SceneAuthVO
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/getAuth")
+//    public SceneAuthVO getAuth(@RequestParam("num") String num) throws Exception{
+//        return sceneEditService.getAuth(num, this.getSsoUser());
+//    }
+//
+//    /**
+//     * <p>
+//            上传国际化文件
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/4/11
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @PostMapping(value = "/locales")
+//    public ResultData locales(@RequestBody @Validated LocalesParamVO param) throws Exception {
+//        if("pro".equals(env)){
+//            throw new BusinessException(ErrorCode.HAVE_NO_RIGHT);
+//        }
+//        return sceneEditService.locales(param);
+//    }
+//
+//    /**
+//     * <p>
+//     保存导览
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/tour/save")
+//    public ResultData saveTour(@RequestBody @Validated BaseDataParamVO param) throws Exception{
+//        return sceneEditService.saveTour(param);
+//    }
+//
+//    /**
+//     * <p>
+//     删除导览
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/tour/delete")
+//    public ResultData deleteTour(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
+//        return sceneEditService.deleteTour(param);
+//    }
+//
+//    @PostMapping(value = "/tour/video/upload")
+//    public ResultData uploadTourVideo(@RequestParam("num") String num, @RequestParam("file") MultipartFile file) throws Exception {
+//        return downloadTourVideoService.uploadTourVideo(num, file);
+//    }
+//
+//    @PostMapping(value = "/tour/video/download")
+//    public ResultData downloadTourVideo(@RequestParam("num") String num) throws Exception {
+//        return downloadTourVideoService.downloadTourVideo(num);
+//    }
+//
+//    /**
+//     * <p>
+//     添加马赛克
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/mosaics/add")
+//    public ResultData addMosaics(@RequestBody @Validated BaseDataParamVO param) throws Exception{
+//        return sceneEditInfoService.addMosaics(param);
+//    }
+//
+//    /**
+//     * <p>
+//     删除马赛克
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/mosaics/delete")
+//    public ResultData deleteMosaics(@RequestBody @Validated DeleteMosaicParamVO param) throws Exception{
+//        return sceneEditInfoService.deleteMosaics(param);
+//    }
+//
+//    /**
+//     * <p>
+//     马赛克列表
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/mosaics/list")
+//    public ResultData getMosaicList(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
+//        return ResultData.ok(sceneEditInfoService.getMosaicList(param.getNum()));
+//    }
+//
+//    /**
+//     * <p>
+//     添加水印
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/waterMark/add")
+//    public ResultData addWaterMark(@RequestBody @Validated BaseFileParamVO param) throws Exception{
+//        return sceneEditInfoService.addWaterMark(param);
+//    }
+//
+//    /**
+//     * <p>
+//     删除水印
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/8/1
+//     * @param param
+//     * @return com.fdkankan.web.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping(value = "/waterMark/delete")
+//    public ResultData deleteWaterMark(@RequestBody @Validated BaseFileParamVO param) throws Exception{
+//        return sceneEditInfoService.deleteWaterMark(param);
+//    }
+//
+//    /**
+//     * 删除水印
+//     * @param param
+//     * @return
+//     * @throws Exception
+//     */
+//    @CheckPermit
+//    @PostMapping(value = "/filter/save")
+//    public ResultData saveFilter(@RequestBody @Validated SaveFiltersParamVO param) throws Exception{
+//        return sceneEditInfoService.saveFilter(param);
+//    }
+//
+//    /**
+//     * 删除水印
+//     * @param param
+//     * @return
+//     * @throws Exception
+//     */
+//    @CheckPermit
+//    @PostMapping(value = "/filter/list")
+//    public ResultData listFilter(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
+//        return sceneEditInfoService.listFilter(param);
+//    }
+//
+//    /**
+//     * <p>
+//     添加监控
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/9/20
+//     * @param param
+//     * @return com.fdkankan.common.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping("/surveillance/save")
+//    ResultData saveSurveillance(@RequestBody @Validated SurveillanceParamVO param) throws Exception {
+//        return surveillanceService.saveSurveillance(param);
+//    }
+//
+//    @CheckPermit
+//    @PostMapping("/surveillance/delete")
+//    public ResultData deleteSurveillance(@RequestBody @Validated BaseSidParamVO param) throws IOException {
+//        return surveillanceService.deleteSurveillance(param);
+//    }
+//
+//    @CheckPermit
+//    @PostMapping("/surveillance/list")
+//    public ResultData listSurveillance(@RequestBody @Validated BaseSceneParamVO param){
+//        return ResultData.ok(surveillanceService.listSurveillance(param.getNum()));
+//    }
+//
+//    /**
+//     * <p>
+//     上传空间模型
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/10/19
+//     * @param num
+//     * @param sid
+//     * @param file
+//     * @return com.fdkankan.common.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping("/model/box/upload")
+//    public ResultData uploadBoxModel(
+//        @RequestParam(value = "num") String num,
+//        @RequestParam(value = "sid") String sid,
+//        @RequestParam(value = "file") MultipartFile file) throws Exception {
+//        return boxModelService.uploadBoxModel(num, sid, file);
+//    }
+//
+//    /**
+//     * <p>
+//     保存空间模型
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/10/19
+//     * @param param
+//     * @return com.fdkankan.common.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping("/model/box/save")
+//    public ResultData saveBoxModel(@RequestBody @Validated BaseJsonDataParamVO param) throws Exception {
+//        return boxModelService.saveBoxModel(param);
+//    }
+//
+//    /**
+//     * <p>
+//     删除空间模型
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/10/19
+//     * @param param
+//     * @return com.fdkankan.common.response.ResultData
+//     **/
+//    @CheckPermit
+//    @PostMapping("/model/box/delete")
+//    public ResultData delBoxModel(@RequestBody @Validated DeleteSidParamVO param) throws Exception {
+//        return boxModelService.deleteBoxModel(param);
+//    }
+//
+//    /**
+//     * 上传二维码和分享的logo
+//     * @return
+//     */
+//    @PostMapping(value = "/uploadShareLogo")
+//    public ResultData uploadShareLogo(@RequestParam("num") String num, @RequestParam("file") MultipartFile file) throws Exception {
+//        return scenePlusService.uploadShareLogo(num, file);
+//    }
+//
+//    /**
+//     * 获取编辑器版本信息
+//     * @return
+//     */
+//    @GetMapping("/getServiceUpTip")
+//    public ResultData getServiceUpTip(){
+//        return sceneEditService.getServiceUpTip();
+//    }
+//
+//    /**
+//     * 保存或者修改指示牌
+//     * @param param
+//     * @return
+//     * @throws Exception
+//     */
+//    @CheckPermit
+//    @PostMapping("/billboards/save")
+//    public ResultData saveBillboards(@RequestBody @Validated BaseJsonArrayParamVO param) throws Exception {
+//        return sceneEditInfoExtService.saveBillboards(param);
+//    }
+//
+//    /**
+//     * 删除指示牌
+//     * @param param
+//     * @return
+//     * @throws Exception
+//     */
+//    @CheckPermit
+//    @PostMapping("/billboards/delete")
+//    public ResultData deleteBillboards(@RequestBody @Validated DeleteSidListParamVO param) throws Exception {
+//        return sceneEditInfoExtService.deleteBillboards(param);
+//    }
+//
+//    /**
+//     * 获取指示牌列表
+//     * @param param
+//     * @return
+//     * @throws Exception
+//     */
+//    @CheckPermit
+//    @PostMapping("/billboards/list")
+//    public ResultData deleteBillboards(@RequestBody @Validated BaseSceneParamVO param) throws Exception {
+//        return ResultData.ok(sceneEditInfoExtService.listBillboards(param));
+//    }
+//
+//    /**
+//     * 获取指示牌列表
+//     * @param param
+//     * @return
+//     * @throws Exception
+//     */
+//    @CheckPermit
+//    @PostMapping("/billboards/styles/delete")
+//    public ResultData deleteBillboards(@RequestBody @Validated DeleteStylesParamVO param) throws Exception {
+//        return ResultData.ok(sceneEditInfoExtService.deleteBillboardsStyles(param));
+//    }
+//
+//    @CheckPermit
+//    @PostMapping(value = "/cutModel/save")
+//    public ResultData saveCutModel(@RequestBody @Validated BaseJsonArrayParamVO param) throws Exception {
+//        return cutModelService.saveCutModel(param);
+//    }
+//
+//    @CheckPermit
+//    @PostMapping(value = "/cutModel/list")
+//    public ResultData listCutModel(@RequestBody @Validated BaseSceneParamVO param) throws Exception {
+//        return ResultData.ok(cutModelService.listCutModel(param));
+//    }
+//
+//    @CheckPermit
+//    @PostMapping(value = "/cutModel/delete")
+//    public ResultData deleteCutModel(@RequestBody @Validated DeleteSidListParamVO param) throws Exception {
+//        return cutModelService.deleteCutModel(param);
+//    }
+
+
+
+}

+ 21 - 0
src/main/java/com/fdkankan/scene/service/ISceneUploadService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.scene.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author
+ * @since 2022-01-19
+ */
+public interface ISceneUploadService{
+
+    String uploads(String imgData, String fileName,String blzType,MultipartFile[] files,
+        String sceneCode, Integer type, String uploadPath) throws Exception;
+
+//    ResultData delete(DeleteFileParamVO param) throws Exception;
+//
+//    String uploadContent(UploadContentParamVO param) throws Exception;
+}

+ 2 - 0
src/main/java/com/fdkankan/scene/service/SceneService.java

@@ -29,4 +29,6 @@ public interface SceneService extends IService<Scene> {
 
     void outFileByKey2(String key, HttpServletResponse response) throws IOException;
 
+    Scene getByNum(String num);
+
 }

+ 7 - 12
src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java

@@ -2,17 +2,13 @@ package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.chinatower.framework.common_service.response.ProcessResult;
-import com.fdkankan.common.ErrorCode;
-import com.fdkankan.common.ThreeDESUtil;
-import com.fdkankan.feign.TietaFeignClient;
-import com.fdkankan.feign.WS4AServiceClient;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.util.ThreeDESUtil;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisClient;
 import com.fdkankan.scene.bean.ResultData;
@@ -25,10 +21,8 @@ import com.fdkankan.scene.service.SceneService;
 import com.fdkankan.scene.vo.SceneEditControlsVO;
 import com.fdkankan.scene.vo.SceneInfoParamVO;
 import com.fdkankan.scene.vo.SceneInfoVO;
-import io.grpc.netty.shaded.io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.UrlResource;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -37,17 +31,13 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -176,4 +166,9 @@ public class SceneServiceImpl extends ServiceImpl<SceneMapper, Scene> implements
         System.out.println(encode);
 
     }
+
+    @Override
+    public Scene getByNum(String num) {
+        return this.getOne(new LambdaQueryWrapper<Scene>().eq(Scene::getNum, num));
+    }
 }

+ 198 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneUploadServiceImpl.java

@@ -0,0 +1,198 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fdkankan.common.constant.ConstantFilePath;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.UploadFilePath;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.BASE64DecodedMultipartFile;
+import com.fdkankan.common.util.FdfsUtil;
+import com.fdkankan.scene.entity.Scene;
+import com.fdkankan.scene.entity.SceneFileMapping;
+import com.fdkankan.scene.service.ISceneUploadService;
+import com.fdkankan.scene.service.SceneFileMappingService;
+import com.fdkankan.scene.service.SceneService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.*;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2022-01-19
+ */
+@Slf4j
+@Service
+public class SceneUploadServiceImpl implements ISceneUploadService {
+
+    @Autowired
+    private SceneService sceneService;
+    @Autowired
+    private SceneFileMappingService sceneFileMappingService;
+    @Resource
+    private FdfsUtil fdfsUtil;
+
+    @Override
+    public String uploads(String imgData,String fileName,String blzType,MultipartFile[] files,
+        String sceneCode,Integer type, String uploadPath) throws Exception{
+
+        List<MultipartFile> multipartFiles = new ArrayList<>();
+        if(StringUtils.isNotBlank(imgData)){
+            MultipartFile file = BASE64DecodedMultipartFile.base64ToMultipart(imgData);
+            multipartFiles.add(file);
+        }
+        if(files !=null && files.length >0){
+            multipartFiles.addAll(Arrays.asList(files));
+        }
+        return this.uploadFiles(fileName,blzType,multipartFiles,sceneCode,type,uploadPath);
+    }
+
+//    @Override
+//    public ResultData delete(DeleteFileParamVO param) throws Exception {
+//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
+//        if(Objects.isNull(scenePlus)){
+//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+//        }
+//        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+//
+//        String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
+//        List<String> filePaths = new ArrayList<>();
+//        Set<String> hasDelete = new HashSet<>();
+//        for (String fileName : param.getFileNames()) {
+//            if(hasDelete.contains(fileName)){
+//                continue;
+//            }
+//            hasDelete.add(fileName);
+//            String key = userEditPath + fileName;
+//            filePaths.add(key);
+//            fYunFileService.deleteFile(scenePlusExt.getYunFileBucket(), key);
+//        }
+//
+//        this.update(new LambdaUpdateWrapper<SceneUpload>()
+//            .set(SceneUpload::getRecStatus, RecStatus.DISABLE.code())
+//            .eq(SceneUpload::getNum, param.getNum())
+//            .eq(SceneUpload::getBizType, param.getBizType())
+//            .in(SceneUpload::getFilePath, filePaths));
+//
+//        return ResultData.ok();
+//    }
+
+    public String uploadFiles(String sendFileName,String bizType,List<MultipartFile> files,
+        String num, Integer type, String uploadPath) throws Exception{
+        if (StrUtil.isEmpty(num))
+            throw new BusinessException(ErrorCode.PARAM_REQUIRED, "num");
+        if(CollUtil.isEmpty(files))
+            throw new BusinessException(ErrorCode.PARAM_REQUIRED, "files");
+        if(StrUtil.isEmpty(bizType))
+            throw new BusinessException(ErrorCode.PARAM_REQUIRED, "bizType");
+        Scene scene = sceneService.getByNum(num);
+        if(Objects.isNull(scene))
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+
+        List<String> urlList = new ArrayList<>();
+        for (MultipartFile file : files) {
+            String fileName = file.getOriginalFilename();
+            // 获取文件后缀
+            String prefix = fileName.substring(fileName.lastIndexOf("."));
+            String path = String.format(ConstantFilePath.SCENE_TMP_PATH_V4, num).concat(UUID.randomUUID().toString()).concat(prefix);
+//            File newFile = File.createTempFile(UUID.randomUUID().toString() ,prefix);
+            FileUtil.mkParentDirs(path);
+            file.transferTo(new File(path));
+            String realFileName = fileName;
+            if(files.size() ==1 && StringUtils.isNotBlank(sendFileName)){
+                realFileName = sendFileName ;
+            }
+
+            String oldExtName = cn.hutool.core.io.FileUtil.extName(realFileName);
+            String newExtName = oldExtName.toLowerCase();
+            realFileName = realFileName.substring(0, realFileName.lastIndexOf(oldExtName)) + newExtName;
+
+            String key = StrUtil.isNotBlank(uploadPath) ? uploadPath : (String.format(UploadFilePath.USER_VIEW_PATH ,num) + realFileName);
+            Map<String, String> mapping = fdfsUtil.uploadFile(path);
+
+            urlList.add(realFileName);
+
+            FileUtil.del(path);
+
+            //添加记录
+            SceneFileMapping sceneFileMapping = new SceneFileMapping();
+            sceneFileMapping.setNum(num);
+            sceneFileMapping.setFileid(mapping.get("file_id"));
+            sceneFileMapping.setUrl(mapping.get("http_url"));
+            sceneFileMapping.setKey(key);
+            sceneFileMappingService.save(sceneFileMapping);
+        }
+        StringBuilder returnString = new StringBuilder();
+        for (String res : urlList) {
+            if(StringUtils.isNotBlank(returnString)){
+                returnString.append(",");
+            }
+            returnString.append(res);
+        }
+        return returnString.toString();
+    }
+
+//    private void updateFileByPreFix(String sceneCode, String blzType, String bucket) {
+//        LambdaQueryWrapper<SceneUpload> queryWrapper = new LambdaQueryWrapper<>();
+//        queryWrapper.eq(SceneUpload::getNum,sceneCode)
+//                .eq(SceneUpload::getBizType,blzType);
+//        List<SceneUpload> list = this.list(queryWrapper);
+//
+//        if(list != null && list.size() >0){
+//            for (SceneUpload sceneUpload : list) {
+//                try {
+//                    fYunFileService.deleteFile(bucket, sceneUpload.getFilePath());
+//                    this.removeEntity(sceneUpload);
+//                }catch (Exception e){
+//                    log.error(sceneUpload.getFilePath()+"删除oss文件失败",e);
+//                }
+//            }
+//        }
+//    }
+//
+//    private void removeEntity(SceneUpload sceneUpload) {
+//        sceneUpload.setRecStatus(RecStatus.VALID.code());
+//        this.updateById(sceneUpload);
+//    }
+//
+//    private void saveData(String sceneCode, String ossPath, String bizType,Long userId) {
+//        SceneUpload sceneUpload = new SceneUpload();
+//        sceneUpload.setNum(sceneCode);
+//        sceneUpload.setFilePath(ossPath);
+//        sceneUpload.setBizType(bizType);
+//        sceneUpload.setUploadUser(userId);
+//        this.save(sceneUpload);
+//    }
+//
+//    @Override
+//    public String uploadContent(UploadContentParamVO param) throws Exception {
+//
+//        String ossPath = param.getOssPath();
+//        String fileName = ossPath.substring(ossPath.lastIndexOf("/") + 1);
+//        if(StrUtil.isEmpty(fileName)){
+//            throw new BusinessException(ErrorCode.FAILURE_CODE_7012);
+//        }
+//        String suffix = fileName.substring(fileName.lastIndexOf("."));
+//        if(StrUtil.isEmpty(suffix)){
+//            throw new BusinessException(ErrorCode.FAILURE_CODE_7012);
+//        }
+//
+//        File tempFile = File.createTempFile(UUID.randomUUID().toString(), suffix);
+//        cn.hutool.core.io.FileUtil.writeString(param.getContent(), tempFile, StandardCharsets.UTF_8);
+//        fYunFileService.uploadFile(param.getBucket(), tempFile.getPath(), param.getOssPath());
+//        tempFile.deleteOnExit();
+//
+//        return this.ossUrlPrefix + param.getOssPath();
+//    }
+}

+ 7 - 0
src/main/resources/application-dev.yml

@@ -42,6 +42,13 @@ tlog:
 gateway:
   url: http://10.180.22.22:8097
 
+fdfs:
+  sysCode: CT00017
+  address: http://10.180.22.41:8761
+  api:
+    getSignature: /ChinatowerFileService/getSignature
+    uploadFile: /ChinatowerFileService/uploadFile/
+
 
 
 

+ 7 - 0
src/main/resources/application-preprod.yml

@@ -42,6 +42,13 @@ tlog:
 gateway:
   url: http://10.34.6.52:5525
 
+fdfs:
+  sysCode: CT00017
+  address: http://10.34.53.27:8761
+  api:
+    getSignature: /ChinatowerFileService/getSignature
+    uploadFile: /ChinatowerFileService/uploadFile/
+
 
 
 

+ 7 - 0
src/main/resources/application-prod.yml

@@ -42,6 +42,13 @@ tlog:
 gateway:
   url: http://192.168.53.243:9981
 
+fdfs:
+  sysCode: CT00017
+  address: http://192.168.53.243:7356
+  api:
+    getSignature: /ChinatowerFileService/getSignature
+    uploadFile: /ChinatowerFileService/uploadFile/
+
 
 
 

+ 6 - 0
src/main/resources/application-test.yml

@@ -42,6 +42,12 @@ tlog:
 gateway:
   url: http://10.190.26.191:8097
 
+fdfs:
+  sysCode: CT00017
+  address: http://10.190.22.106:8765
+  api:
+    getSignature: /ChinatowerFileService/getSignature
+    uploadFile: /ChinatowerFileService/uploadFile/