dengsixing 2 лет назад
Родитель
Сommit
400761f96b

+ 21 - 0
src/main/java/com/fdkankan/scene/controller/Scene3dNumMatterProController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.scene.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * matter_pro场景码 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-24
+ */
+@RestController
+@RequestMapping("/scene/scene3dNumMatterPro")
+public class Scene3dNumMatterProController {
+
+}
+

+ 41 - 0
src/main/java/com/fdkankan/scene/controller/inner/InnerController.java

@@ -0,0 +1,41 @@
+package com.fdkankan.scene.controller.inner;
+
+import com.fdkankan.scene.service.IInnerApiService;
+import com.fdkankan.web.annotation.CheckInnerApiPermit;
+import com.fdkankan.web.controller.BaseController;
+import com.fdkankan.web.response.ResultData;
+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;
+
+/**
+ * <p>
+ * 内部接口控制器
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/8/19
+ **/
+@RestController
+@RequestMapping("/service/scenev3/_inner")
+public class InnerController extends BaseController {
+
+    @Autowired
+    private IInnerApiService innerApiService;
+
+    /**
+     * 上传matterpro数据
+     */
+    @CheckInnerApiPermit
+    @RequestMapping(value = {"/uploadMatterproData"}, method = RequestMethod.POST)
+    public ResultData uploadMatterproData(@RequestParam(value = "sceneName",required = false) String sceneName,
+        @RequestParam(value = "userName",required = false) String userName,
+        @RequestParam(value = "floor",required = false) String floor,
+        @RequestParam(value = "file",required = false) MultipartFile file) throws Exception {
+        return innerApiService.uploadMatterproData(sceneName,userName,floor,file);
+    }
+
+}

+ 60 - 0
src/main/java/com/fdkankan/scene/entity/Scene3dNumMatterPro.java

@@ -0,0 +1,60 @@
+package com.fdkankan.scene.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * matter_pro场景码
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-24
+ */
+@Getter
+@Setter
+@TableName("t_scene_3d_num_matter_pro")
+public class Scene3dNumMatterPro implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("used")
+    private Integer used;
+
+    @TableField("folder_name")
+    private String folderName;
+
+    @TableField("code")
+    private String code;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/scene/generate/AutoGenerate.java

