Browse Source

实现竖井贯通关系计算的计算器

lijie 3 years ago
parent
commit
816eea39db
17 changed files with 425 additions and 18 deletions
  1. 6 7
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/TestController.java
  2. 9 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/ObjectRelationMapper.java
  3. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/CoordinateCalculateServiceImpl.java
  4. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/FlThroughFlRelCalculateServiceImpl.java
  5. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelChainCalculateServiceImpl.java
  6. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelExtendCalculateServiceImpl.java
  7. 145 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/calstrategy/ShThroughShRelCalculateServiceImpl.java
  8. 25 6
      dmp-business/dmp-rwd/src/main/resources/mapper/ObjectRelationMapper.xml
  9. 46 0
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileUploadController.java
  10. 51 0
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/FileRequestData.java
  11. 25 0
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/FileUploadService.java
  12. 91 0
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/FileUploadServiceImpl.java
  13. 2 0
      dmp-cloud/dmp-file/src/main/resources/db/init/table.sql
  14. 2 0
      dmp-cloud/dmp-file/src/main/resources/mapper/FileMapper.xml
  15. 1 1
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/RelationCalRuleDTO.java
  16. 7 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/ObjectRelation.java
  17. 11 0
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/model/FileInfo.java

+ 6 - 7
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/TestController.java

@@ -1,22 +1,19 @@
 package com.persagy.dmp.rwd.digital.controller;
 
-import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper;
 import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
-import com.persagy.dmp.rwd.digital.service.impl.CoordinateCalculateServiceImpl;
-import com.persagy.dmp.rwd.digital.service.impl.FlThroughFlRelCalculateServiceImpl;
-import com.persagy.dmp.rwd.digital.service.impl.RelChainCalculateServiceImpl;
+import com.persagy.dmp.rwd.digital.service.calstrategy.CoordinateCalculateServiceImpl;
+import com.persagy.dmp.rwd.digital.service.calstrategy.FlThroughFlRelCalculateServiceImpl;
+import com.persagy.dmp.rwd.digital.service.calstrategy.ShThroughShRelCalculateServiceImpl;
 import lombok.RequiredArgsConstructor;
 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;
 
-import java.util.ArrayList;
-
 @RestController
 @RequestMapping("/test")
 @RequiredArgsConstructor
