Browse Source

增加上传cad文件接接口

dengsixing 1 year ago
parent
commit
7b7270a6c6

+ 6 - 0
pom.xml

@@ -158,6 +158,12 @@
             <version>1.0.5</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-dxf</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
+
     </dependencies>
 
     <dependencyManagement>

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

@@ -315,6 +315,21 @@ public class SceneEditController extends BaseController {
 
     /**
      * <p>
+     保存户型图
+     * </p>
+     * @author dengsixing
+     * @date 2022/1/20
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @CheckPermit
+    @PostMapping(value = "/cad/saveDxf")
+    public ResultData saveCadDxf(@RequestParam MultipartFile file, @RequestParam String num) throws Exception{
+        return sceneEditInfoService.saveCadDxf(file, num);
+    }
+
+    /**
+     * <p>
      重置户型图
      * </p>
      * @author dengsixing

+ 3 - 1
src/main/java/com/fdkankan/scene/service/ISceneEditInfoService.java

@@ -33,7 +33,7 @@ import org.springframework.web.multipart.MultipartFile;
  *  服务类
  * </p>
  *
- * @author 
+ * @author
  * @since 2022-01-18
  */
 public interface ISceneEditInfoService extends IService<SceneEditInfo> {
@@ -52,6 +52,8 @@ public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
     ResultData saveCad(BaseDataParamVO param) throws Exception;
 
+    ResultData saveCadDxf(MultipartFile file, String num) throws Exception;
+
     ResultData resetCad(String num) throws IOException;
 
     ResultData renameCad(RenameCadParamVO param) throws IOException;

+ 45 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -18,6 +18,7 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileMd5Util;
 import com.fdkankan.common.util.FileSizeUtil;
 import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.dxf.parse.utils.FdJsonToDxfUtil;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
@@ -672,6 +673,50 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     @Override
+    public ResultData saveCadDxf(MultipartFile file, String num) throws Exception {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+        String extName =  FileUtil.extName(file.getOriginalFilename());
+        if(!"dfx".equals(extName)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_7007.code(), ErrorCode.FAILURE_CODE_7007.formatMessage("dfx"));
+        }
+        String dfxPath = ConstantFilePath.SCENE_USER_PATH_V4 + UUID.randomUUID() + "." + extName;
+        String floorplanUserPath = ConstantFilePath.SCENE_USER_PATH_V4 + UUID.randomUUID() + ".json";
+        file.transferTo(new File(dfxPath));
+        try {
+            String editUserPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
+            FdJsonToDxfUtil.dxfToFdJson(dfxPath, floorplanUserPath);
+            fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), floorplanUserPath, editUserPath + "floorplan.json");
+            JSONObject houseTypeJson = CreateHouseJsonUtil
+                    .createHouseTypeJsonByUser(floorplanUserPath);
+            if(Objects.nonNull(houseTypeJson)) {
+                fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), houseTypeJson.toJSONString().getBytes(), editUserPath + "houseType.json");
+            }
+
+            SceneEditInfo sceneEditInfoDb = this.getByScenePlusId(scenePlus.getId());
+            this.update(new LambdaUpdateWrapper<SceneEditInfo>()
+                    .setSql("version=version+" + 1)
+                    .set(SceneEditInfo::getFloorPlanUser, 1)
+                    .eq(SceneEditInfo::getId, sceneEditInfoDb.getId()));
+
+            SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoDb.getId());
+            sceneEditInfoExt.setFloorPlanAngle(0f);
+            sceneEditInfoExt.setFloorPlanCompass(0f);
+            sceneEditInfoExtService.saveOrUpdate(sceneEditInfoExt);
+        }catch (Exception e){
+            log.error("cad文件转换失败");
+            ResultData.error(ErrorCode.FAILURE_CODE_7013);
+        }finally {
+            FileUtil.del(dfxPath);
+            FileUtil.del(floorplanUserPath);
+        }
+
+        return ResultData.ok();
+    }
+
+    @Override
     public ResultData resetCad(String num) throws IOException {
 
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);