Quellcode durchsuchen

********************WX************************
调整配置

zhangweixin vor 4 Jahren
Ursprung
Commit
1a722ccbaf
94 geänderte Dateien mit 5211 neuen und 222 gelöschten Zeilen
  1. 2 2
      data-center/src/main/kotlin/com/persagy/server/controllers/dict/DictControllers.kt
  2. 49 0
      data-center/src/main/kotlin/com/persagy/server/services/dict/dictnew/DictDefClassService.kt
  3. 2 2
      data-center/src/main/resources/application-dev.yml
  4. 20 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/assistant/PointD.kt
  5. 83 0
      equip-componnet/src/main/kotlin/com/persagy/server/EquipComponentApp.kt
  6. 86 0
      equip-componnet/src/main/kotlin/com/persagy/server/Swagger2Config.kt
  7. 46 0
      equip-componnet/src/main/kotlin/com/persagy/server/WebMvcConfg.kt
  8. 0 8
      equip-componnet/src/main/kotlin/com/persagy/server/a.java
  9. 2 2
      equip-componnet/src/main/kotlin/com/persagy/server/controllers/PropertyController.kt
  10. 5 11
      equip-componnet/src/main/kotlin/com/persagy/server/controllers/ShaftController.kt
  11. 149 0
      equip-componnet/src/main/kotlin/com/persagy/server/controllers/SpaceController.kt
  12. 71 0
      equip-componnet/src/main/kotlin/com/persagy/server/controllers/TenantController.kt
  13. 96 0
      equip-componnet/src/main/kotlin/com/persagy/server/controllers/dict/DictCustomController.kt
  14. 73 0
      equip-componnet/src/main/kotlin/com/persagy/server/dao/EquipZoneDao.kt
  15. 72 0
      equip-componnet/src/main/kotlin/com/persagy/server/dao/EquipZoneTwoDao.kt
  16. 21 0
      equip-componnet/src/main/kotlin/com/persagy/server/dao/TenantZoneDao.kt
  17. 73 0
      equip-componnet/src/main/kotlin/com/persagy/server/dao/VerticalSpDao.kt
  18. 0 8
      equip-componnet/src/main/kotlin/com/persagy/server/dao/a.java
  19. 1 1
      equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/CustomSql.kt
  20. 48 0
      equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/EquipmentZoneMapper.kt
  21. 26 0
      equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/TenantZoneMapper.kt
  22. 19 0
      equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/ZoneSpaceMapper.kt
  23. 19 0
      equip-componnet/src/main/kotlin/com/persagy/server/models/ComponentCascade.kt
  24. 21 0
      equip-componnet/src/main/kotlin/com/persagy/server/models/EquipComDel.kt
  25. 470 0
      equip-componnet/src/main/kotlin/com/persagy/server/models/PropertySupplement.kt
  26. 22 0
      equip-componnet/src/main/kotlin/com/persagy/server/models/SimilarityDegree.kt
  27. 110 0
      equip-componnet/src/main/kotlin/com/persagy/server/models/TenantCascade.kt
  28. 0 8
      equip-componnet/src/main/kotlin/com/persagy/server/models/a.java
  29. 0 1
      equip-componnet/src/main/kotlin/com/persagy/server/models/objects/FloorCompon.kt
  30. 168 0
      equip-componnet/src/main/kotlin/com/persagy/server/models/objects/ZoneSpace.kt
  31. 2 2
      equip-componnet/src/main/kotlin/com/persagy/server/models/requests/EquipUpDateEnclosure.kt
  32. 1 1
      equip-componnet/src/main/kotlin/com/persagy/server/models/requests/EquipUpDateEnclosureRequest.kt
  33. 1 1
      equip-componnet/src/main/kotlin/com/persagy/server/models/requests/ShaftSpaceVertical.kt
  34. 1 1
      equip-componnet/src/main/kotlin/com/persagy/server/models/requests/SpatialRelationship.kt
  35. 2 2
      equip-componnet/src/main/kotlin/com/persagy/server/models/requests/ZoneEquipQueryRequest.kt
  36. 2 2
      equip-componnet/src/main/kotlin/com/persagy/server/models/requests/ZoneISpaceQueryRequest.kt
  37. 65 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/EquipmentZoneService.kt
  38. 2 2
      equip-componnet/src/main/kotlin/com/persagy/server/service/PropertyEquipService.kt
  39. 13 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/REqInShService.kt
  40. 17 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/RShaftThroughShaftService.kt
  41. 145 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/RSyEqService.kt
  42. 15 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/RSyInShService.kt
  43. 21 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/TenantZoneService.kt
  44. 15 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/base/BaseDataService.kt
  45. 47 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/base/RService.kt
  46. 24 121
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/EquipmentService.kt
  47. 124 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/GeneralSystemService.kt
  48. 89 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ISpaceService.kt
  49. 1 1
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/PropertyService.kt
  50. 694 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ShaftService.kt
  51. 73 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/TenantService.kt
  52. 97 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ZoneSpaceBaseService.kt
  53. 184 0
      equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ZoneSpaceService.kt
  54. 17 17
      equip-componnet/src/main/kotlin/com/persagy/server/utils/DataVerification.kt
  55. 10 9
      equip-componnet/src/main/kotlin/com/persagy/server/utils/MatchingProperty.kt
  56. 1 1
      equip-componnet/src/main/kotlin/com/persagy/server/utils/ShaftNameUtil.kt
  57. 3 4
      equip-componnet/src/main/kotlin/com/persagy/server/utils/SpaceRunnables.kt
  58. 12 0
      equip-componnet/src/main/resources/application-dev.yml
  59. 26 0
      equip-componnet/src/main/resources/application-prod.yml
  60. 51 0
      equip-componnet/src/main/resources/application.yml
  61. 55 0
      equip-componnet/src/main/resources/logback-spring.xml
  62. 1 3
      gradle.properties
  63. 2 2
      labsl/src/main/kotlin/com/persagy/server/labsl/LaBSLApp.kt
  64. 2 2
      labsl/src/main/kotlin/com/persagy/server/labsl/Swagger2Config.kt
  65. 1 1
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Graph.kt
  66. 1 0
      labsl/src/main/kotlin/com/persagy/server/labsl/services/GraphService.kt
  67. 2 2
      labsl/src/main/kotlin/com/persagy/server/labsl/services/mappers/CustomMapper.kt
  68. 6 3
      labsl/src/main/resources/application-dev.yml
  69. 230 0
      message-center/build.gradle
  70. 96 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/MessageCenterApp.kt
  71. 92 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/Swagger2Config.kt
  72. 42 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/WebMvcConfg.kt
  73. 160 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/controllers/MessageController.kt
  74. 79 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/Message.kt
  75. 27 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/MessageContent.kt
  76. 33 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/MessageContentButton.kt
  77. 65 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/BaseInfo.kt
  78. 33 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/BaseInfoSuper.kt
  79. 20 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/PointD.kt
  80. 43 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/RBaseInfo.kt
  81. 49 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/request/BasicRequest.kt
  82. 48 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/models/request/MessageRequest.kt
  83. 66 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/services/MessageService.kt
  84. 41 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/services/activemq/JMSComsumer.kt
  85. 29 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/services/activemq/JMSProducer.kt
  86. 27 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/services/base/RService.kt
  87. 201 0
      message-center/src/main/kotlin/com/persagy/server/messagecenter/services/base/Service.kt
  88. 49 0
      message-center/src/main/kotlin/com/persagy/server/synchronize/MessageHandler.kt
  89. 56 0
      message-center/src/main/resources/application-dev.yml
  90. 41 0
      message-center/src/main/resources/application-prod.yml
  91. 61 0
      message-center/src/main/resources/application.yml
  92. 43 0
      message-center/src/main/resources/logback-spring.xml
  93. 0 2
      scanbuilding/src/main/kotlin/com/persagy/server/controller/UserController.kt
  94. 1 0
      settings.gradle

+ 2 - 2
data-center/src/main/kotlin/com/persagy/server/controllers/dict/DictControllers.kt

@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController
  * @author  wx
  * @date  2020/9/23 15:30
  */