@@ -25,6 +22,7 @@ public class TestController {
     private final ObjectRelationMapper objectRelationMapper;
     private final CoordinateCalculateServiceImpl coordinateCalculateService;
     private final FlThroughFlRelCalculateServiceImpl flThroughFlRelCalculateService;
+    private final ShThroughShRelCalculateServiceImpl shThroughShRelCalculateService;
 
     @PostMapping("/testCal")
     public CommonResult<Void> testCal(@RequestBody CalculatingDTO calculatingDTO){
@@ -42,7 +40,8 @@ public class TestController {
         calculatingDTO.setGroupCode(AppContext.getContext().getGroupCode());
         calculatingDTO.setProjectId(AppContext.getContext().getProjectId());
         //coordinateCalculateService.calculateRelation(calculatingDTO.getRelationCalRule(),calculatingDTO);
-        flThroughFlRelCalculateService.calculateRelation(calculatingDTO.getRelationCalRule(),calculatingDTO);
+        //flThroughFlRelCalculateService.calculateRelation(calculatingDTO.getRelationCalRule(),calculatingDTO);
+        shThroughShRelCalculateService.calculateRelation(calculatingDTO.getRelationCalRule(),calculatingDTO);
         return ResultHelper.success();
     }
 

+ 9 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/ObjectRelationMapper.java

@@ -54,4 +54,13 @@ public interface ObjectRelationMapper extends BaseMapper<ObjectRelation> {
      * Update By lijie 2021/9/9 10:09
      */
     void insertObjectRelationForFlThroughFl(@Param("param") CalculatingDTO calculating);
+    /***
+     * Description: 根据竖井下的空间查询空间对象
+     * @param calculatingDTO : 请求参数
+     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectRelation>
+     * @author : lijie
+     * @date :2021/10/11 10:54
+     * Update By lijie 2021/10/11 10:54
+     */
+    List<ObjectRelation> queryArchSubsetShToSp(@Param("param") CalculatingDTO calculatingDTO);
 }

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/CoordinateCalculateServiceImpl.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.rwd.digital.service.impl;
+package com.persagy.dmp.rwd.digital.service.calstrategy;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/FlThroughFlRelCalculateServiceImpl.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.rwd.digital.service.impl;
+package com.persagy.dmp.rwd.digital.service.calstrategy;
 
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelChainCalculateServiceImpl.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.rwd.digital.service.impl;
+package com.persagy.dmp.rwd.digital.service.calstrategy;
 
 import cn.hutool.core.util.EscapeUtil;
 import cn.hutool.core.util.StrUtil;

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelExtendCalculateServiceImpl.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.rwd.digital.service.impl;
+package com.persagy.dmp.rwd.digital.service.calstrategy;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;

+ 145 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/calstrategy/ShThroughShRelCalculateServiceImpl.java

@@ -0,0 +1,145 @@
+package com.persagy.dmp.rwd.digital.service.calstrategy;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
+import com.persagy.dmp.digital.entity.ObjectDigital;
+import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.rwd.basic.utils.DigitalCommonUtils;
+import com.persagy.dmp.rwd.basic.utils.GeoToolsUtil;
+import com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper;
+import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
+import com.persagy.dmp.rwd.digital.service.CalculateService;
+import com.persagy.dmp.rwd.digital.service.IObjectRelationService;
+import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.validation.constraints.NotNull;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/***
+ * Description: 楼层贯通关系计算
+ * @author : lijie
+ * @date :2021/10/9 16:26
+ * Update By lijie 2021/10/9 16:26
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class ShThroughShRelCalculateServiceImpl implements CalculateService {
+
+    private final IObjectRelationService objectRelationService;
+    private final ObjectRelationMapper objectRelationMapper;
+
+
+    /***
+     * Description: 楼层贯通关系计算
+     * @param calRule : 计算规则
+     * @param calculatingDTO : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/10/9 16:26
+     * Update By lijie 2021/10/9 16:26
+     */
+    @Override
+    public void calculateRelation(RelationCalRuleDTO calRule, CalculatingDTO calculatingDTO) {
+        // 1.根据图类型,边类型查询符合条件空间与竖井关系对应的竖井与空间对应关系
+        List<ObjectRelation> objectRelations = objectRelationMapper.queryArchSubsetShToSp(calculatingDTO);
+        if (CollUtil.isEmpty(objectRelations)){
+            return;
+        }
+        // 2.根据空间坐标计算有相交的竖井即存在连通关系
+        // 2.1 获得{空间id:空间坐标}的映射
+        Map<String, List<LinkedHashMap<String, Object>>> spaceMap = objectRelations.stream()
+                .collect(Collectors.toMap(ObjectRelation::getObjTo, ObjectRelation::getOutLines, (k1, k2) -> k1));
+        // 2.2 获得{竖井id:[空间id,空间id]}的映射
+        Map<String, Set<String>> shaftSpaceIdMap = new HashMap<>();
+        objectRelations.forEach(relation->{
+                    Set<String> spaceIds = shaftSpaceIdMap.getOrDefault(relation.getObjFrom(), new HashSet<>());
+                    spaceIds.add(relation.getObjTo());
+                    shaftSpaceIdMap.put(relation.getObjFrom(),spaceIds);
+                });
+        // 2.3 根据空间的坐标是否相交确定竖井的连通性
+        List<ObjectRelation> resultList = new ArrayList<>();
+        Set<Map.Entry<String, Set<String>>> entries = shaftSpaceIdMap.entrySet();
+        for (Map.Entry<String, Set<String>> entry : entries) {
+            for (Map.Entry<String, Set<String>> otherEntry : entries) {
+                if (entry.getKey().equals(otherEntry.getKey())){
+                    continue;
+                }
+                String shaftId = entry.getKey();
+                String otherShaftId = otherEntry.getKey();
+                Set<String> spaceIds = entry.getValue();
+                Set<String> otherSpaceIds = otherEntry.getValue();
+                Collection<String> intersection = CollUtil.intersection(spaceIds, otherSpaceIds);
+                if (intersection.size()>0){
+                    continue;
+                }
+                if (isVerticallyOverlap(spaceIds,otherSpaceIds,spaceMap)){
+                    // 空间有相交的空间,说明两者竖井是连通的
+                    ObjectRelation objectRelation = new ObjectRelation();
+                    objectRelation.setGroupCode(calculatingDTO.getGroupCode());
+                    objectRelation.setProjectId(calculatingDTO.getProjectId());
+                    objectRelation.setGraphId(DigitalCommonUtils.getDefaultGraphIdByGraphCode(calculatingDTO.getGraphCode()));
+                    objectRelation.setGraphCode(calculatingDTO.getGraphCode());
+                    objectRelation.setRelCode(calculatingDTO.getRelCode());
+                    objectRelation.setObjFrom(shaftId);
+                    objectRelation.setObjTo(otherShaftId);
+                    objectRelation.setRelValue(calculatingDTO.getRelValue());
+                    objectRelation.setCreateApp(calculatingDTO.getAppId());
+                    objectRelation.setUpdateApp(calculatingDTO.getAppId());
+                    objectRelation.setCreator(calculatingDTO.getAccountId());
+                    objectRelation.setModifier(calculatingDTO.getAccountId());
+                    objectRelation.setValid(1);
+                    resultList.add(objectRelation);
+                }
+            }
+        }
+        if (CollUtil.isNotEmpty(resultList)){
+            // 3.根据图类型编码,边类型编码,relValue,项目id,集团编码删除关系
+            deleteRelDataByCondition(calculatingDTO);
+            // 4.新增关系
+            objectRelationService.saveBatch(resultList);
+        }
+    }
+    /***
+     * Description: 判断两组空间是否存在连通性
+     * @param spaceIds : 空间id数组
+     * @param otherSpaceIds : 另一组空间id数组
+     * @param spaceMap : 空间id映射
+     * @return : boolean
+     * @author : lijie
+     * @date :2021/10/11 14:13
+     * Update By lijie 2021/10/11 14:13
+     */
+    private Boolean isVerticallyOverlap(Set<String> spaceIds, Set<String> otherSpaceIds,
+                                        Map<String, List<LinkedHashMap<String, Object>>> spaceMap) {
+        for (String spaceId : spaceIds) {
+            for (String otherSpaceId : otherSpaceIds) {
+                if (GeoToolsUtil.isPolyInPoly(spaceMap.get(spaceId),spaceMap.get(otherSpaceId))){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /***
+     * Description: 根据请求参数和id集合删除关系
+     * @param calculatingDTO : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/11 16:13
+     * Update By lijie 2021/9/11 16:13
+     */
+    private void deleteRelDataByCondition(CalculatingDTO calculatingDTO) {
+        QueryWrapper<ObjectRelation> queryWrapper = ObjectDigitalCriteriaHelper.createCommonQueryWrapper(null,calculatingDTO);
+        queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.GRAPH_CODE_HUM),calculatingDTO.getGraphCode());
+        queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.REL_CODE_HUM),calculatingDTO.getRelCode());
+        objectRelationService.remove(queryWrapper);
+    }
+}

+ 25 - 6
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectRelationMapper.xml

@@ -22,6 +22,7 @@
             <result property="modifiedTime" column="modified_time" jdbcType="CHAR"/>
             <result property="valid" column="valid" jdbcType="TINYINT"/>
             <result property="ts" column="ts" jdbcType="TIMESTAMP"/>
+            <result property="outLines" column="outLines" jdbcType="VARCHAR" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
     </resultMap>
 
     <resultMap id="ObjectDigitalResultMap" type="com.persagy.dmp.digital.entity.ObjectDigital">
@@ -56,10 +57,6 @@
         creation_time,modifier,modified_time,
         valid,ts
     </sql>
-    <sql id="insertObjectRelationCondition">
-
-
-    </sql>
     <insert id="insertObjectRelationByRelChain">
         INSERT INTO dt_relation (
             id,
@@ -188,7 +185,6 @@
         </if>
         ) AS dtr
     </insert>
-
     <select id="selectRelCodesByObjToIdsAndRelCode" resultMap="ObjectDigitalResultMap">
         SELECT
             dtr.obj_to AS id,IFNULL(JSON_ARRAYAGG(dtr.obj_from),JSON_ARRAY()) AS objFromIds
@@ -259,7 +255,6 @@
         )
         ) AS rdtr;
     </select>
