caiaf 4 年 前
コミット
ca284147be
18 ファイル変更130 行追加38 行削除
  1. 1 1
      revit-algorithm/build.gradle
  2. 15 4
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/model/datacenter/DCFloor.kt
  3. 2 2
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncEquipPart.kt
  4. 2 2
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncEquipment.kt
  5. 2 2
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncISpace.kt
  6. 3 3
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncUtil.kt
  7. 28 2
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/controllers/modelFile/ModelFileController.kt
  8. 6 6
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/dao/FloorDAO.kt
  9. 1 0
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/config/DataCenterConfig.kt
  10. 13 3
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/modelFile/FloorModel.kt
  11. 1 1
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/modelFile/ModelFileFolder.kt
  12. 10 0
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/request/UploadModelRequest.kt
  13. 17 0
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/datacenter/DataCenterRequest.kt
  14. 20 3
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/datacenter/DataCenterService.kt
  15. 3 4
      revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/endpoint/ModelFileService.kt
  16. 4 3
      revit-algorithm/src/main/resources-test/application.yml
  17. 1 1
      scheduler/build.gradle
  18. 1 1
      scheduler/src/main/resources-test/application.yml

+ 1 - 1
revit-algorithm/build.gradle

@@ -166,7 +166,7 @@ dependencyManagement {
 // 下面是配置文件选择
 /*******************************************************/
 
-sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-dev']
+sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-test']
 //ext.needTest = 'true'
 
 task doWar{

+ 15 - 4
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/model/datacenter/DCFloor.kt

@@ -17,8 +17,8 @@ class DCFloor {
     var id : String? = null
 
     // 更新FloorMap 为 文件服务器上的key
-    @JSONField(name = "structureInfo")
-    var structureInfo : HashMap<String, String>? = null
+    @JSONField(name = "infos")
+    var infos : HashMap<String, String>? = null
 
     @JSONField(name = "modelId")
     var modelId : String? = null
@@ -35,6 +35,17 @@ class DCFloor {
     var localName: String? = null
 
     /** 建筑id */
-    @JSONField(name = "buildId")
-    var buildId: String? = null
+    @JSONField(name = "buildingId")
+    var buildingId: String? = null
+
+    /** 项目id */
+    @JSONField(name = "projectId")
+    var projectId: String? = null
+
+    @JSONField(name = "floorSequenceId")
+    var floorSequenceId: Int? = null
+
+
+    @JSONField(name = "localId")
+    var localId: String? = null
 }

+ 2 - 2
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncEquipPart.kt

@@ -202,7 +202,7 @@ class SyncEquipPart : SyncObject{
                     if (dcFloor.outline != null) {
                         if (CommonService.isPointInPolygonCheckWithJdkGeneralPath(point, dcFloor.outline!!)) {
                             dcEquip.floorId = dcFloor.id
-                            dcEquip.buildingId = dcFloor.buildId
+                            dcEquip.buildingId = dcFloor.buildingId
                             break
                         }
                     }
@@ -210,7 +210,7 @@ class SyncEquipPart : SyncObject{
                 // 如果没找到所属楼层, 则使用默认楼层作为所属楼层
                 if(dcEquip.floorId == null && defaultDCFloor != null){
                     dcEquip.floorId = defaultDCFloor.id
-                    dcEquip.buildingId = defaultDCFloor.buildId
+                    dcEquip.buildingId = defaultDCFloor.buildingId
                 }
             }
             sb.clear()

+ 2 - 2
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncEquipment.kt

@@ -232,7 +232,7 @@ class SyncEquipment : SyncObject{
                         // 如果数据中心的楼层设置了outline, 判断是否在outline内
                         if (CommonService.isPointInPolygonCheckWithJdkGeneralPath(point, dcFloor.outline!!)) {
                             dcEquip.floorId = dcFloor.id
-                            dcEquip.buildingId = dcFloor.buildId
+                            dcEquip.buildingId = dcFloor.buildingId
                             break
                         }
                     }
@@ -240,7 +240,7 @@ class SyncEquipment : SyncObject{
                 // 如果没找到所属楼层, 则使用默认楼层作为所属楼层
                 if(dcEquip.floorId == null && defaultDCFloor != null){
                     dcEquip.floorId = defaultDCFloor.id
-                    dcEquip.buildingId = defaultDCFloor.buildId
+                    dcEquip.buildingId = defaultDCFloor.buildingId
                 }
             }
             sb.clear()

+ 2 - 2
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncISpace.kt

@@ -159,7 +159,7 @@ class SyncISpace : SyncObject {
                         // 如果数据中心的楼层设置了outline, 则只有跟outline重叠过的元空间才能添加楼层关系
                         if (CommonService.isPolygonOverlap(space.outline!![0], dcFloor.outline!!)) {
                             dcISpace.floorId = dcFloor.id
-                            dcISpace.buildingId = dcFloor.buildId
+                            dcISpace.buildingId = dcFloor.buildingId
                             break
                         }
                     }
@@ -167,7 +167,7 @@ class SyncISpace : SyncObject {
                 // 如果没找到所属楼层, 则使用默认楼层作为所属楼层
                 if(dcISpace.floorId == null && defaultDCFloor != null){
                     dcISpace.floorId = defaultDCFloor.id
-                    dcISpace.buildingId = defaultDCFloor.buildId
+                    dcISpace.buildingId = defaultDCFloor.buildingId
                 }
             }
             sb.clear()

+ 3 - 3
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/sync/SyncUtil.kt

@@ -84,9 +84,9 @@ class SyncUtil {
         // 更新楼层的信息点 modelId 和 FloorMap
         for (dcFloor in syncFloor.dcFloor) {
             dcFloor.modelId = model.floorModelId
-            if (dcFloor.structureInfo == null)
-                dcFloor.structureInfo = HashMap()
-            dcFloor.structureInfo!!["FloorMap"] = "${myProperties.fileService.baseGraph}/${model.id}.jsonz"
+            if (dcFloor.infos == null)
+                dcFloor.infos = HashMap()
+            dcFloor.infos!!["floorMap"] = "${myProperties.fileService.baseGraph}/${model.id}.jsonz"
             syncFloor.syncUpdate(dcFloor)
         }
 

+ 28 - 2
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/controllers/modelFile/ModelFileController.kt

@@ -19,6 +19,7 @@
  */
 package cn.sagacloud.server.algorithm.controllers.modelFile
 
+import cn.sagacloud.server.algorithm.backstage.model.datacenter.DCFloor
 import cn.sagacloud.server.algorithm.models.config.MyProperties
 import cn.sagacloud.server.algorithm.models.jsonAnalyzer.AllComponents
 import cn.sagacloud.server.algorithm.models.jsonAnalyzer.BaseObj
@@ -29,12 +30,14 @@ import cn.sagacloud.server.algorithm.models.responses.UploadModelResponse
 import cn.sagacloud.server.algorithm.services.BaseDataService
 import cn.sagacloud.server.algorithm.services.CommonService
 import cn.sagacloud.server.algorithm.services.activemq.JMSProducer
+import cn.sagacloud.server.algorithm.services.datacenter.DataCenterService
 import cn.sagacloud.server.algorithm.services.endpoint.ModelFileService
 import cn.sagacloud.server.algorithm.services.excel.ExcelService
 import cn.sagacloud.server.algorithm.services.http.HttpService
 import cn.sagacloud.server.algorithm.services.message.MessageService
 import cn.sagacloud.server.algorithm.services.monitor.ModelMonitorService
 import cn.sagacloud.server.algorithm.services.json.JSONAnalyzerService
+import cn.sagacloud.server.algorithm.util.IdUtils
 import com.sybotan.database.SFilter
 import com.sybotan.service.SPageContext
 import com.sybotan.service.models.enums.SResponseType
@@ -88,6 +91,9 @@ class ModelFileController {
     @Autowired
     lateinit var jsonAnalyzerService : JSONAnalyzerService
 
+    @Autowired
+    lateinit var dataCenterService: DataCenterService
+
     /**
      * 删除模型文件(只有记录, 文件不动)
      *
@@ -226,16 +232,36 @@ class ModelFileController {
             modelFileService.checkUploadInputValid(request)
             var floor = dataService.floorModelService.select(SFilter.eq("projectId", request.projectId!!),
                     SFilter.eq("floorName", request.floorName!!), SFilter.eq("folderId", request.folderId!!)).entity()
-            // 如果楼层不存在, 则创建
+
+//            var result = false
             if(floor == null){
                 floor = modelFileService.addFloor(request)
             }
             // 检查是否可以上传新模型
             modelFileService.checkUpdatable(floor, request)
-
             // 创建模型记录
             var model = modelFileService.addRecord(request, floor, properties)
 
+
+            // 如果楼层不存在, 则创建
+            if(floor.hasCreate == false){
+                val dcfloor = DCFloor()
+                dcfloor.id = floor.id
+                dcfloor.buildingId = request.folderId
+                dcfloor.projectId = request.projectId
+                dcfloor.localId = request.localId
+                dcfloor.localName = request.localName
+                dcfloor.floorSequenceId = request.floorSequenceId
+                dcfloor.modelId = model.id
+                val result = dataCenterService.floorCreate(dcfloor,request.projectId!!)
+                if(!result){
+                    return  SBaseResponse(SResponseType.failure, "创建楼层失败")
+                }else{
+                    if(!dataService.modelFileService.replace(model))
+                        throw Exception("添加模型失败")
+                }
+
+            }
             // 注册uploadId
             val uploadId = modelFileService.registerMultipartUpload(model, properties)
             var uploadModelResponse = UploadModelResponse()

+ 6 - 6
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/dao/FloorDAO.kt

@@ -17,12 +17,12 @@ class FloorDAO {
     fun dynamicUpdate(floorId: String, oldModelId: String?, modelId: String?) : String{
         return object : SQL() {
             init {
-                UPDATE("revit.model_floor")
-                SET("current_model_id = #{modelId}")
-                if(oldModelId == null)
-                    WHERE("id =#{floorId} and current_model_id is null")
-                else
-                    WHERE("id =#{floorId} and current_model_id = #{oldModelId}")
+                UPDATE("public.floor")
+                SET("model_id = #{modelId}")
+//                if(oldModelId == null)
+                WHERE("id =#{floorId}")
+//                else
+//                    WHERE("id =#{floorId} and model_id = #{oldModelId}")
 
             }
         }.toString()

+ 1 - 0
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/config/DataCenterConfig.kt

@@ -24,6 +24,7 @@ class DataCenterConfig {
     lateinit var componentUpdate: String
     lateinit var floorQuery: String
     lateinit var floorUpdate: String
+    lateinit var floorCreate: String
     lateinit var floorBind: String
     lateinit var propertyQuery: String
     lateinit var propertyUpdate: String

+ 13 - 3
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/modelFile/FloorModel.kt

@@ -48,11 +48,17 @@ class FloorModel : SBaseEntity() {
     @Column(name = "project_id")
     var projectId: String? = null
 
-    /** 楼层名称 */
-    @ApiModelProperty(value = "楼层名称")
-    @Column(name = "name")
+    /** 楼层本地名称 */
+    @ApiModelProperty(value = "楼层本地名称")
+    @Column(name = "local_name")
     var floorName: String? = null
 
+    /** 楼层本地编码 */
+    @ApiModelProperty(value = "楼层本地编码")
+    @Column(name = "local_id")
+    var localId: String? = null
+
+
     /** 该楼层当前的模型id */
     @ApiModelProperty(value = "该楼层当前的模型id")
     @Column(name = "model_id")
@@ -69,6 +75,10 @@ class FloorModel : SBaseEntity() {
     @ApiModelProperty(value = "该楼层在物理世界上的楼层id")
     var floorId: String? = null
 
+    /** 是否创建 */
+    @ApiModelProperty(value = "是否创建了")
+    var  hasCreate:Boolean? = null
+
 //    /** 该楼层在物理世界上的楼层id */
 //    @ApiModelProperty(value = "是否覆盖以前绑定的楼层, true是覆盖, false是只添加, 默认false")
 //    var isCover: Boolean? = null

+ 1 - 1
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/modelFile/ModelFileFolder.kt

@@ -49,6 +49,6 @@ class ModelFileFolder : SBaseEntity(){
 
     /** 名称 */
     @ApiModelProperty(value = "名称")
-    @Column(name = "name")
+    @Column(name = "local_name")
     var name: String? = null
 }

+ 10 - 0
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/request/UploadModelRequest.kt

@@ -38,4 +38,14 @@ class UploadModelRequest {
     @ApiModelProperty(value = "模型的revit版本")
     var revitVersion: String? = null
 
+    @ApiModelProperty(value = "排序id")
+    var floorSequenceId: Int? = null
+
+
+    @ApiModelProperty(value = "楼层本地编码")
+    var localId: String? = null
+
+
+    @ApiModelProperty(value = "楼层本地名称")
+    var localName: String? = null
 }

+ 17 - 0
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/datacenter/DataCenterRequest.kt

@@ -237,6 +237,23 @@ class DataCenterRequest{
 
 
     /**
+     * @Description: 楼层创建
+     * @Param:
+     * @Return:
+     */
+    fun floorCreate(request : CreateRequest<DCFloor>, projectId : String) : BaseResponse?{
+        try {
+            val postBody = JSON.toJSONString(request)
+            val resultStr = HttpService.sendPostDataCenter(properties.datacenter.floorCreate, postBody, projectId)
+            return JSON.parseObject(resultStr, object : TypeReference<BaseResponse>() { })
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return null
+    }
+
+
+    /**
      * 部件创建
      * isEquipOrComponent true : Equip, false : Component
      */

+ 20 - 3
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/datacenter/DataCenterService.kt

@@ -4,6 +4,7 @@ package cn.sagacloud.server.algorithm.services.datacenter
 import cn.sagacloud.server.algorithm.backstage.model.datacenter.*
 import cn.sagacloud.server.algorithm.models.request.BindFloorRequest
 import com.alibaba.fastjson.JSONObject
+import com.sybotan.base.extensions.toJson
 import com.sybotan.service.models.enums.SResponseType
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
@@ -49,7 +50,7 @@ class DataCenterService {
      */
     fun getFloor(floorIds : ArrayList<String>, projectId: String) : ArrayList<DCFloor>?{
         val body = QueryRequest()
-        body.filters = generateSelectStr(floorIds, "floorId")
+        body.filters = generateSelectStr(floorIds, "id")
         val response = request.floorQuery(body, projectId)
         if(response != null && response.result == "success")
             return response.content
@@ -58,7 +59,7 @@ class DataCenterService {
 
     fun getFloorWithModelId(floorId : String, projectId: String) : ArrayList<DCFloor>?{
         val body = QueryRequest()
-        body.filters = generateSelectStr(arrayListOf(floorId), "modelId")
+        body.filters = generateSelectStr(arrayListOf(floorId), "id")
         val response = request.floorQuery(body, projectId)
         if(response != null && response.result == "success")
             return response.content
@@ -70,7 +71,7 @@ class DataCenterService {
      */
     fun getFloor(revitFloorId : String, projectId: String) : ArrayList<DCFloor>?{
         val body = QueryRequest()
-        body.filters = generateSelectStr(arrayListOf(revitFloorId), "modelId")
+        body.filters = generateSelectStr(arrayListOf(revitFloorId), "id")
         val response = request.floorQuery(body, projectId)
         if(response != null && response.result == "success")
             return response.content
@@ -514,6 +515,22 @@ class DataCenterService {
     }
 
     /**
+     * 楼层创建
+     */
+    fun floorCreate(dcFloor: DCFloor, projectId: String) : Boolean{
+        val createRequest = CreateRequest<DCFloor>()
+        createRequest.content = arrayListOf(dcFloor)
+        val result = request.floorCreate(createRequest, projectId)
+        if(result != null && "success" == result.result){
+            return true
+        }
+        logger.error(result.toString())
+        logger.error(createRequest.toJson())
+        return false
+    }
+
+
+    /**
      * 同步对象
      */
     fun sync(arr: ArrayList<Any>, out: ArrayList<Any>?, projectId: String?, operator: DataCenterOperator){

+ 3 - 4
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/endpoint/ModelFileService.kt

@@ -353,8 +353,9 @@ class ModelFileService {
         floor.projectId = projectId
         floor.folderId = request.folderId
         floor.floorName = request.floorName
-        if(!dataService.floorModelService.insert(floor))
-            throw Exception("创建楼层失败")
+        floor.hasCreate = false
+//        if(!dataService.floorModelService.insert(floor))
+//            throw Exception("创建楼层失败")
         return floor
     }
 
@@ -395,8 +396,6 @@ class ModelFileService {
         model.fileKey = "${model.id!!}.rvt"
         model.revitVersion = request.revitVersion
         model.url = CommonService.getFilePathInFileService(properties.fileService.downloadPath, model.id!!)
-        if(!dataService.modelFileService.replace(model))
-            throw Exception("添加模型失败")
         return model
     }
 

+ 4 - 3
revit-algorithm/src/main/resources-test/application.yml

@@ -99,7 +99,7 @@ properties:
     mergeMultipartUpload:              ${properties.fileService.url}common/merge_multipart${properties.fileService.suffixWithSecret}&uploadId=
 
   scheduler:
-    url:                               http://192.168.64.17:28888/scheduler/
+    url:                               http://192.168.64.17:28890/scheduler/
     createTask:                        ${properties.scheduler.url}task/create
     queryTask:                         ${properties.scheduler.url}task/query
     queryTaskResult:                   ${properties.scheduler.url}result/query
@@ -107,7 +107,7 @@ properties:
 
 
   datacenter:
-    url:                               http://192.168.64.17:28888/datacenter/
+    url:                               http://192.168.64.17:28890/datacenter/
     # 设备相关接口
     equipCreate: ${properties.datacenter.url}object/equip/create
     equipDelete: ${properties.datacenter.url}object/equip/delete
@@ -126,6 +126,7 @@ properties:
     # 楼层相关接口
     floorQuery: ${properties.datacenter.url}object/floor/query
     floorUpdate: ${properties.datacenter.url}object/floor/update
+    floorCreate: ${properties.datacenter.url}object/floor/create
     # 绑定楼层接口
     floorBind: ${properties.datacenter.url}rel/update/equip-ispace
     # 资产接口
@@ -137,6 +138,6 @@ properties:
     doorCreate: ${properties.datacenter.url}door/create_ignore
 
   message:
-    url: http://192.168.64.17:28888/message-center/
+    url: http://192.168.64.17:28890/message-center/
     # 发送消息接口
     createPath: ${properties.message.url}message/create

+ 1 - 1
scheduler/build.gradle

@@ -136,7 +136,7 @@ dependencies {
 // 下面是配置文件选择
 /*******************************************************/
 
-sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-dev']
+sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-test']
 //ext.needTest = 'true'
 // 打产品包
 task buildProdWar {

+ 1 - 1
scheduler/src/main/resources-test/application.yml

@@ -18,7 +18,7 @@
 ###############################################################################################################
 
 server:
-  port: 8080
+  port: 8081
 #  ssl:
 #    key-store:                          classpath:keystore.key
 #    key-store-password:                 20090421