-@Api(tags = ["字典"])
+@Api(tags = ["040、字典"])
 @RestController
 @RequestMapping("/dict")
 class DictControllers {
@@ -30,7 +30,7 @@ class DictControllers {
      * @return              查询结果
      */
     @ApiOperation(value = "类型-字典查询所有设备类型、部件所有类型、系统类型、专业类型", notes = "输入设备类型:equipment,输入部件类型:component,输入系统类型:system,输入专业类型:major," +
-            "专业和系统:majorSystem,业务空间类型 space ,专业下的设备类型 majorEquipment ,设备和部件equipmentAndComponent,设备类型要以及对应的部件equipmentComponent ")
+            "专业和系统:majorSystem,业务空间类型 space ,专业下的设备类型 majorEquipment ,设备和部件equipmentAndComponent,设备类型要以及对应的部件equipmentComponent,专业下的系统,系统下的设备majorSystemEquip ")
     @PostMapping(value = ["/category"])
     fun categoryQuery(@RequestBody categoryRequest: CategoryRequest): SQueryResponse<DefClass> {
         return DictDefClassService.equipQuery(categoryRequest)

+ 49 - 0
data-center/src/main/kotlin/com/persagy/server/services/dict/dictnew/DictDefClassService.kt

@@ -133,6 +133,7 @@ object DictDefClassService : SObjectService<DefClass>(SMybatisDao(DefClass::clas
                         ).exec()
                     }
                     "majorEquipment" -> {
+                        /** 专业下的设备 */
                         val dictMajorList = dictMajorService.selectAll().exec()
                         if (dictMajorList.size>0){
                             for (dictMajor in dictMajorList){
@@ -151,12 +152,14 @@ object DictDefClassService : SObjectService<DefClass>(SMybatisDao(DefClass::clas
                         }
                     }
                     "equipmentAndComponent" -> {
+                        /** 设备和部件 */
                         dictSchemeCategoryList = defClassService.select(
                             SFilter.or(SFilter.eq("parentCode","component"),SFilter.eq("parentCode","equipment")), SFilter.eq("type", "group"),
                             SFilter.eq("groupId", dictProject.groupId!!)
                         ).exec()
                     }
                     "equipmentComponent" ->{
+                        /** 设备下的部件 */
                         dictSchemeCategoryList = defClassService.select(
                             SFilter.eq("parentCode","equipment"), SFilter.eq("type", "group"),
                             SFilter.eq("groupId", dictProject.groupId!!)
@@ -180,6 +183,52 @@ object DictDefClassService : SObjectService<DefClass>(SMybatisDao(DefClass::clas
                             }
                         }
                     }
+                    "majorSystemEquip" -> {
+                        /** 专业下的系统,系统下的设备 */
+                        val dictMajorList = dictMajorService.selectAll().exec()
+                        if (dictMajorList.size>0){
+                            for (dictMajor in dictMajorList){
+                                val defClass = DefClass()
+                                defClass.code = dictMajor.code
+                                defClass.name = dictMajor.name
+                                defClass.aliasName = dictMajor.aliasName
+                                defClass.aliasCode = dictMajor.aliasCode
+                                dictSchemeCategoryList.add(defClass)
+                            }
+                        }
+                        /** 系统 */
+                        val systemList = defClassService.select(
+                            SFilter.eq("parentCode", "system"), SFilter.eq("type", "group"),
+                            SFilter.eq("groupId", dictProject.groupId!!)
+                        ).exec()
+                        /** 设备 */
+                       val equipmentList = defClassService.select(
+                            SFilter.eq("parentCode","equipment"), SFilter.eq("type", "group"),
+                            SFilter.eq("groupId", dictProject.groupId!!)
+                        ).exec()
+                        /** 系统下的设备 */
+                        for (system in systemList){
+                            for (equipment in equipmentList){
+                                if (system.code == equipment.systemCode){
+                                    if (system.children.isNullOrEmpty()){
+                                        system.children = ArrayList<DefClass>()
+                                    }
+                                    system.children!!.add(equipment)
+                                }
+                            }
+                        }
+                        /** 专业下的系统 */
+                        for (system in systemList){
+                            for (dictMajor in dictSchemeCategoryList){
+                                if (dictMajor.code == system.majorCode ){
+                                    if (dictMajor.children.isNullOrEmpty()){
+                                        dictMajor.children = ArrayList<DefClass>()
+                                    }
+                                    dictMajor.children!!.add(system)
+                                }
+                            }
+                        }
+                    }
                 }
                 sQueryResponse.result = SResponseType.success
                 sQueryResponse.content = dictSchemeCategoryList

+ 2 - 2
data-center/src/main/resources/application-dev.yml

@@ -34,9 +34,9 @@ spring:
     type:                               com.alibaba.druid.pool.DruidDataSource
     driver-class-name:                  org.postgresql.Driver
 #    url:                                jdbc:postgresql://60.205.177.43:5432/datacenter
-    url:                                jdbc:postgresql://60.205.177.43:5432/datacenter
+    url:                                jdbc:postgresql://39.102.40.239:5432/datacenter
     username:                           postgres
-    password:                           123qwe!@#
+    password:                           persagy_2020qwe!@#
 
   activemq:
 #    broker-url:                         tcp://192.168.20.225:61616

+ 20 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/assistant/PointD.kt

@@ -0,0 +1,20 @@
+package com.persagy.server.datacenter.models.entities.assistant
+
+class PointD {
+    var x : Double = 0.0
+    var y : Double = 0.0
+
+    constructor(x: Double, y: Double) {
+        this.x = x
+        this.y = y
+    }
+
+
+    fun distance(px : Double, py : Double) : Double{
+        var px1 = px
+        var py1 = py
+        px1 -= x
+        py1 -= y
+        return Math.sqrt(px1 * px1 + py1 * py1)
+    }
+}

+ 83 - 0
equip-componnet/src/main/kotlin/com/persagy/server/EquipComponentApp.kt

@@ -0,0 +1,83 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server
+
+import com.persagy.service.json.SJsonHttpMessageConverter
+import org.mybatis.spring.annotation.MapperScan
+import org.slf4j.LoggerFactory
+import org.springframework.boot.SpringApplication
+import org.springframework.boot.autoconfigure.SpringBootApplication
+import org.springframework.boot.builder.SpringApplicationBuilder
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.scheduling.annotation.EnableScheduling
+
+/**
+ * 应用配置
+ *
+ * @author  Andy
+ */
+@ComponentScan(basePackages = ["com.persagy"])           // 配置组件扫描路径
+@MapperScan("com.persagy")                       // Mapper组件扫描路径
+//@EnableEurekaClient
+//@EnableDiscoveryClient
+@SpringBootApplication
+@EnableScheduling
+open class EquipComponentApp : SpringBootServletInitializer() {
+    companion object {
+        // 日志
+        private val logger = LoggerFactory.getLogger(EquipComponentApp::class.java)
+    } // Companion object
+
+    /**
+     * 配置应用
+     *
+     * @param   application     应用构建对象
+     */
+    override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
+        return application.sources(EquipComponentApp::class.java)
+    } // Function configure
+
+    /**
+     * 配置FastJson
+     *
+     * @return  HttpMessageConverters
+     */
+    @Bean
+    @Suppress("MoveLambdaOutsideParentheses")
+    open fun jsonHttpMessageConverters(): SJsonHttpMessageConverter {
+        val fastConverter = SJsonHttpMessageConverter()
+        fastConverter.propertyNamingStrategy = com.alibaba.fastjson.PropertyNamingStrategy.PascalCase
+        return fastConverter
+    } // Function fastJsonHttpMessageConverters()
+
+} // Class Application
+
+/**
+ * Web应用入口
+ *
+ * @param   args        命令行参数
+ */
+fun main(args: Array<String>) {
+    SpringApplication.run(EquipComponentApp::class.java, *args)
+    return
+} // Function main()

+ 86 - 0
equip-componnet/src/main/kotlin/com/persagy/server/Swagger2Config.kt

@@ -0,0 +1,86 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server
+
+import org.slf4j.LoggerFactory
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+import springfox.documentation.builders.ApiInfoBuilder
+import springfox.documentation.builders.ParameterBuilder
+import springfox.documentation.builders.PathSelectors
+import springfox.documentation.builders.RequestHandlerSelectors
+import springfox.documentation.schema.ModelRef
+import springfox.documentation.service.ApiInfo
+import springfox.documentation.service.Contact
+import springfox.documentation.service.Parameter
+import springfox.documentation.spi.DocumentationType
+import springfox.documentation.spring.web.plugins.Docket
+import springfox.documentation.swagger2.annotations.EnableSwagger2
+
+/**
+ * RESTful API文档生成器Swagger2配置
+ *
+ * @author  PLX
+ */
+@Configuration
+@EnableSwagger2
+open class Swagger2Config {
+    companion object {
+        // 日志
+        private val logger = LoggerFactory.getLogger(Swagger2Config::class.java)
+    } // Companion object
+
+    /**
+     * 创建RestApi文档生成器
+     *
+     * @return  返回文档生成器对象
+     */
+    @Bean
+    open fun createRestApi(): Docket {
+        logger.debug("createRestApi")
+        val builder = ParameterBuilder()
+        val pars = ArrayList<Parameter>()
+        builder.name("projectId").description("项目ID").modelRef(ModelRef("string")).parameterType("header").required(false).build()
+        pars.add(builder.build())
+        return Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.persagy.server"))
+                .paths(PathSelectors.any())
+                .build()
+                .globalOperationParameters(pars)
+    } // Function createRestApi()
+
+    /**
+     * 返回API信息基本
+     *
+     * @return  返回Api基本信息
+     */
+    private fun apiInfo(): ApiInfo {
+        return ApiInfoBuilder()
+                .title("数据中心API-设备相关查询")
+                .description("")
+                .termsOfServiceUrl("http://www.sagacloud.cn/")
+                .contact(Contact("张维新", "", "zhangweixin@sagacloud.cn"))
+                .version("2.0")
+                .build()
+    } // Function apiInfo()
+} // Class Swagger2Config

+ 46 - 0
equip-componnet/src/main/kotlin/com/persagy/server/WebMvcConfg.kt

@@ -0,0 +1,46 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server
+
+import com.persagy.service.interceptors.SPageInterceptor
+import org.slf4j.LoggerFactory
+import org.springframework.context.annotation.Configuration
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
+
+@Configuration
+open class WebMvcConfg: WebMvcConfigurerAdapter() {
+    companion object {
+        // 日志
+        private val logger = LoggerFactory.getLogger(WebMvcConfg::class.java)
+    } // Companion object
+    /**
+     * 配置拦截器
+     *
+     * @param   registry        拦截器注册器
+     */
+    override fun addInterceptors(registry : InterceptorRegistry) {
+        //registry.addInterceptor(AccessControlAllowOriginInterceptor()).addPathPatterns("/**")
+        registry.addInterceptor(SPageInterceptor()).addPathPatterns("/**")
+        super.addInterceptors(registry)
+        return
+    } // Function addInterceptors()
+} // Class WebMvcConf()

+ 0 - 8
equip-componnet/src/main/kotlin/com/persagy/server/a.java

@@ -1,8 +0,0 @@
-package com.persagy.server;
-
-/**
- * @author wx
- * @date 2020/9/24 19:54
- */
-public class a {
-}

+ 2 - 2
equip-componnet/src/main/kotlin/com/persagy/server/controllers/PropertyController.kt

@@ -1,10 +1,10 @@
 package com.persagy.server.controllers
 
-import cn.sagacloud.server.equipcomponent.models.requests.EquipUpDateEnclosure
-import cn.sagacloud.server.equipcomponent.models.requests.EquipUpDateEnclosureRequest
 import com.persagy.database.SFilter
 import com.persagy.server.models.PropertyEquip
 import com.persagy.server.models.PropertyFamily
+import com.persagy.server.models.requests.EquipUpDateEnclosure
+import com.persagy.server.models.requests.EquipUpDateEnclosureRequest
 import com.persagy.server.service.PropertyEquipService
 import com.persagy.server.service.PropertyFamilyService
 import com.persagy.service.SPageContext

+ 5 - 11
equip-componnet/src/main/kotlin/com/persagy/server/controllers/ShaftController.kt

@@ -1,22 +1,16 @@
 package com.persagy.server.controllers
 
-import cn.sagacloud.server.datacenter.models.entities.Equipment
-import cn.sagacloud.server.datacenter.models.entities.GeneralSystem
-import cn.sagacloud.server.datacenter.models.entities.Shaft
-import cn.sagacloud.server.equipcomponent.models.entities.FloorCompon
-import cn.sagacloud.server.equipcomponent.models.requests.ShaftSpaceVertical
-import cn.sagacloud.server.equipcomponent.service.EquipmentService
-import cn.sagacloud.server.equipcomponent.service.EquipmentZoneService
-import cn.sagacloud.server.equipcomponent.service.GeneralSystemService
-import cn.sagacloud.server.equipcomponent.service.ShaftService
 import com.persagy.server.datacenter.models.entities.objects.Equipment
 import com.persagy.server.datacenter.models.entities.objects.GeneralSystem
 import com.persagy.server.datacenter.models.entities.objects.Shaft
 import com.persagy.server.models.objects.FloorCompon
+import com.persagy.server.models.requests.ShaftSpaceVertical
+import com.persagy.server.service.EquipmentZoneService
+import com.persagy.server.service.objects.EquipmentService
+import com.persagy.server.service.objects.GeneralSystemService
+import com.persagy.server.service.objects.ShaftService
 import com.persagy.service.models.requests.SQueryRequest
 import com.persagy.service.models.responses.SQueryResponse
-import com.sybotan.service.models.requests.SQueryRequest
-import com.sybotan.service.models.responses.SQueryResponse
 import io.swagger.annotations.Api
 import io.swagger.annotations.ApiOperation
 import org.springframework.beans.factory.annotation.Autowired

+ 149 - 0
equip-componnet/src/main/kotlin/com/persagy/server/controllers/SpaceController.kt

@@ -0,0 +1,149 @@
+package com.persagy.server.controllers
+
+import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.server.datacenter.models.entities.objects.GeneralSystem
+import com.persagy.server.datacenter.models.entities.objects.ZoneIspace
+import com.persagy.server.datacenter.models.entities.objects.ZoneSpace
+import com.persagy.server.datacenter.models.requests.UpZoneSpaceBaseRequest
+import com.persagy.server.models.requests.ZoneISpaceQueryRequest
+import com.persagy.server.service.objects.*
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SUpdateRequest
+import com.persagy.service.models.responses.SBaseResponse
+import com.persagy.service.models.responses.SQueryResponse
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+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
+
+/**
+ * 空间接口
+ *
+ * @author 张维新
+ */
+@Api(tags = ["空间相关接口"])
+@RestController
+@RequestMapping("/space")
+class SpaceController {
+
+    @Autowired
+    lateinit var service: ZoneSpaceService
+
+    /**
+     * 查询没有和当前空间绑定的系统
+     *
+     * @param   type        空间类型
+     * @param   spaceId     空间id
+     */
+    @ApiOperation(value="查询没有和当前空间绑定的系统", notes="例如:prijectId=Pj4201050001,type=AirConditioningZone spaceId=Sp4201050001df2091cdf719443b80bb737aeabf0525 " +
+            "spaceId 为当前空间id type为当前空间类型 ")
+    @PostMapping(value = ["/unspace-in-sys"])
+    fun unSpaceSys( type: String, spaceId: String,@RequestBody request: SQueryRequest): SQueryResponse<GeneralSystem> {
+        return GeneralSystemService.unSpaceSys(type,spaceId, request)
+    } // Function unSpaceSys()
+
+    @ApiOperation(value="查询没有和当前空间绑定的设备", notes="例如:prijectId=Pj4201050001,type=AirConditioningZone spaceId=Sp4201050001df2091cdf719443b80bb737aeabf0525 " +
+            "spaceId 为当前空间id type为当前空间类型 ")
+    @PostMapping(value = ["/unspace-in-eq"])
+    fun  unSpaceEq(type: String, spaceId: String,@RequestBody request: SQueryRequest): SQueryResponse<Equipment> {
+        return EquipmentService.pageQueryEquip(type,spaceId,request)
+    } // Function unSpaceEq()
+
+    @ApiOperation(value="查询没有服务于当前空间的设备", notes="例如:prijectId=Pj4201050001,type=AirConditioningZone spaceId=Sp4201050001df2091cdf719443b80bb737aeabf0525 " +
+            "spaceId 为当前空间id type为当前空间类型 ")
+    @PostMapping(value = ["/unspace-for-eq"])
+    fun  unSpaceForEq(type: String, spaceId: String,@RequestBody request: SQueryRequest): SQueryResponse<Equipment> {
+        return EquipmentService.pageQueryForEquip(type,spaceId,request)
+    } // Function unSpaceEq()
+
+    /**
+     * 空间内没有服务于当前空间的设备 根据坐标计算
+     */
+    @ApiOperation(value=" 空间内没有服务于当前空间的设备 根据坐标计算", notes="")
+    @PostMapping(value = ["/unspace-for-eq-point"])
+    fun unSpaceForEqPoint(type: String, spaceId: String,@RequestBody request: SQueryRequest): SQueryResponse<Equipment> {
+        return  EquipmentService.unSpaceForEqPoint(type,spaceId,request)
+    } // Function unSpaceForEqPoint()
+
+    /**
+     * 空间内没有和空间关联的设备 根据坐标计算
+     */
+    @ApiOperation(value=" 空间内没有和空间关联的设备 根据坐标计算", notes="")
+    @PostMapping(value = ["/unspace-fIn-eq-point"])
+    fun unSpaceInEqPoint(type: String, spaceId: String,@RequestBody request: SQueryRequest): SQueryResponse<Equipment> {
+        return  EquipmentService.unSpaceInEqPoint(type,spaceId,request)
+    } // Function unSpaceForEqPoint()
+
+    /**
+     * 未关联业务空间的元空间
+     */
+    @ApiOperation(value=" 未关联业务空间的元空间", notes="")
+    @PostMapping(value = ["/unspace-ispace"])
+    fun unSpaceIspace(objectType: String, @RequestBody request: ZoneISpaceQueryRequest): SQueryResponse<ZoneIspace> {
+        return ISpaceService.unSpaceIspace(objectType,request)
+    } // Function unSpaceIspace()
+
+    /**
+    * 同一建筑楼层中,包含该位置标签坐标的所有类型的业务空间实例
+     * projectId = Pj1101080029
+     * x = 148409.372029545
+     * y = -200252.644431612
+     * {
+        "Filters": " buildingId = 'Bd1101080029dddbfba4cdef11e9a316497519c1daff' and floorId = 'Fl110108002946c52d23cf9311e985165f9ca2299edb'",
+        "PageNumber": 1,
+        "PageSize": 50
+       }
+    */
+    @ApiOperation(value="同一建筑楼层中,包含该位置标签坐标的所有类型的业务空间实例", notes="  projectId = Pj1101080029\n" +
+            "      x = 148409.372029545\n" +
+            "      y = -200252.644431612\n{\n" +
+            "        \"Filters\": \" buildingId = 'Bd1101080029dddbfba4cdef11e9a316497519c1daff' and floorId = 'Fl110108002946c52d23cf9311e985165f9ca2299edb'\",\n" +
+            "        \"PageNumber\": 1,\n" +
+            "        \"PageSize\": 50\n" +
+            "       }")
+    @PostMapping(value = ["/in-bdfl-zonespacebase"])
+    fun inBdflZoneSpace(X: String, Y: String, @RequestBody request: SQueryRequest): SQueryResponse<ZoneSpace> {
+        return service.inBdflZoneSpace(X,Y,request)
+    } // Function unSpaceIspace()
+
+    /**
+     * 修改空间图片信息
+     * @param request 空间信息
+     */
+    @ApiOperation(value="修改空间图片信息", notes="(全部必传)ObjectType 空间类型 RoomID,Pic")
+    @PostMapping(value = ["/update-space-picinfo"])
+    fun updateSpacePicInfo(@RequestBody request: SUpdateRequest<UpZoneSpaceBaseRequest>): SBaseResponse {
+        return service.updateSpacePicInfo(request)
+    } // Function updateSpacePicInfo
+
+//    /**
+//     * 统计 属于多建筑楼层的空间
+//     */
+//    @ApiOperation(value="统计 属于多建筑楼层的空间", notes="")
+//    @PostMapping(value = ["/space-bd-fl"])
+//    fun spaceBdFl(): SCountResponse {
+//        return ZoneAirConditioningService.spaceBdFls()
+//    } // Function spaceBdFl()
+
+    /**
+     * 统计 属于多建筑楼层的空间数据
+     */
+    @ApiOperation(value="统计 属于多建筑楼层的空间数据", notes="")
+    @PostMapping(value = ["/space-bd-fl-data"])
+    fun spaceBdFlObj(@RequestBody request: SQueryRequest): SQueryResponse<ZoneSpace> {
+        return ZoneSpaceBaseService.pageQuery(request)
+    } // Function spaceBdFl()
+
+    /**
+     * 查询元空间关系 邻接关系、建筑交通网络 、 空气流通网络、 光照辐射网络
+     */
+//    @ApiOperation(value="查询元空间关系 邻接关系SpaceNeighborhood、建筑交通网络TrafficNetwork 、 空气流通网络ConvectionNetwork、 光照辐射网络RadiationNetwork", notes="")
+//    @PostMapping(value = ["/space-rel"])
+//    fun spatialRelationship(@RequestBody spatialRelationship: SpatialRelationship): SQueryResponse<RSpatialConnection>{
+//        return ZoneSpaceBaseService.spatialRelationship(spatialRelationship)
+//    }
+
+}  // Class SpaceController

+ 71 - 0
equip-componnet/src/main/kotlin/com/persagy/server/controllers/TenantController.kt

@@ -0,0 +1,71 @@
+package com.persagy.server.controllers
+
+import com.persagy.database.SFilter
+import com.persagy.server.models.TenantCascade
+import com.persagy.server.models.objects.Building
+import com.persagy.server.models.requests.ZoneEquipQueryRequest
+import com.persagy.server.service.TenantZoneService
+import com.persagy.server.service.base.BaseDataService
+import com.persagy.server.service.objects.TenantService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.responses.SQueryResponse
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+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
+
+/**
+ * 租户相关接口
+ *
+ * @author 张维新
+ */
+@Api(tags = ["租户相关接口"])
+@RestController
+@RequestMapping("/tenant")
+class TenantController {
+
+    /**
+     * 查询租户的建筑楼层
+     */
+    @ApiOperation(value=" 查询租户的建筑楼层 ", notes="")
+    @PostMapping(value = ["/tenant-building-floor"])
+    fun tenantBuildingFloor(tenantId: String,objectType: String): SQueryResponse<Building> {
+        return TenantService.tenantBuildingFloors(tenantId,objectType)
+    } //
+
+
+    @Autowired
+    lateinit var tenantZoneService : TenantZoneService
+
+
+    /**
+     * 根据业务空间查询租户
+     */
+    @ApiOperation(value=" 查询租户的建筑楼层 ", notes="")
+    @PostMapping(value = ["/zone-query"])
+    fun queryTenantBySpace(@RequestBody request: ZoneEquipQueryRequest): SQueryResponse<TenantCascade> {
+        val withFilterList = ArrayList<SFilter>()
+        val projectId = SPageContext.getHeader("ProjectId").toString()
+        withFilterList.add(SFilter.eq("projectId", projectId))
+        if(request.zoneId.isNullOrEmpty() && request.zoneType.isNullOrEmpty()) {
+            return BaseDataService.tenantService.pageQuery(request, withFilterList)
+        }
+        if(request.notInZone == true) {
+            val tenantIdsUnderSpace = tenantZoneService.getTenantIdUnderSpace(projectId)
+            if(!tenantIdsUnderSpace.isNullOrEmpty())
+                withFilterList.add(SFilter.not(SFilter.inList("id", tenantIdsUnderSpace)))
+            return BaseDataService.tenantService.pageQuery(request, withFilterList)
+        }
+        val tenantIdUnderSpace = tenantZoneService.getTenantIdUnderSpace(projectId, request.zoneType, request.zoneId)
+        if(tenantIdUnderSpace.isNullOrEmpty()){
+            return SQueryResponse()
+        }
+        withFilterList.add(SFilter.inList("id", tenantIdUnderSpace))
+        return BaseDataService.tenantService.pageQuery(request, withFilterList)
+    } //
+
+
+} // Class TenantController

+ 96 - 0
equip-componnet/src/main/kotlin/com/persagy/server/controllers/dict/DictCustomController.kt

@@ -0,0 +1,96 @@
+package com.persagy.server.controllers.dict
+
+
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.dictdatacenter.DictTypeConversionLog
+import com.persagy.service.SObjectService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.requests.SCountRequest
+import com.persagy.service.models.responses.SCountResponse
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+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 张维新
+ */
+@Api(tags = ["项目化字典"])
+@RestController
+@RequestMapping("/dict-custom")
+class DictCustomController {
+
+    /** 数据中心向物理世界转数据 自定义字典 */
+    val dictTypeConversionLogService = SObjectService(SMybatisDao(DictTypeConversionLog::class.java))
+
+    /**
+     * 项目化字典类型
+     */
+//    @ApiOperation(value = "项目化字典 - 统计数量", notes = "")
+//    @PostMapping(value = ["/project-dict-count"])
+//    fun  projectDictCount(@RequestBody request: SCountRequest): SCountResponse {
+//        return DictDatacenterProjectcustomService.counts(request)
+//    } // Function  projectDictCount
+
+    /**
+     * 需补充转换规则数量
+     */
+//    @ApiOperation(value = "项目化字典 - 需补充转换规则数量", notes = "")
+//    @PostMapping(value = ["/project-dict-switch-count"])
+//    fun  projectDictSwitchRuleCount(): SCountResponse{
+//        return DictDatacenterProjectcustomService.projectDictSwitchRuleCounts()
+//    } // Function  projectDictSwitchRuleCount
+
+
+    /**
+     * 项目化字典类型
+     */
+//    @ApiOperation(value = "项目化字典 - 内容", notes = "")
+//    @PostMapping(value = ["/project-dict-info"])
+//    fun  projectDictInfo(@RequestBody request: SQueryRequest): SQueryResponse<DictDatacenterProjectcustom> {
+//        return DictDatacenterProjectcustomService.queryDict(request)
+//    } // Function  projectDictCount()
+
+    /**
+     * 数据中心-物理世界数据转换
+     */
+//    @ApiOperation(value = "数据中心-物理世界数据转换 ", notes = "")
+//    @PostMapping(value = ["/project-dict-datacenter"])
+//    fun dataCenterDataPlatform(): SQueryResponse<EquipDictStatistics>{
+//       return DictDatacenterProjectcustomService.equipStatisticsDataCenter()
+//    } // Function dataCenterDataPlatform ()
+
+    /**
+     * 物理世界 - 数据中心数据转换
+     */
+//    @ApiOperation(value = "物理世界-数据中心数据转换 ", notes = "")
+//    @PostMapping(value = ["/project-dict-dataplatfrom"])
+//    fun dataPlatformdataCenter(): SQueryResponse<EquipDictStatistics>{
+//        return DictDatacenterProjectcustomService.equipStatisticsDataPlatfrom()
+//    } // Function dataCenterDataPlatform ()
+
+
+//    @ApiOperation(value = "更新自定义自定脚本", notes = "")
+//    @PostMapping(value = ["/update"])
+//    fun update(@RequestBody request: ArrayList<DictDatacenterProjectcustom>): SBaseResponse {
+//
+//        return DictDatacenterProjectcustomService.updateDictSwitchRule(request)
+//    } // Function upDate
+
+    /**
+     * 获取不能同步到物理世界对象的数量
+     */
+    @ApiOperation(value = "获取不能同步到物理世界对象的数量", notes = "")
+    @PostMapping(value = ["/data-count"])
+    fun objectCounts(@RequestBody request: SCountRequest): SCountResponse {
+        return dictTypeConversionLogService.count(request,arrayListOf(SFilter.eq("projectId", SPageContext.getHeader("ProjectId").toString())))
+    }  // Function objectCounts()
+
+
+
+} //

+ 73 - 0
equip-componnet/src/main/kotlin/com/persagy/server/dao/EquipZoneDao.kt

@@ -0,0 +1,73 @@
+package com.persagy.server.dao
+
+import org.apache.ibatis.jdbc.SQL
+
+
+class EquipZoneDao {
+
+    fun selectEquipUnderSpace(projectId: String,zoneType : String?, zoneId : String?) : String{
+        return object : SQL() {
+            init {
+                SELECT("equip_id")
+                FROM("r_eq_in_sp_base")
+                // 多个where条件之间是默认and连接
+                WHERE("project_id = #{projectId} ")
+                if(zoneType != null)
+                    WHERE("object_type = #{zoneType}")
+                if(zoneId != null)
+                    WHERE("space_id = #{zoneId}")
+            }
+        }.toString()
+    }
+
+
+
+    fun similarityDegree(name: String,listStr:List<String>, total: Int, similar:Float): String{
+        return object : SQL() {
+            init {
+                SELECT("public.rel_str_similar(#{name}," +
+                        " ARRAY["+arrToString(listStr)+
+                        "]" +
+                        ", #{total}," +
+                        " #{similar})")
+
+            }
+        }.toString()
+    }
+
+    fun arrToString(listStr:List<String>): String{
+        var str = ""
+        for (ind in listStr.indices){
+
+//            if (listStr.size-1==ind){
+//                str+="'"+listStr[ind]+"'"
+//            }else{
+//                str+="'"+listStr[ind]+"'"+","
+//            }
+            if (listStr.size-1==ind){
+                str+="#{listStr[${ind}]}"
+            }else{
+                str+="#{listStr[${ind}]}"+","
+            }
+        }
+        return str
+    }
+
+
+//    object HelloWorld {
+//        @JvmStatic
+//        fun main(args: Array<String>) {
+////            val list = ArrayList<String>()
+////            list.add("北京")
+////            list.add("田径")
+////            val equipZoneDao = EquipZoneDao()
+////            val arrToString = equipZoneDao.similarityDegree("北京",list,list.size,0.0f)
+////
+//            val str = "测试's"
+//            val replace = str.replace("'", "\\\'")
+//
+//            println(replace)
+//        }
+//    }
+
+}

+ 72 - 0
equip-componnet/src/main/kotlin/com/persagy/server/dao/EquipZoneTwoDao.kt

@@ -0,0 +1,72 @@
+package com.persagy.server.dao
+
+import org.apache.ibatis.jdbc.SQL
+
+
+class EquipZoneTwoDao {
+
+    fun selectEquipUnderSpace(projectId: String,zoneType : String?, zoneId : String?) : String{
+        return object : SQL() {
+            init {
+                SELECT("equip_id")
+                FROM("r_eq_in_sp_base")
+                // 多个where条件之间是默认and连接
+                WHERE("project_id = #{projectId} ")
+                if(zoneType != null)
+                    WHERE("object_type = #{zoneType}")
+                if(zoneId != null)
+                    WHERE("space_id = #{zoneId}")
+            }
+        }.toString()
+    }
+
+
+
+    fun similarityDegree(name: String,listStr:List<String>, total: Int): String{
+        return object : SQL() {
+            init {
+                SELECT("public.rel_cilin_str_similar(#{name}," +
+                        " ARRAY["+arrToString(listStr)+
+                        "]" +
+                        ", #{total})")
+
+            }
+        }.toString()
+    }
+
+    fun arrToString(listStr:List<String>): String{
+        var str = ""
+        for (ind in listStr.indices){
+
+//            if (listStr.size-1==ind){
+//                str+="'"+listStr[ind]+"'"
+//            }else{
+//                str+="'"+listStr[ind]+"'"+","
+//            }
+            if (listStr.size-1==ind){
+                str+="#{listStr[${ind}]}"
+            }else{
+                str+="#{listStr[${ind}]}"+","
+            }
+        }
+        return str
+    }
+
+
+//    object HelloWorld {
+//        @JvmStatic
+//        fun main(args: Array<String>) {
+////            val list = ArrayList<String>()
+////            list.add("北京")
+////            list.add("田径")
+////            val equipZoneDao = EquipZoneDao()
+////            val arrToString = equipZoneDao.similarityDegree("北京",list,list.size,0.0f)
+////
+//            val str = "测试's"
+//            val replace = str.replace("'", "\\\'")
+//
+//            println(replace)
+//        }
+//    }
+
+}

+ 21 - 0
equip-componnet/src/main/kotlin/com/persagy/server/dao/TenantZoneDao.kt

@@ -0,0 +1,21 @@
+package com.persagy.server.dao
+
+import org.apache.ibatis.jdbc.SQL
+
+class TenantZoneDao {
+
+    fun selectTenantUnderSpace(projectId: String, zoneType : String?, zoneId : String?) : String{
+        return object : SQL() {
+            init {
+                SELECT("tn_id")
+                FROM("relationship.r_tn2sp")
+                // 多个where条件之间是默认and连接
+                WHERE("project_id = #{projectId} ")
+                if(zoneType != null)
+                    WHERE("zone_type = #{zoneType}")
+                if(zoneId != null)
+                    WHERE("sp_id = #{zoneId}")
+            }
+        }.toString()
+    }
+}

+ 73 - 0
equip-componnet/src/main/kotlin/com/persagy/server/dao/VerticalSpDao.kt

@@ -0,0 +1,73 @@
+package com.persagy.server.dao
+
+import org.apache.ibatis.jdbc.SQL
+
+
+class VerticalSpDao {
+
+    fun selectEquipUnderSpace(projectId: String,zoneType : String?, zoneId : String?) : String{
+        return object : SQL() {
+            init {
+                SELECT("equip_id")
+                FROM("r_eq_in_sp_base")
+                // 多个where条件之间是默认and连接
+                WHERE("project_id = #{projectId} ")
+                if(zoneType != null)
+                    WHERE("object_type = #{zoneType}")
+                if(zoneId != null)
+                    WHERE("space_id = #{zoneId}")
+            }
+        }.toString()
+    }
+
+
+    /**
+     * 计算垂直关系
+     */
+    fun verticalSp(projectId: String,buildingId: String,zoneType: String,listStr:List<String>): String{
+        return object : SQL() {
+            init {
+                SELECT("public.is_vertically_overlap(#{projectId},#{buildingId},#{zoneType}," +
+                        " ARRAY["+arrToString(listStr)+
+                        "]" +
+                        ")")
+            }
+        }.toString()
+    }
+
+    fun arrToString(listStr:List<String>): String{
+        var str = ""
+        for (ind in listStr.indices){
+
+//            if (listStr.size-1==ind){
+//                str+="'"+listStr[ind]+"'"
+//            }else{
+//                str+="'"+listStr[ind]+"'"+","
+//            }
+            if (listStr.size-1==ind){
+                str+="#{listStr[${ind}]}"
+            }else{
+                str+="#{listStr[${ind}]}"+","
+            }
+        }
+        return str
+    }
+
+
+//    object HelloWorld {
+//        @JvmStatic
+//        fun main(args: Array<String>) {
+////            val list = ArrayList<String>()
+////            list.add("北京")
+////            list.add("田径")
+////            val equipZoneDao = EquipZoneDao()
+////            val arrToString = equipZoneDao.similarityDegree("北京",list,list.size,0.0f)
+////
+//            val str = "测试's"
+//            val replace = str.replace("'", "\\\'")
+//
+//            println(replace)
+//        }
+//    }
+
+}

+ 0 - 8
equip-componnet/src/main/kotlin/com/persagy/server/dao/a.java

@@ -1,8 +0,0 @@
-package com.persagy.server.dao;
-
-/**
- * @author wx
- * @date 2020/9/28 9:26
- */
-public class a {
-}

+ 1 - 1
equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/CustomSql.kt

@@ -149,4 +149,4 @@ interface CustomSql {
     @Select("select is_vertically_overlap(#{projectId})")
     fun  spVertically(projectId: String):Boolean
 
-} // interface CustomSql
+} //

+ 48 - 0
equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/EquipmentZoneMapper.kt

@@ -0,0 +1,48 @@
+package com.persagy.server.dao.mappers
+
+import com.persagy.server.dao.EquipZoneDao
+import com.persagy.server.dao.EquipZoneTwoDao
+import com.persagy.server.dao.VerticalSpDao
+import org.apache.ibatis.annotations.Mapper
+import org.apache.ibatis.annotations.Param
+import org.apache.ibatis.annotations.Select
+import org.apache.ibatis.annotations.SelectProvider
+import org.springframework.stereotype.Repository
+
+
+@Mapper
+@Repository
+interface EquipmentZoneMapper {
+
+    /** 查询在某种业务空间类型, 某个业务空间实例下的设备的id集合*/
+    @SelectProvider(method="selectEquipUnderSpace", type= EquipZoneDao::class)
+    fun selectEquipUnderSpace(@Param("projectId")projectId: String, @Param("zoneType")zoneType : String?, @Param("zoneId")zoneId : String?): ArrayList<String>
+
+
+    /**
+     * 查询所有在业务空间下的设备的id集合
+     */
+    @Select("select distinct equip_id from r_eq_in_sp_base where project_id = #{projectId}")
+    fun selectAllEquipsUnderSpace(@Param("projectId")projectId: String): ArrayList<String>
+
+
+    /**
+     * 相似度匹配
+     */
+    @SelectProvider(method="similarityDegree", type= EquipZoneDao::class)
+    fun similar(@Param("name")name: String,@Param("listStr")listStr:List<String>,@Param("total")total: Int, @Param("similar")similar:Float): String
+
+    /**
+     * 相似度匹配
+     */
+    @SelectProvider(method="similarityDegree", type= EquipZoneTwoDao::class)
+    fun similarTwo(@Param("name")name: String,@Param("listStr")listStr:List<String>,@Param("total")total: Int): String
+
+    /**
+     * 相似度匹配
+     */
+    @SelectProvider(method="verticalSp", type= VerticalSpDao::class)
+    fun spVerticallySp(@Param("projectId")projectId: String,@Param("buildingId")buildingId: String,@Param("zoneType")zoneType: String,@Param("listStr")listStr:List<String>): Boolean
+
+
+}

+ 26 - 0
equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/TenantZoneMapper.kt

@@ -0,0 +1,26 @@
+package com.persagy.server.dao.mappers
+
+import com.persagy.server.dao.TenantZoneDao
+import org.apache.ibatis.annotations.Mapper
+import org.apache.ibatis.annotations.Param
+import org.apache.ibatis.annotations.Select
+import org.apache.ibatis.annotations.SelectProvider
+import org.springframework.stereotype.Repository
+
+
+@Mapper
+@Repository
+interface TenantZoneMapper {
+
+
+    /** 查询在某种业务空间类型, 某个业务空间实例下的租户的id集合*/
+    @SelectProvider(method="selectTenantUnderSpace", type= TenantZoneDao::class)
+    fun selectTenantUnderSpace(@Param("projectId")projectId: String, @Param("zoneType")zoneType : String?, @Param("zoneId")zoneId : String?): ArrayList<String>
+
+
+    /**
+     * 查询所有在业务空间下的租户的id集合
+     */
+    @Select("select distinct tn_id from relationship.r_tn2sp where project_id = #{projectId}")
+    fun selectAllTenantUnderSpace(@Param("projectId")projectId: String): ArrayList<String>
+}

+ 19 - 0
equip-componnet/src/main/kotlin/com/persagy/server/dao/mappers/ZoneSpaceMapper.kt

@@ -0,0 +1,19 @@
+package com.persagy.server.dao.mappers
+
+import org.apache.ibatis.annotations.Mapper
+import org.apache.ibatis.annotations.Select
+import org.springframework.stereotype.Repository
+
+/**
+ * 业务空间
+ *
+ * @author 邓婷婷
+ */
+@Mapper
+@Repository
+interface ZoneSpaceMapper {
+
+    @Select("select public.is_point_in_polygon_v3_str(#{x},#{y},#{outLine}::jsonb)")
+    fun inBdflZoneSpace(x: String, y: String, outLine: String?): Boolean
+
+} // Interface REquipComponMappers

+ 19 - 0
equip-componnet/src/main/kotlin/com/persagy/server/models/ComponentCascade.kt

@@ -0,0 +1,19 @@
+package com.persagy.server.models
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.service.models.annotations.SCascade
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Table
+
+
+@ApiModel(description = "设备信息实体类")
+@Table(name = "equipment")
+class ComponentCascade : Equipment() {
+    /** 级联部件所属设备 */
+    @ApiModelProperty(value = "级联部件所属设备")
+    @SCascade(table="equipment", idColumn="id", childIdColumn="parent_id")
+    @JSONField(name = "BelongedEquipment")
+    var belongedEquipment: Equipment? = null
+}

+ 21 - 0
equip-componnet/src/main/kotlin/com/persagy/server/models/EquipComDel.kt

@@ -0,0 +1,21 @@
+package com.persagy.server.models
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+
+/**
+ * 查询待删除的设备数量
+ */
+class EquipComDel : Serializable {
+
+    /** 模型ID */
+    @ApiModelProperty(value = "模型ID")
+    @JSONField(name = "ModelId")
+    var modelId: String? = null
+
+    /** 数量 */
+    @ApiModelProperty(value = "数量")
+    @JSONField(name = "Count")
+    var count: Int? = null
+} //

+ 470 - 0
equip-componnet/src/main/kotlin/com/persagy/server/models/PropertySupplement.kt

@@ -0,0 +1,470 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.models
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.server.datacenter.models.entities.assistant.BIMLocation
+import com.persagy.server.datacenter.models.entities.base.BaseInfo
+import com.persagy.server.datacenter.models.entities.dict.EquipFamily
+import com.persagy.server.datacenter.models.entities.dict.EquipFamilyCategory
+import com.persagy.server.datacenter.models.entities.dict.Family
+import com.persagy.server.datacenter.models.entities.objects.Building
+import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.server.datacenter.models.entities.objects.Project
+import com.persagy.server.models.objects.FloorCompon
+import com.persagy.service.models.annotations.SCascade
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 资产信息实体类
+ *
+ * @author  张维新
+ */
+@ApiModel(description = "资产信息实体类")
+@Table(name = "v_property_supplement")
+open class PropertySupplement : BaseInfo(),Comparator<PropertySupplement> {
+
+    /** 资产id */
+    @ApiModelProperty(value = "资产id", required = true)
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "EquipID")
+    var id: String? = null
+
+    /** 资产名称 */
+    @ApiModelProperty(value = "资产名称", required = true)
+    @Column(name = "name")
+    @JSONField(name = "EquipName")
+    var name: String? = null
+
+    /** 资产本地编码 */
+    @ApiModelProperty(value = "资产本地编码")
+    @Column(name = "local_id")
+    @JSONField(name = "EquipLocalID")
+    var localId: String? = null
+
+    /** 资产本地名称 */
+    @ApiModelProperty(value = "资产本地名称")
+    @Column(name = "local_name")
+    @JSONField(name = "EquipLocalName")
+    var localName: String? = null
+
+    /** 资产二维码照片 */
+    @ApiModelProperty(value = "资产二维码照片")
+    @Column(name = "qr_code")
+    @JSONField(name = "EquipQRCode")
+    var qrCode: String? = null
+
+    /** 设计图纸中编码 */
+    @ApiModelProperty(value = "设计图纸中编码")
+    @Column(name = "cad_id")
+    @JSONField(name = "CADID")
+    var cadId: String? = null
+
+    /** BIM模型中编码 */
+    @ApiModelProperty(value = "BIM模型中编码")
+    @Column(name = "bim_id")
+    @JSONField(name = "BIMID")
+    var bimId: String? = null
+
+    /** BIM模型中坐标 */
+    @ApiModelProperty(value = "BIM模型中坐标")
+    @Column(name = "bim_location")
+    @JSONField(name = "BIMLocation")
+    var bimLocation: String? = null
+
+
+    /** BIM模型中坐标 */
+    @ApiModelProperty(value = "BIM模型中坐标json")
+    @JSONField(name = "LocationJson")
+    var locationJson: BIMLocation? = null
+        get() {
+            if (!bimLocation.isNullOrEmpty()){
+
+                val split = bimLocation!!.split(",")
+                var bimLocation = BIMLocation()
+                if (split.size == 3){
+                    bimLocation!!.x = split[0].toDouble()
+                    bimLocation!!.y = split[1].toDouble()
+                    bimLocation!!.z = split[2].toDouble()
+                }else if (split.size == 2){
+
+                    bimLocation!!.x = split[0].toDouble()
+                    bimLocation!!.y = split[1].toDouble()
+                    bimLocation!!.z = 0.0
+                }
+                return bimLocation
+            }
+            return null
+        }
+
+    /** 项目id */
+    @ApiModelProperty(value = "项目id", required = true)
+    @Column(name = "project_id")
+    @JSONField(name = "ProjectId")
+    var projectId: String? = null
+
+    /** 资产类型code */
+    @ApiModelProperty(value = "资产类型code")
+    @Id
+    @Column(name = "family")
+    @JSONField(name = "Family")
+    var family: String? = null
+
+    /** 资产所在建筑id */
+    @ApiModelProperty(value = "资产所在建筑id")
+    @Column(name = "building_id")
+    @JSONField(name = "BuildingId")
+    var buildingId: String? = null
+
+    /** 资产所在楼层id */
+    @ApiModelProperty(value = "资产所在楼层id")
+    @Column(name = "floor_id")
+    @JSONField(name = "FloorId")
+    var floorId: String? = null
+
+    /** 资产关联设备id */
+    @ApiModelProperty(value = "关联的设备或部件")
+    @Column(name = "equip_id")
+    @JSONField(name = "EquipmentId")
+    var equipId: String? = null
+
+    /** 品牌型号id */
+    @ApiModelProperty(value = "品牌型号id")
+    @Column(name = "dp_manufacturer_id")
+    @JSONField(name = "DPManufacturerID")
+    var dpManufacturerID: String? = null
+
+    /** 供应商信息id */
+    @ApiModelProperty(value = "供应商信息id")
+    @Column(name = "dp_supplier_id")
+    @JSONField(name = "DPSupplierID")
+    var dpSupplierID: String? = null
+
+    /** 维修商信息id */
+    @ApiModelProperty(value = "维修商信息id")
+    @Column(name = "dp_maintainer_id")
+    @JSONField(name = "DPMaintainerID")
+    var dpMaintainerID: String? = null
+
+    /** 保险公司信息id */
+    @ApiModelProperty(value = "保险公司信息id")
+    @Column(name = "dp_insurer_id")
+    @JSONField(name = "DPInsurerID")
+    var dpInsurerID: String? = null
+
+    /** 设备型号id */
+    @ApiModelProperty(value = "设备型号id")
+    @Column(name = "dp_specification_id")
+    @JSONField(name = "DPSpecificationID")
+    var dpSpecificationID: String? = null
+
+    /** 品牌id */
+    @ApiModelProperty(value = "品牌id")
+    @Column(name = "dp_brand_id")
+    @JSONField(name = "DPBrandID")
+    var dpBrandID: String? = null
+
+    /** 设备序号 */
+    @ApiModelProperty(value = "设备序号 ")
+    @Column(name = "equip_serial")
+    @JSONField(name = "EquipSerial")
+    var equipSerial: String? = null
+
+    /** 任务状态 待验证1、已验证0、未找到-1  */
+    @ApiModelProperty(value = "任务状态-待验证1、已验证0、未找到-1")
+    @Column(name = "task_state")
+    @JSONField(name = "TaskState")
+    var taskState: Int? = null
+
+    /** 台账参数 */
+    @ApiModelProperty(value = "台账参数")
+    @Column(name = "ledger_param")
+    @JSONField(name = "LedgerParam")
+    var ledgerParam: HashMap<String, Any?>? = null
+
+    /** 通讯参数 */
+    @ApiModelProperty(value = "通讯参数")
+    @Column(name = "comm_param")
+    @JSONField(name = "CommParam")
+    var commParam: HashMap<String, Any?>? = null
+
+    /** 技术参数 */
+    @ApiModelProperty(value = "技术参数")
+    @Column(name = "tech_param")
+    @JSONField(name = "TechParam")
+    var techParam: HashMap<String, Any?>? = null
+
+    /** 运行参数 */
+    @ApiModelProperty(value = "运行参数")
+    @Column(name = "run_param")
+    @JSONField(name = "RunParam")
+    var runParam: HashMap<String, Any?>? = null
+
+    /** 设定参数 */
+    @ApiModelProperty(value = "设定参数")
+    @Column(name = "setting_param")
+    @JSONField(name = "SettingParam")
+    var settingParam: HashMap<String, Any?>? = null
+
+    /** 报警信息 */
+    @ApiModelProperty(value = "报警信息")
+    @Column(name = "alram")
+    @JSONField(name = "Alram")
+    var alram: HashMap<String, Any?>? = null
+
+    /** 自定义 */
+    @ApiModelProperty(value = "自定义")
+    @Column(name = "custom_param")
+    @JSONField(name = "CustomParam")
+    var customParam: HashMap<String, Any?>? = null
+
+    /** 设备部件标志位,1设备,2部件 */
+    @ApiModelProperty(value = "1设备,2部件")
+    @Column(name = "type")
+    @JSONField(name = "Type")
+    var type: String? = null
+
+    /** 温度传感器 */
+    @ApiModelProperty(value = "温度传感器")
+    @Column(name = "temp_sensor")
+    @JSONField(name = "TempSensor")
+    var tempSensor: HashMap<String,Any?>? = null
+
+    /** 技术参数-通用 */
+    @ApiModelProperty(value = "技术参数-通用")
+    @Column(name = "tech_param_general")
+    @JSONField(name = "TechParamGeneral")
+    var techParamGeneral: HashMap<String,Any?>? = null
+
+    /** 运行参数-通用 */
+    @ApiModelProperty(value = "运行参数-通用")
+    @Column(name = "run_param_general")
+    @JSONField(name = "RunParamGeneral")
+    var runParamGeneral: HashMap<String,Any?>? = null
+
+    /** 速度传感器 */
+    @ApiModelProperty(value = "速度传感器")
+    @Column(name = "speed_sensor")
+    @JSONField(name = "SpeedSensor")
+    var speedSensor: HashMap<String,Any?>? = null
+
+    /** 声音传感器 */
+    @ApiModelProperty(value = "声音传感器")
+    @Column(name = "sound_sensor")
+    @JSONField(name = "SoundSensor")
+    var soundSensor: HashMap<String,Any?>? = null
+
+    /** 湿度传感器 */
+    @ApiModelProperty(value = "湿度传感器")
+    @Column(name = "humidity_sensor")
+    @JSONField(name = "HumiditySensor")
+    var humiditySensor: HashMap<String,Any?>? = null
+
+    /** 压力传感器 */
+    @ApiModelProperty(value = "压力传感器")
+    @Column(name = "press_transd")
+    @JSONField(name = "PressTransd")
+    var pressTransd: HashMap<String,Any?>? = null
+
+    /** 热量传感器 */
+    @ApiModelProperty(value = "热量传感器")
+    @Column(name = "heat_sensor")
+    @JSONField(name = "HeatSensor")
+    var heatSensor: HashMap<String,Any?>? = null
+
+    /** 流量传感器 */
+    @ApiModelProperty(value = "流量传感器")
+    @Column(name = "flow_sensor")
+    @JSONField(name = "FlowSensor")
+    var flowSensor: HashMap<String,Any?>? = null
+
+    /** 电度传感器 */
+    @ApiModelProperty(value = "电度传感器")
+    @Column(name = "electricity_sensor")
+    @JSONField(name = "ElectricitySensor")
+    var electricitySensor: HashMap<String,Any?>? = null
+
+    /** 位移传感器 */
+    @ApiModelProperty(value = "位移传感器")
+    @Column(name = "displ_sensor")
+    @JSONField(name = "DisplSensor")
+    var displSensor: HashMap<String,Any?>? = null
+
+    /** 浓度传感器 */
+    @ApiModelProperty(value = "浓度传感器")
+    @Column(name = "concent_sensor")
+    @JSONField(name = "ConcentSensor")
+    var concentSensor: HashMap<String,Any?>? = null
+
+    /** 图像传感器 */
+    @ApiModelProperty(value = "图像传感器")
+    @Column(name = "image_sensor")
+    @JSONField(name = "ImageSensor")
+    var imageSensor: HashMap<String,Any?>? = null
+
+    /** 对象类型 */
+    @ApiModelProperty(value = "对象类型")
+    @Column(name = "object_type")
+    @JSONField(name = "ObjectType")
+    override var objectType: String? = "Property"
+
+    /** 反馈参数 */
+    @ApiModelProperty(value = "反馈参数")
+    @Column(name = "feedback_param")
+    @JSONField(name = "FeedbackParam")
+    var feedbackParam: HashMap<String,Any?>? = null
+
+    /** 人流量传感器 */
+    @ApiModelProperty(value = "人流量传感器")
+    @Column(name = "man_flow_sensor")
+    @JSONField(name = "ManFlowSensor")
+    var manFlowSensor: HashMap<String,Any?>? = null
+
+    /** 位置信息 */
+    @ApiModelProperty(value = "位置信息")
+    @Column(name = "position")
+    @JSONField(name = "Position")
+    var position: String? = null
+
+    /** 贴码状态 */
+    @ApiModelProperty(value = "贴码状态")
+    @Column(name = "code_type")
+    @JSONField(name = "CodeType")
+    var codeType: Int? = null
+
+    /** 选择状态 */
+    @ApiModelProperty(value = "选择状态")
+    @Column(name = "checked")
+    @JSONField(name = "Checked")
+    var checked: Boolean? = null
+
+    /** 空间id */
+    @ApiModelProperty(value = "空间id")
+    @Column(name = "space_id")
+    @JSONField(name = "SpaceId")
+    var spaceId: String? = null
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注")
+    @Column(name = "note")
+    @JSONField(name = "Note")
+    var note: Boolean? = null
+
+    /** 点位id */
+    @ApiModelProperty(value = "点位id")
+    @Column(name = "point_id")
+    @JSONField(name = "PointId")
+    var pointId: String? = null
+
+    /** 区分是哪里创建的资产 app  ,web */
+    @ApiModelProperty(value = "区分是哪里创建的资产 app  ,web")
+    @Column(name = "source")
+    @JSONField(name = "Source")
+    var source: String? = null
+
+    /** 模型文件id */
+    @ApiModelProperty(value = "模型文件id")
+    @Column(name = "model_id")
+    @JSONField(name = "ModelId")
+    var modelId: String? = null
+
+    /** 设备 */
+    @ApiModelProperty(value = "级联-设备")
+    @SCascade(table="property", idColumn="id", childIdColumn="equip_id")
+    @JSONField(name = "Equipment")
+    var equipment: Equipment? = null
+
+    /** 建筑   table  对应关系表   idColumn 对应 本类的id    childIdColumn 级联对象的关系id */
+    @ApiModelProperty(value = "级联-建筑")
+    @SCascade(table="property", idColumn="id", childIdColumn="building_id")
+    @JSONField(name = "Building")
+    var building: Building? = null
+
+    /** 级联-楼层   table  对应关系表   idColumn 对应 本类的id    childIdColumn 级联对象的关系id */
+    @ApiModelProperty(value = "级联-楼层")
+    @SCascade(table="property", idColumn="id", childIdColumn="floor_id")
+    @JSONField(name = "Floor")
+    var floor: FloorCompon? = null
+
+    /** 级联-项目 */
+    @ApiModelProperty(value = "级联-项目")
+    @SCascade(table="property", idColumn="id", childIdColumn="project_id")
+    @JSONField(name = "Project")
+    var project: Project? = null
+
+    /** 级联-资产设备族 */
+    @ApiModelProperty(value = "级联-资产设备族")
+    @SCascade(table="property", idColumn="id", childIdColumn="family")
+    @JSONField(name = "EquipFamilyList")
+    var equipFamilyList: ArrayList<EquipFamilyCategory>? = null
+
+    /** 级联-资产设备族名称 */
+    @ApiModelProperty(value = "级联-资产设备族名称")
+    @SCascade(table="property", idColumn="id", childIdColumn="family")
+    @JSONField(name = "FamilyName")
+    var familyName: Family? = null
+
+
+    /** 距离*/
+    @ApiModelProperty(value = "距离")
+    @JSONField(name = "Distance")
+    var distance: Double? = null
+
+    override fun compare(o1: PropertySupplement?, o2: PropertySupplement?): Int {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        if (o1!!.distance!=null&&o2!!.distance!=null&&o1!!.distance!!>o2.distance!!){
+            return 1
+        }else{
+            -1
+        }
+    }
+
+    /** 楼层名称 */
+    @ApiModelProperty(value = "楼层名称")
+    @Column(name = "floor_name")
+    @JSONField(name = "FloorName")
+    var floorName: String? = null
+
+    /** 建筑名称 */
+    @ApiModelProperty(value = "建筑名称")
+    @Column(name = "building_name")
+    @JSONField(name = "BuildingName")
+    var buildingName: String? = null
+
+    /** 现场发现人 */
+    @ApiModelProperty(value = "现场发现人")
+    @Column(name = "find_people")
+    @JSONField(name = "FindPeople")
+    var findPeople: String? = null
+
+
+    /** 级联设备类型 */
+    @ApiModelProperty(value = "级联-设备类型")
+    @SCascade(table="property", idColumn="id", childIdColumn="family")
+    @JSONField(name = "EquipFamily")
+    var equipFamily: ArrayList<EquipFamily>? = null
+
+} // Class Property

+ 22 - 0
equip-componnet/src/main/kotlin/com/persagy/server/models/SimilarityDegree.kt

@@ -0,0 +1,22 @@
+package com.persagy.server.models
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.google.gson.annotations.SerializedName
+import java.io.Serializable
+
+/**
+ * 相似度
+ *
+ * @author 张维新
+ */
+class SimilarityDegree : Serializable {
+
+    @JSONField(name = "key")
+    @SerializedName("key")
+    var key: String? = null
+
+    @JSONField(name = "value")
+    @SerializedName("value")
+    var value: Double? = null
+
+} //

+ 110 - 0
equip-componnet/src/main/kotlin/com/persagy/server/models/TenantCascade.kt

@@ -0,0 +1,110 @@
+package com.persagy.server.models
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.server.datacenter.models.entities.base.BaseInfo
+import com.persagy.server.models.objects.ZoneSpace
+import com.persagy.service.models.annotations.SCascade
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+@ApiModel(description = "租户信息实体类")
+@Table(name = "tenant")
+class TenantCascade : BaseInfo() {
+
+    /** 租户id */
+    @ApiModelProperty(value = "租户id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "TenantID")
+    var id: String? = null
+
+    /** 租户名称 */
+    @ApiModelProperty(value = "租户名称")
+    @Column(name = "name")
+    @JSONField(name = "TenantName")
+    var name: String? = null
+
+    /** 租户本地编码 */
+    @ApiModelProperty(value = "租户本地编码")
+    @Column(name = "local_id")
+    @JSONField(name = "TenantLocalID")
+    var localId: String? = null
+
+    /** 租户本地名称 */
+    @ApiModelProperty(value = "租户本地名称")
+    @Column(name = "local_name")
+    @JSONField(name = "TenantLocalName")
+    var localName: String? = null
+
+    /** 租户本地编码2 */
+    @ApiModelProperty(value = "租户本地编码2")
+    @Column(name = "local_id2")
+    @JSONField(name = "TenantLocalID2")
+    var localId2: String? = null
+
+    /** 租户本地名称2 */
+    @ApiModelProperty(value = "租户本地名称2")
+    @Column(name = "local_name2")
+    @JSONField(name = "TenantLocalName2")
+    var localName2: String? = null
+
+    /** 项目id */
+    @ApiModelProperty(value = "项目id")
+    @Column(name = "project_id")
+    @JSONField(name = "ProjectId")
+    var projectId: String? = null
+
+    /** 租赁信息 */
+    @ApiModelProperty(value = "租赁信息")
+    @Column(name = "lease_info")
+    @JSONField(name = "LeaseInfo")
+    var leaseInfo: HashMap<String,Any?>? = null
+
+    /** 能耗信息 */
+    @ApiModelProperty(value = "能耗信息")
+    @Column(name = "consumption_info")
+    @JSONField(name = "ConsumptionInfo")
+    var consumptionInfo: HashMap<String,Any?>? = null
+
+    /** 动态信息 */
+    @ApiModelProperty(value = "动态信息")
+    @Column(name = "dynamic_infor")
+    @JSONField(name = "DynamicInfor")
+    var dynamicInfor: HashMap<String,Any?>? = null
+
+    /** 自定义信息点 */
+    @ApiModelProperty(value = "自定义信息点")
+    @Column(name = "custom_param")
+    @JSONField(name = "CustomParam")
+    var customParam: HashMap<String,Any?>? = null
+
+    /** 对象类型 */
+    @ApiModelProperty(value = "对象类型")
+    @Column(name = "object_type")
+    @JSONField(name = "ObjectType")
+    override var objectType: String? = "Tenant"
+
+
+    /** 租户租赁的租户业务空间  self = true  同样的对象查询时 id可以互相调换查询   */
+    @ApiModelProperty(value = "级联-租户租赁的租户业务空间")
+    @SCascade(table="relationship.r_tn2sp", idColumn="tn_id", childIdColumn="sp_id", self = true)
+    @JSONField(name = "ZoneTenantList")
+    var zoneTenantList: ArrayList<ZoneSpace>? = null
+
+    /** 租户租赁的默认业务空间  self = true  同样的对象查询时 id可以互相调换查询   */
+//    @ApiModelProperty(value = "级联-租户租赁的默认业务空间")
+//    @SCascade(table="r_tn_in_sp_zone_general", idColumn="tenant_id", childIdColumn="space_id", self = true)
+//    @JSONField(name = "ZoneGeneraltList")
+//    var zoneGeneraltList: ArrayList<ZoneGeneral>? = null
+
+    /** 租户租赁的业务空间  self = true  同样的对象查询时 id可以互相调换查询   */
+//    @ApiModelProperty(value = "级联-租户租赁的业务空间")
+//    @SCascade(table="r_tn_in_sp_base", idColumn="tenant_id", childIdColumn="space_id", self = false)
+//    @JSONField(name = "ZoneList")
+//    var zoneList: ArrayList<ZoneSpaceBaseTable>? = null
+
+
+} // Class Tenant

+ 0 - 8
equip-componnet/src/main/kotlin/com/persagy/server/models/a.java

@@ -1,8 +0,0 @@
-package com.persagy.server.models;
-
-/**
- * @author wx
- * @date 2020/9/24 20:23
- */
-public class a {
-}

+ 0 - 1
equip-componnet/src/main/kotlin/com/persagy/server/models/objects/FloorCompon.kt

@@ -25,7 +25,6 @@ import com.persagy.server.datacenter.models.entities.assistant.PointPosition
 import com.persagy.server.datacenter.models.entities.base.BaseInfo
 import com.persagy.server.datacenter.models.entities.objects.Building
 import com.persagy.server.datacenter.models.entities.objects.Project
-import com.persagy.server.datacenter.models.entities.objects.ZoneSpace
 import com.persagy.service.models.annotations.SCascade
 import io.swagger.annotations.ApiModel
 import io.swagger.annotations.ApiModelProperty

+ 168 - 0
equip-componnet/src/main/kotlin/com/persagy/server/models/objects/ZoneSpace.kt

@@ -0,0 +1,168 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.models.objects
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.server.datacenter.models.entities.assistant.TaskPic
+import com.persagy.server.datacenter.models.entities.base.BaseInfo
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 空间父类
+ *
+ * @author  张维新
+ */
+@ApiModel(description = "空间父类实体类")
+@Table(name = "zone_space_base")
+open class ZoneSpace:  BaseInfo() {
+
+
+    /** 空间ID */
+    @ApiModelProperty(value = "空间ID")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "RoomID")
+    var id: String? = null
+
+    /** 空间名称 */
+    @ApiModelProperty(value = "空间名称")
+    @Column(name = "name")
+    @JSONField(name = "RoomName")
+    var name: String? = null
+
+    /** 空间本地编码 */
+    @ApiModelProperty(value = "空间本地编码")
+    @Column(name = "local_id")
+    @JSONField(name = "RoomLocalID")
+    var localId: String? = null
+
+    /** 空间本地名称 */
+    @ApiModelProperty(value = "空间本地名称")
+    @Column(name = "local_name")
+    @JSONField(name = "RoomLocalName")
+    var localName: String? = null
+
+    /** 项目id */
+    @ApiModelProperty(value = "项目id")
+    @Column(name = "project_id")
+    @JSONField(name = "ProjectId")
+    var projectId: String? = null
+
+    /** 建筑id */
+    @ApiModelProperty(value = "建筑id")
+    @Column(name = "building_id")
+    @JSONField(name = "BuildingId")
+    var buildingId: String? = null
+
+    /** 楼层id */
+    @ApiModelProperty(value = "楼层id")
+    @Column(name = "floor_id")
+    @JSONField(name = "FloorId")
+    var floorId: String? = null
+
+    /** 空间二维码图片 */
+    @ApiModelProperty(value = "空间二维码图片")
+    @Column(name = "qr_code")
+    @JSONField(name = "RoomQRCode")
+    var qrCode: String? = null
+
+    /** 平台二维码 */
+    @ApiModelProperty(value = "平台二维码")
+    @Column(name = "default_qr_code")
+    @JSONField(name = "DefaultQRCode")
+    var defaultQRCode: String? = null
+
+    /** BIM模型中编码 */
+    @ApiModelProperty(value = "BIM模型中编码")
+    @Column(name = "bim_id")
+    @JSONField(name = "BIMID")
+    var bimId: String? = null
+
+    /** AI标记 */
+    @ApiModelProperty(value = "AI标记 是true   否false")
+    @JSONField(name = "IsAI")
+    var isAi: Boolean = false
+
+//    /** 轮廓线 */
+//    @ApiModelProperty(value = "轮廓线")
+//    @Column(name = "outline")
+//    @JSONField(name = "Outline")
+//    var outline: ArrayList<ArrayList<ArrayList<PointPosition>>>? = null
+//
+//    /** 轮廓线2 */
+//    @ApiModelProperty(value = "轮廓线2")
+//    @Column(name = "outline2")
+//    @JSONField(name = "Outline2")
+//    var outline2: ArrayList<ArrayList<ArrayList<PointPosition>>>? = null
+
+    /** 图片  */
+    @ApiModelProperty(value = "图片 ")
+    @Column(name = "pic")
+    @JSONField(name = "Pic")
+    var pic: ArrayList<TaskPic>? =null
+
+//    /** 类型 */
+//    @ApiModelProperty(value = "类型")
+//    @Column(name = "object_type")
+//    @JSONField(name = "ObjectType")
+//    var objectType: String? = null
+
+//    /** 级联-建筑 */
+//    @ApiModelProperty(value = "级联-建筑")
+//    @SCascade(table="zone_space_base", idColumn="id", childIdColumn="building_id")
+//    @JSONField(name = "Building")
+//    var building: Building? = null
+//
+//
+//    /** 级联-楼层  */
+//    @ApiModelProperty(value = "级联-楼层")
+//    @SCascade(table="zone_space_base", idColumn="id", childIdColumn="floor_id")
+//    @JSONField(name = "Floor")
+//    var floor: Floor? = null
+
+//    /** 级联-空间类型  */
+//    @ApiModelProperty(value = "级联-空间类型")
+//    @SCascade(table="zone_space_base", idColumn="id", childIdColumn="object_type")
+//    @JSONField(name = "DClassDef")
+//    var zoneName: DClassDef? = null
+//
+//    /** 级联-建筑 */
+//    @ApiModelProperty(value = "级联-建筑")
+//    @SCascade(table="r_sp_in_bd", idColumn="space_id", childIdColumn="building_id")
+//    @JSONField(name = "BuildingList")
+//    var buildingList: ArrayList<Building>? = null
+//
+//    /** 级联-楼层  */
+//    @ApiModelProperty(value = "级联-楼层")
+//    @SCascade(table="r_sp_in_fl", idColumn="space_id", childIdColumn="floor_id")
+//    @JSONField(name = "FloorList")
+//    var floorlList: ArrayList<Floor>? = null
+
+    @ApiModelProperty(value = "垂直交通关系空间id")
+    @JSONField(name = "SpaceIdList")
+    var spaceIdList = ArrayList<String>()
+
+
+} // Class ZoneAirConditioning

+ 2 - 2
equip-componnet/src/main/kotlin/com/persagy/server/models/requests/EquipUpDateEnclosure.kt

@@ -1,7 +1,7 @@
-package cn.sagacloud.server.equipcomponent.models.requests
+package com.persagy.server.models.requests
 
-import cn.sagacloud.server.datacenter.models.entities.task.TaskPic
 import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.server.datacenter.models.entities.assistant.TaskPic
 import io.swagger.annotations.ApiModelProperty
 import java.io.Serializable
 

+ 1 - 1
equip-componnet/src/main/kotlin/com/persagy/server/models/requests/EquipUpDateEnclosureRequest.kt

@@ -1,4 +1,4 @@
-package cn.sagacloud.server.equipcomponent.models.requests
+package com.persagy.server.models.requests
 
 import io.swagger.annotations.ApiModelProperty
 import java.io.Serializable

+ 1 - 1
equip-componnet/src/main/kotlin/com/persagy/server/models/requests/ShaftSpaceVertical.kt

@@ -1,4 +1,4 @@
-package cn.sagacloud.server.equipcomponent.models.requests
+package com.persagy.server.models.requests
 
 import com.alibaba.fastjson.annotation.JSONField
 import io.swagger.annotations.ApiModelProperty

+ 1 - 1
equip-componnet/src/main/kotlin/com/persagy/server/models/requests/SpatialRelationship.kt

@@ -1,4 +1,4 @@
-package cn.sagacloud.server.equipcomponent.models.requests
+package com.persagy.server.models.requests
 
 import com.alibaba.fastjson.annotation.JSONField
 import io.swagger.annotations.ApiModelProperty

+ 2 - 2
equip-componnet/src/main/kotlin/com/persagy/server/models/requests/ZoneEquipQueryRequest.kt

@@ -1,6 +1,6 @@
-package cn.sagacloud.server.equipcomponent.models.requests
+package com.persagy.server.models.requests
 
-import com.sybotan.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SQueryRequest
 import io.swagger.annotations.ApiModelProperty
 
 class ZoneEquipQueryRequest : SQueryRequest() {

+ 2 - 2
equip-componnet/src/main/kotlin/com/persagy/server/models/requests/ZoneISpaceQueryRequest.kt

@@ -1,7 +1,7 @@
-package cn.sagacloud.server.equipcomponent.models.requests
+package com.persagy.server.models.requests
 
 import com.alibaba.fastjson.annotation.JSONField
-import com.sybotan.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SQueryRequest
 import io.swagger.annotations.ApiModelProperty
 
 class ZoneISpaceQueryRequest : SQueryRequest() {

+ 65 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/EquipmentZoneService.kt

@@ -0,0 +1,65 @@
+package com.persagy.server.service
+
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.persagy.base.extensions.toJson
+import com.persagy.server.dao.mappers.CustomSql
+import com.persagy.server.dao.mappers.EquipmentZoneMapper
+import com.persagy.server.models.SimilarityDegree
+import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+import java.lang.reflect.Type
+
+@Service
+class EquipmentZoneService {
+
+    companion object {
+        /** 日志 */
+        private val logger = LoggerFactory.getLogger(EquipmentZoneService::class.java)
+
+    } // Companion object
+
+
+    @Autowired
+    lateinit var equipZoneMapper : EquipmentZoneMapper
+
+    @Autowired
+    lateinit var mapperCustomSql : CustomSql
+
+    fun getEquipIdUnderSpace(projectId : String, zoneType : String?, zoneId : String?) : ArrayList<String>{
+        return equipZoneMapper.selectEquipUnderSpace(projectId, zoneType, zoneId)
+    }
+
+
+
+    fun selectAllEquipsUnderSpace(projectId : String) : ArrayList<String>{
+        return equipZoneMapper.selectAllEquipsUnderSpace(projectId)
+
+    }
+
+
+    fun similars(){
+        try {
+            val list = ArrayList<String>()
+            list.add("北京市")
+            list.add("上海-市")
+            list.add("田径 是")
+            val similarList = equipZoneMapper.similar("北 京", list,2,0.9f)
+            val gson = Gson()
+            val type: Type = object : TypeToken<List<SimilarityDegree>>() {}.getType()
+            val lists: List<SimilarityDegree> = gson.fromJson(similarList, type)
+
+                logger.debug("数据输出=${lists.toJson()}")
+
+            val map = HashMap<String,String>()
+            map.put("name","435")
+            logger.debug("数据输出000=${map.toJson()}")
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+    }
+
+
+
+}

+ 2 - 2
equip-componnet/src/main/kotlin/com/persagy/server/service/PropertyEquipService.kt

@@ -20,8 +20,8 @@
 
 package com.persagy.server.service
 
-import cn.sagacloud.server.equipcomponent.models.requests.EquipUpDateEnclosure
-import cn.sagacloud.server.equipcomponent.models.requests.EquipUpDateEnclosureRequest
+import com.persagy.server.models.requests.EquipUpDateEnclosure
+import com.persagy.server.models.requests.EquipUpDateEnclosureRequest
 import com.alibaba.fastjson.JSONArray
 import com.alibaba.fastjson.JSONObject
 import com.persagy.base.extensions.toJson

+ 13 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/REqInShService.kt

@@ -0,0 +1,13 @@
+package com.persagy.server.service
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.rel.REqInSh
+import com.persagy.server.service.base.RService
+
+
+/**
+ * 设备所在竖井关系服务
+ *
+ * @author 付国宝
+ */
+object REqInShService: RService<REqInSh>(SMybatisDao(REqInSh::class.java))

+ 17 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/RShaftThroughShaftService.kt

@@ -0,0 +1,17 @@
+package com.persagy.server.service
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.rel.RShaftThroughShaft
+import com.persagy.service.SBaseService
+
+
+/**
+ * 楼层的贯通关系服务
+ *
+ * @author 张维新
+ */
+object RShaftThroughShaftService : SBaseService<RShaftThroughShaft>(SMybatisDao(RShaftThroughShaft::class.java))
+
+
+
+

+ 145 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/RSyEqService.kt

@@ -0,0 +1,145 @@
+package com.persagy.server.service
+
+import com.persagy.base.extensions.toJson
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.rel.REqSyList
+import com.persagy.server.datacenter.models.entities.rel.RSyEq
+import com.persagy.server.datacenter.models.entities.rel.RSyEqList
+import com.persagy.server.service.base.RService
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.responses.SBaseResponse
+import com.persagy.service.models.responses.SCreateResponse
+
+
+/**
+ * 系统下的设备设施关系服务
+ *
+ * @author 张维新
+ */
+object RSyEqService : RService<RSyEq>(SMybatisDao(RSyEq::class.java)) {
+
+    /**
+     * 创建系统下设备关系
+     *
+     * @param   rSyEq   系统和设备的关系对象
+     */
+    fun create(rSyEq: RSyEq): SCreateResponse<RSyEq> {
+        return try {
+//            rSyEq.id = IdUtils.uuidCreate()
+            val isInsert = insert(rSyEq)
+            if (isInsert){
+                SCreateResponse(SResponseType.success)
+            }else{
+                SCreateResponse(SResponseType.failure)
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SCreateResponse(SResponseType.failure,e.message.toString())
+        }
+    } // Function create()
+
+    /**
+     * 根据对象删除
+     *
+     * @param   rSyEq      关系对象实例
+     * @return
+     */
+     fun deletes(rSyEq: RSyEq): SBaseResponse {
+        return try {
+                val isDelete = delete(rSyEq)
+                /** 删除成功 */
+                if (isDelete) {
+                    val sBaseResponse = SBaseResponse(SResponseType.success)
+                    sBaseResponse.message = rSyEq.toJson()
+                    sBaseResponse
+                } else {
+                    SBaseResponse(SResponseType.failure)
+                }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            return SBaseResponse(SResponseType.failure, e.message!!)
+        }
+    } // Function deletes()
+
+    /**
+     * 创建系统下设备关系
+     *
+     * @param   rSyEqList   系统和设备的关系对象列表
+     */
+    fun createSy(rSyEqList: RSyEqList): SCreateResponse<RSyEq> {
+        return try {
+            /** 成功集合 */
+            val successList = ArrayList<Any>()
+            /** 失败集合 */
+            val failureList = ArrayList<Any>()
+            delete("sysID = '${rSyEqList.sysId}'")
+            for (eqId in rSyEqList.listEquipId!!){
+                val rSyEq = RSyEq()
+//                rSyEq.id = IdUtils.uuidCreate()
+                rSyEq.equipId = eqId
+                rSyEq.sysId =  rSyEqList.sysId
+                val replace = replace(rSyEq)
+                if (replace){
+                    successList.add(rSyEq)
+                }else{
+                    failureList.add(rSyEq)
+                }
+            }
+            if (successList.size>0){
+                val sCreateResponse = SCreateResponse<RSyEq>(SResponseType.success)
+                if (failureList.size>0){
+                    sCreateResponse.message ="失败对象:"+failureList.toJson()
+                }
+                sCreateResponse
+            }else{
+               SCreateResponse(SResponseType.failure)
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SCreateResponse(SResponseType.failure,e.message.toString())
+        }
+    } // Function createSy()
+
+    /**
+     * 创建系统下设备关系
+     *
+     * @param   rSyEqList   系统和设备的关系对象列表
+     */
+    fun createsEq(rSyEqList: REqSyList): SCreateResponse<RSyEq> {
+        return try {
+            /** 成功集合 */
+            val successList = ArrayList<Any>()
+            /** 失败集合 */
+            val failureList = ArrayList<Any>()
+            delete("equipId = '${rSyEqList.equipId}'")
+            for (eqId in rSyEqList.sysIdList!!){
+                val rSyEq = RSyEq()
+//                rSyEq.id = IdUtils.uuidCreate()
+                rSyEq.equipId = rSyEqList.equipId
+                rSyEq.sysId = eqId
+                val replace = replace(rSyEq)
+                if (replace){
+                    successList.add(rSyEq)
+                }else{
+                    failureList.add(rSyEq)
+                }
+            }
+            if (successList.size>0){
+                if (failureList.size>0){
+                    val sCreateResponse = SCreateResponse<RSyEq>(SResponseType.success)
+                    sCreateResponse.message ="失败对象:"+failureList.toJson()
+                    sCreateResponse
+                }else{
+                    val sCreateResponse = SCreateResponse<RSyEq>(SResponseType.success)
+                    sCreateResponse
+                }
+            }else{
+                SCreateResponse(SResponseType.failure)
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SCreateResponse(SResponseType.failure,e.message.toString())
+        }
+    } // Function createsEq()
+
+} // Object RSyEqService

+ 15 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/RSyInShService.kt

@@ -0,0 +1,15 @@
+package com.persagy.server.service
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.rel.RSyInSh
+import com.persagy.server.service.base.RService
+
+/**
+ * 系统所在竖井关系服务
+ *
+ * @author 张维新
+ */
+object RSyInShService: RService<RSyInSh>(SMybatisDao(RSyInSh::class.java))
+
+
+

+ 21 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/TenantZoneService.kt

@@ -0,0 +1,21 @@
+package com.persagy.server.service
+
+import com.persagy.server.dao.mappers.TenantZoneMapper
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+
+@Service
+class TenantZoneService {
+    @Autowired
+    lateinit var tenantZoneMapper : TenantZoneMapper
+
+    fun getTenantIdUnderSpace(projectId : String, zoneType : String?, zoneId : String?) : ArrayList<String>{
+        return tenantZoneMapper.selectTenantUnderSpace(projectId, zoneType, zoneId)
+    }
+
+
+    fun getTenantIdUnderSpace(projectId : String) : ArrayList<String>{
+        return tenantZoneMapper.selectAllTenantUnderSpace(projectId)
+    }
+}

+ 15 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/base/BaseDataService.kt

@@ -0,0 +1,15 @@
+package com.persagy.server.service.base
+
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.server.models.ComponentCascade
+import com.persagy.server.models.TenantCascade
+import com.persagy.service.SObjectService
+
+object BaseDataService {
+
+    val equipmentService = SObjectService(SMybatisDao(Equipment::class.java))
+    val conponentService = SObjectService(SMybatisDao(ComponentCascade::class.java))
+    val tenantService = SObjectService(SMybatisDao(TenantCascade::class.java))
+}

+ 47 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/base/RService.kt

@@ -0,0 +1,47 @@
+package com.persagy.server.service.base
+
+import com.persagy.database.SAbstractDao
+import com.persagy.server.datacenter.models.entities.base.RBaseInfo
+import com.persagy.server.synchronize.MessageHandler
+import com.persagy.service.SObjectService
+import com.persagy.service.utils.SSpringContextUtil
+import org.slf4j.LoggerFactory
+
+/**
+ * 关系处理服务基类
+ *
+ * @author 张维新
+ */
+open class RService<ENTITY : RBaseInfo>(daoClass: SAbstractDao<ENTITY>) : SObjectService<ENTITY>(daoClass) {
+    companion object {
+        /** 日志 */
+        private val logger = LoggerFactory.getLogger(RService::class.java)
+
+        /** MQ消息对象 */
+        private val messageHandler by lazy {
+            SSpringContextUtil.getBean(MessageHandler::class.java) as MessageHandler
+        }
+    } // Companion object
+
+    /**
+     * 创建关系
+     *
+     * @param   ENTITY   关系对象
+     */
+//    fun create(ENTITY: ENTITY): SCreateResponse<ENTITY> {
+//        return try {
+//            ENTITY.id = IdUtils.uuidCreate()
+//            val isInsert = insert(ENTITY)
+//            if (isInsert){
+//                SCreateResponse(SResponseType.success)
+//            }else{
+//                SCreateResponse(SResponseType.failure)
+//            }
+//        } catch (e: Exception) {
+//            e.printStackTrace()
+//            SCreateResponse(SResponseType.failure,e.message.toString())
+//        }
+//    } // Function create()
+
+
+} // Class Service

+ 24 - 121
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/EquipmentService.kt

@@ -20,33 +20,44 @@
 
 package com.persagy.server.service.objects
 
-import com.persagy.mybatis.SMybatisDao
-import com.persagy.server.service.CustomSqlService
-import com.persagy.server.service.base.Service
-import com.persagy.service.SBaseService
-import cn.sagacloud.server.equipcomponent.models.requests.EquipUpDateEnclosure
-import cn.sagacloud.server.equipcomponent.models.requests.EquipUpDateEnclosureRequest
-import cn.sagacloud.server.equipcomponent.utils.DataVerification
-import cn.sagacloud.server.equipcomponent.utils.MatchingProperty
 import com.alibaba.fastjson.JSON
 import com.alibaba.fastjson.JSONArray
 import com.alibaba.fastjson.JSONObject
 import com.persagy.base.extensions.toJson
 import com.persagy.database.SFilter
 import com.persagy.database.SQueryBuilder
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.assistant.TaskPic
+import com.persagy.server.datacenter.models.entities.dict.EquipFamily
 import com.persagy.server.datacenter.models.entities.dict.ExplainAllCategories
 import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.server.datacenter.models.entities.objects.Property
+import com.persagy.server.datacenter.models.entities.objects.ZoneSpace
 import com.persagy.server.datacenter.models.entities.rel.REq2Sp
 import com.persagy.server.datacenter.models.entities.rel.RSpinBd
 import com.persagy.server.datacenter.models.entities.rel.RSpinFl
 import com.persagy.server.datacenter.models.response.EquipAssetComponentsReqponse
 import com.persagy.server.models.ComponentProperty
+import com.persagy.server.models.EquipComDel
+import com.persagy.server.models.PropertySupplement
 import com.persagy.server.models.VEquipComponentCount
+import com.persagy.server.models.requests.EquipUpDateEnclosure
+import com.persagy.server.models.requests.EquipUpDateEnclosureRequest
+import com.persagy.server.service.CustomSqlService
 import com.persagy.server.service.EquipAssetComponentsReqponseService
+import com.persagy.server.service.REqInShService
+import com.persagy.server.service.RSyEqService
+import com.persagy.server.service.base.Service
+import com.persagy.server.utils.DataVerification
+import com.persagy.service.SBaseService
 import com.persagy.service.SObjectService
 import com.persagy.service.SPageContext
 import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.requests.SCreateRequest
 import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.responses.SBaseResponse
+import com.persagy.service.models.responses.SCountResponse
+import com.persagy.service.models.responses.SCreateResponse
 import com.persagy.service.models.responses.SQueryResponse
 import com.persagy.service.utils.SSpringContextUtil
 import org.slf4j.LoggerFactory
@@ -367,7 +378,7 @@ object EquipmentService : Service<Equipment>(SMybatisDao(Equipment::class.java))
             pageQuery(request,listf)
         } catch (e : Exception){
             e.printStackTrace()
-            SQueryResponse(SResponseType.failure, e.rootCause()?.message ?: e.message ?: "未知异常!")
+            SQueryResponse(SResponseType.failure, e.message ?: e.message ?: "未知异常!")
         }
     } // Function pageQueryForEquip()
 
@@ -417,7 +428,7 @@ object EquipmentService : Service<Equipment>(SMybatisDao(Equipment::class.java))
 //            SQueryResponse(pageInfo)
         } catch (e : Exception){
             e.printStackTrace()
-            SQueryResponse(SResponseType.failure, e.rootCause()?.message ?: e.message ?: "未知异常!")
+            SQueryResponse(SResponseType.failure, e.message ?: e.message ?: "未知异常!")
         }
     } // Function pageQuery()
 
@@ -428,7 +439,7 @@ object EquipmentService : Service<Equipment>(SMybatisDao(Equipment::class.java))
     fun unSpaceForEqPoint(type: String, spaceId: String, request: SQueryRequest): SQueryResponse<Equipment>{
 
         return try {
-            val zoneSpaceBaseTable = SObjectService(SMybatisDao(ZoneSpaceBaseTable::class.java))
+            val zoneSpaceBaseTable = SObjectService(SMybatisDao(ZoneSpace::class.java))
 
             val sQueryRequest = SQueryRequest()
             val projectId = SPageContext.getHeader("ProjectId")
@@ -503,7 +514,7 @@ object EquipmentService : Service<Equipment>(SMybatisDao(Equipment::class.java))
     fun unSpaceInEqPoint(type: String, spaceId: String, request: SQueryRequest): SQueryResponse<Equipment>{
 
         return try {
-            val zoneSpaceBaseTable = SObjectService(SMybatisDao(ZoneSpaceBaseTable::class.java))
+            val zoneSpaceBaseTable = SObjectService(SMybatisDao(ZoneSpace::class.java))
             val sQueryRequest = SQueryRequest()
             val projectId = SPageContext.getHeader("ProjectId")
             val queryBuilder = select(request.filters)
@@ -600,7 +611,7 @@ object EquipmentService : Service<Equipment>(SMybatisDao(Equipment::class.java))
             SQueryResponse(pageInfo)
         } catch (e : Exception){
             e.printStackTrace()
-            SQueryResponse(SResponseType.failure, e.rootCause()?.message ?: e.message ?: "未知异常!")
+            SQueryResponse(SResponseType.failure, e.message ?: e.message ?: "未知异常!")
         }
     } // Function pageQuery()
 
@@ -628,114 +639,6 @@ object EquipmentService : Service<Equipment>(SMybatisDao(Equipment::class.java))
         }
         val pageInfo = queryBuilder.pageQuery(request.pageNumber,request.pageSize)
     }
-    /**
-     *  批量处理设备关联资产、 查询接口
-     *  */
-    fun equipProperty(category:String, @RequestBody request: SQueryRequest, spaceIdList: ArrayList<String>, spacrType: String):SQueryResponse<Equipment> {
-
-        return try {
-        val equipFamilyService = SBaseService(SMybatisDao(EquipFamily::class.java))
-        val projectId = SPageContext.getHeader("ProjectId")
-        if (spaceIdList!=null&&spaceIdList.size>0){
-
-            /** 获取到空间关联的设备 */
-            val rEqInSpBaseList = REqInSpBaseService.select(SFilter.inList("spaceId", spaceIdList)).exec()
-            if ( !rEqInSpBaseList.isEmpty()){
-                val setId = HashSet<String>()
-                for (rEqInSpBase in rEqInSpBaseList){
-                    setId.add(rEqInSpBase.equipId!!)
-                }
-                val sQueryResponse = SQueryResponse<Equipment>()
-
-                val equipList = select(SFilter.inList("EquipID", setId.toList())).exec()
-                sQueryResponse.total = equipList.size.toLong()
-                for (equip in equipList){
-                    if (category != equip.category){
-                        equipList.remove(equip)
-                    }
-                }
-
-                if (equipList.size>0){
-                    for (equipment in equipList){
-                        val equipFamily = equipFamilyService.select(SFilter.eq("equipCode", equipment.category!!)).entity()
-                        var propertyList = ArrayList<Property>()
-                        if (!equipment.buildingId.isNullOrEmpty()&&!equipment.floorId.isNullOrEmpty()){
-                            propertyList = PropertyService.select(SFilter.eq("projectId", projectId!!), SFilter.eq("floorId", equipment.floorId!!), SFilter.isNull("EquipmentId"), SFilter.eq("Family", equipFamily!!.family!!)).exec()
-                        }else if (!equipment.buildingId.isNullOrEmpty()&&equipment.floorId.isNullOrEmpty()){
-                            propertyList = PropertyService.select(SFilter.eq("projectId", projectId!!),SFilter.eq("buildingId", equipment.buildingId!!),SFilter.isNull("EquipmentId"), SFilter.eq("Family", equipFamily!!.family!!)).exec()
-                        }else{
-                            propertyList = PropertyService.select(SFilter.eq("projectId", projectId!!), SFilter.eq("Family", equipFamily!!.family!!),SFilter.isNull("EquipmentId")).exec()
-                        }
-                        if (propertyList.size>0){
-                            /** 计算匹配资产 */
-                            val equipMatchingProperty = MatchingProperty.equipMatchingProperty(equipment, propertyList)
-                            if (equipMatchingProperty.size>0){
-                                equipment.propertyList = equipMatchingProperty
-                            }else{
-                                equipList.remove(equipment)
-                            }
-                        }
-                        try {
-                            Thread.sleep(500)
-                        } catch (e: InterruptedException) {
-                            e.printStackTrace()
-                        }
-                    }
-                }
-                sQueryResponse.result=SResponseType.success
-                sQueryResponse.content = equipList
-                sQueryResponse
-            }else{
-                val sQueryResponse = SQueryResponse<Equipment>()
-                sQueryResponse.total = 0
-                sQueryResponse.result=SResponseType.success
-                sQueryResponse.content = ArrayList<Equipment>()
-                sQueryResponse
-            }
-        }else{
-
-            val pageQuery = pageQuery(request, arrayListOf(SFilter.eq("category", category),
-                    SFilter.isNull("propertyId"),SFilter.eq("projectId", projectId!!)))
-            val contentList = pageQuery.content as ArrayList<Equipment>
-            if (contentList!=null&&!contentList.isNotEmpty()){
-                for (equipment in contentList){
-                    val equipFamily = equipFamilyService.select(SFilter.eq("equipCode", equipment.category!!)).entity()
-                    var propertyList = ArrayList<Property>()
-                    if (!equipment.buildingId.isNullOrEmpty()&&!equipment.floorId.isNullOrEmpty()){
-                         propertyList = PropertyService.select(SFilter.eq("projectId", projectId!!), SFilter.eq("floorId", equipment.floorId!!), SFilter.isNull("EquipmentId"), SFilter.eq("Family", equipFamily!!.family!!)).exec()
-                    }else if (!equipment.buildingId.isNullOrEmpty()&&equipment.floorId.isNullOrEmpty()){
-                        propertyList = PropertyService.select(SFilter.eq("projectId", projectId!!),SFilter.eq("buildingId", equipment.buildingId!!),SFilter.isNull("EquipmentId"), SFilter.eq("Family", equipFamily!!.family!!)).exec()
-                    }else{
-                        propertyList = PropertyService.select(SFilter.eq("projectId", projectId!!), SFilter.eq("Family", equipFamily!!.family!!),SFilter.isNull("EquipmentId")).exec()
-                    }
-                    if (propertyList.size>0){
-                        /** 计算匹配资产 */
-                        val equipMatchingProperty = MatchingProperty.equipMatchingProperty(equipment, propertyList)
-
-                        if (equipMatchingProperty.size>0){
-                            equipment.propertyList = equipMatchingProperty
-                        }else{
-                            contentList.remove(equipment)
-                        }
-                        try {
-                            Thread.sleep(500)
-                        } catch (e: InterruptedException) {
-                            e.printStackTrace()
-                        }
-                    }
-                }
-            }
-            pageQuery.content = contentList
-            pageQuery
-        }
-
-        } catch (e : Exception){
-            e.printStackTrace()
-            SQueryResponse(SResponseType.failure, e.rootCause()?.message ?: e.message ?: "未知异常!")
-        }
-
-    } //
-
 
     /**
      * 修改设备的附件,增量方式

+ 124 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/GeneralSystemService.kt

@@ -0,0 +1,124 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.service.objects
+
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.objects.GeneralSystem
+import com.persagy.server.datacenter.models.entities.rel.RSy2Sp
+import com.persagy.server.service.RSyInShService
+import com.persagy.server.service.base.Service
+import com.persagy.service.SBaseService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.responses.SQueryResponse
+
+
+/**
+ * 系统信息服务
+ *
+ * @author 张维新
+ */
+object GeneralSystemService : Service<GeneralSystem>(SMybatisDao(GeneralSystem::class.java)) {
+
+    val rSy2SpService = SBaseService(SMybatisDao(RSy2Sp::class.java))
+    /**
+     * 查询没有和当前空间绑定的系统
+     *
+     * @param   type        空间类型
+     * @param   spaceId     空间id
+     */
+    fun unSpaceSys(type: String, spaceId: String, request: SQueryRequest): SQueryResponse<GeneralSystem> {
+        return try {
+            val projectId = SPageContext.getHeader("ProjectId")
+            val rSyInSpBaseList = rSy2SpService.select(SFilter.eq("Id2", spaceId), SFilter.eq("projectId", projectId!!),SFilter.eq("type", "sy2sp")).exec()
+            val list = ArrayList<String>()
+            val listf = ArrayList<SFilter>()
+            for (rSyInSpBase in rSyInSpBaseList){
+                list.add(rSyInSpBase.id1!!)
+            }
+
+            if (list.size>0){
+                listf.add(SFilter.eq("projectId", projectId!!))
+                listf.add(SFilter.not(SFilter.inList("SysID", list)))
+            }else{
+                listf.add(SFilter.eq("projectId", projectId!!))
+            }
+
+            pageQuery(request,listf)
+
+
+//            val queryBuilder = select(request.filters)
+//            queryBuilder.tableName="f_unsys_in_space('$projectId','$type','$spaceId')"
+//            if (null != request.projection) {
+//                queryBuilder.projection(request.projection!!)
+//            }
+//            if (null != request.orders) {
+//                queryBuilder.order(request.orders!!)
+//            }
+//            val pageInfo = queryBuilder.pageQuery(request.pageNumber, request.pageSize)
+//
+//            SQueryResponse(pageInfo)
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SQueryResponse(SResponseType.failure, e.message!!)
+        }
+
+    } // Function  unSpaceSys
+
+    /**
+     * 查询没有和当前竖井绑定的系统
+     *
+     * @param   shaftId     竖井id
+     */
+    fun unShaftSys(shaftId: String, request: SQueryRequest): SQueryResponse<GeneralSystem> {
+        return try {
+            val projectId = SPageContext.getHeader("ProjectId")
+            val rSyInShaftBaseList = RSyInShService.select(SFilter.eq("shaftId", shaftId), SFilter.eq("projectId", projectId!!)).exec()
+            val list = ArrayList<String>()
+            val listf = ArrayList<SFilter>()
+            for (rSyInSpBase in rSyInShaftBaseList){
+                list.add(rSyInSpBase.sysId!!)
+            }
+
+            if (list.size>0){
+                listf.add(SFilter.eq("projectId", projectId!!))
+                listf.add(SFilter.not(SFilter.inList("SysID", list)))
+            }else{
+                listf.add(SFilter.eq("projectId", projectId!!))
+            }
+            val pageQuery = pageQuery(request, listf)
+            pageQuery
+
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SQueryResponse(SResponseType.failure, e.message!!)
+        }
+
+    } // Function  unSpaceSys
+
+
+
+
+
+
+} // Object GeneralSystemService

+ 89 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ISpaceService.kt

@@ -0,0 +1,89 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.service.objects
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.objects.ZoneIspace
+import com.persagy.server.datacenter.models.response.SpaceSQueryResponse
+import com.persagy.server.models.requests.ZoneISpaceQueryRequest
+import com.persagy.server.service.base.Service
+import com.persagy.service.SPageContext
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.responses.SQueryResponse
+
+
+/**
+ * 空间信息服务
+ *
+ * @author 张维新
+ */
+object ISpaceService : Service<ZoneIspace>(SMybatisDao(ZoneIspace::class.java)) {
+
+    /**
+     * 查询未关联业务空间的元空间
+     *
+     * @param   objectType      分区类型
+     * @param   request         查询条件
+     */
+    fun unSpaceIspace(objectType: String, request: ZoneISpaceQueryRequest): SpaceSQueryResponse {
+        return try {
+            val projectId = SPageContext.getHeader("ProjectId")
+
+            val queryBuilder = ISpaceService.select(request.filters)
+//            var floorId: String? = null
+////            val filterList = queryBuilder.filterList
+////            for (filter in filterList){
+////                 if (filter.first.toString() == "FloorId"){
+////                    floorId = filter.second.toString()
+////                }
+////            }
+            queryBuilder.tableName = "f_unspace_ispace('$projectId','$objectType','${request.floorId}')"
+            if (null != request.projection) {
+                queryBuilder.projection(request.projection!!)
+            }
+            if (null != request.orders) {
+                queryBuilder.order(request.orders!!)
+            }
+
+            val sPageQueryInfo = queryBuilder.pageQuery(request.pageNumber, request.pageSize)
+
+           val sQueryResponse =  SQueryResponse(sPageQueryInfo)
+            val spaceSQueryResponse = SpaceSQueryResponse()
+            spaceSQueryResponse.floorId = request.floorId
+            spaceSQueryResponse.zoneType = objectType
+            spaceSQueryResponse.result = sQueryResponse.result
+            spaceSQueryResponse.content = sQueryResponse.content
+            spaceSQueryResponse.total = sQueryResponse.total
+            spaceSQueryResponse.pageSize = sQueryResponse.pageSize
+            spaceSQueryResponse.pageSize = sQueryResponse.pageSize
+            spaceSQueryResponse
+        } catch (e: Throwable) {
+            e.printStackTrace()
+            val spaceSQueryResponse = SpaceSQueryResponse()
+            spaceSQueryResponse.floorId = request.floorId
+            spaceSQueryResponse.zoneType = objectType
+            spaceSQueryResponse.result = SResponseType.failure
+            spaceSQueryResponse.message = e.message!!
+            spaceSQueryResponse
+        }
+    } // Function unSpaceIspace()
+
+} // Object SpaceService

+ 1 - 1
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/PropertyService.kt

@@ -20,7 +20,7 @@
 
 package com.persagy.server.service.objects
 
-import cn.sagacloud.server.equipcomponent.utils.ShaftNameUtil
+import com.persagy.server.utils.ShaftNameUtil
 import com.persagy.database.SFilter
 import com.persagy.database.SQueryBuilder
 import com.persagy.mybatis.SMybatisDao

+ 694 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ShaftService.kt

@@ -0,0 +1,694 @@
+package com.persagy.server.service.objects
+
+import com.persagy.server.models.requests.ShaftSpaceVertical
+import com.persagy.server.utils.SpaceRunnables
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.dao.mappers.CustomSql
+import com.persagy.server.dao.mappers.EquipmentZoneMapper
+import com.persagy.server.datacenter.models.entities.objects.Shaft
+import com.persagy.server.datacenter.models.entities.rel.RSh2Sp
+import com.persagy.server.datacenter.models.entities.rel.RSpVerticalSp
+import com.persagy.server.datacenter.models.entities.rel.RSpinBd
+import com.persagy.server.datacenter.models.entities.rel.RSpinFl
+import com.persagy.server.models.SimilarityDegree
+import com.persagy.server.models.objects.FloorCompon
+import com.persagy.server.models.objects.ZoneSpace
+import com.persagy.server.service.RShaftThroughShaftService
+import com.persagy.server.service.base.Service
+import com.persagy.service.SObjectService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.responses.SQueryResponse
+import com.persagy.service.utils.SSpringContextUtil
+import org.slf4j.LoggerFactory
+import org.springframework.web.bind.annotation.RequestBody
+import java.lang.reflect.Type
+import java.util.concurrent.Executors
+
+/**
+ * 竖井信息服务
+ *
+ * @author 张维新
+ */
+object ShaftService : Service<Shaft>(SMybatisDao(Shaft::class.java)) {
+
+    /** 日志 */
+    private val logger = LoggerFactory.getLogger(Service::class.java)
+
+    /** 竖井和空间的关系 */
+    val rShContainSpBaseService = SObjectService(SMybatisDao(RSh2Sp::class.java))
+    /** 空间建筑 */
+    val rSpinBdService = SObjectService(SMybatisDao(RSpinBd::class.java))
+    /** 空间楼层 */
+    val rSpinFlService = SObjectService(SMybatisDao(RSpinFl::class.java))
+    /** 空间实例 */
+    val zoneSpaceService = SObjectService(SMybatisDao(ZoneSpace::class.java))
+    /** 空间垂直关系 */
+    val rSpVerticalSpService = SObjectService(SMybatisDao(RSpVerticalSp::class.java))
+
+    /** 自定义查询 */
+    private val equipZoneMapper by lazy {
+        SSpringContextUtil.getBean(EquipmentZoneMapper::class.java) as EquipmentZoneMapper
+    }
+
+    /** 自定义查询 */
+    private val mapperCustomSql by lazy {
+        SSpringContextUtil.getBean(CustomSql::class.java) as CustomSql
+    }
+
+//    @Autowired
+//    lateinit var equipZoneMapper : EquipmentZoneMapper
+
+//    @Autowired
+//    lateinit var mapper: CustomSql
+
+
+    /**
+     * 查询没有和当前竖井贯通的竖井
+     *
+     * @param   shaftId     竖井id
+     * @param   request     条件
+     */
+    fun unShaftThroughShaft(shaftId: String,@RequestBody request: SQueryRequest): SQueryResponse<Shaft> {
+        return try {
+            val projectId = SPageContext.getHeader("ProjectId")
+            val execList = RShaftThroughShaftService.select(SFilter.eq("shaftId", shaftId), SFilter.eq("projectId", projectId!!)).exec()
+            val execOtherList = RShaftThroughShaftService.select(SFilter.eq("shaftOtherId", shaftId), SFilter.eq("projectId", projectId!!)).exec()
+
+            val list = ArrayList<String>()
+            val listf = ArrayList<SFilter>()
+            for (exec in execList){
+                list.add(exec.shaftOtherId!!)
+            }
+            for (exec in execOtherList){
+                list.add(exec.shaftId!!)
+            }
+
+            if (list.size>0){
+                listf.add(SFilter.eq("projectId",projectId!!))
+                listf.add(SFilter.not(SFilter.inList("ShaftID",list)))
+            }else{
+
+                listf.add(SFilter.eq("projectId",projectId!!))
+            }
+
+            val pageQuery = pageQuery(request, listf)
+            pageQuery
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SQueryResponse(SResponseType.failure, e.message!!)
+        }
+
+    } // Function unShaftThroughShaft()
+
+    /**
+     * 查询和竖井关联的空间 垂直交通关系
+     */
+    fun shaftSpace(request: ShaftSpaceVertical): SQueryResponse<FloorCompon>{
+       return try {
+
+           if (request.buildingId.isNullOrEmpty()||request.objectType.isNullOrEmpty()||request.shaftId.isNullOrEmpty()){
+               val sQueryResponse = SQueryResponse<FloorCompon>(SResponseType.failure)
+               sQueryResponse.message = "入参不能为空"
+               return  sQueryResponse
+
+           }
+         val buildingId =  request.buildingId!!
+          val shaftId =  request.shaftId!!
+           val objectType = request.objectType!!
+           val projectId = SPageContext.getHeader("ProjectId")
+//           if (request.aiSwitch!!){
+//               val spVertically = mapperCustomSql.spVertically(projectId!!)
+//               if (spVertically){
+//                   logger.debug("计算成功***************")
+//               }else{
+//                   logger.debug("计算失败***************")
+//               }
+//           }
+
+            /** 获取建筑下的楼层 */
+            val floorList = FloorService.select(SFilter.eq("projectId",projectId!!),SFilter.eq("buildId", buildingId)).order("FloorSequenceID desc").exec()
+            /** 项目下的竖井关联的空间  对应空间类型*/
+            val rShContainSpBaseList = rShContainSpBaseService.select(SFilter.eq("projectId",projectId!!),SFilter.eq("Id1", shaftId),SFilter.eq("ZoneType", objectType), SFilter.eq("type","sh2sp")).exec()
+            if (rShContainSpBaseList.isNotEmpty()&&rShContainSpBaseList.size>0){
+
+                /** 获取空间对象实例 */
+                val listId = ArrayList<String>()
+                for (rShContainSpBase in rShContainSpBaseList){
+                    listId.add(rShContainSpBase.id2!!)
+                }
+                /** 空间实例 */
+                val  zoneSpaceListBase = zoneSpaceService.select(SFilter.inList("id", listId)).exec()
+                if (zoneSpaceListBase.isNotEmpty()&&zoneSpaceListBase.size>0){
+                    /** 处理空间的建筑和楼层 */
+                    for (zoneSpace in zoneSpaceListBase){
+                        try {
+                            /** 空间建筑 */
+                            val rSpinBd = rSpinBdService.select(SFilter.eq("spaceId", zoneSpace.id!!), SFilter.eq("projectId", projectId!!)).entity()
+                            if (rSpinBd!=null){
+                                zoneSpace.buildingId =  rSpinBd.buildingId
+                            }
+                            /** 空间楼层*/
+                            val rSpinFl = rSpinFlService.select(SFilter.eq("spaceId",zoneSpace.id!!), SFilter.eq("projectId", projectId!!)).entity()
+                            if (rSpinFl!=null){
+                                zoneSpace.floorId = rSpinFl.floorId
+                            }
+                        } catch (e: Exception) {
+                            e.printStackTrace()
+                        }
+                    }
+                    /** 排除当前建筑以外的空间 */
+                    val iterator = zoneSpaceListBase.iterator()
+                    while (iterator.hasNext()){
+                        val next = iterator.next()
+                        if (next.buildingId.isNullOrEmpty()||next.buildingId != buildingId ){
+                            iterator.remove()
+                        }
+                    }
+                    if (zoneSpaceListBase.size>0){
+                        /** 处理楼层下的空间 */
+                        for (floor in floorList){
+                            val list = ArrayList<ZoneSpace>()
+                            for (zoneSpace in zoneSpaceListBase){
+                                if (zoneSpace.floorId == floor.id){
+                                    list.add(zoneSpace)
+                                }
+                            }
+                            if (list.size>0){
+                                floor.zoneSpaceList=list
+                            }
+                        }
+                        /** 处理垂直交通关系 */
+                        for (floor in floorList){
+                            if (floor.zoneSpaceList!=null&&floor.zoneSpaceList!!.size>0){
+                                val zoneSpaceFloorList = floor.zoneSpaceList
+                                for (zoneSpace in zoneSpaceFloorList!!){
+                                    /** 查询空间的垂直交通关系 */
+                                    val rSpVerticalSpList = rSpVerticalSpService.select(SFilter.eq("projectId",projectId!!),SFilter.eq("spaceId", zoneSpace.id!!),SFilter.eq("objectType", zoneSpace.objectType!!)).exec()
+                                    if (rSpVerticalSpList.size>0){
+                                        val listId = ArrayList<String>()
+                                        /** 排除和当前竖井空间没有关系的空间 */
+                                        for (zoneSpaceFloor in zoneSpaceListBase){
+                                            val iterator1 = rSpVerticalSpList.iterator()
+                                            while (iterator1.hasNext()){
+                                                val next = iterator1.next()
+                                                if (next.spaceOtherId!=zoneSpace.id&&next.spaceOtherId == zoneSpaceFloor.id ){
+                                                    listId.add(next.spaceOtherId!!)
+                                                }
+                                            }
+                                        }
+                                        logger.debug("1匹配长度=${listId.size} ***********************************")
+                                        zoneSpace.spaceIdList = listId
+
+                                    }
+
+                                    /** 查询空间的垂直交通关系 其它 */
+                                    val rSpVerticalSpOtherList = rSpVerticalSpService.select(SFilter.eq("projectId",projectId!!),SFilter.eq("spaceOtherId", zoneSpace.id!!),SFilter.eq("objectType", zoneSpace.objectType!!)).exec()
+                                    if (rSpVerticalSpOtherList.size>0){
+                                        /** 排除和当前竖井空间没有关系的空间 */
+                                        val listId = ArrayList<String>()
+                                        /** 排除和当前竖井空间没有关系的空间 */
+                                        for (zoneSpaceFloor in zoneSpaceListBase){
+                                            val iterator1 = rSpVerticalSpOtherList.iterator()
+                                            while (iterator1.hasNext()){
+                                                val next = iterator1.next()
+                                                if (next.spaceId!=zoneSpace.id&&next.spaceId == zoneSpaceFloor.id ){
+                                                    listId.add(next.spaceId!!)
+                                                }
+                                            }
+                                        }
+                                        logger.debug("2匹配长度=${listId.size} ***********************************")
+                                        zoneSpace.spaceIdList = listId
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                    /** 处理AI */
+                    if (request.aiSwitch!!){
+                        if (floorList.size>0){
+
+                            /** 处理垂直交通关系 */
+                            val listSpace = ArrayList<ZoneSpace>()
+                            for (floor in floorList){
+                            /** 处理有业务空间的空间 */
+                            if (floor.zoneSpaceList!=null&&floor.zoneSpaceList!!.size>0){
+                                val listid = ArrayList<String>()
+                                for (zoneSpace in floor.zoneSpaceList!!){
+                                    /** 获取和当前业务空间名称相似度为90%的 */
+                                    val setName = HashSet<String>()
+                                    if (!zoneSpace.localName.isNullOrEmpty()){
+                                        val listPr = ArrayList<String>()
+                                        listPr.add("id")
+                                        listPr.add("localName")
+                                        val zoneSpaceLists = ZoneSpaceBaseService.select(SFilter.eq("projectId", projectId),
+                                                SFilter.eq("buildingId", zoneSpace.buildingId!!), SFilter.not(SFilter.isNull("localName"))
+                                                ,SFilter.eq("objectType", zoneSpace.objectType!!), SFilter.not(SFilter.eq("id",zoneSpace.id!!)))
+                                                .projection(listPr).exec()
+                                      if (zoneSpaceLists!=null&&zoneSpaceLists.size>0){
+                                          for (zoneSp in zoneSpaceLists){
+                                              if (!zoneSp.localName.isNullOrEmpty()){
+                                                  setName.add(zoneSp.localName!!)
+                                              }
+                                          }
+                                          /** 获取推荐出来的业务空间 */
+//                                          logger.debug("1匹配本地名称=${zoneSpace.localName} ***********************************")
+//                                          logger.debug("2匹配本地名称=${setName.toList().toJson()} ***********************************")
+                                          val similarList = equipZoneMapper.similarTwo(zoneSpace.localName!!, setName.toList(),setName.toList().size)
+//                                          logger.debug("4匹配长度=${similarList} ***********************************")
+                                          val gson = Gson()
+                                          val type: Type = object : TypeToken<List<SimilarityDegree>>() {}.getType()
+                                          val lists: List<SimilarityDegree> = gson.fromJson(similarList, type)
+
+//                                          logger.debug("3匹配长度=${lists.size} ***********************************")
+                                          if (lists.size>0){
+                                                val setName = HashSet<String>()
+                                              for (similarit in lists){
+                                                  if (similarit.value!! >0.9){
+                                                      setName.add(similarit.key!!)
+                                                  }
+                                              }
+                                              if (setName.size>0){
+                                                  var zoneSpaceList:ArrayList<ZoneSpace>
+                                                  if (listid.size>0){
+                                                      zoneSpaceList = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.inList("localName", setName.toList()),
+                                                              SFilter.eq("objectType", objectType!!),SFilter.not(SFilter.inList("id",listid))).exec()
+                                                  }else{
+                                                      zoneSpaceList = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.inList("localName", setName.toList()),
+                                                              SFilter.eq("objectType", objectType!!)).exec()
+                                                  }
+
+                                                  if (zoneSpaceList.size>0){
+                                                      for (zone in zoneSpaceList){
+                                                          listid.add(zone.id!!)
+                                                          zone.isAi = true
+                                                          listSpace.add(zone)
+                                                      }
+                                                  }
+                                              }
+                                          }
+                                      }
+
+                                    } else if (!zoneSpace.localId.isNullOrEmpty()){
+                                        val listPr = ArrayList<String>()
+                                        listPr.add("id")
+                                        listPr.add("localId")
+                                        val zoneSpaceLists = ZoneSpaceBaseService.select(SFilter.eq("projectId", projectId),
+                                                SFilter.eq("buildingId", zoneSpace.buildingId!!),SFilter.eq("objectType", zoneSpace.objectType!!)
+                                                , SFilter.not(SFilter.eq("id",zoneSpace.id!!)), SFilter.not(SFilter.isNull("localId")))
+                                                .projection(listPr).exec()
+
+                                            if (zoneSpaceLists.size>0){
+                                                for (zoneSp in zoneSpaceLists){
+                                                    setName.add(zoneSp.localId!!)
+                                                }
+                                            }
+                                        val similarList = equipZoneMapper.similarTwo(zoneSpace.localId!!, setName.toList(),setName.toList().size)
+                                        val gson = Gson()
+                                        val type: Type = object : TypeToken<List<SimilarityDegree>>() {}.getType()
+                                        val lists: List<SimilarityDegree> = gson.fromJson(similarList, type)
+                                        if (lists.size>0){
+                                            val setName = HashSet<String>()
+                                            for (similarit in lists){
+                                                if (similarit.value!! >0.9){
+                                                    setName.add(similarit.key!!)
+                                                }
+                                            }
+                                            if (setName.size>0){
+
+                                                var zoneSpaceList:ArrayList<ZoneSpace>
+                                                if (listid.size>0){
+                                                    zoneSpaceList = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.inList("localId", setName.toList()), SFilter.eq("objectType", objectType!!),SFilter.not(SFilter.inList("id",listid))).exec()
+                                                }else{
+                                                    zoneSpaceList = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.inList("localId", setName.toList()), SFilter.eq("objectType", objectType!!)).exec()
+                                                }
+
+
+                                                if (zoneSpaceList.size>0){
+                                                    for (zone in zoneSpaceList){
+                                                        listid.add(zone.id!!)
+                                                        zone.isAi = true
+                                                        listSpace.add(zone)
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                              }
+                            }
+
+                            /** 删除和已经有的数据重复 */
+                            if (zoneSpaceListBase.size>0){
+                                for (zoneSpace in zoneSpaceListBase){
+                                    val iterator1 = listSpace.iterator()
+                                    while (iterator1.hasNext()){
+                                        val next = iterator1.next()
+                                        if (next.id == zoneSpace.id){
+                                            iterator1.remove()
+                                        }
+                                    }
+                                }
+                            }
+
+                            /** 处理 相似度匹配的 的数据 **************************************************************/
+                            if (listSpace.size>0){
+                                for (floor in floorList){
+                                    for (space in listSpace){
+                                        if (floor.id ==space.floorId){
+                                            if (floor.zoneSpaceList!=null&&floor.zoneSpaceList!!.size>0){
+                                                floor.zoneSpaceList!!.add(space)
+                                            }else{
+                                                val list = ArrayList<ZoneSpace>()
+                                                list.add(space)
+                                                floor.zoneSpaceList=list
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
+                            /**  垂直关系匹配**********************************************************************************/
+                            val listSp = ArrayList<ZoneSpace>()
+                            /** 处理垂直关系 */
+                            /** 处理垂直交通关系 */
+                            for (floor in floorList){
+
+                                /** 处理有业务空间的空间 */
+                                if (floor.zoneSpaceList!=null&&floor.zoneSpaceList!!.size>0){
+                                    val setIds = ArrayList<String>()
+                                    for (zoneSpace in floor.zoneSpaceList!!){
+                                        /** 排除AI识别的 */
+                                        if (!zoneSpace.isAi){
+
+                                            /** 查询空间的垂直交通关系 其它 */
+                                            val rSpVerticalSpOtherList = rSpVerticalSpService.select(SFilter.eq("projectId", projectId),SFilter.eq("spaceOtherId", zoneSpace.id!!),SFilter.eq("objectType", zoneSpace.objectType!!)).exec()
+                                            if (rSpVerticalSpOtherList.size>0){
+
+                                                /** 排除已经关联的数据 */
+                                                if (zoneSpace.spaceIdList.size>0){
+
+                                                    for (spaceId in zoneSpace.spaceIdList){
+                                                        val iterator1 = rSpVerticalSpOtherList.iterator()
+                                                        while (iterator1.hasNext()){
+                                                            val next = iterator1.next()
+                                                            if (next.spaceId == spaceId||next.spaceId == zoneSpace.id){
+                                                                /** 清除重复的id */
+                                                                iterator1.remove()
+                                                            }
+                                                        }
+                                                    }
+                                                }else{
+                                                    val iterator1 = rSpVerticalSpOtherList.iterator()
+                                                    while (iterator1.hasNext()){
+                                                        val next = iterator1.next()
+                                                        if (next.spaceId == zoneSpace.id){
+                                                            /** 清除重复的id */
+                                                            iterator1.remove()
+                                                        }
+                                                    }
+                                                }
+                                                if (rSpVerticalSpOtherList.size>0){
+                                                    /** 处理去重重复以后的id */
+                                                    val setListId = HashSet<String>()
+                                                    if (setIds.size>0){
+                                                        val iterator1 = rSpVerticalSpOtherList.iterator()
+                                                        while (iterator1.hasNext()) {
+                                                            val next = iterator1.next()
+                                                            for (ids in setIds){
+                                                                if (next.spaceId == ids ){
+                                                                    iterator1.remove()
+                                                                }
+                                                            }
+                                                        }
+
+                                                        if (rSpVerticalSpOtherList.size>0){
+                                                            val iterator2 = rSpVerticalSpOtherList.iterator()
+                                                            while (iterator2.hasNext()) {
+                                                                val next = iterator2.next()
+                                                                setListId.add(next.spaceId!!)
+                                                                setIds.add(next.spaceId!!)
+                                                            }
+                                                        }
+
+                                                    }else{
+                                                        val iterator2 = rSpVerticalSpOtherList.iterator()
+                                                        while (iterator2.hasNext()) {
+                                                            val next = iterator2.next()
+                                                            setListId.add(next.spaceId!!)
+                                                            setIds.add(next.spaceId!!)
+                                                        }
+                                                    }
+
+                                                    if (setListId.size>0){
+                                                        for (id in setListId){
+                                                            /** 处理垂直的数据 */
+                                                        val entity = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.eq("id", id),SFilter.eq("objectType", objectType)).entity()
+                                                            if (entity!=null){
+                                                                entity.isAi = true
+                                                                entity.spaceIdList.add(zoneSpace.id!!)
+                                                                listSp.add(entity)
+                                                            }
+                                                        }
+                                                    }
+
+//                                                    val iterator1 = rSpVerticalSpOtherList.iterator()
+//                                                    while (iterator1.hasNext()) {
+//                                                        val next = iterator1.next()
+//                                                        zoneSpace.spaceIdList.add(next.spaceId!!)
+//
+//                                                        /** 处理垂直的数据 */
+//                                                        val entity = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.eq("id", next.spaceId!!),SFilter.eq("objectType", next.objectType!!)).entity()
+//                                                            if (entity!=null){
+//                                                                entity.isAi = true
+//                                                                entity.spaceIdList.add(zoneSpace.id!!)
+//                                                                listSp.add(entity)
+//                                                            }
+//                                                    }
+                                                }
+                                            }
+                                            /** 查询空间的垂直交通关系 其它 */
+                                            val rSpVerticalSpOtherListv = rSpVerticalSpService.select(SFilter.eq("projectId", projectId),SFilter.eq("spaceId", zoneSpace.id!!),SFilter.eq("objectType", zoneSpace.objectType!!)).exec()
+                                            if (rSpVerticalSpOtherListv.size>0){
+                                                /** 排除已经关联的数据 */
+                                                if (zoneSpace.spaceIdList.size>0){
+
+                                                    for (spaceId in zoneSpace.spaceIdList){
+
+                                                        val iterator1 = rSpVerticalSpOtherListv.iterator()
+                                                        while (iterator1.hasNext()){
+                                                            val next = iterator1.next()
+                                                            if (next.spaceOtherId == spaceId||next.spaceOtherId == zoneSpace.id){
+                                                                /** 清除重复的id */
+                                                                iterator1.remove()
+                                                            }
+                                                        }
+                                                    }
+
+                                                }else{
+                                                    val iterator1 = rSpVerticalSpOtherListv.iterator()
+                                                    while (iterator1.hasNext()){
+                                                        val next = iterator1.next()
+                                                        if (next.spaceOtherId == zoneSpace.id){
+                                                            /** 清除重复的id */
+                                                            iterator1.remove()
+                                                        }
+
+                                                    }
+                                                }
+                                                if (rSpVerticalSpOtherListv.size>0){
+                                                    /** 处理去重重复以后的id */
+                                                    /** 处理去重重复以后的id */
+                                                    val setListId = HashSet<String>()
+                                                    if (setIds.size>0){
+                                                        val iterator1 = rSpVerticalSpOtherListv.iterator()
+                                                        while (iterator1.hasNext()) {
+                                                            val next = iterator1.next()
+                                                            for (ids in setIds){
+                                                                if (next.spaceId == ids ){
+                                                                    iterator1.remove()
+                                                                }
+                                                            }
+                                                        }
+
+                                                        if (rSpVerticalSpOtherListv.size>0){
+                                                            val iterator2 = rSpVerticalSpOtherListv.iterator()
+                                                            while (iterator2.hasNext()) {
+                                                                val next = iterator2.next()
+                                                                setListId.add(next.spaceId!!)
+                                                                setIds.add(next.spaceId!!)
+                                                            }
+                                                        }
+
+                                                    }else{
+                                                        val iterator2 = rSpVerticalSpOtherListv.iterator()
+                                                        while (iterator2.hasNext()) {
+                                                            val next = iterator2.next()
+                                                            setListId.add(next.spaceId!!)
+                                                            setIds.add(next.spaceId!!)
+                                                        }
+                                                    }
+
+                                                    if (setListId.size>0){
+                                                        for (id in setListId){
+                                                            val entity = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.eq("id", id!!),SFilter.eq("objectType", objectType)).entity()
+                                                            if (entity!=null){
+                                                                entity.isAi = true
+                                                                entity.spaceIdList.add(zoneSpace.id!!)
+                                                                listSp.add(entity)
+                                                            }
+                                                        }
+                                                    }
+
+//                                                    val iterator1 = rSpVerticalSpOtherListv.iterator()
+//                                                    while (iterator1.hasNext()) {
+//                                                        val next = iterator1.next()
+//                                                        zoneSpace.spaceIdList.add(next.spaceOtherId!!)
+//
+//                                                        /** 查询匹配到的对象 */
+//                                                        /** 处理垂直的数据 */
+//                                                        val entity = zoneSpaceService.select(SFilter.eq("projectId", projectId), SFilter.eq("id", next.spaceId!!),SFilter.eq("objectType", next.objectType!!)).entity()
+//                                                        if (entity!=null){
+//                                                            entity.isAi = true
+//                                                            entity.spaceIdList.add(zoneSpace.id!!)
+//                                                            listSp.add(entity)
+//                                                        }
+//                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
+                            /** 清除和已经关联的和  相似度匹配的 */
+                            if (zoneSpaceListBase.size>0){
+                                for (zoneSpace in zoneSpaceListBase){
+                                    val iterator1 = listSp.iterator()
+                                    while (iterator1.hasNext()){
+                                        val next = iterator1.next()
+                                        if (next.id == zoneSpace.id){
+                                            iterator1.remove()
+                                        }
+                                    }
+                                }
+                            }
+
+                            /** 相似度的 */
+                            if (listSpace.size>0){
+                                for (zoneSpace in listSpace){
+                                    val iterator1 = listSp.iterator()
+                                    while (iterator1.hasNext()){
+                                        val next = iterator1.next()
+                                        if (next.id == zoneSpace.id){
+                                            iterator1.remove()
+                                        }
+                                    }
+                                }
+                            }
+
+                            /** 处理垂直AI 的数据 **************************************************************/
+                            if (listSp.size>0){
+                                for (floor in floorList){
+                                    for (space in listSp){
+                                        if (floor.id ==space.floorId){
+                                            if (floor.zoneSpaceList!=null&&floor.zoneSpaceList!!.size>0){
+                                                floor.zoneSpaceList!!.add(space)
+                                            }else{
+                                                val list = ArrayList<ZoneSpace>()
+                                                list.add(space)
+                                                floor.zoneSpaceList=list
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (floorList.size>0){
+                val sQueryResponse = SQueryResponse<FloorCompon>(SResponseType.success)
+                sQueryResponse.content = floorList
+                sQueryResponse
+            }else{
+                val sQueryResponse = SQueryResponse<FloorCompon>(SResponseType.failure)
+                sQueryResponse.message = "暂无楼层数据"
+                sQueryResponse
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+           return  SQueryResponse<FloorCompon>(SResponseType.success,e.message.toString())
+        }
+
+    } // Function
+
+    /**
+     * 计算垂直交通关系
+     */
+    fun spVerticalSp(request: ShaftSpaceVertical): SQueryResponse<FloorCompon>{
+
+        try {
+            if (request.buildingId.isNullOrEmpty()||request.objectType.isNullOrEmpty()||request.shaftId.isNullOrEmpty()){
+                val sQueryResponse = SQueryResponse<FloorCompon>(SResponseType.failure)
+                sQueryResponse.message = "入参不能为空"
+                return  sQueryResponse
+
+            }
+            val projectId = SPageContext.getHeader("ProjectId")
+
+            /** 创建线程池  */
+            val executorService = Executors.newFixedThreadPool(10)
+            val buildingId =  request.buildingId!!
+            val shaftId =  request.shaftId!!
+            val objectType = request.objectType!!
+
+            /** 项目下的竖井关联的空间  对应空间类型*/
+            val rShContainSpBaseList = rShContainSpBaseService.select(SFilter.eq("projectId",projectId!!),SFilter.eq("Id1", shaftId),SFilter.eq("ZoneType", objectType), SFilter.eq("type","sh2sp")).exec()
+
+            if (rShContainSpBaseList.size>0){
+                val list = ArrayList<String>()
+                for (rShContainSpBase in rShContainSpBaseList){
+                    list.add(rShContainSpBase.id2!!)
+                }
+                executorService.execute(SpaceRunnables(projectId, buildingId, objectType, list))
+//                val spVerticallySp = equipZoneMapper.spVerticallySp(projectId, buildingId, objectType, list)
+//                logger.debug("计算结果=${spVerticallySp}")
+            }
+
+
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return SQueryResponse(SResponseType.success)
+
+    } // Fun
+
+
+
+
+} // Object ShaftService
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 73 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/TenantService.kt

@@ -0,0 +1,73 @@
+package com.persagy.server.service.objects
+
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.objects.Tenant
+import com.persagy.server.models.objects.Building
+import com.persagy.server.models.objects.FloorCompon
+import com.persagy.server.service.CustomSqlService
+import com.persagy.server.service.base.Service
+import com.persagy.service.SObjectService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.responses.SQueryResponse
+import com.persagy.service.utils.SSpringContextUtil
+
+
+/**
+ * 租户信息服务
+ *
+ * @author
+ */
+object TenantService : Service<Tenant>(SMybatisDao(Tenant::class.java)) {
+
+    /** 自定义sql */
+    val customSqlService by lazy {
+        SSpringContextUtil.getBean(CustomSqlService::class.java) as CustomSqlService
+    }
+    val serviceBuilding = SObjectService(SMybatisDao(Building::class.java))
+    val serviceFloor = SObjectService(SMybatisDao(FloorCompon::class.java))
+
+    /**
+     * 查询楼层空间的数据以及数量
+     */
+    fun tenantBuildingFloors(tenantId: String,objectType: String): SQueryResponse<Building> {
+
+        return try {
+            val projectId = SPageContext.getHeader("ProjectId")
+            val buildingList = serviceBuilding.select(SFilter.eq("projectId", projectId!!)).exec()
+            if (buildingList.size>0){
+
+                val tenantBuildingFloorList = customSqlService.tenantBuildingFloor(projectId, objectType, tenantId)
+
+                for (building in buildingList){
+                    val floorList = serviceFloor.select(SFilter.eq("projectId", projectId!!), SFilter.eq("buildId", building.id!!)).order("sequenceId desc").exec()
+
+                    if (tenantBuildingFloorList.size>0){
+                        for (floor in floorList){
+                            for (tenantBuildingFloor in tenantBuildingFloorList){
+                                if (floor.id == tenantBuildingFloor.id){
+                                    floor.count = tenantBuildingFloor.count
+                                    building.count = 1
+                                }
+                            }
+
+                        }
+                    }
+
+                    building.floor = floorList
+                }
+            }
+            val sQueryResponse = SQueryResponse<Building>(SResponseType.success)
+            sQueryResponse.content = buildingList
+            sQueryResponse.total = buildingList.size.toLong()
+            sQueryResponse
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SQueryResponse(SResponseType.failure, e.message!!)
+        }
+
+    } // Function tenantBuildingFloors()
+
+
+} // Object TenantService

+ 97 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ZoneSpaceBaseService.kt

@@ -0,0 +1,97 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.service.objects
+
+import com.persagy.server.models.requests.SpatialRelationship
+import com.persagy.database.SFilter
+import com.persagy.database.SQueryBuilder
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.objects.ZoneIspace
+import com.persagy.server.datacenter.models.entities.objects.ZoneSpace
+import com.persagy.server.datacenter.models.entities.rel.RSpatialConnection
+import com.persagy.service.SObjectService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.responses.SQueryResponse
+
+
+/**
+ * 空间父类
+ *
+ * @author
+ */
+object ZoneSpaceBaseService : SObjectService<ZoneSpace>(SMybatisDao(ZoneSpace::class.java)) {
+    /** 邻接关系服务 */
+    private val rSpatialConnectionService = SObjectService(SMybatisDao(RSpatialConnection::class.java))
+    /** 元空间 */
+    private val zoneIspaceService = SObjectService(SMybatisDao(ZoneIspace::class.java))
+
+    override fun onQueryBefore(queryBuilder: SQueryBuilder<ZoneSpace>) {
+        val projectId = SPageContext.getHeader("ProjectId")
+//        val spaceBdFlObjs = ZoneAirConditioningService.spaceBdFlObjs(projectId!!)
+//        if (spaceBdFlObjs.size>0){
+//            queryBuilder.filter(SFilter.inList("id",spaceBdFlObjs.toList()))
+//        }
+    }
+
+    /**
+     * 查询元空间关系 邻接关系、建筑交通网络 、 空气流通网络、 光照辐射网络
+     */
+    fun spatialRelationship(spatialRelationship: SpatialRelationship): SQueryResponse<RSpatialConnection> {
+        return try {
+            val projectId = SPageContext.getHeader("ProjectId")
+            if (!spatialRelationship.buildingId.isNullOrEmpty()&&!spatialRelationship.floorId.isNullOrEmpty()&&!spatialRelationship.graphType.isNullOrEmpty()){
+
+                val zoneIspaceList = zoneIspaceService.select(SFilter.eq("projectId", projectId!!),SFilter.eq("buildingId", spatialRelationship.buildingId!!), SFilter.eq("floorId", spatialRelationship.floorId!!)).exec()
+
+                var list = ArrayList<RSpatialConnection>()
+                if (zoneIspaceList.size>0){
+                    val listId = ArrayList<String>()
+                    for (zoneIspace in zoneIspaceList){
+                        listId.add(zoneIspace.id!!)
+                    }
+
+
+                    if (!spatialRelationship.relType.isNullOrEmpty()){
+                        list = rSpatialConnectionService.select(SFilter.eq("projectId", projectId!!), SFilter.eq("graphType", spatialRelationship.graphType!!), SFilter.eq("relType", spatialRelationship.relType!!), SFilter.inList("spaceId", listId)).exec()
+                    }else{
+                        list = rSpatialConnectionService.select(SFilter.eq("projectId", projectId!!),SFilter.eq("graphType", spatialRelationship.graphType!!),SFilter.inList("spaceId",listId)).exec()
+                    }
+                }
+
+                val sQueryResponse = SQueryResponse<RSpatialConnection>(SResponseType.success)
+                sQueryResponse.content = list
+                sQueryResponse.total = list.size.toLong()
+                sQueryResponse
+            }else{
+                val sQueryResponse = SQueryResponse<RSpatialConnection>(SResponseType.failure)
+                sQueryResponse
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SQueryResponse(SResponseType.success)
+        }
+
+
+    } // Fun spatialRelationship()
+
+
+} // Object ZoneSpaceBaseService

+ 184 - 0
equip-componnet/src/main/kotlin/com/persagy/server/service/objects/ZoneSpaceService.kt

@@ -0,0 +1,184 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.service.objects
+
+import com.persagy.base.extensions.toJson
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.dao.mappers.ZoneSpaceMapper
+import com.persagy.server.datacenter.models.entities.objects.ZoneSpace
+import com.persagy.server.datacenter.models.requests.UpZoneSpaceBaseRequest
+import com.persagy.service.SObjectService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SUpdateRequest
+import com.persagy.service.models.responses.SBaseResponse
+import com.persagy.service.models.responses.SCreateResponse
+import com.persagy.service.models.responses.SQueryResponse
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+import org.springframework.web.bind.annotation.RequestBody
+
+
+/**
+ * 业务空间
+ *
+ * @author 邓婷婷
+ */
+@Service
+open class ZoneSpaceService {
+
+    @Autowired
+    lateinit var mapper: ZoneSpaceMapper
+    /**
+     * 查询未关联业务空间的元空间
+     *
+     * @param   objectType      分区类型
+     * @param   request         查询条件
+     */
+    fun inBdflZoneSpace(x: String, y: String,  request: SQueryRequest): SQueryResponse<ZoneSpace> {
+        return try {
+            val projectId = SPageContext.getHeader("ProjectId")
+
+            val idList = ArrayList<String>()
+            var list = ArrayList<SFilter>()
+            val zoneSpaceBaseTableService = SObjectService(SMybatisDao(ZoneSpace::class.java))
+            val spaceList = zoneSpaceBaseTableService.select(request.filters).filter(SFilter.eq("projectId",projectId!!)).exec()
+            for(space in spaceList){
+                if(!space.outline.isNullOrEmpty()){
+                    val result = mapper.inBdflZoneSpace(x,y,space.outline!!.toJson())
+                    if (result){
+                        idList.add(space.id!!)
+                    }
+                }
+            }
+            if(idList.size>0){
+                list.add(SFilter.inList("id",idList))
+                return zoneSpaceBaseTableService.pageQuery(request,list)
+            }else{
+                val sQueryResponse = SQueryResponse<ZoneSpace>(SResponseType.success)
+                sQueryResponse.content = ArrayList<ZoneSpace>()
+                sQueryResponse
+            }
+
+        } catch (e: Throwable) {
+            e.printStackTrace()
+            SQueryResponse(SResponseType.failure, e.message!!)
+        }
+    } // Function inBdflZoneSpace()
+
+    /**
+     * 修改空间图片信息
+     * @param request 空间信息
+     */
+    fun updateSpacePicInfo(@RequestBody request: SUpdateRequest<UpZoneSpaceBaseRequest>): SBaseResponse {
+        return try {
+            val list = request.content
+            val listStr = ArrayList<String>()
+            listStr.add("pic")
+            if (list != null) {
+                for (space in list) {
+                    if(space.pic.isNullOrEmpty()){
+                        continue
+                    }
+
+                    val zoneSpace = ZoneSpace()
+                    zoneSpace.id = space.id
+                    zoneSpace.pic = space.pic
+                    ZoneSpaceBaseService.update(zoneSpace,listStr)
+
+//                    if (space.objectType == "HeatingZone") {
+//                        val zoneHeating = ZoneHeating()
+//                        zoneHeating.id = space.id
+//                        zoneHeating.pic = space.pic
+//                        ZoneHeatingService.update(zoneHeating, listStr)
+//                    } else if (space.objectType == "CleanZone") {
+//                        val zoneClean = ZoneClean()
+//                        zoneClean.id = space.id
+//                        zoneClean.pic = space.pic
+//                        ZoneCleanService.update(zoneClean, listStr)
+//                    } else if (space.objectType == "DomesticWaterSupplyZone") {
+//                        val zoneDomesticWaterSupply = ZoneDomesticWaterSupply()
+//                        zoneDomesticWaterSupply.id = space.id
+//                        zoneDomesticWaterSupply.pic = space.pic
+//                        ZoneDomesticWaterSupplyService.update(zoneDomesticWaterSupply, listStr)
+//                    } else if (space.objectType == "NetworkZone") {
+//                        val zoneNetwork = ZoneNetwork()
+//                        zoneNetwork.id = space.id
+//                        zoneNetwork.pic = space.pic
+//                        ZoneNetworkService.update(zoneNetwork, listStr)
+//                    } else if (space.objectType == "TenantZone") {
+//                        val zoneTenant = ZoneTenant()
+//                        zoneTenant.id = space.id
+//                        zoneTenant.pic = space.pic
+//                        ZoneTenantService.update(zoneTenant, listStr)
+//                    } else if (space.objectType == "AirConditioningZone") {
+//                        val zoneAirConditioning = ZoneAirConditioning()
+//                        zoneAirConditioning.id = space.id
+//                        zoneAirConditioning.pic = space.pic
+//                        ZoneAirConditioningService.update(zoneAirConditioning, listStr)
+//                    } else if (space.objectType == "FunctionZone") {
+//                        val zoneFunction = ZoneFunction()
+//                        zoneFunction.id = space.id
+//                        zoneFunction.pic = space.pic
+//                        ZoneFunctionService.update(zoneFunction, listStr)
+//                    } else if (space.objectType == "FireZone") {
+//                        val zoneFire = ZoneFire()
+//                        zoneFire.id = space.id
+//                        zoneFire.pic = space.pic
+//                        ZoneFireService.update(zoneFire, listStr)
+//                    } else if (space.objectType == "SecurityZone") {
+//                        val zoneSecurity = ZoneSecurity()
+//                        zoneSecurity.id = space.id
+//                        zoneSecurity.pic = space.pic
+//                        ZoneSecurityService.update(zoneSecurity, listStr)
+//                    } else if (space.objectType == "GeneralZone") {
+//                        val zoneGeneral = ZoneGeneral()
+//                        zoneGeneral.id = space.id
+//                        zoneGeneral.pic = space.pic
+//                        ZoneGeneralService.update(zoneGeneral, listStr)
+//                    } else if (space.objectType == "PowerSupplyZone") {
+//                        val zonePowerSupply = ZonePowerSupply()
+//                        zonePowerSupply.id = space.id
+//                        zonePowerSupply.pic = space.pic
+//                        ZonePowerSupplyService.update(zonePowerSupply, listStr)
+//                    } else if (space.objectType == "LightingZone") {
+//                        val zoneLighting = ZoneLighting()
+//                        zoneLighting.id = space.id
+//                        zoneLighting.pic = space.pic
+//                        ZoneLightingService.update(zoneLighting, listStr)
+//                    } else {
+//                        val sCreateResponse = SCreateResponse<UpZoneSpaceBaseRequest>(SResponseType.failure)
+//                        sCreateResponse.message = "空间分区类型不存在:" + space.objectType
+//                        sCreateResponse
+//                    }
+                }
+            }
+            val sCreateResponse = SCreateResponse<UpZoneSpaceBaseRequest>(SResponseType.success)
+            sCreateResponse
+        }catch (e: Exception){
+            e.printStackTrace()
+            return SBaseResponse(SResponseType.failure, e.message!!)
+        }
+    }
+
+} // Object ZoneSpaceService

+ 17 - 17
equip-componnet/src/main/kotlin/com/persagy/server/utils/DataVerification.kt

@@ -1,15 +1,15 @@
-package cn.sagacloud.server.equipcomponent.utils
-
-import cn.sagacloud.server.datacenter.models.entities.ExplainAllCategories
-import cn.sagacloud.server.datacenter.models.entities.GeneralSystem
-import cn.sagacloud.server.datacenter.models.entities.ViewEquipSystem
-import cn.sagacloud.server.datacenter.models.response.EquipAssetComponentsReqponse
-import cn.sagacloud.server.equipcomponent.service.EquipmentService
-import com.sybotan.database.SFilter
-import com.sybotan.database.SPageQueryInfo
-import com.sybotan.database.functions.SLength
-import com.sybotan.mybatis.SMybatisDao
-import com.sybotan.service.SBaseService
+package com.persagy.server.utils
+
+import com.persagy.database.SFilter
+import com.persagy.database.SPageQueryInfo
+import com.persagy.database.functions.SLength
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.assistant.ViewEquipSystem
+import com.persagy.server.datacenter.models.entities.dict.ExplainAllCategories
+import com.persagy.server.datacenter.models.entities.objects.GeneralSystem
+import com.persagy.server.datacenter.models.response.EquipAssetComponentsReqponse
+import com.persagy.server.service.objects.EquipmentService
+import com.persagy.service.SBaseService
 
 /**
  * 数据校验
@@ -21,7 +21,7 @@ object DataVerification {
     /**
      * 查询 设备关联的资产 部件数量帮助接口
      */
-    fun getEquipAssetComponentsTools(equipAssetComponentsList: SPageQueryInfo<EquipAssetComponentsReqponse>): ArrayList<cn.sagacloud.server.datacenter.models.response.EquipAssetComponentsReqponse> {
+    fun getEquipAssetComponentsTools(equipAssetComponentsList: SPageQueryInfo<EquipAssetComponentsReqponse>): ArrayList<EquipAssetComponentsReqponse> {
         /** 设备关联系统服务 */
         val viewEquipSystemservice = SBaseService(SMybatisDao(ViewEquipSystem::class.java))
         val generalSystemService = SBaseService(SMybatisDao(GeneralSystem::class.java))
@@ -65,7 +65,7 @@ object DataVerification {
 //                equipAssetComponentsReqponse.techParamGeneral = content.techParamGeneral
 //                equipAssetComponentsReqponse.runParamGeneral = content.runParamGeneral
 
-                val generalSystemList = ArrayList<cn.sagacloud.server.datacenter.models.entities.GeneralSystem>()
+                val generalSystemList = ArrayList<GeneralSystem>()
                 val systemList = viewEquipSystemservice.select(SFilter.eq("equipId", content.id!!)).exec()
                 try {
                     if (!systemList.isEmpty()) {
@@ -74,7 +74,7 @@ object DataVerification {
                             if (!system.id.isNullOrEmpty()){
                                 val systemEntity = generalSystemService.select(SFilter.eq("id", system.id!!)).entity()
                                 if (systemEntity!=null){
-                                    val generalSystem = cn.sagacloud.server.datacenter.models.entities.GeneralSystem()
+                                    val generalSystem =GeneralSystem()
                                     generalSystem.id = system.id
                                     generalSystem.name = systemEntity.name
                                     generalSystem.localName = systemEntity.localName
@@ -147,7 +147,7 @@ object DataVerification {
 //                equipAssetComponentsReqponse.techParamGeneral = content.techParamGeneral
 //                equipAssetComponentsReqponse.runParamGeneral = content.runParamGeneral
 
-                val generalSystemList = ArrayList<cn.sagacloud.server.datacenter.models.entities.GeneralSystem>()
+                val generalSystemList = ArrayList<GeneralSystem>()
                 val systemList = viewEquipSystemservice.select(SFilter.eq("equipId", content.id!!)).exec()
                 try {
                     if (!systemList.isEmpty()) {
@@ -156,7 +156,7 @@ object DataVerification {
                             if (!system.id.isNullOrEmpty()){
                                 val systemEntity = generalSystemService.select(SFilter.eq("id", system.id!!)).entity()
                                 if (systemEntity!=null){
-                                    val generalSystem = cn.sagacloud.server.datacenter.models.entities.GeneralSystem()
+                                    val generalSystem = GeneralSystem()
                                     generalSystem.id = system.id
                                     generalSystem.name = systemEntity.name
                                     generalSystem.localName = systemEntity.localName

+ 10 - 9
equip-componnet/src/main/kotlin/com/persagy/server/utils/MatchingProperty.kt

@@ -1,14 +1,15 @@
-package cn.sagacloud.server.equipcomponent.utils
+package com.persagy.server.utils
+
 
-import cn.sagacloud.server.datacenter.models.entities.Equipment
-import cn.sagacloud.server.datacenter.models.entities.Property
-import cn.sagacloud.server.datacenter.models.entities.base.PointD
-import cn.sagacloud.server.equipcomponent.dao.mappers.EquipmentZoneMapper
-import cn.sagacloud.server.equipcomponent.models.entities.SimilarityDegree
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
-import com.sybotan.base.extensions.eq
-import com.sybotan.service.utils.SSpringContextUtil
+import com.persagy.base.extensions.eq
+import com.persagy.server.dao.mappers.EquipmentZoneMapper
+import com.persagy.server.datacenter.models.entities.assistant.PointD
+import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.server.datacenter.models.entities.objects.Property
+import com.persagy.server.models.SimilarityDegree
+import com.persagy.service.utils.SSpringContextUtil
 import org.slf4j.LoggerFactory
 import java.lang.reflect.Type
 import java.util.*
@@ -310,7 +311,7 @@ object MatchingProperty {
     fun similarity(equipment: Equipment, list: ArrayList<Property>,propertyList: ArrayList<Property> ): ArrayList<Property> {
         /** 相似度 */
         for (property in list) {
-            if (!property.localName.isNullOrEmpty()&&similarityDegree(equipment.localName!!,property.localName!!)){
+            if (!property.localName.isNullOrEmpty()&& similarityDegree(equipment.localName!!,property.localName!!)){
                 propertyList.add(property)
                 if(propertyList.size==2){
                     break

+ 1 - 1
equip-componnet/src/main/kotlin/com/persagy/server/utils/ShaftNameUtil.kt

@@ -1,4 +1,4 @@
-package cn.sagacloud.server.equipcomponent.utils
+package com.persagy.server.utils
 
 import java.util.*
 

+ 3 - 4
equip-componnet/src/main/kotlin/com/persagy/server/utils/SpaceRunnables.kt

@@ -1,8 +1,7 @@
-package cn.sagacloud.server.equipcomponent.utils
+package com.persagy.server.utils
 
-import cn.sagacloud.server.equipcomponent.dao.mappers.EquipmentZoneMapper
-import cn.sagacloud.server.equipcomponent.service.ShaftService
-import com.sybotan.service.utils.SSpringContextUtil
+import com.persagy.server.dao.mappers.EquipmentZoneMapper
+import com.persagy.service.utils.SSpringContextUtil
 
 
 /**

+ 12 - 0
equip-componnet/src/main/resources/application-dev.yml

@@ -0,0 +1,12 @@
+
+server:
+  port: 8082
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://39.102.40.239:5432/datacenter
+    username:                           postgres
+    password:                           persagy_2020qwe!@#
+
+  activemq:
+#    broker-url:                         tcp://192.168.20.225:61616

+ 26 - 0
equip-componnet/src/main/resources/application-prod.yml

@@ -0,0 +1,26 @@
+
+# spring-cloud相关配置
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      defaultZone:                          http://eureka-service:8761/eureka
+
+  instance:
+    # 实例ID
+    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+    # 优先使用IP地址方式进行注册服务
+    prefer-ip-address:                      true
+
+server:
+  port: 8080
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://data-center:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+    user:                               admin
+    password:                           admin
+    broker-url:                         tcp://activemq:61616

+ 51 - 0
equip-componnet/src/main/resources/application.yml

@@ -0,0 +1,51 @@
+###############################################################################################################
+
+server:
+  port: 8082
+
+spring:
+  application:
+    name:                               equip-component
+
+  mvc:
+    favicon:
+      enabled:                          true
+
+  jmx:
+    default-domain:                     equip-component
+
+  datasource:
+    name:                               equip-component
+    type:                               com.alibaba.druid.pool.DruidDataSource
+    driver-class-name:                  org.postgresql.Driver
+#  datasource:
+#    url:                                jdbc:postgresql://172.17.11.222:5432/datacenter
+#    username:                           postgres
+#    password:                           123qwe\!@#
+
+  jackson:
+    date-format:                        yyyy-MM-dd HH:mm:ss
+    time-zone:                          Asia/Shanghai
+    default-property-inclusion:         non_null
+    # 首字母大写
+    property-naming-strategy:           com.fasterxml.jackson.databind.PropertyNamingStrategy.PascalCaseStrategy
+    # 以下划线分隔全小写的单词
+    #property-naming-strategy:           com.fasterxml.jackson.databind.PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy
+    mapper:
+      # 属性按字母顺序输出
+      sort_properties_alphabetically:   true
+
+  activemq:
+    in-memory:                          true
+    pool.enabled:                       false
+    user:                               admin
+    password:                           admin
+#    broker-url:                         tcp://172.17.11.222:61616
+  jms:
+    pub-sub-domain: true
+
+topic:                                 datacenter.broadcast
+
+
+mybatis:
+  typeAliasesPackage:                   cn.sagacloud.server.datacenter.entities

+ 55 - 0
equip-componnet/src/main/resources/logback-spring.xml

@@ -0,0 +1,55 @@
+<!--
+  ~ *********************************************************************************************************************
+  ~
+  ~                     :*$@@%$*:                         ;:                ;;    ;;
+  ~                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+  ~                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+  ~                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+  ~                  =@*                                  %!              @ $= % %@=   =%@!      %=
+  ~             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+  ~           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+  ~         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+  ~         $@*   ;@@@%=!:                *@*
+  ~         =@$    ;;;!=%@@@@=!           =@!
+  ~          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+  ~           ;%@@$=$@@%*       *@@@$=%@@%;
+  ~              ::;::             ::;::                                              All rights reserved.
+  ~
+  ~ *********************************************************************************************************************
+  -->
+
+<configuration scan="true" debug="false">
+    <contextName>datacenter</contextName>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}) - %cyan(%msg%n)</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 定义cn.sagacloud包的日志级别 -->
+    <logger name="com.persagy" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+    <!-- 定义com.sybotan包的日志级别 -->
+    <logger name="com.persagy.server" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+    <!-- 定义cn.sagacloud包的日志级别 -->
+<!--    <logger name="cn.sagacloud" level="WARN" additivity="false">-->
+<!--        <appender-ref ref="STDOUT"/>-->
+<!--    </logger>-->
+
+<!--    &lt;!&ndash; 定义com.sybotan包的日志级别 &ndash;&gt;-->
+<!--    <logger name="com.sybotan" level="WARN" additivity="false">-->
+<!--        <appender-ref ref="STDOUT"/>-->
+<!--    </logger>-->
+
+
+
+    <!-- 定义日志级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT" />
+    </root>
+</configuration>

+ 1 - 3
gradle.properties

@@ -28,9 +28,7 @@ SAGA_SERVICE_VERSION = 1.4.140
 
 PERSAGY_URL = http://www.persagy.cn
 PERSAGY_KOTLIN_VERSION = 1.4.114
-PERSAGY_SERVICE_VERSION = 1.4.152
-
-
+PERSAGY_SERVICE_VERSION = 1.4.153
 
 
 

+ 2 - 2
labsl/src/main/kotlin/com/persagy/server/labsl/LaBSLApp.kt

@@ -35,8 +35,8 @@ import org.springframework.context.annotation.ComponentScan
  *
  * @author  Andy
  */
-@ComponentScan(basePackages = ["com.persagy.server"])           // 配置组件扫描路径
-@MapperScan("com.persagy.server")                       // Mapper组件扫描路径
+@ComponentScan(basePackages = ["com.persagy"])           // 配置组件扫描路径
+@MapperScan("com.persagy")                       // Mapper组件扫描路径
 @SpringBootApplication
 open class LaBSLApp : SpringBootServletInitializer() {
     companion object {

+ 2 - 2
labsl/src/main/kotlin/com/persagy/server/labsl/Swagger2Config.kt

@@ -59,8 +59,8 @@ open class Swagger2Config {
         val builder = ParameterBuilder()
         val builderComming = ParameterBuilder()
         val pars = ArrayList<Parameter>()
-        builder.name("ProjectId").description("项目ID").modelRef(ModelRef("string")).parameterType("header").required(false).build()
-        builderComming.name("Coming").description("来源").modelRef(ModelRef("string")).parameterType("header").required(false).build()
+        builderComming.name("coming").description("来源").modelRef(ModelRef("string")).parameterType("header").required(false)
+        builder.name("projectId").description("项目ID").modelRef(ModelRef("string")).parameterType("header").required(false)
         pars.add(builder.build())
         pars.add(builderComming.build())
         return Docket(DocumentationType.SWAGGER_2)

+ 1 - 1
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Graph.kt

@@ -69,7 +69,7 @@ open class Graph : SBaseEntity(), Serializable {
     open var elements: Elements? = null
 
     /** 移至回收站时间 */
-    @ApiModelProperty(value = "移至回收站时间")
+    @ApiModelProperty(value = "移至回收站时间",example = "2020-09-20 08:30:00")
     @Column(name = "del_time")
     var delTime: Date? = null
 

+ 1 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/services/GraphService.kt

@@ -359,6 +359,7 @@ object GraphService : SObjectService<Graph>(SMybatisDao(Graph::class.java)) {
      * @param   graph   对象
      */
     fun delOldData(graph: Graph) {
+        logger.debug("保存图形:${graph.toJson()}")
         /** 清除以前的版本 */
         val entity = select(
             SFilter.eq("projectId", graph.projectId!!),

+ 2 - 2
labsl/src/main/kotlin/com/persagy/server/labsl/services/mappers/CustomMapper.kt

@@ -15,11 +15,11 @@ import org.springframework.stereotype.Repository
 @Mapper
 interface CustomMapper {
     /** 未发布 */
-    @Select("SELECT category_id as categoryId FROM lbsl.graph  WHERE project_id = #{projectId} GROUP BY category_id")
+    @Select("SELECT category_id as categoryId FROM labsl.graph  WHERE project_id = #{projectId} GROUP BY category_id")
     fun calcAffected(@Param("projectId") projectId: String) : ArrayList<CategoryCode>?
 
     /** 已发布 */
-    @Select("SELECT category_id as categoryId FROM lbsl.graph_pub  WHERE project_id = #{projectId} GROUP BY category_id")
+    @Select("SELECT category_id as categoryId FROM labsl.graph_pub  WHERE project_id = #{projectId} GROUP BY category_id")
     fun pubCategory(@Param("projectId") projectId: String) : ArrayList<CategoryCode>?
 
 } // Interface CustomMapper

+ 6 - 3
labsl/src/main/resources/application-dev.yml

@@ -6,9 +6,12 @@ spring:
 #    url:                                jdbc:postgresql://172.16.44.234:5432/datacenter
 #    username:                           postgres
 #    password:                           123456
-   url:                                jdbc:postgresql://60.205.177.43:5432/datacenter
-   username:                           postgres
-   password:                           123qwe!@#
+#   url:                                jdbc:postgresql://60.205.177.43:5432/datacenter
+#   username:                           postgres
+#   password:                           123qwe!@#
+    url:                                jdbc:postgresql://39.102.40.239:5432/datacenter
+    username:                           postgres
+    password:                           persagy_2020qwe!@#
 
   activemq:
     broker-url:                         tcp://172.16.42.210:61616

+ 230 - 0
message-center/build.gradle

@@ -0,0 +1,230 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+group rootProject.group
+version rootProject.version
+
+apply plugin: "kotlin"
+apply plugin: "org.jetbrains.dokka"
+apply plugin: "war"
+apply plugin: 'org.springframework.boot'
+apply plugin: 'io.spring.dependency-management'
+
+sourceCompatibility = JVM_TARGET
+
+compileKotlin {
+    kotlinOptions.jvmTarget = JVM_TARGET
+}
+compileTestKotlin {
+    kotlinOptions.jvmTarget = JVM_TARGET
+}
+
+dependencies {
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // kotlin 依赖
+    compile group: "org.jetbrains.kotlin", name: "kotlin-stdlib-jdk8", version: KOTLIN_VERSION
+    compile group: "org.jetbrains.kotlin", name: "kotlin-reflect", version: KOTLIN_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // 页面
+    compile group: "org.springframework.boot", name: "spring-boot-starter-freemarker", version: SPRING_BOOT_VERSION
+    // spring boot 依赖
+    compile group: "org.springframework.boot", name: "spring-boot-starter-web", version: SPRING_BOOT_VERSION
+    compile group: "org.springframework.boot", name: "spring-boot-configuration-processor", version: SPRING_BOOT_VERSION
+    compile group: "org.springframework.boot", name: "spring-boot-starter-actuator", version: SPRING_BOOT_VERSION
+    compile group: "org.springframework.boot", name: "spring-boot-starter-logging", version: SPRING_BOOT_VERSION
+    //消息
+    compile group: "org.springframework.boot", name: "spring-boot-starter-activemq", version: SPRING_BOOT_VERSION
+    providedCompile group: "org.springframework.boot", name:"spring-boot-starter-tomcat", version: SPRING_BOOT_VERSION
+    // spring boot 缓存
+    compile group:"org.springframework.boot", name:"spring-boot-starter-cache", version: SPRING_BOOT_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // spring cloud 依赖
+    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka', version: SPRING_CLOUD_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // MySQL
+    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
+//    compile group: 'mysql', name: 'mysql-connector-java', version: MYSQL_VERSION
+
+    // PostgreSQL
+    //https://mvnrepository.com/artifact/org.postgresql/postgresql
+//    compile group: 'org.postgresql',    name: 'postgresql',     version: POSTGRESQL_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // RESTful API 文档生成工具
+    // https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui
+    compile group: "io.springfox", name: "springfox-swagger-ui", version: SWAGGER_VERSION
+    compile group: "io.springfox", name: "springfox-swagger2", version: SWAGGER_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // Sybotan依赖
+//    compile group: "com.sybotan", name: "sybotan-kotlin-base", version: SYBOTAN_KOTLIN_VERSION
+//    compile group: "com.sybotan", name: "sybotan-kotlin-database", version: SYBOTAN_KOTLIN_VERSION
+//    compile group: "com.sybotan", name: "sybotan-kotlin-mybatis", version: SYBOTAN_KOTLIN_VERSION
+//    compile group: "com.sybotan", name: "sybotan-kotlin-postgresql", version: SYBOTAN_KOTLIN_VERSION
+//    compile group: "com.sybotan", name: "sybotan-service-base", version: SYBOTAN_SERVICE_VERSION
+//    compile group: "com.sybotan", name: "sybotan-service-mybatis", version: SYBOTAN_SERVICE_VERSION
+
+
+    compile group: "com.persagy", name: "persagy-kotlin-base", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-database", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-mybatis", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-postgresql", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-service-base", version: PERSAGY_SERVICE_VERSION
+    compile group: "com.persagy", name: "persagy-service-mybatis", version: PERSAGY_SERVICE_VERSION
+    compile group: "com.persagy", name: "persagy-service-postgresql", version: PERSAGY_SERVICE_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+    // 数据中心依赖
+    compile project(":data-core")
+
+}
+
+
+dependencyManagement {
+    imports {
+        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${SPRING_CLOUD_DEPENDENCIES}"
+    }
+}
+
+
+
+
+// 下面是配置文件选择
+/*******************************************************/
+
+sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-dev']
+//ext.needTest = 'true'
+// 打产品包
+task buildProdWar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-prod"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+
+// 打产品包
+task buildyidaWar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-yida"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+
+// 打产品包
+task buildWandaWar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-wanda"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+
+// 打产品包
+task buildAsiaWar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-asia"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+
+
+// 打开发环境包
+task buildDevWar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-dev']
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+
+// 打产品包
+task buildGuanChengWar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-guancheng"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+
+
+// 打产品包
+task buildProdJar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-prod"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(bootJar)
+}
+
+// 打产品包
+task buildAsiaJar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-asia"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(bootJar)
+}
+
+
+// 打开发环境包
+task buildDevJar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-dev']
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(bootJar)
+}
+
+// 打产品包
+task buildGuanChengJar {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-guancheng"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(bootJar)
+}

+ 96 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/MessageCenterApp.kt

@@ -0,0 +1,96 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter
+
+import com.alibaba.fastjson.PropertyNamingStrategy
+import com.persagy.service.json.SJsonHttpMessageConverter
+import org.mybatis.spring.annotation.MapperScan
+import org.springframework.boot.SpringApplication
+import org.springframework.boot.autoconfigure.SpringBootApplication
+import org.springframework.boot.builder.SpringApplicationBuilder
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.ComponentScan
+
+
+/**
+ * 应用配置
+ *
+ * @author  Andy
+ */
+@ComponentScan(basePackages = ["com.persagy.server", "com.persagy"])           // 配置组件扫描路径
+@MapperScan("com.persagy", "com.persagy.server")                       // Mapper组件扫描路径
+@EnableEurekaClient
+@EnableDiscoveryClient
+@SpringBootApplication
+open class MessageCenterApp : SpringBootServletInitializer() {
+
+    /**
+     * 配置应用
+     *
+     * @param   application     应用构建对象
+     */
+    override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
+        return application.sources(MessageCenterApp::class.java)
+    } // Function configure
+
+    /**
+     * 配置FastJson
+     *
+     * @return  HttpMessageConverters
+     */
+    @Bean
+    @Suppress("MoveLambdaOutsideParentheses")
+    open fun jsonHttpMessageConverters(): SJsonHttpMessageConverter {
+        val fastConverter = SJsonHttpMessageConverter()
+        fastConverter.propertyNamingStrategy = PropertyNamingStrategy.PascalCase
+        return fastConverter
+
+    } // Function fastJsonHttpMessageConverters()
+
+//    @Bean
+//    open fun fastJsonHttpMessageConverters(): HttpMessageConverters {
+//        // 1.定义一个converters转换消息的对象
+//        val fastConverter = FastJsonHttpMessageConverter()
+//        // 2.添加fastjson的配置信息,比如: 是否需要格式化返回的json数据
+//        val fastJsonConfig = FastJsonConfig()
+//        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat)
+//        // 3.在converter中添加配置信息
+//        fastConverter.setFastJsonConfig(fastJsonConfig)
+//        // 4.将converter赋值给HttpMessageConverter
+//        // 5.返回HttpMessageConverters对象
+//        return HttpMessageConverters(fastConverter)
+//    }
+
+
+} // Class Application
+
+/**
+ * Web应用入口
+ *
+ * @param   args        命令行参数
+ */
+fun main(args: Array<String>) {
+    SpringApplication.run(MessageCenterApp::class.java, *args)
+    return
+} // Function main()

+ 92 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/Swagger2Config.kt

@@ -0,0 +1,92 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter
+
+import org.slf4j.LoggerFactory
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+import springfox.documentation.builders.ApiInfoBuilder
+import springfox.documentation.builders.ParameterBuilder
+import springfox.documentation.builders.PathSelectors
+import springfox.documentation.builders.RequestHandlerSelectors
+import springfox.documentation.schema.ModelRef
+import springfox.documentation.service.ApiInfo
+import springfox.documentation.service.Contact
+import springfox.documentation.service.Parameter
+import springfox.documentation.spi.DocumentationType
+import springfox.documentation.spring.web.plugins.Docket
+import springfox.documentation.swagger2.annotations.EnableSwagger2
+
+/**
+ * RESTful API文档生成器Swagger2配置
+ *
+ * @author  PLX
+ */
+@Configuration
+@EnableSwagger2
+open class Swagger2Config {
+    companion object {
+        // 日志
+        private val logger = LoggerFactory.getLogger(Swagger2Config::class.java)
+    } // Companion object
+
+    /**
+     * 创建RestApi文档生成器
+     *
+     * @return  返回文档生成器对象
+     */
+    @Bean
+    open fun createRestApi(): Docket {
+        logger.debug("createRestApi")
+        val builder = ParameterBuilder()
+//        val builderComming = ParameterBuilder()
+//        val builderPhone = ParameterBuilder()
+        val pars = ArrayList<Parameter>()
+        builder.name("projectId").description("项目ID").modelRef(ModelRef("string")).parameterType("header").required(false).build()
+//        builderComming.name("Coming").description("来源").modelRef(ModelRef("string")).parameterType("header").required(false).build()
+//        builderPhone.name("Account").description("账号信息").modelRef(ModelRef("string")).parameterType("header").required(false).build()
+        pars.add(builder.build())
+//        pars.add(builderComming.build())
+//        pars.add(builderPhone.build())
+        return Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.persagy.server"))
+                .paths(PathSelectors.any())
+                .build()
+                .globalOperationParameters(pars)
+    } // Function createRestApi()
+
+    /**
+     * 返回API信息基本
+     *
+     * @return  返回Api基本信息
+     */
+    private fun apiInfo(): ApiInfo {
+        return ApiInfoBuilder()
+                .title("消息中心API")
+                .description("")
+                .termsOfServiceUrl("http://www.sagacloud.cn/")
+                .contact(Contact("邓婷婷", "", "danmohendt@163.com"))
+                .version("2.0")
+                .build()
+    } // Function apiInfo()
+} // Class Swagger2Config

+ 42 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/WebMvcConfg.kt

@@ -0,0 +1,42 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package cn.sagacloud.server.messagecenter
+
+import com.sybotan.service.interceptors.SPageInterceptor
+import org.springframework.context.annotation.Configuration
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
+
+@Configuration
+open class WebMvcConfg: WebMvcConfigurerAdapter() {
+
+    /**
+     * 配置拦截器
+     *
+     * @param   registry        拦截器注册器
+     */
+    override fun addInterceptors(registry : InterceptorRegistry) {
+        //registry.addInterceptor(AccessControlAllowOriginInterceptor()).addPathPatterns("/**")
+//        registry.addInterceptor(SAccessControlAllowOriginInterceptor()).addPathPatterns("/**")
+        registry.addInterceptor(SPageInterceptor()).addPathPatterns("/**")
+        super.addInterceptors(registry)
+    } // Function addInterceptors()
+} // Class WebMvcConf()

+ 160 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/controllers/MessageController.kt

@@ -0,0 +1,160 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter.controllers
+
+import com.persagy.base.extensions.toJson
+import com.persagy.server.messagecenter.models.entities.Message
+import com.persagy.server.messagecenter.models.request.MessageRequest
+import com.persagy.server.messagecenter.services.MessageService
+import com.persagy.server.messagecenter.services.activemq.JMSProducer
+import com.persagy.service.models.requests.SCountRequest
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SUpdateRequest
+import com.persagy.service.models.responses.SBaseResponse
+import com.persagy.service.models.responses.SCountResponse
+import com.persagy.service.models.responses.SCreateResponse
+import com.persagy.service.models.responses.SQueryResponse
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import org.apache.activemq.command.ActiveMQTopic
+import org.slf4j.LoggerFactory
+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
+
+/**
+ * 消息中心接口
+ *
+ * @author  邓婷婷
+ */
+@Api(tags = ["消息中心接口"])
+@RestController
+@RequestMapping("/message")
+open class MessageController {
+
+    companion object {
+        // 日志
+        private val logger = LoggerFactory.getLogger(MessageController::class.java)
+    } // Companion object
+
+    @Autowired
+    lateinit var producer: JMSProducer
+
+    val destination = ActiveMQTopic("message.manage")
+
+    /**
+     * 查询消息列表
+     */
+    @ApiOperation(value = "查询消息列表", notes = "级联: 项目(project)")
+    @PostMapping(value = ["/page-query"])
+    fun pageQuery(@RequestBody request: SQueryRequest): SQueryResponse<Message> {
+        logger.debug("MessageQuery =${request.toJson()}")
+//        val projectId = SPageContext.getHeader("ProjectId");
+//
+//        if(projectId != null){
+//            val withFilterList = ArrayList<SFilter>()
+//            withFilterList.add(SFilter.eq("projectId",projectId ))
+//
+//            return MessageService.pageQuery(request,withFilterList)
+//        }
+        return MessageService.pageQuery(request)
+
+    } // Function pageQuery()
+
+    /**
+     * 创建消息
+     *
+                {
+                    "Content": {
+                        "ButtonList": [
+                            {
+                                "FileName": "ca7de892f14411e9b20d17b4c79481be.rvt",
+                                "Name": "下载报告",
+                                "Url": "/image-service/common/file_get?systemId=revit&key=model/ca7de892f14411e9b20d17b4c79481be.rvt"
+                            }
+                        ],
+                        "Message": "3楼模型损坏,请重新上传"
+                    },
+                    "Module": "模型文件管理",
+                    "ProjectId": "Pj4201050001",
+                    "Title": "3楼模型损坏,请重新上传",
+                    "Type": "Error",
+                    "UserList": [
+                    "234567"
+                    ]
+                }
+
+     */
+    @ApiOperation(value = "创建消息", notes = "消息类型:提示(Info)、警告(Warning)、错误(Error)、成功(Success);")
+    @PostMapping(value = ["/create"])
+    fun create(@RequestBody request: MessageRequest): SCreateResponse<Message> {
+        logger.debug("message =${request.toJson()}")
+//        println("content: "+ request.toJson())
+        producer.sendMessage(destination,request.toJson())
+        return MessageService.createList(MessageService.createBefore(request))
+    } // Function create()
+
+    /**
+     * 更新消息状态
+     */
+    @ApiOperation(value = "更新消息状态", notes = "是否读过:未读(false)、已读(true)")
+    @PostMapping(value = ["/update"])
+    fun update(@RequestBody request: SUpdateRequest<Message>): SBaseResponse {
+        return MessageService.updateList(request)
+    } // Function update()
+
+    /**
+     * 删除消息
+     */
+    @ApiOperation(value = "删除消息", notes = "")
+    @PostMapping(value = ["/delete"])
+    fun delete(@RequestBody idList: ArrayList<Message>): SBaseResponse {
+        return MessageService.deleteByKeysList(idList)
+    } // Function delete()
+
+    /**
+    * 统计数量
+    */
+    @ApiOperation(value = "统计数量", notes = "查询总数量不传参数,查询 已读Read = true,未读 Read = false")
+    @PostMapping(value = ["/count"])
+    fun count(@RequestBody request: SCountRequest): SCountResponse {
+//        val projectId = SPageContext.getHeader("ProjectId");
+//        if(projectId != null){
+//            val withFilterList = ArrayList<SFilter>()
+//            withFilterList.add(SFilter.eq("projectId",projectId ))
+//
+//            return MessageService.count(request,withFilterList)
+//        }
+        return MessageService.count(request)
+    } // Function count()
+
+    /**
+     * 根据接收人将所有消息置为已读
+     */
+    @ApiOperation(value = "根据接收人将消息置为已读", notes = "已读Read = true")
+    @PostMapping(value = ["/update-state"])
+    fun updateState(@RequestBody request: Message): SBaseResponse {
+        return MessageService.updateMessageState(request)
+    } // Fun updateState
+
+} // Class ScanTaskBaseController

+ 79 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/Message.kt

@@ -0,0 +1,79 @@
+package com.persagy.server.messagecenter.models.entities
+
+
+import com.persagy.server.messagecenter.models.entities.base.RBaseInfo
+import com.alibaba.fastjson.annotation.JSONField
+import com.fasterxml.jackson.annotation.JsonProperty
+import com.persagy.server.datacenter.models.entities.objects.Project
+import com.persagy.service.models.annotations.SCascade
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 消息中心
+ *
+ * @author  邓婷婷
+ */
+@ApiModel(description = "消息中心实体类")
+@Table(name = "message.message")
+open class Message: RBaseInfo(){
+
+    /** ID */
+    @ApiModelProperty(value = "ID")
+    @Id
+    @Column(name = "id")
+    @JsonProperty("Id")
+    var id: String? = null
+
+    /** 项目ID */
+    @ApiModelProperty(value = "项目ID")
+    @Column(name = "project_id")
+    @JsonProperty("ProjectId")
+    var projectId: String? = null
+
+    /** 标题 */
+    @ApiModelProperty(value = "标题")
+    @Column(name = "title")
+    @JSONField(name = "Title")
+    var title: String? = null
+
+    /** 发送消息的模块 */
+    @ApiModelProperty(value = "发送消息的模块")
+    @Column(name = "module")
+    @JSONField(name = "Module")
+    var module: String? = null
+
+    /** 枚举类型: Info, Warning, Error, Success */
+    @ApiModelProperty(value = "枚举类型: Info, Warning, Error, Success")
+    @Column(name = "type")
+    @JSONField(name = "Type")
+    var type: String? = null
+
+    /** 消息内容 */
+    @ApiModelProperty(value = "消息内容")
+    @Column(name = "content")
+    @JSONField(name = "Content")
+    var content: MessageContent? = null
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id")
+    @Column(name = "user_id")
+    @JSONField(name = "UserId")
+    var userId: String? = null
+
+    /** 是否已读 */
+    @ApiModelProperty(value = "是否已读")
+    @Column(name = "read")
+    @JSONField(name = "Read")
+    var read: Boolean? = null
+
+    /** 级联-项目 */
+    @ApiModelProperty(value = "级联-项目")
+    @SCascade(table="message.message", idColumn="id", childIdColumn="project_id")
+    @JSONField(name = "Project")
+    var project: ArrayList<Project>? = null
+
+} // Class Message

+ 27 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/MessageContent.kt

@@ -0,0 +1,27 @@
+package com.persagy.server.messagecenter.models.entities
+
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 消息内容
+ *
+ * @author  邓婷婷
+ */
+@ApiModel(description = "消息内容")
+open class MessageContent{
+
+    /** 文本 */
+    @ApiModelProperty(value = "文本")
+    @JSONField(name = "Message")
+    var message: String? = null
+
+    /** ButtonList */
+    @ApiModelProperty(value = "ButtonList")
+    @JSONField(name = "ButtonList")
+    var buttonList: ArrayList<MessageContentButton>? = null
+
+
+} // Class ScanTask

+ 33 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/MessageContentButton.kt

@@ -0,0 +1,33 @@
+package com.persagy.server.messagecenter.models.entities
+
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 消息内容按钮
+ *
+ * @author  邓婷婷
+ */
+@ApiModel(description = "消息内容按钮")
+open class MessageContentButton{
+
+    /** 名称 */
+    @ApiModelProperty(value = "名称")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    /** Url */
+    @ApiModelProperty(value = "Url")
+    @JSONField(name = "Url")
+    var url: String? = null
+
+    /** 文件名 */
+    @ApiModelProperty(value = "文件名")
+    @JSONField(name = "FileName")
+    var fileName: String? = null
+
+
+
+} // Class ScanTask

+ 65 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/BaseInfo.kt

@@ -0,0 +1,65 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter.models.entities.base
+
+import com.fasterxml.jackson.annotation.JsonFormat
+import com.fasterxml.jackson.annotation.JsonProperty
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import java.util.*
+import javax.persistence.Column
+import javax.persistence.Id
+
+/**
+ * BaseInfo
+ *
+ * @author 邓婷婷
+ */
+open class BaseInfo : Serializable {
+
+    /** ID */
+    @ApiModelProperty(value = "ID")
+    @Id
+    @Column(name = "id")
+    @JsonProperty("Id")
+    var id: String? = null
+
+    /** 项目ID */
+    @ApiModelProperty(value = "项目ID")
+    @Column(name = "project_id")
+    @JsonProperty("ProjectId")
+    var projectId: String? = null
+
+    /** 更新时间 */
+    @ApiModelProperty(value = "更新时间", example = "2019-03-01 10:10:10")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Column(name = "last_update", updatable = false, insertable = false)
+    @JsonProperty("LastUpdate")
+    var lastUpdate: Date? = null
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", example = "2019-03-01 10:10:10")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Column(name = "create_time", updatable = false, insertable = false)
+    @JsonProperty("CreateTime")
+    var createTime: Date? = null
+
+} // Class BaseInfo

+ 33 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/BaseInfoSuper.kt

@@ -0,0 +1,33 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter.models.entities.base
+
+import com.persagy.service.models.SBaseEntity
+
+
+/**
+ * 实体类的基类
+ *
+ * @author 李井强
+ */
+open class BaseInfoSuper : SBaseEntity()
+
+

+ 20 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/PointD.kt

@@ -0,0 +1,20 @@
+package com.persagy.server.messagecenter.models.entities.base
+
+class PointD {
+    var x : Double = 0.0
+    var y : Double = 0.0
+
+    constructor(x: Double, y: Double) {
+        this.x = x
+        this.y = y
+    }
+
+
+    fun distance(px : Double, py : Double) : Double{
+        var px1 = px
+        var py1 = py
+        px1 -= x
+        py1 -= y
+        return Math.sqrt(px1 * px1 + py1 * py1)
+    }
+}

+ 43 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/entities/base/RBaseInfo.kt

@@ -0,0 +1,43 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter.models.entities.base
+
+import com.persagy.service.models.SBaseEntity
+
+
+/**
+ * 实体类的基类
+ *
+ * @author 李井强
+ */
+open class RBaseInfo : SBaseEntity() {
+//    /** 对象类型 */
+//    @ApiModelProperty(value = "对象类型")
+//    @Column(name = "object_type")
+//    open var objectType: String? = null
+
+//    /** 关系id */
+//    @ApiModelProperty(value = "关系id")
+//    @Column(name = "id")
+//    @JSONField(name =value = "Id")
+//    var id: String? = null
+
+} // Class DicRequest

+ 49 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/request/BasicRequest.kt

@@ -0,0 +1,49 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter.models.request
+
+import com.fasterxml.jackson.annotation.JsonProperty
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+
+/**
+ * 基本请求信息
+ *
+ * @author 邓婷婷
+ */
+@ApiModel(description = "基本请求信息")
+open class BasicRequest : Serializable {
+
+    /** 项目ID */
+    @ApiModelProperty(value = "项目ID", required = true)
+    @Column(name = "project_id")
+    @JsonProperty("ProjectId")
+    var projectId: String? = null
+
+    /** 数据源id */
+    @ApiModelProperty(value = "数据源id", required = true)
+    @Column(name = "datasource_id")
+    @JsonProperty("DataSourceId")
+    var dataSourceId: String? = null
+
+} // Class BasicRequest

+ 48 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/models/request/MessageRequest.kt

@@ -0,0 +1,48 @@
+package com.persagy.server.messagecenter.models.request
+
+
+import com.persagy.server.messagecenter.models.entities.MessageContent
+import com.alibaba.fastjson.annotation.JSONField
+import com.fasterxml.jackson.annotation.JsonProperty
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 消息中心
+ *
+ * @author  邓婷婷
+ */
+@ApiModel(description = "消息中心请求类")
+open class MessageRequest{
+
+    /** 标题 */
+    @ApiModelProperty(value = "标题")
+    @JSONField(name = "Title")
+    var title: String? = null
+
+    /** 发送消息的模块 */
+    @ApiModelProperty(value = "发送消息的模块")
+    @JSONField(name = "Module")
+    var module: String? = null
+
+    /** 枚举类型: Info, Warning, Error, Success */
+    @ApiModelProperty(value = "枚举类型: Info, Warning, Error, Success")
+    @JSONField(name = "Type")
+    var type: String? = null
+
+    /** 消息内容 */
+    @ApiModelProperty(value = "消息内容")
+    @JSONField(name = "Content")
+    var content: MessageContent? = null
+
+    /** 项目ID */
+    @ApiModelProperty(value = "项目ID")
+    @JsonProperty("ProjectId")
+    var projectId: String? = null
+
+    /** 消息接收人 */
+    @ApiModelProperty(value = "消息接收人")
+    @JSONField(name = "UserList")
+    var userList: ArrayList<String>? = null
+
+} // Class ScanTask

+ 66 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/services/MessageService.kt

@@ -0,0 +1,66 @@
+package com.persagy.server.messagecenter.services
+
+import com.persagy.server.messagecenter.models.entities.Message
+import com.persagy.server.messagecenter.models.request.MessageRequest
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.messagecenter.services.base.RService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.requests.SCreateRequest
+import com.persagy.service.models.requests.SUpdateRequest
+import com.persagy.service.models.responses.SBaseResponse
+import org.slf4j.LoggerFactory
+import org.springframework.web.bind.annotation.RequestBody
+import java.util.*
+
+/**
+ * 消息表
+ *
+ * @author  邓婷婷
+ */
+object MessageService : RService<Message>(SMybatisDao(Message::class.java)){
+    // 日志
+    private val logger = LoggerFactory.getLogger(MessageService::class.java)
+
+    fun createBefore(@RequestBody messageRequest: MessageRequest): SCreateRequest<Message> {
+        val projectId = SPageContext.getHeader("ProjectId")
+        val returnObj = SCreateRequest<Message>()
+        var returnList = arrayListOf<Message>()
+
+//        if(messageRequest.userList == null){//接收人列表为空时,表示所有用户都要接收到信息
+//
+//        }
+        for(userId in messageRequest.userList!!){
+            var message = Message()
+            if(!projectId.isNullOrEmpty()){
+                message.projectId = projectId
+            }else{
+                message.projectId = messageRequest.projectId
+            }
+            message.id = UUID.randomUUID().toString()
+            message.title = messageRequest.title
+            message.module = messageRequest.module
+            message.type = messageRequest.type
+            message.content = messageRequest.content
+            message.read = false
+            message.userId = userId
+            (returnList as ArrayList<Message>).add(message)
+        }
+        returnObj.content = returnList
+        return returnObj
+    } // Fun createBefore
+
+    /**
+     * 更新状态为已读
+     */
+    fun updateMessageState(message : Message): SBaseResponse {
+        val request = SUpdateRequest<Message>()
+
+        val list = MessageService.select("userId" to message.userId!!,"read" to false).exec()
+        for(m in list){
+            m.read = true
+        }
+        request.content = list
+        return MessageService.updateList(request)
+    } // Fun updateMessageState
+
+}

+ 41 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/services/activemq/JMSComsumer.kt

@@ -0,0 +1,41 @@
+package com.persagy.server.messagecenter.services.activemq
+
+import org.springframework.stereotype.Service
+
+@Service
+class JMSComsumer {
+
+//    @JmsListener(destination = "model.manage")
+//    fun receiveTopic(message : String){
+//        println(message)
+//    }
+
+//    var conn : Connection? = null
+//    var consumer : MessageConsumer? = null
+//    private fun init(){
+//        val connFactory = ActiveMQConnectionFactory("admin", "admin", "tcp://192.168.20.225:61616")
+//        conn = connFactory.createConnection()
+//        val session = conn!!.createSession(false, Session.AUTO_ACKNOWLEDGE)
+//        val dest = session.createTopic("myprivate")
+//        consumer = session.createConsumer(dest)
+//
+//    }
+//
+//    fun receiveMessage(){
+//        init()
+//        conn!!.start()
+//        consumer!!.messageListener = this
+//    }
+//
+//    override fun onMessage(message: Message?) {
+//        try{
+//            when (message) {
+//                is TextMessage -> {
+//                    print(message.text)
+//                }
+//            }
+//        }catch (e : Exception){
+//            print("error : ${e.message}")
+//        }
+//    }
+}

+ 29 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/services/activemq/JMSProducer.kt

@@ -0,0 +1,29 @@
+package com.persagy.server.messagecenter.services.activemq
+
+import org.apache.activemq.command.ActiveMQTopic
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.jms.core.JmsMessagingTemplate
+import org.springframework.stereotype.Component
+import javax.jms.Destination
+
+/**
+ *
+ *
+ * @author jxing
+ */
+@Component
+class JMSProducer {
+
+    @Autowired
+    lateinit var jmsTemplate : JmsMessagingTemplate
+
+    val destination = ActiveMQTopic("message.manage")
+
+    fun sendMessage(destination : Destination, message : String){
+        jmsTemplate.convertAndSend(destination, message)
+    }
+
+    fun sendMessage(message : String){
+        jmsTemplate.convertAndSend(destination, message)
+    }
+}

+ 27 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/services/base/RService.kt

@@ -0,0 +1,27 @@
+package com.persagy.server.messagecenter.services.base
+
+import com.persagy.server.messagecenter.models.entities.base.RBaseInfo
+import com.persagy.database.SAbstractDao
+import com.persagy.server.synchronize.MessageHandler
+import com.persagy.service.SObjectService
+import com.persagy.service.utils.SSpringContextUtil
+
+/**
+ * 关系处理服务基类
+ *
+ * @author 张维新
+ */
+open class RService<ENTITY : RBaseInfo>(daoClass: SAbstractDao<ENTITY>) : SObjectService<ENTITY>(daoClass) {
+    companion object {
+        /** 日志 */
+//        private val logger = LoggerFactory.getLogger(ProjectController::class.java)
+
+        /** MQ消息对象 */
+        val messageHandler by lazy {
+            SSpringContextUtil.getBean(MessageHandler::class.java) as MessageHandler
+        }
+
+    } // Companion object
+
+
+} // Class Service

+ 201 - 0
message-center/src/main/kotlin/com/persagy/server/messagecenter/services/base/Service.kt

@@ -0,0 +1,201 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.messagecenter.services.base
+
+import com.persagy.server.messagecenter.models.entities.base.BaseInfo
+import com.alibaba.druid.support.json.JSONParser
+import com.persagy.database.SAbstractDao
+import com.persagy.database.SFilter
+import com.persagy.server.messagecenter.models.request.BasicRequest
+import com.persagy.service.SBaseService
+import com.persagy.service.SPageContext
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SUpdateRequest
+import com.persagy.service.models.responses.SBaseResponse
+import com.persagy.service.models.responses.SQueryResponse
+import org.springframework.web.bind.annotation.RequestBody
+import java.util.*
+import kotlin.collections.ArrayList
+
+
+open class Service<ENTITY : BaseInfo>(daoClass: SAbstractDao<ENTITY>)
+    : SBaseService<ENTITY>(daoClass) {
+
+    /**
+     * 创建
+     *
+     * @param       request
+     * @return      返回创建id
+     */
+    open fun create(request: ENTITY): SBaseResponse {
+        return try {
+            request.id = UUID.randomUUID().toString()
+            request.projectId = getProject()
+            baseDao.insert(request)
+            SBaseResponse(SResponseType.success)
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SBaseResponse(SResponseType.failure, e.message!!)
+        }
+    } // Function create()
+
+    /**
+     * 获取项目号
+     *
+     * @return      返回项目号
+     */
+    open fun getProject(): String {
+        return SPageContext.getHeader("ProjectId").toString()
+    }// Function getProject()
+
+    /**
+     * 根据id删除
+     *
+     * @param       request
+     * @return      返回成功/失败ID列表
+     */
+    open fun deleteList(request: ArrayList<*>): SBaseResponse {
+        return try {
+            for (id in request) {
+                baseDao.delete(SFilter.eq("id", id), SFilter.eq("projectId", getProject()))
+
+            }
+            SBaseResponse(SResponseType.success)
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SBaseResponse(SResponseType.failure, e.message!!)
+        }
+    } // Function deleteList()
+
+    /**
+     * 更新
+     *
+     * @param       request
+     * @return      返回成功/失败ID列表
+     */
+    open fun updateList(request: SUpdateRequest<ENTITY>): SBaseResponse {
+        return try {
+            for (info in request.content!!) {
+                info.projectId = getProject()
+                baseDao.update(info, request.projection, SFilter.eq("id", info.id!!), SFilter.eq("projectId", getProject()))
+            }
+            SBaseResponse(SResponseType.success)
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SBaseResponse(SResponseType.failure, e.message!!)
+        }
+
+    } // Function updateList()
+
+    /**
+     * 查询
+     *
+     * @param       request
+     * @return      返回点位列表
+     */
+    open fun pageQuery(@RequestBody request: SQueryRequest, withFilterList: ArrayList<SFilter>): SQueryResponse<ENTITY> {
+        return try {
+            val queryBuilder = baseDao.select(request.filters).filter(SFilter.eq("ProjectId", getProject()))
+            if (null != request.projection) {
+                queryBuilder.projection(request.projection!!)
+            }
+            if (null != request.orders) {
+                queryBuilder.order(request.orders!!)
+            }
+            val pageInfo = queryBuilder.pageQuery(request.pageNumber, request.pageSize)
+            SQueryResponse(pageInfo)
+        } catch (e: Exception) {
+            e.printStackTrace()
+            SQueryResponse(SResponseType.failure, e.message!!)
+        }
+    } // Function pageQuery()
+
+    /**
+     * 根据dataRuleType,dataRuleContent获取单位Map
+     *
+     * @param       dataRuleType
+     * @param       dataRuleContent
+     */
+    open fun getUnitMap(dataRuleType: String?, dataRuleContent: String?): ArrayList<String?> {
+        val result = ArrayList<String?>()
+        try {
+            if (dataRuleType != null && dataRuleContent != null && "需自动单位转换" == dataRuleType) {
+                val parser = JSONParser(dataRuleContent)
+                val array = parser.parseArray()
+                for (obj in array) {
+                    val contentArray = (obj as HashMap<String, Any>)["content"]
+                    for (contentObject in (contentArray as ArrayList<Any>)) {
+                        result.add(((contentObject as HashMap<String, String>)["from"]!!).split("-")[1])
+                        result.add(contentObject["to"] as String)
+                    }
+                }
+            } else {
+                result.add(null)
+                result.add(null)
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return result
+    }
+
+    /**
+     * 批量创建
+     *
+     * @param       request
+     * @return      返回创建状态
+     */
+    open fun create(request: ArrayList<ENTITY>): Boolean {
+        val result: Boolean
+        result = try {
+            for (et in request) {
+                et.projectId = getProject()
+                baseDao.insert(et)
+            }
+            true
+        } catch (e: Exception) {
+            e.printStackTrace()
+            false
+        }
+        return result
+    } // Function create()
+
+    /**
+     * 查询全部
+     *
+     * @param       request
+     * @return      返回id列表
+     */
+    open fun allQuery(@RequestBody request: BasicRequest): ArrayList<String> {
+        val result = ArrayList<String>()
+        try {
+            val list = baseDao.select(SFilter.eq("ProjectId", request.projectId!!.replace("Pj", "", true))).exec()
+            for (data in list) {
+                result.add(data.id!!)
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return result
+    } // Function allQuery()
+
+} // Class Service

+ 49 - 0
message-center/src/main/kotlin/com/persagy/server/synchronize/MessageHandler.kt

@@ -0,0 +1,49 @@
+package com.persagy.server.synchronize
+
+import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.jms.annotation.JmsListener
+import org.springframework.jms.core.JmsTemplate
+import org.springframework.stereotype.Component
+
+/**
+ * 同步数据消息类
+ *
+ * @author  张维新
+ */
+@Component
+class MessageHandler {
+    companion object {
+        // 日志
+        private val logger = LoggerFactory.getLogger(MessageHandler::class.java)
+    } // Companion object
+
+    /** 发送方式 */
+    @Autowired
+    private var jmsTemplate = JmsTemplate()
+
+    /** 映射发送地址 */
+    @Value("\${topic}")
+    lateinit var topic: String
+
+    /**
+     * 消息发送
+     *
+     * @param content 消息内容
+     */
+    fun sendMessage(content: String) {
+        jmsTemplate.convertAndSend(topic, content)
+    } // Function sendMessage()
+
+    /**
+     * 测试打印发送的消息
+     *
+     * @param content 消息内容
+     */
+    @JmsListener(destination = "datacenter.broadcast")
+    fun localListener(content: String) {
+        logger.debug("本地消息: $content")
+    } // Function localListener()
+
+} // Class MessageHandler

+ 56 - 0
message-center/src/main/resources/application-dev.yml

@@ -0,0 +1,56 @@
+
+# spring-cloud相关配置
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      #       defaultZone:                          http://192.168.20.235:8080/cloud-center/eureka
+      defaultZone:                          http://127.0.0.1:8761/eureka
+  instance:
+    # 实例ID
+    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+    # 优先使用IP地址方式进行注册服务
+    prefer-ip-address:                      true
+
+#启用监控
+management:
+  endpoints:
+    web:
+      exposure:
+        include:
+          - "*"  # 开放所有端点health,info,metrics,通过actuator/+端点名就可以获取相应的信息。默认打开health和info
+  endpoint:
+    health:
+      #未开启actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。开启后打印详细信息
+      show-details:                       always
+
+
+
+server:
+  port: 8080
+
+spring:
+  datasource:
+    name:                               revit-algorithm
+    type:                               com.alibaba.druid.pool.DruidDataSource
+    driver-class-name:                  org.postgresql.Driver
+#    url:                                jdbc:postgresql://60.205.177.43:5432/datacenter
+    url:                                jdbc:postgresql://60.205.177.43:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+#    broker-url:                         tcp://192.168.20.225:61616
+
+  servlet:
+    multipart:
+      max-request-size:                500MB        # 限制上传的多个文件的总大小
+      max-file-size:                   500MB        # 限制单个文件的最大值
+
+  kafka:
+    bootstrap-servers:                      192.168.20.236:9092
+#    bootstrap-servers:                      127.0.0.1:9092
+
+#    bootstrap-servers:                      172.16.9.226:9092
+
+    consumer:
+      group-id:                             datacenter-consumer-group

+ 41 - 0
message-center/src/main/resources/application-prod.yml

@@ -0,0 +1,41 @@
+
+# spring-cloud相关配置
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      defaultZone:                          http://eureka-service:8761/eureka
+
+  instance:
+    # 实例ID
+    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+    # 优先使用IP地址方式进行注册服务
+    prefer-ip-address:                      true
+
+#启用监控
+management:
+  endpoints:
+    web:
+      exposure:
+        include:
+          - "*"  # 开放所有端点health,info,metrics,通过actuator/+端点名就可以获取相应的信息。默认打开health和info
+  endpoint:
+    health:
+      #未开启actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。开启后打印详细信息
+      show-details:                       always
+
+server:
+  port: 8080
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://data-center:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+    broker-url:                         tcp://activemq:61616
+
+  servlet:
+    multipart:
+      max-request-size:                500MB        # 限制上传的多个文件的总大小
+      max-file-size:                   500MB        # 限制单个文件的最大值

+ 61 - 0
message-center/src/main/resources/application.yml

@@ -0,0 +1,61 @@
+server:
+  port: 8080
+
+spring:
+    application:
+      name:                               messagecenter
+    mvc:
+      favicon:
+        enabled:                          true
+
+    jmx:
+      default-domain:                     messagecenter
+
+
+    datasource:
+      url:                                jdbc:postgresql://172.16.44.234:5432/datacenter
+      username:                           postgres
+      password:                           123456
+
+    jackson:
+      date-format:                        yyyy-MM-dd HH:mm:ss
+      time-zone:                          Asia/Shanghai
+      default-property-inclusion:         non_null
+      # 首字母大写
+      property-naming-strategy:           com.fasterxml.jackson.databind.PropertyNamingStrategy.PascalCaseStrategy
+      # 以下划线分隔全小写的单词
+      #property-naming-strategy:           com.fasterxml.jackson.databind.PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy
+      mapper:
+        # 属性按字母顺序输出
+        sort_properties_alphabetically:   true
+
+    activemq:
+      broker-url:                         tcp://172.16.42.210:61616
+      in-memory:                          true
+      pool.enabled:                       false
+      user:                               admin
+      password:                           admin
+
+topic:                                 datacenter.broadcast
+
+mybatis:
+  typeAliasesPackage:                   cn.sagacloud.server.messagecenter.models
+
+# spring-cloud相关配置
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      defaultZone:                          http://172.16.44.235:8761/eureka
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 43 - 0
message-center/src/main/resources/logback-spring.xml

@@ -0,0 +1,43 @@
+<!--
+  ~ *********************************************************************************************************************
+  ~
+  ~                     :*$@@%$*:                         ;:                ;;    ;;
+  ~                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+  ~                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+  ~                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+  ~                  =@*                                  %!              @ $= % %@=   =%@!      %=
+  ~             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+  ~           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+  ~         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+  ~         $@*   ;@@@%=!:                *@*
+  ~         =@$    ;;;!=%@@@@=!           =@!
+  ~          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+  ~           ;%@@$=$@@%*       *@@@$=%@@%;
+  ~              ::;::             ::;::                                              All rights reserved.
+  ~
+  ~ *********************************************************************************************************************
+  -->
+
+<configuration scan="true" debug="false">
+    <contextName>messagecenter</contextName>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}) - %cyan(%msg%n)</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 定义cn.sagacloud包的日志级别 -->
+    <logger name="com.persagy" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+    <!-- 定义com.sybotan包的日志级别 -->
+    <logger name="com.persagy.server" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+    <!-- 定义日志级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT" />
+    </root>
+</configuration>

+ 0 - 2
scanbuilding/src/main/kotlin/com/persagy/server/controller/UserController.kt

@@ -63,8 +63,6 @@ open class UserController {
 
     private var baseService = SObjectService(SMybatisDao(User::class.java))
 
-
-
     /**
      * 扫楼用户登录
      *

+ 1 - 0
settings.gradle

@@ -7,4 +7,5 @@ include 'labsl'             // 蜡笔森林
 include 'datasyn'           // 数据同步
 include 'meiku'             // 图例库
 include 'equip-componnet'
+include 'message-center'