Przeglądaj źródła

生成虚拟场景

dsx 2 lat temu
rodzic
commit
8ff6b9335d
19 zmienionych plików z 320 dodań i 31 usunięć
  1. 0 21
      src/main/java/com/fdkankan/openApi/controller/www/ScenePlusController.java
  2. 36 0
      src/main/java/com/fdkankan/openApi/controller/www/VirtualSceneController.java
  3. 1 1
      src/main/java/com/fdkankan/openApi/entity/www/SceneEditControls.java
  4. 1 1
      src/main/java/com/fdkankan/openApi/entity/www/SceneEditInfo.java
  5. 1 1
      src/main/java/com/fdkankan/openApi/entity/www/SceneEditInfoExt.java
  6. 1 1
      src/main/java/com/fdkankan/openApi/entity/www/ScenePlus.java
  7. 1 1
      src/main/java/com/fdkankan/openApi/entity/www/ScenePlusExt.java
  8. 2 0
      src/main/java/com/fdkankan/openApi/service/www/ISceneEditControlsService.java
  9. 2 0
      src/main/java/com/fdkankan/openApi/service/www/ISceneEditInfoExtService.java
  10. 2 0
      src/main/java/com/fdkankan/openApi/service/www/ISceneEditInfoService.java
  11. 2 0
      src/main/java/com/fdkankan/openApi/service/www/IScenePlusExtService.java
  12. 7 1
      src/main/java/com/fdkankan/openApi/service/www/IScenePlusService.java
  13. 5 0
      src/main/java/com/fdkankan/openApi/service/www/impl/SceneEditControlsServiceImpl.java
  14. 5 0
      src/main/java/com/fdkankan/openApi/service/www/impl/SceneEditInfoExtServiceImpl.java
  15. 5 0
      src/main/java/com/fdkankan/openApi/service/www/impl/SceneEditInfoServiceImpl.java
  16. 8 2
      src/main/java/com/fdkankan/openApi/service/www/impl/ScenePlusExtServiceImpl.java
  17. 209 2
      src/main/java/com/fdkankan/openApi/service/www/impl/ScenePlusServiceImpl.java
  18. 0 0
      src/main/java/com/fdkankan/openApi/vo/text.txt
  19. 32 0
      src/main/java/com/fdkankan/openApi/vo/www/CreateFicTitiousSceneParamVO.java

+ 0 - 21
src/main/java/com/fdkankan/openApi/controller/www/ScenePlusController.java

@@ -1,21 +0,0 @@
-package com.fdkankan.openApi.controller.www;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 场景主表 前端控制器
- * </p>
- *
- * @author 
- * @since 2023-02-15
- */
-@RestController
-@RequestMapping("/openApi/scenePlus")
-public class ScenePlusController {
-
-}
-

+ 36 - 0
src/main/java/com/fdkankan/openApi/controller/www/VirtualSceneController.java

@@ -0,0 +1,36 @@
+package com.fdkankan.openApi.controller.www;
+
+
+import com.fdkankan.openApi.service.www.IScenePlusService;
+import com.fdkankan.openApi.vo.www.CreateFicTitiousSceneParamVO;
+import com.fdkankan.web.response.ResultData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 场景主表 前端控制器
+ *
+ * @author 
+ * @since 2023-02-15
+ */
+@RestController
+@RequestMapping("/scene")
+public class VirtualSceneController {
+
+    @Autowired
+    private IScenePlusService scenePlusService;
+
+    @PostMapping("/createVirtualScene")
+    public ResultData createVirtualScene(@RequestBody @Validated CreateFicTitiousSceneParamVO param) throws Exception {
+        return scenePlusService.createVirtualScene(param);
+    }
+
+
+}
+

+ 1 - 1
src/main/java/com/fdkankan/openApi/entity/www/SceneEditControls.java

