caiaf пре 4 година
родитељ
комит
55fa15ee6e

+ 2 - 2
revit-algorithm/build.gradle

@@ -166,7 +166,7 @@ dependencyManagement {
 // 下面是配置文件选择
 /*******************************************************/
 
-sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-prod']
+sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-test']
 //ext.needTest = 'true'
 
 task doWar{
@@ -197,7 +197,7 @@ task buildProdWar {
 // 打测试环境包
 task buildTestWar {
     doFirst {
-        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-prod']
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-test']
         test.onlyIf {
             project.hasProperty("needTest")
         }

+ 11 - 11
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/backstage/state/ExportPassedState_3.kt

@@ -105,17 +105,17 @@ class ExportPassedState_3 : ModelState {
                 val excelService = SSpringContextUtil.getBean(ExcelService::class.java) as ExcelService
                 excelService.readBlockingExcel2007()
                 // 多楼层的模型检查
-//                var isPassed = monitorService.doMultiFloorCheck(it, excelService, floor.projectId!!, floor.folderId!!, floor.floorName)
-//                // 如果标高和轴网检查没通过, 则删除所有数据, 并回退到上个版本
-//                /************************************************** 轴网计算 处理标志 *********************************************************************/
-//                if(!isPassed){
-//                    modelFileService.removeSingle(it, myProperties, isForce = true, isMarkDelete = false)
-//                    //发送标高和轴网检查没通过的消息
-//                    val message = messageService.buildMultiModelCheckErrorMessage(floor.projectId!!, it.userId?: "",
-//                            "${folderFloorName.first}的${folderFloorName.second}未通过模型检查,请修改后重新上传", excelService.getDownloadUrl(it.id!!), folderFloorName)
-//                    messageService.sendMessage(message)
-//                    return@forEach
-//                }
+                var isPassed = monitorService.doMultiFloorCheck(it, excelService, floor.projectId!!, floor.folderId!!, floor.floorName)
+                // 如果标高和轴网检查没通过, 则删除所有数据, 并回退到上个版本
+                /************************************************** 轴网计算 处理标志 *********************************************************************/
+                if(!isPassed){
+                    modelFileService.removeSingle(it, myProperties, isForce = true, isMarkDelete = false)
+                    //发送标高和轴网检查没通过的消息
+                    val message = messageService.buildMultiModelCheckErrorMessage(floor.projectId!!, it.userId?: "",
+                            "${folderFloorName.first}的${folderFloorName.second}未通过模型检查,请修改后重新上传", excelService.getDownloadUrl(it.id!!), folderFloorName)
+                    messageService.sendMessage(message)
+                    return@forEach
+                }
 
                 val syncFloor = SSpringContextUtil.getBean(SyncFloor::class.java) as SyncFloor
                 syncFloor.init(floor).prepareDataCenterData()

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

@@ -97,8 +97,9 @@ class SyncEquipPart : SyncObject{
         val sb = StringBuilder()
         dataCenter.forEach { (_, dcEquip) ->
             if(dcEquip.bimId != null && bimMap.contains(dcEquip.bimId!!)){
-                val equip = bimMap[dcEquip.bimId!!]
-                if(!equip!!.family.equals(dcEquip.classCode)){
+                val equip = bimMap[dcEquip.bimId!!]!!
+                val family = equip.family
+                if(!family.isNullOrEmpty() && !dcEquip.classCode!!.endsWith(family!!)){
                     // 需要先删除, 后添加
                     deleteList.add(dcEquip)
                     return@forEach

+ 5 - 1
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/controllers/modelFile/ReportController.kt

@@ -27,7 +27,10 @@ import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
 import java.net.URLEncoder
 import java.nio.charset.Charset
+import java.text.SimpleDateFormat
+import java.util.*
 import javax.servlet.http.HttpServletResponse
+import kotlin.collections.ArrayList
 
 /**
  *
@@ -123,7 +126,8 @@ class ReportController {
             excelService.readNonBlockingExcel2007()
             reportService.writeNonBlockingReportToExcel(list, reportMap, excelService)
             response.contentType = "application/vnd.ms-excel;charset=utf-8"
-            var str = (folder?.name + "检查报告.xlsx")
+            val desiredFormat = SimpleDateFormat("yyyyMMdd").format(Date())
+            var str = ("${folder?.name}-模型检查报告-${desiredFormat}.xlsx")
             response.setHeader("Content-disposition",
                     "attachment;filename=${URLEncoder.encode(str, "UTF-8")}")
             excelService.workBook!!.write(response.outputStream)

+ 15 - 0
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/models/entities/Connector.kt

@@ -108,4 +108,19 @@ class Connector : BaseComponent(){
     @JSONField(name = "ConnectId")
     @JsonProperty("ConnectId")
     var connectIdJson: ArrayList<String>? = null
+
+    /** 所属BIMID */
+    @ApiModelProperty(value = "所属BIMID")
+    @Column(name = "belong_bimid")
+    @JSONField(name = "BelongBimId")
+    @JsonProperty("BelongBimId")
+    var belongBimId: String? = null
+
+
+    /** 管道类型 */
+    @ApiModelProperty(value = "管道类型")
+    @Column(name = "riser_state")
+    @JSONField(name = "RiserState")
+    @JsonProperty("RiserState")
+    var riserState: Int? = null
 }

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

@@ -1,6 +1,7 @@
 package cn.sagacloud.server.algorithm.services.endpoint
 
 import cn.sagacloud.server.algorithm.backstage.sync.SyncFloor
+import cn.sagacloud.server.algorithm.backstage.sync.SyncUtil
 import cn.sagacloud.server.algorithm.dao.mapper.FloorMapper
 import cn.sagacloud.server.algorithm.models.config.MyProperties
 import cn.sagacloud.server.algorithm.models.message.MessageType
@@ -13,6 +14,7 @@ import cn.sagacloud.server.algorithm.services.BaseDataService
 import cn.sagacloud.server.algorithm.services.CommonService
 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 com.alibaba.fastjson.JSON
 import com.sybotan.database.SFilter
@@ -52,6 +54,15 @@ class ModelFileService {
     @Autowired
     lateinit var monitorService: ModelMonitorService
 
+    @Autowired
+    lateinit var myProperties: MyProperties
+
+    @Autowired
+    lateinit var syncUtil : SyncUtil
+
+    @Autowired
+    lateinit var messageService: MessageService
+
     var dataService = BaseDataService
 
 //    /**
@@ -456,44 +467,54 @@ class ModelFileService {
     }
 
 
-//    fun import(floorModelId: String): SBaseResponse {
-//
-//        try {
-//            val floorModelArr = dataService.floorModelService.select(SFilter.eq("id", floorModelId!!)).exec()
-//            if (floorModelArr.size != 1)
-//                return
-//            val floor = floorModelArr[0]
-//            val folderFloorName = CommonService.getReportPrefix(floor)
-//            // 获取模型导出的zip文件
-//            val objData = monitorService.analyzeJsonz(it.id!!)
-//            // 导入数据进数据库
-//            val bimIdPrefix = CommonService.generateBIMIDPrefix(it.projectId!!, floor.folderId!!, floor.floorName!!, true)
-//            monitorService.persistenceData(it.id!!, objData!!, bimIdPrefix)
-//            // excel报告
-//            val excelService = SSpringContextUtil.getBean(ExcelService::class.java) as ExcelService
-//            excelService.readBlockingExcel2007()
-//
-//            val syncFloor = SSpringContextUtil.getBean(SyncFloor::class.java) as SyncFloor
-//            syncFloor.init(floor).prepareDataCenterData()
-//            // 开始同步设备, 部件, 元空间
-//            syncUtil.syncDataWithBindingFloor(syncFloor, it, floor)
-//            // 转状态到4
-//            it.status = 4
-//            dataService.modelFileService.update(it, arrayListOf("status"))
-//            val message = messageService.buildMessageEntityWithoutLink("${folderFloorName.first}的${folderFloorName.second}模型上传成功", MessageType.Success, it.projectId, arrayListOf(it.userId?:""), "")
-//            messageService.sendMessage(message)
-//        } catch (e: Exception) {
-//            // 转状态到31
-//            try {
-//                it.status = 31
-//                it.syncRetryDate = Date()
-//                it.syncErrorMsg = e.message + CommonService.getStackTrace(e)
-//                dataService.modelFileService.update(it, arrayListOf("status", "syncRetryDate", "syncErrorMsg"))
-//            }catch (e : Exception){}
-//            e.printStackTrace()
-//            logger.error(e.message)
-//        }
-//
-//    }
+    fun import(floorModelId: String): SBaseResponse {
+        val floorModelArr = dataService.floorModelService.select(SFilter.eq("id", floorModelId!!)).exec()
+
+        if (floorModelArr.size != 1)
+            return SBaseResponse(SResponseType.failure,"楼层不存在")
+        val floor = floorModelArr[0]
+        if(floor.currentModelId.isNullOrEmpty()){
+            return SBaseResponse(SResponseType.failure,"楼层没绑模型")
+        }
+
+        val modelFile = dataService.modelFileService.select(SFilter.eq("id",floor.currentModelId!!)).entity()
+        if(modelFile == null){
+            return SBaseResponse(SResponseType.failure,"模型不存在")
+        }
+
+        try {
+
+            val folderFloorName = CommonService.getReportPrefix(floor)
+            // 获取模型导出的zip文件
+            val objData = monitorService.analyzeJsonz(floor.currentModelId!!)
+            // 导入数据进数据库
+            val bimIdPrefix = CommonService.generateBIMIDPrefix(modelFile.id!!, floor.folderId!!, floor.floorName!!, true)
+            monitorService.persistenceData(floor.currentModelId!!, objData!!, bimIdPrefix)
+            // excel报告
+            val excelService = SSpringContextUtil.getBean(ExcelService::class.java) as ExcelService
+            excelService.readBlockingExcel2007()
+
+            val syncFloor = SSpringContextUtil.getBean(SyncFloor::class.java) as SyncFloor
+            syncFloor.init(floor).prepareDataCenterData()
+            // 开始同步设备, 部件, 元空间
+            syncUtil.syncDataWithBindingFloor(syncFloor, modelFile, floor)
+            // 转状态到4
+            modelFile.status = 4
+            dataService.modelFileService.update(modelFile, arrayListOf("status"))
+            val message = messageService.buildMessageEntityWithoutLink("${folderFloorName.first}的${folderFloorName.second}模型上传成功", MessageType.Success, modelFile.projectId, arrayListOf(modelFile.userId?:""), "")
+            messageService.sendMessage(message)
+        } catch (e: Exception) {
+            // 转状态到31
+            try {
+                modelFile.status = 31
+                modelFile.syncRetryDate = Date()
+                modelFile.syncErrorMsg = e.message + CommonService.getStackTrace(e)
+                dataService.modelFileService.update(modelFile, arrayListOf("status", "syncRetryDate", "syncErrorMsg"))
+            }catch (e : Exception){}
+            e.printStackTrace()
+            logger.error(e.message)
+        }
+        return SBaseResponse(SResponseType.success,"")
+    }
 
 }

+ 7 - 4
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/json/JSONAnalyzerService.kt

@@ -166,11 +166,14 @@ open class JSONAnalyzerService {
         }
         //---------------------------------------------------------
         //12.20临时演示方案,room当作space
-        result = result and SpaceAnalyzer.analyze(dataService.spaceService, baseObj, baseObj.elements!!.rooms)
-        if (!result) {
-            return "处理Room异常"
+        if(checkProject){
+            result = result and Space2Analyzer.analyze(dataService.spaceService, baseObj, baseObj.elements!!.rooms)
+            if (!result) {
+                return "处理Room异常"
+            }
         }
 
+
 //        //处理Room, 填充数据, replace插入表
 //        result = result and RoomAnalyzer.analyze(dataService.roomService, baseObj, baseObj.elements!!.rooms)
 //        if (!result) {
@@ -326,8 +329,8 @@ open class JSONAnalyzerService {
                 dataService.connectorService,
                 baseObj,
                 //连接件转换
-//                connectorConvert(baseObj.elements!!.connectors,map),
                 connectors,
+                bimIdPrefix,
                 revitIdMap
         )
         if (!result) {

+ 2 - 1
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/json/RevitIdAnalyzer.kt

@@ -48,7 +48,7 @@ object RevitIdAnalyzer {
         return SResponseType.success == result.result
     }
 
-    fun analyzeConnector(connectorService: SObjectService<Connector>, baseObj: BaseObj<AllComponents>, connectors: ArrayList<Connector>?, revitIdMap: HashMap<String, BaseComponent>) : Boolean{
+    fun analyzeConnector(connectorService: SObjectService<Connector>, baseObj: BaseObj<AllComponents>, connectors: ArrayList<Connector>?, bimIdPrefix: String, revitIdMap: HashMap<String, BaseComponent>) : Boolean{
         if(connectors == null || connectors.isEmpty())
             return true
         // revit id --> id
@@ -60,6 +60,7 @@ object RevitIdAnalyzer {
                 val tmp = revitIdMap[obj.owner!!]
                 obj.belong = tmp!!.id
                 obj.belongType = tmp.elementType
+                obj.belongBimId = "${bimIdPrefix}${tmp.sourceId}"
             }
             if(obj.revitId != null && obj.revitId!!.isNotEmpty())
                 connectorMap[obj.revitId!!] = obj.id!!

+ 61 - 0
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/json/Space2Analyzer.kt

@@ -0,0 +1,61 @@
+package cn.sagacloud.server.algorithm.services.json
+
+import cn.sagacloud.server.algorithm.models.entities.Space
+import cn.sagacloud.server.algorithm.models.jsonAnalyzer.AllComponents
+import cn.sagacloud.server.algorithm.models.jsonAnalyzer.BaseObj
+import cn.sagacloud.server.algorithm.services.CommonService
+import com.google.common.base.Strings
+import com.sybotan.database.SFilter
+import com.sybotan.service.SObjectService
+import com.sybotan.service.models.enums.SResponseType
+import com.sybotan.service.models.requests.SCreateRequest
+import java.util.ArrayList
+
+/**
+ *
+ *
+ * @author jxing
+ */
+object Space2Analyzer {
+
+    /**
+     * @Description: 房间和空间分析
+     */
+    fun analyze(spaceService: SObjectService<Space>, baseObj: BaseObj<AllComponents>, spaces: ArrayList<Space>?) : Boolean{
+        if(spaces == null || spaces.isEmpty())
+            return true
+        for(obj in spaces){
+            obj.id = CommonService.generateUUID(null, true)
+            obj.modelId = baseObj.modelId
+            if(obj.parameters != null){
+                var code : String = ""
+                for (param in obj.parameters!!){
+                    if(param.name.equals("名称")){
+                        if(param.value.isNullOrBlank()){
+                            obj.localName = obj.name
+                        }else
+                            obj.localName = param.value
+                    }else if(param.name.equals("编号") && param.value != null){
+                        code = param.value
+                    }else if(param.name.equals("2.空间标准类型编码")){
+                        obj.wDRoomFuncID = param.value
+                    }else if(param.name.equals("3.空间标准类型")){
+                        obj.wDRoomFuncName = param.value
+                    }else if(param.name.equals("2.房间标准类型编码")){
+                        obj.wDRoomFuncID = param.value
+                    }else if(param.name.equals("3.房间标准类型名称")){
+                        obj.wDRoomFuncName = param.value
+                    }
+                }
+                if(obj.localName == null || obj.localName!!.isEmpty() || obj.localName.equals("空间")){
+                    obj.localName = java.lang.String.join("", Strings.nullToEmpty(obj.localName), Strings.nullToEmpty(code))
+                }
+            }
+        }
+        spaceService.delete(SFilter.eq("modelId", baseObj.modelId!!), SFilter.eq("elementType","Room"))
+        val create = SCreateRequest<Space>()
+        create.content = spaces
+        val result = spaceService.createList(create)
+        return SResponseType.success == result.result
+    }
+}

+ 1 - 1
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/json/SpaceAnalyzer.kt

@@ -52,7 +52,7 @@ object SpaceAnalyzer {
                 }
             }
         }
-        spaceService.delete(SFilter.eq("modelId", baseObj.modelId!!))
+        spaceService.delete(SFilter.eq("modelId", baseObj.modelId!!), SFilter.eq("elementType","Space"))
         val create = SCreateRequest<Space>()
         create.content = spaces
         val result = spaceService.createList(create)

+ 4 - 0
revit-algorithm/src/main/resources-prod/application.yml

@@ -75,7 +75,11 @@ properties:
   fileService:
     # 基本属性
     #url:                               http://api.sagacloud.cn/dp-auxiliary/image-service/ # http://47.93.33.207:28888/image-service/ #http://adm.sagacloud.cn/image-service/
+<<<<<<< HEAD
     url:                               http://39.97.179.199:8891/image-service/
+=======
+    url:                               http//39.97.179.199:8891/image-service/
+>>>>>>> prod
     systemId:                          revit
     secret:                            63afbef6906c342b
     dir:                               model

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

@@ -1,6 +1,6 @@
 ###############################################################################################################
 server:
-  port: 8080
+  port: 8082
   tomcat:
     basedir:                            /mnt/harddisk/saga/tomcatTemp