-
     <insert id="insertObjectRelationForFlThroughFl">
         INSERT INTO dt_relation (
         id,
@@ -337,5 +332,29 @@
         AND JSON_EXTRACT( dtr0.infos, '$.modelId' ) = JSON_EXTRACT( dtr1.infos, '$.modelId' )
         ) AS dtr
     </insert>
+    <select id="queryArchSubsetShToSp" resultMap="BaseResultMap">
+        SELECT
+            dtr.obj_from AS obj_from,
+            dto.id AS obj_to,
+            JSON_UNQUOTE(JSON_EXTRACT(JSON_UNQUOTE(JSON_EXTRACT(dto.infos, '$.outline')),'$[0][0][*]')) AS outLines
+        FROM
+            dt_relation AS dtr
+                INNER JOIN dt_object AS dto ON dto.id=dtr.obj_to
+        WHERE
+          dtr.graph_code = 'ArchSubset'
+          AND dtr.rel_code = 'Sh2Sp'
+        <if test="null!=param.groupCode and param.groupCode.length>0">
+            AND dtr.group_code = #{param.groupCode}
+        </if>
+        <if test="null!=param.projectId and param.projectId.length>0">
+            AND dtr.project_id = #{param.projectId}
+        </if>
+          AND dto.obj_type='space'
+          AND JSON_EXTRACT(dto.infos, '$.outline') IS NOT NULL
+          AND JSON_LENGTH(JSON_UNQUOTE( JSON_EXTRACT( JSON_UNQUOTE( JSON_EXTRACT( dto.infos, '$.outline' ) ), '$[0][0][*]' ) )) >= 4
+    </select>
+
+
+
 
 </mapper>