@@ -20,7 +20,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"scene", getTables(new String[]{
-                "t_scene_data_download"
+                "t_scene_3d_num_matter_pro"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 18 - 0
src/main/java/com/fdkankan/scene/mapper/IScene3dNumMatterProMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.scene.mapper;
+
+import com.fdkankan.scene.entity.Scene3dNumMatterPro;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * matter_pro场景码 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-24
+ */
+@Mapper
+public interface IScene3dNumMatterProMapper extends BaseMapper<Scene3dNumMatterPro> {
+
+}

+ 19 - 0
src/main/java/com/fdkankan/scene/service/IInnerApiService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.scene.service;
+
+import com.fdkankan.web.response.ResultData;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/11/24
+ **/
+public interface IInnerApiService {
+
+    ResultData uploadMatterproData(String sceneName,String userName,String floor,MultipartFile file) throws Exception;
+
+}

+ 18 - 0
src/main/java/com/fdkankan/scene/service/IScene3dNumMatterProService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.scene.service;
+
+import com.fdkankan.scene.entity.Scene3dNumMatterPro;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * matter_pro场景码 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-24
+ */
+public interface IScene3dNumMatterProService extends IService<Scene3dNumMatterPro> {
+
+    Scene3dNumMatterPro findSceneNum();
+
+}

+ 186 - 0
src/main/java/com/fdkankan/scene/service/impl/InnerApiServiceImpl.java

@@ -0,0 +1,186 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.utils.CreateObjUtil;
+import com.fdkankan.scene.entity.Scene3dNumMatterPro;
+import com.fdkankan.scene.entity.ScenePro;
+import com.fdkankan.scene.entity.SceneProEdit;
+import com.fdkankan.scene.entity.User;
+import com.fdkankan.scene.service.IInnerApiService;
+import com.fdkankan.scene.service.IScene3dNumMatterProService;
+import com.fdkankan.scene.service.ISceneProEditService;
+import com.fdkankan.scene.service.ISceneProService;
+import com.fdkankan.scene.service.IUserService;
+import com.fdkankan.web.response.ResultData;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/11/24
+ **/
+@Service
+public class InnerApiServiceImpl implements IInnerApiService {
+
+    @Value("${main.url}")
+    private String mainUrl;
+    @Value("${scene.pro.v3.url}")
+    private String sceneProV3Url;
+    @Autowired
+    private IScene3dNumMatterProService scene3dNumMatterProService;
+    @Autowired
+    private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private IUserService userService;
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private ISceneProEditService sceneProEditService;
+
+    @Override
+    public ResultData uploadMatterproData(String sceneName, String userName, String floor, MultipartFile file) throws Exception {
+        if(file == null || file.getSize() <=0){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
+        }
+
+        if(!file.getOriginalFilename().toLowerCase().endsWith(".zip") && !file.getOriginalFilename().toLowerCase().endsWith(".rar")){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5026);
+        }
+
+        String sceneNum = "";
+        synchronized(this){
+            Scene3dNumMatterPro numEntity = scene3dNumMatterProService.findSceneNum();
+            sceneNum = numEntity.getCode();
+            numEntity.setUsed(1);
+            scene3dNumMatterProService.updateById(numEntity);
+        }
+
+        String dataSource = ConstantFilePath.BUILD_MODEL_PATH + UUID.randomUUID() + File.separator ;
+
+        File data = new File(dataSource + file.getOriginalFilename());
+        if(!data.getParentFile().exists()){
+            data.getParentFile().mkdirs();
+        }
+        file.transferTo(data);
+
+        if(file.getOriginalFilename().toLowerCase().endsWith(".zip")){
+            CreateObjUtil.unZip(dataSource + file.getOriginalFilename(), dataSource);
+        }
+        if(file.getOriginalFilename().toLowerCase().endsWith(".rar")){
+            CreateObjUtil.unRar(dataSource + file.getOriginalFilename(), dataSource);
+        }
+
+        //删除压缩包
+        new File(dataSource + file.getOriginalFilename()).delete();
+
+        List<String> fileList = new ArrayList<>();
+        FileUtils.readfilePath(dataSource, fileList);
+        String ossPath = "";
+        for (String filePath : fileList) {
+            ossPath = filePath.replace(dataSource, "images/images" + sceneNum + "/");
+            if(ossPath.endsWith("/")){
+                ossPath = ossPath.substring(0, ossPath.lastIndexOf("/"));
+            }
+            fYunFileService.uploadFile(filePath, ossPath);
+        }
+
+        ScenePro sceneProEntity = new ScenePro();
+        sceneProEntity.setDataSource(dataSource);
+        sceneProEntity.setNum(sceneNum);
+        sceneProEntity.setSceneDec("<p>四维看看 让空间讲故事</p>");
+        //默认场景名称,若有传场景名称,则以传的为准
+        sceneProEntity.setSceneName("手动上传场景");
+        if(StrUtil.isNotEmpty(sceneName)){
+            sceneProEntity.setSceneName(sceneName);
+        }
+        sceneProEntity.setWebSite(mainUrl + "/" + sceneProV3Url + sceneNum);
+        sceneProEntity.setStatus(-2);
+        sceneProEntity.setPayStatus(1);
+        //默认用户id,若有传用户信息,则以传的为准
+        sceneProEntity.setUserId(2285L);
+        if(StrUtil.isNotEmpty(userName)){
+            User userEntity = userService.findByUserName(userName);
+            if(userEntity != null){
+                sceneProEntity.setUserId(userEntity.getId());
+            }
+        }
+        sceneProEntity.setSceneScheme(10);
+        sceneProEntity.setSceneSource(14);
+        sceneProEntity.setBuildType("V3");
+        sceneProService.save(sceneProEntity);
+
+        SceneProEdit sceneProEditEntity = new SceneProEdit();
+        sceneProEditEntity.setProId(sceneProEntity.getId());
+        sceneProEditEntity.setMapVisi(0);
+        sceneProEditEntity.setM2dVisi(1);
+        sceneProEditEntity.setM3dVisi(1);
+        sceneProEditEntity.setPanoVisi(1);
+        sceneProEditEntity.setCadImgVisi(0);
+        sceneProEditService.save(sceneProEditEntity);
+
+        JSONObject scenejson = JSONObject.parseObject(JSONObject.toJSONString(sceneProEntity));
+        scenejson.put("thumbImg", 0);
+        scenejson.put("version", 0);
+        scenejson.put("floorLogo", 0);
+        scenejson.put("sceneKey", "");
+        scenejson.put("public", 0);
+        scenejson.put("visions", 1);
+        scenejson.put("createTime", new DateTime(new Date()).toString("yyyy-MM-dd HH:mm"));
+
+        scenejson.put("floorPublishVer", sceneProEditEntity.getFloorPublishVer());
+        scenejson.put("floorEditVer", sceneProEditEntity.getFloorEditVer());
+        scenejson.put("entry", null);
+
+        scenejson.put("hots", 0);
+
+        FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+sceneNum+File.separator+"scene.json", scenejson.toString());
+
+        JSONObject floors = new JSONObject();
+        JSONArray floorArr = new JSONArray();
+        JSONObject floorObject = new JSONObject();
+        if(StrUtil.isEmpty(floor)){
+            floorObject = new JSONObject();
+            floorObject.put("id", 0);
+            floorObject.put("subgroup", 0);
+            floorObject.put("name", "1楼");
+            floorObject.put("segment", new JSONArray());
+            floorObject.put("vertex", new JSONArray());
+
+            floorArr.add(floorObject);
+        }else {
+            for(int i = 0; i < Integer.parseInt(floor); i ++){
+                floorObject = new JSONObject();
+                floorObject.put("id", i);
+                floorObject.put("subgroup", i);
+                floorObject.put("name", i+ 1 + "楼");
+                floorObject.put("segment", new JSONArray());
+                floorObject.put("vertex", new JSONArray());
+
+                floorArr.add(floorObject);
+            }
+        }
+        floors.put("floors", floorArr);
+        FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+sceneNum+File.separator+"floor.json",floors.toJSONString());
+        fYunFileService.uploadFile(ConstantFilePath.SCENE_PATH+"data/data"+sceneNum+File.separator+"floor.json", "data/data"+sceneNum+File.separator+"floor.json");
+        return ResultData.ok(sceneProEntity);
+    }
+}

+ 27 - 0
src/main/java/com/fdkankan/scene/service/impl/Scene3dNumMatterProServiceImpl.java

@@ -0,0 +1,27 @@
+package com.fdkankan.scene.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.scene.entity.Scene3dNumMatterPro;
+import com.fdkankan.scene.mapper.IScene3dNumMatterProMapper;
+import com.fdkankan.scene.service.IScene3dNumMatterProService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * matter_pro场景码 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-24
+ */
+@Service
+public class Scene3dNumMatterProServiceImpl extends ServiceImpl<IScene3dNumMatterProMapper, Scene3dNumMatterPro> implements IScene3dNumMatterProService {
+
+    @Override
+    public Scene3dNumMatterPro findSceneNum() {
+        return this.getOne(new LambdaQueryWrapper<Scene3dNumMatterPro>()
+            .eq(Scene3dNumMatterPro::getUsed, CommonStatus.NO.code()).last(" limit 1"));
+    }
+}

+ 5 - 0
src/main/resources/mapper/scene/Scene3dNumMatterProMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.scene.mapper.IScene3dNumMatterProMapper">
+
+</mapper>