@@ -107,7 +107,7 @@ public class SceneEditControls implements Serializable {
      * A-有效,I-无效
      */
     @TableField("rec_status")
-    @TableLogic
+    @TableLogic(value = "A", delval = "I")
     private String recStatus;
 
 

+ 1 - 1
src/main/java/com/fdkankan/openApi/entity/www/SceneEditInfo.java

@@ -197,7 +197,7 @@ public class SceneEditInfo implements Serializable {
      * A-有效,I-无效
      */
     @TableField("rec_status")
-    @TableLogic
+    @TableLogic(value = "A", delval = "I")
     private String recStatus;
 
 

+ 1 - 1
src/main/java/com/fdkankan/openApi/entity/www/SceneEditInfoExt.java

@@ -125,7 +125,7 @@ public class SceneEditInfoExt implements Serializable {
      * A-有效,I-无效
      */
     @TableField("rec_status")
-    @TableLogic
+    @TableLogic(value = "A", delval = "I")
     private String recStatus;
 
 

+ 1 - 1
src/main/java/com/fdkankan/openApi/entity/www/ScenePlus.java

@@ -116,7 +116,7 @@ public class ScenePlus implements Serializable {
      * A-有效,I-无效
      */
     @TableField("rec_status")
-    @TableLogic
+    @TableLogic(value = "A", delval = "I")
     private String recStatus;
 
 

+ 1 - 1
src/main/java/com/fdkankan/openApi/entity/www/ScenePlusExt.java

@@ -170,7 +170,7 @@ public class ScenePlusExt implements Serializable {
      * A-有效,I-无效
      */
     @TableField("rec_status")
-    @TableLogic
+    @TableLogic(value = "A", delval = "I")
     private String recStatus;
 
     @TableField("is_obj")

+ 2 - 0
src/main/java/com/fdkankan/openApi/service/www/ISceneEditControlsService.java

@@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ISceneEditControlsService extends IService<SceneEditControls> {
 
+    SceneEditControls getByEditInfoId(long editInfoId);
+
 }

+ 2 - 0
src/main/java/com/fdkankan/openApi/service/www/ISceneEditInfoExtService.java

@@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ISceneEditInfoExtService extends IService<SceneEditInfoExt> {
 
+    SceneEditInfoExt getByEditInfoId(long editInfoId);
+
 }

+ 2 - 0
src/main/java/com/fdkankan/openApi/service/www/ISceneEditInfoService.java

@@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
+    SceneEditInfo getByScenePlusId(long scenePlusId);
+
 }

+ 2 - 0
src/main/java/com/fdkankan/openApi/service/www/IScenePlusExtService.java

@@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IScenePlusExtService extends IService<ScenePlusExt> {
 
+    ScenePlusExt getByPlusId(long plusId);
+
 }

+ 7 - 1
src/main/java/com/fdkankan/openApi/service/www/IScenePlusService.java

@@ -1,7 +1,9 @@
 package com.fdkankan.openApi.service.www;
 
-import com.fdkankan.openApi.entity.www.ScenePlus;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.openApi.entity.www.ScenePlus;
+import com.fdkankan.openApi.vo.www.CreateFicTitiousSceneParamVO;
+import com.fdkankan.web.response.ResultData;
 
 /**
  * <p>
@@ -13,4 +15,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IScenePlusService extends IService<ScenePlus> {
 
+    ScenePlus getByNum(String num);
+
+    ResultData createVirtualScene(CreateFicTitiousSceneParamVO param) throws Exception;
+
 }

+ 5 - 0
src/main/java/com/fdkankan/openApi/service/www/impl/SceneEditControlsServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.openApi.service.www.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.openApi.entity.www.SceneEditControls;
 import com.fdkankan.openApi.mapper.www.ISceneEditControlsMapper;
 import com.fdkankan.openApi.service.www.ISceneEditControlsService;
@@ -17,4 +18,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class SceneEditControlsServiceImpl extends ServiceImpl<ISceneEditControlsMapper, SceneEditControls> implements ISceneEditControlsService {
 
+    @Override
+    public SceneEditControls getByEditInfoId(long editInfoId) {
+        return this.getOne(new LambdaQueryWrapper<SceneEditControls>().eq(SceneEditControls::getEditInfoId, editInfoId));
+    }
 }

+ 5 - 0
src/main/java/com/fdkankan/openApi/service/www/impl/SceneEditInfoExtServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.openApi.service.www.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.openApi.entity.www.SceneEditInfoExt;
 import com.fdkankan.openApi.mapper.www.ISceneEditInfoExtMapper;
 import com.fdkankan.openApi.service.www.ISceneEditInfoExtService;
@@ -17,4 +18,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMapper, SceneEditInfoExt> implements ISceneEditInfoExtService {
 
+    @Override
+    public SceneEditInfoExt getByEditInfoId(long editInfoId) {
+        return this.getOne(new LambdaQueryWrapper<SceneEditInfoExt>().eq(SceneEditInfoExt::getEditInfoId, editInfoId));
+    }
 }

+ 5 - 0
src/main/java/com/fdkankan/openApi/service/www/impl/SceneEditInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.openApi.service.www.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.openApi.entity.www.SceneEditInfo;
 import com.fdkankan.openApi.mapper.www.ISceneEditInfoMapper;
 import com.fdkankan.openApi.service.www.ISceneEditInfoService;
@@ -17,4 +18,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper, SceneEditInfo> implements ISceneEditInfoService {
 
+    @Override
+    public SceneEditInfo getByScenePlusId(long scenePlusId) {
+        return this.getOne(new LambdaQueryWrapper<SceneEditInfo>().eq(SceneEditInfo::getScenePlusId, scenePlusId));
+    }
 }

+ 8 - 2
src/main/java/com/fdkankan/openApi/service/www/impl/ScenePlusExtServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.openApi.service.www.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.openApi.entity.www.ScenePlusExt;
 import com.fdkankan.openApi.mapper.www.IScenePlusExtMapper;
 import com.fdkankan.openApi.service.www.IScenePlusExtService;
@@ -8,13 +9,18 @@ import org.springframework.stereotype.Service;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-02-15
  */
 @Service
 public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
 
+
+    @Override
+    public ScenePlusExt getByPlusId(long plusId) {
+        return this.getOne(new LambdaQueryWrapper<ScenePlusExt>().eq(ScenePlusExt::getPlusId, plusId));
+    }
 }

+ 209 - 2
src/main/java/com/fdkankan/openApi/service/www/impl/ScenePlusServiceImpl.java

@@ -1,11 +1,33 @@
 package com.fdkankan.openApi.service.www.impl;
 
-import com.fdkankan.openApi.entity.www.ScenePlus;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.*;
+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.constants.UploadFilePath;
+import com.fdkankan.model.utils.ComputerUtil;
+import com.fdkankan.model.utils.CreateObjUtil;
+import com.fdkankan.openApi.entity.www.*;
 import com.fdkankan.openApi.mapper.www.IScenePlusMapper;
-import com.fdkankan.openApi.service.www.IScenePlusService;
+import com.fdkankan.openApi.service.www.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.openApi.vo.www.CreateFicTitiousSceneParamVO;
+import com.fdkankan.web.response.ResultData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
 /**
  * <p>
  * 场景主表 服务实现类
@@ -17,4 +39,189 @@ import org.springframework.stereotype.Service;
 @Service
 public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
 
+    @Value("${main.url}")
+    private String mainUrl;
+    @Value("${scene.pro.new.url}")
+    private String sceneUrl;
+
+    @Autowired
+    private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private ISceneEditInfoExtService sceneEditInfoExtService;
+    @Autowired
+    private ISceneEditControlsService sceneEditControlsService;
+
+    @Override
+    public ScenePlus getByNum(String num) {
+        return this.getOne(new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, num));
+    }
+
+    @Override
+    public ResultData createVirtualScene(CreateFicTitiousSceneParamVO param) throws Exception {
+
+        this.buildScene4CreateVirtualScene(param);
+
+        String website = this.updateScene4CreateVirtualScene(param);
+
+        return ResultData.ok(website);
+    }
+
+    private void buildScene4CreateVirtualScene(CreateFicTitiousSceneParamVO param) throws Exception {
+
+        String num = param.getNum();
+        String objName = param.getObjName();
+        String mtlName = param.getMtlName();
+
+        String localImagePath = String.format(ConstantFilePath.SCENE_IMAGES_PATH_V4, num);
+        String ossImagePath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
+
+        String ossObjPath = ossImagePath + objName;
+        if(!fYunFileService.fileExist(ossObjPath)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_4001, objName);
+        }
+
+        String ossMtlPath = ossImagePath + mtlName;
+        if(!fYunFileService.fileExist(ossMtlPath)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_4001, mtlName);
+        }
+
+        String ossTexturePath = ossImagePath + "dacf7dfa24ae47fab8fcebfe4dc41ab9_50k_texture_jpg_high1/";
+//        if(CollUtil.isEmpty(fYunFileService.listRemoteFiles(ossTexturePath))){
+//            throw new BusinessException(ErrorCode.FAILURE_CODE_4001, "贴图");
+//        }
+
+        String ossVisionTxtPath = ossImagePath + "vision.txt";
+        if(!fYunFileService.fileExist(ossVisionTxtPath)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_4001, "vision.txt");
+        }
+
+        FileUtil.del(localImagePath + "/result/");
+        FileUtil.del(localImagePath + "extras/");
+        fYunFileService.downloadFile(ossObjPath, localImagePath + "extras/" + "mesh.obj");
+        fYunFileService.downloadFile(ossMtlPath, localImagePath + "extras/" + mtlName);
+        fYunFileService.downloadFileByCommand(localImagePath + "extras/", ossTexturePath);
+        fYunFileService.downloadFile(ossVisionTxtPath, localImagePath + "vision.txt");
+
+        //创建data.json
+        JSONObject dataJson = new JSONObject();
+        dataJson.put("obj2txt", true);
+        dataJson.put("split_type", "SPLIT_V6");
+        dataJson.put("data_describe", "double spherical");
+        dataJson.put("skybox_type", "SKYBOX_V5");
+        FileUtil.writeUtf8String(dataJson.toJSONString(), localImagePath + "data.json");
+
+        //调用objToTxt算法
+        CreateObjUtil.build3dModel(localImagePath, "");
+        Thread.sleep(2000);
+
+        String uploadJsonPath = localImagePath + "results/upload.json";
+        boolean exist = ComputerUtil.checkComputeCompleted(uploadJsonPath, 3, 3000);
+        if(!exist){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5042);
+        }
+        String uploadData = FileUtils.readFile(uploadJsonPath);
+        JSONObject uploadJson = null;
+        JSONArray array = null;
+        if(uploadData!=null) {
+            uploadJson = JSONObject.parseObject(uploadData);
+            array = uploadJson.getJSONArray("upload");
+        }
+        if(array == null){
+            log.error("upload.json数据出错");
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
+        }
+
+        Map<String,String> map = new HashMap<String,String>();
+        JSONObject fileJson = null;
+        String fileName = "";
+        for(int i = 0, len = array.size(); i < len; i++) {
+            fileJson = array.getJSONObject(i);
+            fileName = fileJson.getString("file");
+            String filePath = localImagePath + "results/" + fileName;
+            //文件不存在抛出异常
+            if(!FileUtil.exist(filePath)){
+                throw new BusinessException(ErrorCode.FAILURE_CODE_4002, filePath);
+            }
+
+            //tex文件夹
+            if (fileJson.getIntValue("clazz") == 15) {
+                map.put(filePath, ossImagePath + "dacf7dfa24ae47fab8fcebfe4dc41ab9_50k_texture_jpg_high1/" + fileName.replace("tex/", ""));
+                continue;
+            }
+        }
+
+        CreateObjUtil.convertTxtToDam(localImagePath + "results/" + "modeldata.txt", localImagePath + "results/" + "dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam");
+//        CreateObjUtil.convertDamToLzma(imagesBuffer.toString() + File.separator + "results" +File.separator+ "dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam");
+//        CreateObjUtil.convertTxtToDam(imagesBuffer.toString() + File.separator + "results" +File.separator+"modeldata.txt", imagesBuffer.toString() + File.separator + "results" + File.separator+ "dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam");
+//        map.put(imagesBuffer.toString() + File.separator + "results" +File.separator+"dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam.lzma", "images/images"+param.getNum()+"/"+"dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam.lzma");
+        map.put(localImagePath + "results/" + "dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam", ossImagePath + "dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam");
+
+        FileUtils.deleteFile(localImagePath + "vision.modeldata");
+        CreateObjUtil.convertTxtToVisionmodeldata(localImagePath + "vision.txt", localImagePath + "vision.modeldata");
+        map.put(localImagePath + "vision.modeldata", ossImagePath + "vision.modeldata");
+
+        fYunFileService.uploadMulFiles(map);
+
+    }
+
+    private String updateScene4CreateVirtualScene(CreateFicTitiousSceneParamVO param){
+
+        ScenePlus scenePlus = this.getByNum(param.getNum());
+        ScenePlusExt scenePlusExt = null;
+        SceneEditInfo sceneEditInfo = null;
+        SceneEditInfoExt sceneEditInfoExt = null;
+        SceneEditControls sceneEditControls = null;
+        if(Objects.nonNull(scenePlus)){
+            scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
+            sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+            sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId());
+            sceneEditControls = sceneEditControlsService.getByEditInfoId(sceneEditInfo.getId());
+        }else {
+            scenePlus = new ScenePlus();
+            scenePlusExt = new ScenePlusExt();
+            sceneEditInfo = new SceneEditInfo();
+            sceneEditInfoExt = new SceneEditInfoExt();
+            sceneEditControls = new SceneEditControls();
+        }
+
+        scenePlus.setNum(param.getNum());
+        scenePlus.setUserId(param.getUserId());
+        scenePlus.setTitle("四维看看");
+        scenePlus.setDescription("<p>四维看看 让空间讲故事</p>");
+        scenePlus.setSceneStatus(SceneStatus.SUCCESS.code());
+        scenePlus.setPayStatus(PayStatus.PAY.code());
+        this.saveOrUpdate(scenePlus);
+
+        scenePlusExt.setPlusId(scenePlus.getId());
+        scenePlusExt.setWebSite(mainUrl + "/" + sceneUrl + param.getNum());
+        scenePlusExt.setBuildType("V3");
+        scenePlusExt.setSceneResolution(param.getSceneResolution());
+        scenePlusExt.setSceneFrom(param.getSceneFrom());
+        scenePlusExt.setSceneKind(param.getSceneKind());
+        scenePlusExt.setModelKind(ModelKind.DAM.code());
+        scenePlusExtService.saveOrUpdate(scenePlusExt);
+
+        sceneEditInfo.setScenePlusId(scenePlus.getId());
+        sceneEditInfo.setVersion(Objects.isNull(sceneEditInfo.getVersion()) ? 0 : sceneEditInfo.getVersion() + 1);
+        sceneEditInfo.setTitle(scenePlus.getTitle());
+        sceneEditInfo.setDescription(scenePlus.getDescription());
+        sceneEditInfoService.saveOrUpdate(sceneEditInfo);
+
+        sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
+        sceneEditInfoExt.setScenePlusId(scenePlus.getId());
+        sceneEditInfoExtService.saveOrUpdate(sceneEditInfoExt);
+
+        sceneEditControls.setEditInfoId(sceneEditInfo.getId());
+        sceneEditControlsService.saveOrUpdate(sceneEditControls);
+
+        return scenePlusExt.getWebSite();
+    }
+
+    public static void main(String[] args) {
+        FileUtil.del("D:\\test4\\");
+    }
 }

+ 0 - 0
src/main/java/com/fdkankan/openApi/vo/text.txt


+ 32 - 0
src/main/java/com/fdkankan/openApi/vo/www/CreateFicTitiousSceneParamVO.java

@@ -0,0 +1,32 @@
+package com.fdkankan.openApi.vo.www;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class CreateFicTitiousSceneParamVO {
+
+    @NotBlank(message = "num不能为空")
+    private String num;
+
+    @NotBlank(message = "objName不能为空")
+    private String objName;
+
+    @NotBlank(message = "mtlName不能为空")
+    private String mtlName;
+
+    @NotNull(message = "userId不能为空")
+    private Long userId;
+
+    @NotBlank(message = "sceneResolution不能为空")
+    private String sceneResolution;
+
+    @NotBlank(message = "sceneFrom不能为空")
+    private String sceneFrom;
+
+    @NotBlank(message = "sceneKind不能为空")
+    private String sceneKind;
+
+}