+ 46 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileUploadController.java

@@ -0,0 +1,46 @@
+package com.persagy.dmp.file.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.exception.BusinessException;
+import com.persagy.dmp.common.lang.PsDateTime;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.file.domain.FileRequestData;
+import com.persagy.dmp.file.model.FileInfo;
+import com.persagy.dmp.file.service.FileUploadService;
+import com.persagy.dmp.file.service.IFileService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+import java.util.List;
+
+/**
+ * 文件管理Controller
+ * @author Charlie Yu
+ * @date 2021-05-15
+ */
+@RestController
+@RequestMapping("/upload/")
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class FileUploadController {
+
+    private final FileUploadService fileUploadService;
+    /***
+     * Description: 初始化大文件上传
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.FileInfo>  
+     * @author : lijie
+     * @date :2021/10/9 20:12
+     * Update By lijie 2021/10/9 20:12
+     */
+    @PostMapping("/initChunkUpload")
+    public CommonResult<List<FileInfo>> initChunkUpload(@RequestBody FileRequestData requestData) {
+        return ResultHelper.multi(fileUploadService.initChunkUpload(requestData));
+    }
+}

+ 51 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/FileRequestData.java

@@ -0,0 +1,51 @@
+package com.persagy.dmp.file.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/***
+ * Description: 文件请求参数
+ * @author : lijie
+ * @date :2021/10/9 20:12
+ * Update By lijie 2021/10/9 20:12
+ */
+@Data
+@JsonIgnoreProperties
+public class FileRequestData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**存储桶名称*/
+    private String bucketName;
+
+    /**分片数量*/
+    private Integer chunkCount;
+
+    /**上传文件的md5*/
+    private String fileMd5;
+
+    /**上传文件/合并文件的格式*/
+    private String suffix;
+
+    /**文件名称*/
+    private String fileName;
+
+    /**文件地址*/
+    private String filePath;
+
+    /**上传状态 0.上传完成 1.已上传部分*/
+    private Integer uploadStatus;
+
+    /**分片序号*/
+    private Integer partNumber;
+
+    /**上传地址*/
+    private String uploadUrl;
+
+    /**集团编码*/
+    private String groupCode;
+
+
+}

+ 25 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/FileUploadService.java

@@ -0,0 +1,25 @@
+package com.persagy.dmp.file.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.persagy.dmp.file.domain.FileRequestData;
+import com.persagy.dmp.file.model.FileInfo;
+
+import java.util.List;
+
+/***
+ * Description: 文件上传处理逻辑
+ * @author : lijie
+ * @date :2021/10/9 20:09
+ * Update By lijie 2021/10/9 20:09
+ */
+public interface FileUploadService extends IService<FileInfo> {
+    /***
+     * Description: 初始化文件上传路径列表
+     * @param requestData : 请求参数
+     * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
+     * @author : lijie
+     * @date :2021/10/9 20:27
+     * Update By lijie 2021/10/9 20:27
+     */
+    List<FileInfo> initChunkUpload(FileRequestData requestData);
+}

+ 91 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/FileUploadServiceImpl.java

@@ -0,0 +1,91 @@
+package com.persagy.dmp.file.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.exception.BusinessException;
+import com.persagy.dmp.file.dao.FileMapper;
+import com.persagy.dmp.file.domain.FileRequestData;
+import com.persagy.dmp.file.model.FileInfo;
+import com.persagy.dmp.file.service.FileUploadService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/***
+ * Description: 文件上传逻辑处理类
+ * @author : lijie
+ * @date :2021/10/9 20:09
+ * Update By lijie 2021/10/9 20:09
+ */
+@Service
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+@Slf4j
+public class FileUploadServiceImpl extends ServiceImpl<FileMapper, FileInfo> implements FileUploadService {
+
+    /**上传成功*/
+    private static final Integer UPLOAD_SUCCESS = 0;
+
+    /**部分上传*/
+    private static final Integer UPLOAD_PART = 1;
+
+    /***
+     * Description: 初始化文件上传路径列表
+     * @param requestData : 请求参数
+     * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
+     * @author : lijie
+     * @date :2021/10/9 20:27
+     * Update By lijie 2021/10/9 20:27
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public List<FileInfo> initChunkUpload(FileRequestData requestData) {
+        if (StrUtil.isBlank(requestData.getFileMd5())){
+            throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
+        }
+        // 1.根据文件md5值查询数据库
+        FileInfo fileInfo = queryFileInfosByFileMd5(requestData.getFileMd5());
+        // 2.历史已上传且已完成上传
+        if (ObjectUtil.isNotNull(fileInfo) && UPLOAD_SUCCESS.equals(fileInfo.getUploadStatus())){
+            return CollUtil.newArrayList(fileInfo);
+        }
+        // 3.历史已上传
+
+
+        return firstInitChunkUploadInternal(requestData);
+    }
+    /***
+     * Description: 初次上传和已有文件信息但未上传任何分片的情况下则直接生成所有上传url 
+     * @param requestData : 
+     * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>  
+     * @author : lijie
+     * @date :2021/10/9 20:36
+     * Update By lijie 2021/10/9 20:36
+     */
+    private List<FileInfo> firstInitChunkUploadInternal(FileRequestData requestData) {
+        return new ArrayList<>();
+    }
+
+    /***
+     * Description: 根据文件md5查询文件信息
+     * @param fileMd5 : 文件md5值
+     * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
+     * @author : lijie
+     * @date :2021/10/9 20:32
+     * Update By lijie 2021/10/9 20:32
+     */
+    private FileInfo queryFileInfosByFileMd5(String fileMd5) {
+        LambdaQueryWrapper<FileInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(FileInfo::getFileMd5,fileMd5);
+        queryWrapper.eq(FileInfo::getValid,true);
+        return this.getOne(queryWrapper);
+    }
+}

+ 2 - 0
dmp-cloud/dmp-file/src/main/resources/db/init/table.sql

@@ -6,6 +6,8 @@ CREATE TABLE IF NOT EXISTS `file_info` (
 `file_bucket` varchar(64) NOT NULL DEFAULT '0' COMMENT '文件分组:默认为应用名',
 `file_path` varchar(512) COMMENT '文件路径:含文件名称 - 对应文件存储路径',
 `file_size` int(11) NOT NULL DEFAULT '0' COMMENT '文件大小',
+`file_md5` varchar(64) NOT NULL DEFAULT NULL COMMENT '文件的md5值',
+`upload_status` int(11) NOT NULL DEFAULT '0' COMMENT '文件上传状态,0.上传完成 1.已上传部分',
 `business_id` varchar(32) DEFAULT NULL COMMENT '关联业务Id',
 `expire_date` char(8) DEFAULT NULL COMMENT '保留期限',
 `creator` varchar(32) DEFAULT NULL COMMENT '创建人',

+ 2 - 0
dmp-cloud/dmp-file/src/main/resources/mapper/FileMapper.xml

@@ -9,6 +9,8 @@
         <result column="file_bucket" property="fileBucket"/>
         <result column="file_path" property="filePath"/>
         <result column="file_size" property="fileSize"/>
+        <result column="file_size" property="fileSize"/>
+        <result column="file_size" property="fileSize"/>
         <result column="business_id" property="businessId"/>
         <result column="expire_date" property="expireDate"/>
         <result column="ts" property="ts"/>

+ 1 - 1
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/RelationCalRuleDTO.java

@@ -12,7 +12,7 @@ import java.util.List;
  */
 @Data
 public class RelationCalRuleDTO {
-    /**计算规则类型,1-通过关系链计算,2-通过平面图坐标计算,3-通过对象+已存在的关系数据进行计算*/
+    /**计算规则类型,1-通过关系链计算,2-通过平面图坐标计算,3-通过对象+已存在的关系数据进行计算,4-楼层连通关系计算,5-竖井连通关系计算*/
     private String calRuleType;
     /**计算规则类型为1时的关系计算链*/
     private List<RelationCalDTO> dependentRelChain;

+ 7 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/ObjectRelation.java

@@ -1,12 +1,16 @@
 package com.persagy.dmp.digital.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
+import java.util.LinkedHashMap;
+import java.util.List;
 
 /**
  * 对象数据
@@ -55,4 +59,7 @@ public class ObjectRelation extends AuditableEntity {
     private String createApp;
     /** 最后修改应用 */
     private String updateApp;
+    /** 对象的outline平面坐标 */
+    @TableField(exist = false,typeHandler = JacksonTypeHandler.class,value = "outLines")
+    private List<LinkedHashMap<String,Object>> outLines;
 }

+ 11 - 0
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/model/FileInfo.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.file.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dmp.common.lang.PsDate;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
@@ -28,8 +29,18 @@ public class FileInfo extends AuditableEntity {
     private String filePath;
     /** 文件大小 */
     private Long fileSize;
+    /** 文件的md5值 */
+    private String fileMd5;
+    /** 文件上传状态,0.上传完成 1.已上传部分 */
+    private Integer uploadStatus;
     /** 关联业务Id */
     private String businessId;
     /** 保留期限 */
     private PsDate expireDate;
+    /** 分片序号 */
+    @TableField(exist = false)
+    private Integer partNumber;
+    /** 上传地址 */
+    @TableField(exist = false)
+    private String uploadUrl;
 }