Przeglądaj źródła

********************WX************************
整合数据中心 数据同步 蜡笔森林 扫楼项目

zhangweixin 4 lat temu
rodzic
commit
dba59fe0d5
94 zmienionych plików z 4735 dodań i 103 usunięć
  1. 1 1
      data-center/build.gradle
  2. 1 1
      data-center/src/main/kotlin/com/persagy/server/services/objects/ZoneSpaceBaseService.kt
  3. 3 3
      data-center/src/main/kotlin/com/persagy/server/services/relation_calc/ManualRelationCalcService.kt
  4. 41 0
      data-center/src/main/resources/application-prod.yml
  5. 22 4
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dict/DClassDef.kt
  6. 77 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DefClass.kt
  7. 160 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DefFuncId.kt
  8. 63 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictMajor.kt
  9. 39 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictProject.kt
  10. 43 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictScheme.kt
  11. 40 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictSchemeAndProject.kt
  12. 37 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictSchemeCategoty.kt
  13. 42 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictSchemeCategotyInfo.kt
  14. 34 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/Group.kt
  15. 1 1
      datasyn/build.gradle
  16. 64 0
      datasyn/src/main/kotlin/com/persagy/server/syn/Opts.kt
  17. 1 1
      datasyn/src/main/kotlin/com/persagy/server/syn/Swagger2Config.kt
  18. 111 0
      datasyn/src/main/kotlin/com/persagy/server/syn/controllers/DictControllers.kt
  19. 78 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/DictPlatformInfo.kt
  20. 34 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/DictPlatformType.kt
  21. 18 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/DictProject.kt
  22. 18 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/Group.kt
  23. 219 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/api/DictTypeApi.kt
  24. 81 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/A.java
  25. 18 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/CommonResponse.kt
  26. 34 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictGroupSchemeResponse.kt
  27. 43 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictMajorResponse.kt
  28. 24 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictPlatformInfoResponse.kt
  29. 23 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictPlatformTypeResponse.kt
  30. 23 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictProjectResponse.kt
  31. 25 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictSchemeAndProjectResponse.kt
  32. 24 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictSchemeCategoryResponse.kt
  33. 28 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictSchemeCategoryResponseInfo.kt
  34. 22 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/GroupResponse.kt
  35. 34 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/SCommonResponse.kt
  36. 32 0
      datasyn/src/main/kotlin/com/persagy/server/syn/models/response/SResponse.kt
  37. 8 0
      datasyn/src/main/kotlin/com/persagy/server/syn/services/a.java
  38. 331 0
      datasyn/src/main/kotlin/com/persagy/server/syn/services/dict/DClassDefService.kt
  39. 22 0
      datasyn/src/main/resources/application-dev.yml
  40. 18 0
      datasyn/src/main/resources/application-prod.yml
  41. 79 0
      datasyn/src/main/resources/application.yml
  42. 43 0
      datasyn/src/main/resources/logback-spring.xml
  43. 2 2
      gradle.properties
  44. 15 0
      labsl/src/main/kotlin/com/persagy/server/labsl/LaBSLApp.kt
  45. 33 0
      labsl/src/main/kotlin/com/persagy/server/labsl/controller/GraphCategoryController.kt
  46. 90 20
      labsl/src/main/kotlin/com/persagy/server/labsl/controller/GraphController.kt
  47. 1 1
      labsl/src/main/kotlin/com/persagy/server/labsl/controller/MarkersController.kt
  48. 1 1
      labsl/src/main/kotlin/com/persagy/server/labsl/controller/NodeController.kt
  49. 1 1
      labsl/src/main/kotlin/com/persagy/server/labsl/controller/RelationController.kt
  50. 16 3
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Anchor.kt
  51. 55 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/AttachObjectIds.kt
  52. 47 16
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Graph.kt
  53. 48 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/GraphCategory.kt
  54. 25 6
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Markers.kt
  55. 29 7
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Node.kt
  56. 17 3
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Relation.kt
  57. 15 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/auxiliary/CategoryCode.kt
  58. 16 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/AnchorPub.kt
  59. 56 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/AttachObjectIdsPub.kt
  60. 28 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/ElementsPub.kt
  61. 124 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/GraphPub.kt
  62. 16 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/MarkersPub.kt
  63. 129 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/NodePub.kt
  64. 16 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/RelationPub.kt
  65. 19 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/request/GraphCategoryRequest.kt
  66. 31 0
      labsl/src/main/kotlin/com/persagy/server/labsl/models/response/SCommonResponse.kt
  67. 0 3
      labsl/src/main/kotlin/com/persagy/server/labsl/services/AnchorService.kt
  68. 15 0
      labsl/src/main/kotlin/com/persagy/server/labsl/services/AttachObjectIdsServices.kt
  69. 36 0
      labsl/src/main/kotlin/com/persagy/server/labsl/services/CustomService.kt
  70. 172 0
      labsl/src/main/kotlin/com/persagy/server/labsl/services/GraphCategoryService.kt
  71. 697 25
      labsl/src/main/kotlin/com/persagy/server/labsl/services/GraphService.kt
  72. 25 0
      labsl/src/main/kotlin/com/persagy/server/labsl/services/mappers/CustomMapper.kt
  73. 12 0
      labsl/src/main/kotlin/com/persagy/server/labsl/services/pub/AnchorPubService.kt
  74. 14 0
      labsl/src/main/kotlin/com/persagy/server/labsl/services/pub/GraphPubService.kt
  75. 1 1
      labsl/src/main/resources/application-dev.yml
  76. 1 1
      labsl/src/main/resources/application-prod.yml
  77. 1 1
      labsl/src/main/resources/logback-spring.xml
  78. 108 0
      meiku/build.gradle
  79. 63 0
      meiku/src/main/kotlin/com/persagy/server/meiku/MeiKuApp.kt
  80. 89 0
      meiku/src/main/kotlin/com/persagy/server/meiku/Swagger2Config.kt
  81. 46 0
      meiku/src/main/kotlin/com/persagy/server/meiku/WebMvcConfg.kt
  82. 81 0
      meiku/src/main/kotlin/com/persagy/server/meiku/controller/MeiKuController.kt
  83. 61 0
      meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/MeiKu.kt
  84. 42 0
      meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/MeiKuAnchor.kt
  85. 41 0
      meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/MeiKuState.kt
  86. 35 0
      meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/ObjectCategory.kt
  87. 22 0
      meiku/src/main/kotlin/com/persagy/server/meiku/services/MeiKuAnchorService.kt
  88. 129 0
      meiku/src/main/kotlin/com/persagy/server/meiku/services/MeiKuService.kt
  89. 21 0
      meiku/src/main/kotlin/com/persagy/server/meiku/services/MeiKuStateService.kt
  90. 14 0
      meiku/src/main/resources/application-dev.yml
  91. 11 0
      meiku/src/main/resources/application-prod.yml
  92. 70 0
      meiku/src/main/resources/application.yml
  93. 38 0
      meiku/src/main/resources/logback-spring.xml
  94. 1 1
      settings.gradle

+ 1 - 1
data-center/build.gradle

@@ -58,7 +58,7 @@ dependencies {
 
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // spring cloud 依赖
     // spring cloud 依赖
-    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka', version: SPRING_CLOUD_VERSION
+//    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka', version: SPRING_CLOUD_VERSION
 
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // MySQL
     // MySQL

+ 1 - 1
data-center/src/main/kotlin/com/persagy/server/services/objects/ZoneSpaceBaseService.kt

@@ -458,7 +458,7 @@ object ZoneSpaceBaseService : ServiceSpace<ZoneSpace>(SMybatisDao(ZoneSpace::cla
                         dictSpaceProject.projectId = projectId
                         dictSpaceProject.projectId = projectId
                         dictSpaceProject.id = dClassDef.id
                         dictSpaceProject.id = dClassDef.id
                         dictSpaceProject.name = dClassDef.name
                         dictSpaceProject.name = dClassDef.name
-                        dictSpaceProject.parentId = dClassDef.parentId
+                        dictSpaceProject.parentId = dClassDef.parentCode
                         dictSpaceProject.sign = 1
                         dictSpaceProject.sign = 1
                         dictSpaceProjectService.replace(dictSpaceProject)
                         dictSpaceProjectService.replace(dictSpaceProject)
                     }
                     }

+ 3 - 3
data-center/src/main/kotlin/com/persagy/server/services/relation_calc/ManualRelationCalcService.kt

@@ -2948,7 +2948,7 @@ open class ManualRelationCalcService {
             if (manualRelationCalcRequest.objectType == "1"){
             if (manualRelationCalcRequest.objectType == "1"){
                 val listId = ArrayList<String>()
                 val listId = ArrayList<String>()
                 for (rEqForBd in rEqForBdList){
                 for (rEqForBd in rEqForBdList){
-                    listId.add(rEqForBd.equipId!!)
+                    listId.add(rEqForBd.id1!!)
                 }
                 }
                 list.add(SFilter.inList("id",listId))
                 list.add(SFilter.inList("id",listId))
                 val pageQuery = relEquipmentBuildingService.pageQuery(sQueryRequest, list)
                 val pageQuery = relEquipmentBuildingService.pageQuery(sQueryRequest, list)
@@ -2966,7 +2966,7 @@ open class ManualRelationCalcService {
             }else if (manualRelationCalcRequest.objectType == "2"){
             }else if (manualRelationCalcRequest.objectType == "2"){
                 val listId = ArrayList<String>()
                 val listId = ArrayList<String>()
                 for (rEqForBd in rEqForBdList){
                 for (rEqForBd in rEqForBdList){
-                    listId.add(rEqForBd.buildingId!!)
+                    listId.add(rEqForBd.id2!!)
                 }
                 }
                 list.add(SFilter.inList("id",listId))
                 list.add(SFilter.inList("id",listId))
                 val buildingList = BuildingService.select(list).exec()
                 val buildingList = BuildingService.select(list).exec()
@@ -2979,7 +2979,7 @@ open class ManualRelationCalcService {
                     val rEqForBdLists = REqForBdService.select(SFilter.eq("projectId", projectId), SFilter.inList("buildingId", listBuildingId)).exec()
                     val rEqForBdLists = REqForBdService.select(SFilter.eq("projectId", projectId), SFilter.inList("buildingId", listBuildingId)).exec()
                     listBuildingId.clear()
                     listBuildingId.clear()
                     for (rEqForBd in rEqForBdLists){
                     for (rEqForBd in rEqForBdLists){
-                        listBuildingId.add(rEqForBd.equipId!!)
+                        listBuildingId.add(rEqForBd.id1!!)
                     }
                     }
                     val listSFilter = ArrayList<SFilter>()
                     val listSFilter = ArrayList<SFilter>()
                     listSFilter.add(SFilter.eq("projectId",projectId))
                     listSFilter.add(SFilter.eq("projectId",projectId))

+ 41 - 0
data-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        # 限制单个文件的最大值

+ 22 - 4
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dict/DClassDef.kt

@@ -13,7 +13,7 @@ import javax.persistence.Table
  *
  *
  * @author 张维新
  * @author 张维新
  */
  */
-@ApiModel(description = "数据字典表头说明")
+@ApiModel(description = "数据字典类型")
 @Table(name = "dict.class_def")
 @Table(name = "dict.class_def")
 class DClassDef : BaseInfo() {
 class DClassDef : BaseInfo() {
 
 
@@ -30,11 +30,29 @@ class DClassDef : BaseInfo() {
     @JSONField(name = "Name")
     @JSONField(name = "Name")
     var name: String? = null
     var name: String? = null
 
 
+    /** 别编码 */
+    @ApiModelProperty(value = "别编码")
+    @Column(name = "alias_code")
+    @JSONField(name = "AliasCode")
+    var aliasCode: String? = null
+
+    /** 别名称 */
+    @ApiModelProperty(value = "别名称")
+    @Column(name = "alias_name")
+    @JSONField(name = "AliasName")
+    var aliasName: String? = null
+
     /** 父类指针 */
     /** 父类指针 */
     @ApiModelProperty(value = "父类指针")
     @ApiModelProperty(value = "父类指针")
-    @Column(name = "parent_id")
-    @JSONField(name = "ParentId")
-    var parentId: String? = null
+    @Column(name = "parent_code")
+    @JSONField(name = "ParentCode")
+    var parentCode: String? = null
+
+    /** 标志 1为专业 2为系统 3为设备 4为部件 */
+    @ApiModelProperty(value = "标志 1为专业 2为系统 3为设备 4为部件")
+    @Column(name = "sign")
+    @JSONField(name = "Sign")
+    var sign: String? = null
 
 
     /** 子集列表 */
     /** 子集列表 */
     @ApiModelProperty(value = "子集列表")
     @ApiModelProperty(value = "子集列表")

+ 77 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DefClass.kt

@@ -0,0 +1,77 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/19 16:37
+ */
+@ApiModel(description = "平台字典对象类型")
+@Table(name = "dict.def_class")
+class DefClass : SBaseEntity(){
+
+    /** 编码 */
+    @ApiModelProperty(value = "编码")
+    @Id
+    @Column(name = "code")
+    @JSONField(name = "Code")
+    var  code: String? = null
+
+    @ApiModelProperty(value = "名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    @ApiModelProperty(value = "别编码")
+    @Column(name = "alias_code")
+    @JSONField(name = "AliasCode")
+    var aliasCode: String? = null
+
+    @ApiModelProperty(value = "别编名")
+    @Column(name = "alias_name")
+    @JSONField(name = "AliasName")
+    var aliasName: String? = null
+
+    @ApiModelProperty(value = "分类:common平台级, group集团级, project项目级")
+    @Column(name = "type")
+    @JSONField(name = "Type")
+    var type: String? = null
+
+    @ApiModelProperty(value = "集团id, 默认为 '0' ")
+    @Column(name = "group_id")
+    @JSONField(name = "GroupId")
+    var groupId: String? = ""
+
+    @ApiModelProperty(value = "项目id, 默认为 '0' ")
+    @Column(name = "project_id")
+    @JSONField(name = "ProjectId")
+    var projectId: String? = ""
+
+    @ApiModelProperty(value = "上级类型编码")
+    @Column(name = "parent_code")
+    @JSONField(name = "ParentCode")
+    var parentCode: String? = null
+
+    @ApiModelProperty(value = "专业编码")
+    @Column(name = "major_code")
+    @JSONField(name = "MajorCode")
+    var majorCode: String? = null
+
+    @ApiModelProperty(value = "系统编码")
+    @Column(name = "system_code")
+    @JSONField(name = "SystemCode")
+    var systemCode: String? = null
+
+    @ApiModelProperty(value = "部件所属的设备类型")
+    @Column(name = "equipment_code")
+    @JSONField(name = "EquipmentCode")
+    var equipmentCode: String? = null
+
+} // Class DefClass

+ 160 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DefFuncId.kt

@@ -0,0 +1,160 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 平台对象信息点
+ *
+ * @author  wx
+ * @date  2020/9/19 17:41
+ */
+@ApiModel(description = "平台对象信息点")
+@Table(name = "dict.def_funcid")
+class DefFuncId: Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: Int? = null
+
+    /** 类型编码 */
+    @ApiModelProperty(value = "类型编码")
+    @Column(name = "class_code")
+    @JSONField(name = "ClassCode")
+    var classCode: String? = null
+
+    /** 动静分类:静态STATIC,脉冲PULSE,阶段GRADATION,时序SEQUENTIAL */
+    @ApiModelProperty(value = "动静分类:静态STATIC,脉冲PULSE,阶段GRADATION,时序SEQUENTIAL")
+    @Column(name = "category")
+    @JSONField(name = "Category")
+    var category: String? = null
+
+    /** 信息点编码 */
+    @ApiModelProperty(value = "信息点编码")
+    @Column(name = "code")
+    @JSONField(name = "Code")
+    var code: String? = null
+
+    /** 信息点名称 */
+    @ApiModelProperty(value = "信息点名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    /** 分类:commo平台级, group集团级, project项目级 */
+    @ApiModelProperty(value = "分类:commo平台级, group集团级, project项目级")
+    @Column(name = "type")
+    @JSONField(name = "Type")
+    var type: String? = null
+
+    /** 集团id, 默认为"0" */
+    @ApiModelProperty(value = "集团id, 默认为'0'")
+    @Column(name = "group_id")
+    @JSONField(name = "GroupId")
+    var groupId: String? = null
+
+    /** 项目id, 默认为"0" */
+    @ApiModelProperty(value = "项目id, 默认为'0'")
+    @Column(name = "project_id")
+    @JSONField(name = "ProjectId")
+    var projectId: String? = null
+
+    /** 数据类型 */
+    @ApiModelProperty(value = "数据类型")
+    @Column(name = "data_type")
+    @JSONField(name = "DataType")
+    var dataType: String? = null
+
+    /** 数据格式 */
+    @ApiModelProperty(value = "数据格式")
+    @Column(name = "formater")
+    @JSONField(name = "Formater")
+    var formater: String? = null
+
+    /** 数据格式 */
+    @ApiModelProperty(value = "数据格式")
+    @Column(name = "data_source")
+    @JSONField(name = "DataSource")
+    var dataSource: ArrayList<Any?>? = null
+
+    /** 输入方式 */
+    @ApiModelProperty(value = "输入方式")
+    @Column(name = "input_mode")
+    @JSONField(name = "InputMode")
+    var inputMode: String? = null
+
+    /** 一级标签 */
+    @ApiModelProperty(value = "一级标签")
+    @Column(name = "first_tag")
+    @JSONField(name = "FirstTag")
+    var firstTag: String? = null
+
+    /** 二级标签 */
+    @ApiModelProperty(value = "二级标签")
+    @Column(name = "second_tag")
+    @JSONField(name = "SecondTag")
+    var secondTag: String? = null
+
+    /** 序列 */
+    @ApiModelProperty(value = "序列")
+    @Column(name = "idx")
+    @JSONField(name = "idx")
+    var idx: Int? = null
+
+    /** 优先级,重要程度 */
+    @ApiModelProperty(value = "优先级,重要程度")
+    @Column(name = "priority")
+    @JSONField(name = "Priority")
+    var priority: String? = null
+
+    /** 单位 */
+    @ApiModelProperty(value = "单位")
+    @Column(name = "unit")
+    @JSONField(name = "Unit")
+    var unit: String? = null
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注")
+    @Column(name = "note")
+    @JSONField(name = "Note")
+    var note: String? = null
+
+    /** 是否分类标签 */
+    @ApiModelProperty(value = "是否分类标签")
+    @Column(name = "can_sub")
+    @JSONField(name = "CanSub")
+    var canSub: Boolean? = null
+
+    /** 是否复数 */
+    @ApiModelProperty(value = "是否复数")
+    @Column(name = "is_multiple")
+    @JSONField(name = "IsMultiple")
+    var isMultiple: Boolean? = null
+
+    /** 是否区间 */
+    @ApiModelProperty(value = "是否区间")
+    @Column(name = "is_region")
+    @JSONField(name = "IsRegion")
+    var isRegion: Boolean? = null
+
+    /** 子分类标记 */
+    @ApiModelProperty(value = "子分类标记")
+    @Column(name = "sub_flag")
+    @JSONField(name = "SubFlag")
+    var subFlag: Boolean? = null
+
+    /** 是否只读, 如果是则不允许对该信息点做变更 */
+    @ApiModelProperty(value = "是否只读, 如果是则不允许对该信息点做变更")
+    @Column(name = "readonly")
+    @JSONField(name = "Readonly")
+    var readonly: Boolean? = null
+
+} // Class DefFuncid

+ 63 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictMajor.kt

@@ -0,0 +1,63 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 专业
+ *
+ * @author  wx
+ * @date  2020/9/20 16:03
+ */
+@ApiModel(description = "专业")
+@Table(name = "dict.def_major")
+class DictMajor: Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: Int? = null
+
+    @ApiModelProperty(value = "编码")
+    @Id
+    @Column(name = "code")
+    @JSONField(name = "Code")
+    var code: String? = null
+
+    @ApiModelProperty(value = "名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    @ApiModelProperty(value = "说明")
+    @Column(name = "note")
+    @JSONField(name = "Note")
+    var note: String? = null
+
+    @ApiModelProperty(value = "别编码")
+    @Column(name = "alias_code")
+    @JSONField(name = "AliasCode")
+    var aliasCode: String? = null
+
+    @ApiModelProperty(value = "别名称")
+    @Column(name = "alias_name")
+    @JSONField(name = "AliasName")
+    var aliasName: String? = null
+
+    @ApiModelProperty(value = "平台类型")
+    @Column(name = "type")
+    @JSONField(name = "Type")
+    var type: String? = null
+
+    @ApiModelProperty(value = "集团id")
+    @Column(name = "group_id")
+    @JSONField(name = "GroupId")
+    var groupId: String? = null
+
+} // class DictMajor

+ 39 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictProject.kt

@@ -0,0 +1,39 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 字典 项目信息
+ *
+ * @author  wx
+ * @date  2020/9/17 9:46
+ */
+@ApiModel(description = "字典 项目信息")
+@Table(name = "dict.project")
+class DictProject {
+
+    /** 项目id */
+    @ApiModelProperty(value = "项目id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var  id: String? = null
+
+    /** 项目名称 */
+    @ApiModelProperty(value = "项目名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    /** 集团id */
+    @ApiModelProperty(value = "集团id")
+    @Column(name = "group_id")
+    @JSONField(name = "GroupId")
+    var groupId: String? = null
+
+} // Class DictProject

+ 43 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictScheme.kt

@@ -0,0 +1,43 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 方案
+ *
+ * @author  wx
+ * @date  2020/9/20 16:50
+ */
+@ApiModel(description = "方案")
+@Table(name = "dict.scheme")
+class DictScheme: Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: Int? = null
+
+    @ApiModelProperty(value = "方案名")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    @ApiModelProperty(value = "备注")
+    @Column(name = "note")
+    @JSONField(name = "Note")
+    var note: String? = null
+
+    @ApiModelProperty(value = "集团id")
+    @Column(name = "group_id")
+    @JSONField(name = "GroupId")
+    var groupId: String? = null
+
+} // Class DictScheme

+ 40 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictSchemeAndProject.kt

@@ -0,0 +1,40 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 方案和项目关系
+ *
+ * @author  wx
+ * @date  2020/9/20 20:58
+ */
+@ApiModel(description = "字典 方案和项目关系")
+@Table(name = "dict.scheme_project")
+class DictSchemeAndProject: Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var  id: Int? = null
+
+    /** 方案id */
+    @ApiModelProperty(value = "方案id")
+    @Column(name = "scheme_id")
+    @JSONField(name = "SchemeId")
+    var schemeId: Int? = null
+
+    /** 项目id */
+    @ApiModelProperty(value = "项目id")
+    @Column(name = "project_id")
+    @JSONField(name = "ProjectId")
+    var projectId: String? = null
+
+} // Class DictSchemeAndProject

+ 37 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictSchemeCategoty.kt

@@ -0,0 +1,37 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/20 17:19
+ */
+@ApiModel(description = "方案")
+@Table(name = "dict.scheme_class")
+class DictSchemeCategoty: Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id :Int? =  0
+
+    @ApiModelProperty(value = "方案id")
+    @Column(name = "scheme_id")
+    @JSONField(name = "SchemeId")
+    var schemeId :Int? =  0
+
+    @ApiModelProperty(value = "对象类型")
+    @Column(name = "class_code")
+    @JSONField(name = "ClassCode")
+    var classCode: String? = null
+
+} // Class DictSchemeCategoty

+ 42 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/DictSchemeCategotyInfo.kt

@@ -0,0 +1,42 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/20 17:19
+ */
+@ApiModel(description = "方案")
+@Table(name = "dict.scheme_funcid")
+class DictSchemeCategotyInfo: Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id :Int? =  0
+
+    @ApiModelProperty(value = "方案id")
+    @Column(name = "scheme_id")
+    @JSONField(name = "SchemeId")
+    var schemeId :Int? =  0
+
+    @ApiModelProperty(value = "对象类型")
+    @Column(name = "class_code")
+    @JSONField(name = "ClassCode")
+    var classCode: String? = null
+
+    @ApiModelProperty(value = "信息编码")
+    @Column(name = "info_code")
+    @JSONField(name = "InfoCode")
+    var infoCode: String? = null
+
+} // Class DictSchemeCategoty

+ 34 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/dictnew/Group.kt

@@ -0,0 +1,34 @@
+package com.persagy.server.datacenter.models.entities.dictnew
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 集团实体类
+ *
+ * @author  wx
+ * @date  2020/9/16 22:13
+ */
+@ApiModel(description = "集团实体类")
+@Table(name = "dict.group")
+class Group : Serializable {
+
+    /** 编码 */
+    @ApiModelProperty(value = "编码")
+    @Id
+    @Column(name = "code")
+    @JSONField(name = "Code")
+    var  id: String? = null
+
+    /** 集团名称 */
+    @ApiModelProperty(value = "集团名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+} // Class Group

+ 1 - 1
datasyn/build.gradle

@@ -58,7 +58,7 @@ dependencies {
 
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // spring cloud 依赖
     // spring cloud 依赖
-    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka', version: SPRING_CLOUD_VERSION
+//    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka', version: SPRING_CLOUD_VERSION
 
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // MySQL
     // MySQL

+ 64 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/Opts.kt

@@ -0,0 +1,64 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.syn
+
+import org.springframework.boot.context.properties.ConfigurationProperties
+import org.springframework.stereotype.Component
+
+/**
+ * 配置信息
+ *
+ * @author 张维新
+ */
+@Component
+@ConfigurationProperties(prefix = "saga")
+open class Opts {
+    
+
+    /** 物理世界地址 */
+    lateinit var dataPlatform: String
+
+    val SUCCESS_CODE = "success"
+
+
+    val LedgerParam = "台账参数"
+    val CommParam = "通讯参数"
+    val TechParam = "技术参数"
+    val RunParam = "运行参数"
+    val SettingParam = "设定参数"
+    val Alram = "报警消息"
+
+    val GeoInfo = "地理位置"
+    val StructureInfo = "结构信息"
+    val PeopleInfo = "人员信息"
+    val ProjectInfo = "项目信息"
+    val CommercialInfo = "商业信息"
+    val EnergyCost = "能源价格"
+    val OutdoorEnv = "室外环境"
+    val Weather = "天气预报"
+    val ConsumptionInfo = "能耗信息"
+    val BuildingInfo = "建筑信息"
+    val BuildingDoc = "建筑文档"
+    val Schedule = "工作历"
+    val EnvParam = "环境参数"
+    val TenantInfo = "租户信息"
+
+}

+ 1 - 1
datasyn/src/main/kotlin/com/persagy/server/syn/Swagger2Config.kt

@@ -68,7 +68,7 @@ open class Swagger2Config {
                 .apis(RequestHandlerSelectors.basePackage("com.persagy.server"))
                 .apis(RequestHandlerSelectors.basePackage("com.persagy.server"))
                 .paths(PathSelectors.any())
                 .paths(PathSelectors.any())
                 .build()
                 .build()
-                .globalOperationParameters(pars)
+//                .globalOperationParameters(pars)
     } // Function createRestApi()
     } // Function createRestApi()
 
 
     /**
     /**

+ 111 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/controllers/DictControllers.kt

@@ -0,0 +1,111 @@
+package com.persagy.server.syn.controllers
+
+import com.persagy.server.syn.services.dict.DClassDefService
+import com.persagy.service.models.responses.SBaseResponse
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.RequestMapping
+import org.springframework.web.bind.annotation.RestController
+
+/**
+ * 字典
+ *
+ * @author  wx
+ * @date  2020/9/10 10:00
+ */
+@Api(tags = ["字典-手动导入字典"])
+@RestController
+@RequestMapping("/dict")
+class DictControllers {
+
+    /**
+     * 获取所有字典类型
+     */
+//    fun  dictAll() {
+//
+//    } // Fun dictAll()
+
+    /**
+     * 集团数据-存入数据中心
+     */
+    @ApiOperation(value = "001、集团数据-存入数据中心", notes = "",position = 1)
+    @GetMapping(value = ["/group-info"])
+    fun groupInfo(): SBaseResponse {
+        return DClassDefService.groupQuerys()
+    } // Fun groupInfo()
+
+    /**
+     * 集团下项目-存入数据中心
+     */
+    @ApiOperation(value = "002、集团下项目-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-project"])
+    fun dictProject(): SBaseResponse{
+        return DClassDefService.dictProject()
+    } // Fun dictProject()
+
+    /**
+     * 平台字典
+     */
+    @ApiOperation(value = "003、平台字典对象类型-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-platform"])
+    fun dictPlatform(): SBaseResponse{
+        return DClassDefService.dictPlatform()
+    } // Fun dictPlatform()
+
+    /**
+     * 平台字典 详细信息点
+     */
+    @ApiOperation(value = "004、平台字典对象信息点-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-platform-info"])
+    fun dictPlatformInfo(): SBaseResponse {
+        return DClassDefService.dictPlatformInfo()
+    } // Fun dictPlatform()
+
+    /**
+     * 平台字典 专业
+     */
+    @ApiOperation(value = "005、平台字典专业-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-platform-major"])
+    fun dictPlatformajor(): SBaseResponse {
+        return DClassDefService.dictMajor()
+    } // Fun dictPlatform()
+
+    /**
+     * 集团方案
+     */
+    @ApiOperation(value = "006、集团方案-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-scheme"])
+    fun dictScheme(): SBaseResponse {
+        return DClassDefService.dictGroupScheme()
+    } // Fun dictPlatform()
+
+    /**
+     * 集团方案对象类型
+     */
+    @ApiOperation(value = "007、集团方案对象类型-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-scheme-categoty"])
+    fun dictSchemeCategoty(): SBaseResponse {
+        return DClassDefService.dictSchemeCategoty()
+    } // Fun dictSchemeCategoty()
+
+    /**
+     * 集团方案对象类型
+     */
+    @ApiOperation(value = "008、集团方案对象的信息点-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-scheme-categoty-info"])
+    fun dictSchemeCategotyInfo(): SBaseResponse {
+        return DClassDefService.dictSchemeCategotyInfo()
+    } // Fun dictSchemeCategoty()
+
+    /**
+     * 查询项目和方案的关系
+     */
+    @ApiOperation(value = "009、项目和方案的关系-存入数据中心", notes = "",position = 2)
+    @GetMapping(value = ["/dict-scheme-project"])
+    fun dictSchemeAndProject(): SBaseResponse{
+        return DClassDefService.dictSchemeAndProject()
+    } // Fun dictSchemeAndProject()
+
+
+} // Class DictControllers

+ 78 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/DictPlatformInfo.kt

@@ -0,0 +1,78 @@
+package com.persagy.server.syn.models
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/20 9:39
+ */
+class DictPlatformInfo {
+
+
+    /** 类型编码 */
+    var classCode: String? = null
+
+    /** 动静分类:静态STATIC,脉冲PULSE,阶段GRADATION,时序SEQUENTIAL */
+    var category: String? = null
+
+    /** 信息点编码 */
+    var code: String? = null
+
+    /** 信息点名称 */
+    var name: String? = null
+
+    /** 分类:commo平台级, group集团级, project项目级 */
+    var type: String? = null
+
+    /** 集团id, 默认为"0" */
+    var groupId: String? = null
+
+    /** 项目id, 默认为"0" */
+    var projectId: String? = null
+
+    /** 数据类型 */
+    var dataType: String? = null
+
+    /** 数据格式 */
+    var formater: String? = null
+
+    /** 数据格式 */
+    var dataSource: ArrayList<Any?>? = null
+
+    /** 输入方式 */
+    var inputMode: String? = null
+
+    /** 一级标签 */
+    var firstTag: String? = null
+
+    /** 二级标签 */
+    var secondTag: String? = null
+
+    /** 序列 */
+    var idx: Int? = null
+
+    /** 优先级,重要程度 */
+    var priority: String? = null
+
+    /** 单位 */
+    var unit: String? = null
+
+    /** 备注 */
+    var note: String? = null
+
+    /** 是否分类标签 */
+    var canSub: Boolean? = null
+
+    /** 是否复数 */
+    var isMultiple: Boolean? = null
+
+    /** 是否区间 */
+    var isRegion: Boolean? = null
+
+    /** 子分类标记 */
+    var subFlag: Boolean? = null
+
+    /** 是否只读, 如果是则不允许对该信息点做变更 */
+    var readonly: Boolean? = null
+
+
+} // Class DictPlatformInfo

+ 34 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/DictPlatformType.kt

@@ -0,0 +1,34 @@
+package com.persagy.server.syn.models
+
+import java.io.Serializable
+
+/**
+ *  平台字典类型
+ * @author  wx
+ * @date  2020/9/19 16:25
+ */
+class DictPlatformType: Serializable {
+
+    var code: String? = null
+
+    var name: String? = null
+
+    var aliasCode: String? = null
+
+    var aliasName: String? = null
+
+    var type: String? = null
+
+    var groupId: String? = null
+
+    var projectId: String? = null
+
+    var parentCode: String? = null
+
+    var majorCode: String? = null
+
+    var systemCode: String? = null
+
+    var equipmentCode: String? = null
+
+} // DictPlatformType

+ 18 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/DictProject.kt

@@ -0,0 +1,18 @@
+package com.persagy.server.syn.models
+
+/**
+ * 字典 集团下的项目
+ *
+ * @author  wx
+ * @date  2020/9/17 9:26
+ */
+class DictProject {
+
+    /** 项目id */
+    var id: String? = null
+    /** 项目名称 */
+    var name: String? = null
+    /** 集团信息 */
+    var groupCompany: Group? = null
+
+} // Class DictProject

+ 18 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/Group.kt

@@ -0,0 +1,18 @@
+package com.persagy.server.syn.models
+
+import java.io.Serializable
+
+/**
+ * 集团实体类
+ *
+ * @author  wx
+ * @date  2020/9/16 22:13
+ */
+class Group : Serializable {
+
+    /** 集团id */
+    var  code: String? = null
+    /** 集团名称 */
+    var name: String? = null
+
+} //

+ 219 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/api/DictTypeApi.kt

@@ -0,0 +1,219 @@
+package com.persagy.server.syn.models.api
+
+import com.alibaba.fastjson.JSONArray
+import com.alibaba.fastjson.JSONObject
+import com.persagy.base.extensions.toJson
+import com.persagy.base.utils.SHttpUtil
+import com.persagy.server.syn.Opts
+import com.persagy.server.syn.models.DictPlatformInfo
+import com.persagy.server.syn.models.DictPlatformType
+import com.persagy.server.syn.models.DictProject
+import com.persagy.server.syn.models.Group
+import com.persagy.server.syn.models.response.*
+import com.persagy.server.syn.services.dict.DClassDefService
+import com.persagy.service.utils.SSpringContextUtil
+
+/**
+ * 字典API
+ *
+ * @author  wx
+ * @date  2020/9/11 15:04
+ */
+object DictTypeApi {
+
+    val opts: Opts by lazy {
+        SSpringContextUtil.getBean(Opts::class.java) as Opts
+    } // opts
+
+    /**
+     * 字典类型
+     */
+    fun dictTypeHttp(){
+
+       val url = "${opts.dataPlatform}dict/class?&groupId=wd&schemeId=7&projectId=Pj1101050029&appId=datautils&subFlag=false"
+
+        val request = SHttpUtil.getRequest(url)
+
+
+    } //
+
+
+    /**
+     * 查询集团
+     */
+    fun groupQuery():ArrayList<Group> {
+        var data = ArrayList<Group>()
+        try {
+            val url = "${opts.dataPlatform}/usercenter/groupCompany/query"
+            val jsonObject = JSONObject()
+            val postObject = SHttpUtil.postObject<GroupResponse>(url, jsonObject)
+            DClassDefService.logger.debug("集团结果:${postObject.toJson()}")
+            if (postObject.result == "success"){
+                if (!postObject.data.isNullOrEmpty()){
+                    data = postObject.data!!
+                }
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return data
+    } // Fun group()
+
+    /**
+     * 查询字典项目
+     */
+    fun dictProjectQuery(code: String): ArrayList<DictProject>{
+        val url = "${opts.dataPlatform}/usercenter/project/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        jsonObject2.put("groupCompanyCode",code)
+        jsonObject["criteria"] = jsonObject2
+        DClassDefService.logger.debug("url:${url}")
+        DClassDefService.logger.debug("项目请求体:${jsonObject.toJson()}")
+        val postObject = SHttpUtil.postObject<DictProjectResponse>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE){
+                if (!postObject.data.isNullOrEmpty()){
+                    return  postObject.data!!
+                }
+        }
+        return ArrayList()
+    } // Fun dictProjectQuery()
+
+    /**
+     * 平台字典对象类型
+     */
+    fun dictPlatform(): ArrayList<DictPlatformType>{
+        val url = "${opts.dataPlatform}/dict/class/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        jsonObject2["type"] = "common"
+        jsonObject["criteria"] = jsonObject2
+        val postObject = SHttpUtil.postObject<DictPlatformTypeResponse>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE) {
+            if (!postObject.data.isNullOrEmpty()){
+                return postObject.data!!
+            }
+        }
+        return ArrayList()
+    } // Fun dictPlatform()
+
+
+    val a = "http://192.168.3.203:8081/paas/dict/funcid/query"
+
+    /**
+     * 对象详细信息点
+     *
+     * @param   category    对象类型
+     * @param   type        平台或集团
+     */
+    fun dictPlatformInfo(category: String,type: String): ArrayList<DictPlatformInfo>{
+        val url = "${opts.dataPlatform}/dict/funcid/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        jsonObject2["type"] = type
+        jsonObject2["classCode"] = category
+        jsonObject["criteria"] = jsonObject2
+
+        val postObject = SHttpUtil.postObject<DictPlatformInfoResponse>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE) {
+            if (!postObject.data.isNullOrEmpty()){
+                return postObject.data!!
+            }
+        }
+        return ArrayList()
+    } // Fun dictPlatformInfo()
+
+    /**
+     * 获取专业
+     */
+    fun dictMajor(type: String): ArrayList<DictMajorResponse.DataBean>{
+        val url = "${opts.dataPlatform}/dict/major/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        jsonObject2["type"] = type
+        jsonObject["criteria"] = jsonObject2
+        val postObject = SHttpUtil.postObject<DictMajorResponse>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE) {
+            if (!postObject.data.isNullOrEmpty()){
+                return postObject.data!!
+            }
+        }
+        return ArrayList()
+    } // Fun dictMajor()
+
+    /**
+     * 集团下的方案
+     */
+    fun dictGroupScheme(groupId: String): ArrayList<DictGroupSchemeResponse.DataBean>{
+        val url = "${opts.dataPlatform}/dict/scheme/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        jsonObject2["groupId"] = groupId
+        jsonObject["criteria"] = jsonObject2
+        val postObject = SHttpUtil.postObject<DictGroupSchemeResponse>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE) {
+            if (!postObject.data.isNullOrEmpty()){
+                return postObject.data!!
+            }
+        }
+        return ArrayList()
+    } // Fun dictGroupScheme()
+
+    /**
+     * 方案订阅的对象类型
+     */
+    fun dictSchemeCategoty(schemeId: Int): ArrayList<DictSchemeCategoryResponse.DataBean>{
+        val url = "${opts.dataPlatform}/dict/scheme/class/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        jsonObject2["groupId"] = schemeId.toString()
+        jsonObject["criteria"] = jsonObject2
+        val postObject = SHttpUtil.postObject<DictSchemeCategoryResponse>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE) {
+            if (!postObject.data.isNullOrEmpty()){
+                return postObject.data!!
+            }
+        }
+        return ArrayList()
+    } // Fun dictSchemeCategoty()
+
+    /**
+     * 方案对象对应的信息点
+     */
+    fun dictSchemeCategotyInfo(schemeId: Int,code: String): ArrayList<DictSchemeCategoryResponseInfo.DataBean>{
+        val url = "${opts.dataPlatform}/dict/scheme/funcid/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        jsonObject2["schemeId"] = schemeId.toString()
+        jsonObject2["classCode"] = code
+        jsonObject["criteria"] = jsonObject2
+        val postObject = SHttpUtil.postObject<DictSchemeCategoryResponseInfo>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE) {
+            if (!postObject.data.isNullOrEmpty()){
+                return postObject.data!!
+            }
+        }
+        return ArrayList()
+    } // Fun dictSchemeCategotyInfo()
+
+    /**
+     * 查询项目和方案的关系
+     */
+    fun dictSchemeAndProject(projectId: String): ArrayList<DictSchemeAndProjectResponse.DataBean>{
+        val url = "${opts.dataPlatform}/dict/scheme/project/query"
+        val jsonObject = JSONObject()
+        val jsonObject2 = JSONObject()
+        val jsonArray = JSONArray()
+        jsonArray.fluentAdd(projectId)
+        jsonObject2["projectId"] = jsonArray
+        jsonObject["criteria"] = jsonObject2
+        val postObject = SHttpUtil.postObject<DictSchemeAndProjectResponse>(url, jsonObject)
+        if (postObject.result == opts.SUCCESS_CODE) {
+            if (!postObject.data.isNullOrEmpty()){
+                return postObject.data!!
+            }
+        }
+        return ArrayList()
+    } // dictSchemeAndProject()
+
+} // Object DictTypeApi

+ 81 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/A.java

@@ -0,0 +1,81 @@
+package com.persagy.server.syn.models.response;
+
+import java.util.List;
+
+/**
+ * @author wx
+ * @date 2020/9/20 16:39
+ */
+public class A {
+
+
+    /**
+     * result : success
+     * data : [{"id":9,"schemeId":9,"projectId":"Pj1101080002"}]
+     * count : 1
+     */
+
+    private String result;
+    private int count;
+    private List<DataBean> data;
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public List<DataBean> getData() {
+        return data;
+    }
+
+    public void setData(List<DataBean> data) {
+        this.data = data;
+    }
+
+    public static class DataBean {
+        /**
+         * id : 9
+         * schemeId : 9
+         * projectId : Pj1101080002
+         */
+
+        private int id;
+        private int schemeId;
+        private String projectId;
+
+        public int getId() {
+            return id;
+        }
+
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        public int getSchemeId() {
+            return schemeId;
+        }
+
+        public void setSchemeId(int schemeId) {
+            this.schemeId = schemeId;
+        }
+
+        public String getProjectId() {
+            return projectId;
+        }
+
+        public void setProjectId(String projectId) {
+            this.projectId = projectId;
+        }
+    }
+}

+ 18 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/CommonResponse.kt

@@ -0,0 +1,18 @@
+package com.persagy.server.syn.models.response
+
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.responses.SBaseResponse
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 返回体
+ * @author  wx
+ * @date  2020/9/9 14:56
+ */
+open class CommonResponse<ENTITY: Any>(result: SResponseType = SResponseType.success, message: String = "")
+    : SBaseResponse(result, message) {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var data: ArrayList<ENTITY>? = null
+}

+ 34 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictGroupSchemeResponse.kt

@@ -0,0 +1,34 @@
+package com.persagy.server.syn.models.response
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/20 16:39
+ */
+class DictGroupSchemeResponse {
+
+
+    /**
+     * result : success
+     * data : [{"id":7,"name":"商业","note":"商业","groupId":"wd"}]
+     * count : 1
+     */
+     var result: String? = null
+     var count = 0
+     var data: ArrayList<DataBean>? = null
+
+    class DataBean {
+        /**
+         * id : 7
+         * name : 商业
+         * note : 商业
+         * groupId : wd
+         */
+        var id = 0
+        var name: String? = null
+        var note: String? = null
+        var groupId: String? = null
+
+    } // Class DataBean
+
+} // Class DictGroupSchemeResponse

Plik diff jest za duży
+ 43 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictMajorResponse.kt


+ 24 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictPlatformInfoResponse.kt

@@ -0,0 +1,24 @@
+package com.persagy.server.syn.models.response
+
+import com.persagy.server.syn.models.DictPlatformInfo
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/20 9:39
+ */
+class DictPlatformInfoResponse: Serializable {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var result: String = ""
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var data: ArrayList<DictPlatformInfo>? = null
+
+
+
+} // Class DictPlatformInfo

+ 23 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictPlatformTypeResponse.kt

@@ -0,0 +1,23 @@
+package com.persagy.server.syn.models.response
+
+import com.persagy.server.syn.models.DictPlatformType
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+
+/**
+ * 平台字典类型应答类
+ *
+ * @author  wx
+ * @date  2020/9/19 16:23
+ */
+class DictPlatformTypeResponse: Serializable {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var result: String = ""
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var data: ArrayList<DictPlatformType>? = null
+
+} // Class  DictPlatformTypeResponse

+ 23 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictProjectResponse.kt

@@ -0,0 +1,23 @@
+package com.persagy.server.syn.models.response
+
+import com.persagy.server.syn.models.DictProject
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+
+/**
+ * 字典、集团下的项目
+ *
+ * @author  wx
+ * @date  2020/9/17 9:24
+ */
+class DictProjectResponse : Serializable {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var result: String = ""
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var data: ArrayList<DictProject>? = null
+
+} // Class DictProjectResponse

+ 25 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictSchemeAndProjectResponse.kt

@@ -0,0 +1,25 @@
+package com.persagy.server.syn.models.response
+
+/**
+ * 方案与项目关系
+ * @author  wx
+ * @date  2020/9/20 20:48
+ */
+class DictSchemeAndProjectResponse {
+
+     var result: String? = null
+     var count = 0
+     var data: ArrayList<DataBean>? = null
+
+    class DataBean {
+        /**
+         * id : 9
+         * schemeId : 9
+         * projectId : Pj1101080002
+         */
+        var id = 0
+        var schemeId = 0
+        var projectId: String? = null
+
+    } // Class DataBean
+} // Class DictSchemeAndProjectResponse

+ 24 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictSchemeCategoryResponse.kt

@@ -0,0 +1,24 @@
+package com.persagy.server.syn.models.response
+
+import java.io.Serializable
+
+/**
+ * 方案中的对象类型
+ * @author  wx
+ * @date  2020/9/20 17:13
+ */
+class DictSchemeCategoryResponse: Serializable {
+
+     var result: String? = null
+     var count = 0
+     var data: ArrayList<DataBean>? = null
+
+    class DataBean {
+
+        var id = 0
+        var schemeId = 0
+        var classCode: String? = null
+
+    } // Class DataBean
+
+} // Class DictSchemeCategoryResponse

+ 28 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/DictSchemeCategoryResponseInfo.kt

@@ -0,0 +1,28 @@
+package com.persagy.server.syn.models.response
+
+/**
+ * 方案中对象下的信息点
+ *
+ * @author  wx
+ * @date  2020/9/20 20:03
+ */
+class DictSchemeCategoryResponseInfo {
+
+     var result: String? = null
+     var count = 0
+     var data: ArrayList<DataBean>? = null
+
+    class DataBean {
+        /**
+         * id : 1119460
+         * schemeId : 7
+         * classCode : project
+         * infoCode : ProjUnderArea
+         */
+        var id = 0
+        var schemeId = 0
+        var classCode: String? = null
+        var infoCode: String? = null
+
+    }
+} // Class DictSchemeCategoryResponseInfo

+ 22 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/GroupResponse.kt

@@ -0,0 +1,22 @@
+package com.persagy.server.syn.models.response
+
+import com.persagy.server.syn.models.Group
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 集团应答类
+ *
+ * @author  wx
+ * @date  2020/9/17 8:52
+ */
+class GroupResponse {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var result: String = ""
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var data: ArrayList<Group>? = null
+
+} // class GroupResponse

+ 34 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/SCommonResponse.kt

@@ -0,0 +1,34 @@
+package com.persagy.server.syn.models.response
+
+
+import com.persagy.service.models.enums.SResponseType
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 返回体
+ * @author  wx
+ * @date  2020/6/9 14:56
+ */
+open class SCommonResponse<ENTITY: Any>(result: SResponseType = SResponseType.success, message: String = "", data: ENTITY) {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var result: SResponseType = SResponseType.failure
+    /** 消息 */
+    @ApiModelProperty(value = "消息")
+    var message: String = ""
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var data: ENTITY? = null
+
+    /** 初始化 */
+    init {
+        this.result = result
+        this.message = message
+        this.data = data
+
+    } // init()
+
+
+}

+ 32 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/models/response/SResponse.kt

@@ -0,0 +1,32 @@
+package com.persagy.server.syn.models.response
+
+
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 返回体
+ * @author  wx
+ * @date  2020/6/9 14:56
+ */
+open class SResponse<ENTITY: Any>( message: String = "", data: ArrayList<ENTITY>) {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var result: String = ""
+    /** 消息 */
+    @ApiModelProperty(value = "消息")
+    var message: String = ""
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var data: ArrayList<ENTITY>? = null
+
+    /** 初始化 */
+    init {
+        this.message = message
+        this.data = data
+
+    } // init()
+
+
+}

+ 8 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/services/a.java

@@ -0,0 +1,8 @@
+package com.persagy.server.syn.services;
+
+/**
+ * @author wx
+ * @date 2020/9/11 14:59
+ */
+public class a {
+}

+ 331 - 0
datasyn/src/main/kotlin/com/persagy/server/syn/services/dict/DClassDefService.kt

@@ -0,0 +1,331 @@
+package com.persagy.server.syn.services.dict
+
+import com.persagy.base.extensions.toJson
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.dict.DClassDef
+import com.persagy.server.datacenter.models.entities.dictnew.*
+import com.persagy.server.syn.models.api.DictTypeApi
+import com.persagy.service.SBaseService
+import com.persagy.service.SObjectService
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.responses.SBaseResponse
+import org.slf4j.LoggerFactory
+
+/**
+ * 字典类型
+ *
+ * @author 张维新
+ */
+object DClassDefService : SObjectService<DClassDef>(SMybatisDao(DClassDef::class.java)) {
+
+    /** 日志 */
+    val logger = LoggerFactory.getLogger(DClassDefService::class.java)
+    /** 集团服务 */
+    private val groupService = SBaseService(SMybatisDao(Group::class.java))
+    /** 字典项目服务 */
+    private val dictProjectService = SBaseService(SMybatisDao(DictProject::class.java))
+    /** 字典平台对象类型 */
+    private val defClassService = SBaseService(SMybatisDao(DefClass::class.java))
+    /** 详细信息点 */
+    private val defFuncIdService = SBaseService(SMybatisDao(DefFuncId::class.java))
+    /** 专业 */
+    private val dictMajorService = SBaseService(SMybatisDao(DictMajor::class.java))
+    /** 方案 */
+    private val dictSchemeService = SBaseService(SMybatisDao(DictScheme::class.java))
+    /** 方案内对象类型 */
+    private val dictSchemeCategotyService = SBaseService(SMybatisDao(DictSchemeCategoty::class.java))
+    /** 方案内对象包含的信息点 */
+    private val dictSchemeCategotyInfoService = SBaseService(SMybatisDao(DictSchemeCategotyInfo::class.java))
+    /** 方案内对象包含的信息点 */
+    private val dictSchemeAndProjectService = SBaseService(SMybatisDao(DictSchemeAndProject::class.java))
+
+    /**
+     * 创建字典类型
+     */
+    fun create() {
+        DictTypeApi.dictTypeHttp()
+
+    } //
+
+    /**
+     * 查询集团信息
+     */
+    fun groupQuerys(): SBaseResponse {
+        val sBaseResponse = SBaseResponse()
+        val groupQueryList = DictTypeApi.groupQuery()
+        logger.debug("集团结果:${groupQueryList.toJson()}")
+        if (groupQueryList.size > 0) {
+            groupService.deleteAll()
+            for (groupQuery in groupQueryList) {
+                val group = Group()
+                group.id = groupQuery.code
+                group.name = groupQuery.name
+                groupService.insert(group)
+            }
+        } else {
+            sBaseResponse.result = SResponseType.failure
+            return sBaseResponse
+        }
+        sBaseResponse.result = SResponseType.success
+        return sBaseResponse
+    } // Fun groupQuerys()
+
+    /**
+     * 集团下的项目
+     */
+    fun dictProject(): SBaseResponse {
+        val sBaseResponse = SBaseResponse()
+        try {
+            val selectAllList = groupService.selectAll().exec()
+            logger.debug("集团信息:${selectAllList.toJson()}")
+            if (!selectAllList.isNullOrEmpty()) {
+                for (group in selectAllList) {
+
+                    val dictProjectQueryList = DictTypeApi.dictProjectQuery(group.id!!)
+                    if (dictProjectQueryList.size > 0) {
+                        logger.debug("项目结果:${dictProjectQueryList.toJson()}")
+                        dictProjectService.delete(SFilter.eq("groupId",group.id!!))
+                        for (dictProjectQuery in dictProjectQueryList) {
+                            val dictProject = DictProject()
+                            dictProject.id = dictProjectQuery.id
+                            dictProject.name = dictProjectQuery.name
+                            dictProject.groupId = group.id
+                            dictProjectService.insert(dictProject)
+                        }
+                    }
+                }
+                sBaseResponse.result = SResponseType.success
+                return sBaseResponse
+            } else {
+                sBaseResponse.result = SResponseType.failure
+                sBaseResponse.message = "请先获取集团信息"
+                return sBaseResponse
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            sBaseResponse.result = SResponseType.failure
+            return sBaseResponse
+        }
+    } // Fun dictProject()
+
+    /**
+     * 平台字典 对象类型
+     */
+    fun dictPlatform(): SBaseResponse {
+        val sBaseResponse = SBaseResponse()
+        val dictPlatformList = DictTypeApi.dictPlatform()
+        if (dictPlatformList.size>0){
+            defClassService.deleteAll()
+            for (dictPlatform in dictPlatformList){
+                val defClass = DefClass()
+                defClass.aliasCode = dictPlatform.aliasCode
+                defClass.aliasName = dictPlatform.aliasName
+                defClass.code = dictPlatform.code
+                defClass.equipmentCode = dictPlatform.equipmentCode
+                defClass.groupId = if (dictPlatform.groupId.isNullOrEmpty())  "0" else dictPlatform.groupId
+                defClass.majorCode = dictPlatform.majorCode
+                defClass.name = dictPlatform.name
+                defClass.parentCode = dictPlatform.parentCode
+                defClass.projectId = if (dictPlatform.projectId.isNullOrEmpty())  "0" else dictPlatform.projectId
+                defClass.systemCode = dictPlatform.systemCode
+                defClass.type = "common"
+                defClassService.replace(defClass)
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return sBaseResponse
+    } // fun dictPlatform()
+
+    /**
+     * 字典对象的详细信息点
+     */
+    fun dictPlatformInfo(): SBaseResponse{
+        val sBaseResponse = SBaseResponse()
+        val defClassList = defClassService.select(SFilter.eq("type", "common")).exec()
+        if (defClassList.size>0){
+            defFuncIdService.delete(SFilter.eq("type", "common"))
+            for (defClass in defClassList){
+                val dictPlatformInfoList = DictTypeApi.dictPlatformInfo(defClass.code!!, defClass.type!!)
+                if (!dictPlatformInfoList.isNullOrEmpty()){
+                    for (dictPlatformInfo in dictPlatformInfoList){
+                        val defFuncId = DefFuncId()
+                        defFuncId.canSub = dictPlatformInfo.canSub
+                        defFuncId.category = dictPlatformInfo.category
+                        defFuncId.classCode = defClass.code
+                        defFuncId.code = dictPlatformInfo.code
+                        defFuncId.dataSource = dictPlatformInfo.dataSource
+                        defFuncId.dataType = dictPlatformInfo.dataType
+                        defFuncId.firstTag = dictPlatformInfo.firstTag
+                        defFuncId.formater = dictPlatformInfo.formater
+                        defFuncId.groupId = if (dictPlatformInfo.groupId.isNullOrEmpty()) "0" else dictPlatformInfo.groupId
+                        defFuncId.idx = dictPlatformInfo.idx
+                        defFuncId.inputMode = dictPlatformInfo.inputMode
+                        defFuncId.isMultiple = dictPlatformInfo.isMultiple
+                        defFuncId.isRegion = dictPlatformInfo.isRegion
+                        defFuncId.name = dictPlatformInfo.name
+                        defFuncId.note = dictPlatformInfo.note
+                        defFuncId.priority = dictPlatformInfo.priority
+                        defFuncId.projectId = if (dictPlatformInfo.projectId.isNullOrEmpty()) "0" else dictPlatformInfo.projectId
+                        defFuncId.readonly = dictPlatformInfo.readonly
+                        defFuncId.secondTag = dictPlatformInfo.secondTag
+                        defFuncId.subFlag = dictPlatformInfo.subFlag
+                        defFuncId.type = dictPlatformInfo.dataType
+                        defFuncId.unit = dictPlatformInfo.unit
+                        defFuncIdService.insert(defFuncId)
+                    }
+                }
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return sBaseResponse
+    } // Fun dictPlatformInfo()
+
+    /**
+     * 专业
+     */
+    fun dictMajor(): SBaseResponse{
+        val sBaseResponse = SBaseResponse()
+        val dictMajorList = DictTypeApi.dictMajor("common")
+        dictMajorService.delete(SFilter.eq("type","common"))
+        if (dictMajorList.size>0){
+            for (dictMajor in dictMajorList){
+
+                val dictMajor1 = DictMajor()
+                dictMajor1.aliasCode = dictMajor.aliasCode
+                dictMajor1.aliasName = dictMajor.aliasName
+                dictMajor1.code = dictMajor.code
+                dictMajor1.groupId = dictMajor.groupId
+                dictMajor1.id = dictMajor.id
+                dictMajor1.name = dictMajor.name
+                dictMajor1.note = dictMajor.note
+                dictMajor1.type = dictMajor.type
+                dictMajorService.insert(dictMajor1)
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return  sBaseResponse
+    } // dictMajor()
+
+    /**
+     * 集团下的方案
+     */
+    fun dictGroupScheme(): SBaseResponse{
+        val sBaseResponse = SBaseResponse()
+        val groupList = groupService.selectAll().exec()
+        if (groupList.size>0){
+
+            for (group in groupList){
+                dictSchemeService.delete(SFilter.eq("groupId",group.id!!))
+                val dictGroupSchemeList = DictTypeApi.dictGroupScheme(group.id!!)
+                if (dictGroupSchemeList.size>0){
+                    for (dictGroupScheme in dictGroupSchemeList){
+                        val dictScheme = DictScheme()
+                        dictScheme.groupId = dictGroupScheme.groupId
+                        dictScheme.id = dictGroupScheme.id
+                        dictScheme.name = dictGroupScheme.name
+                        dictScheme.note = dictGroupScheme.note
+                        dictSchemeService.insert(dictScheme)
+                    }
+                }
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return  sBaseResponse
+    } // Fun dictGroupScheme()
+
+    /**
+     * 方案下的对象类型
+     */
+    fun dictSchemeCategoty(): SBaseResponse{
+        val sBaseResponse = SBaseResponse()
+        val dictSchemeList = dictSchemeService.selectAll().exec()
+        if (dictSchemeList.size>0){
+            for (dictScheme in dictSchemeList){
+
+                val dictSchemeCategotyList = DictTypeApi.dictSchemeCategoty(dictScheme.id!!)
+                if (dictSchemeCategotyList.size>0){
+                    dictSchemeCategotyService.delete(SFilter.eq("schemeId",dictScheme.id!!))
+                    for (dictSchemeCategoty in dictSchemeCategotyList){
+                        val dictSchemeCategoty1 = DictSchemeCategoty()
+                        dictSchemeCategoty1.classCode = dictSchemeCategoty.classCode
+                        dictSchemeCategoty1.id = dictSchemeCategoty.id
+                        dictSchemeCategoty1.schemeId = dictSchemeCategoty.schemeId
+                        dictSchemeCategotyService.replace(dictSchemeCategoty1)
+                    }
+                }
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return  sBaseResponse
+    } // Fun dictSchemeCategoty()
+
+    /**
+     * 方案下的对象的信息点
+     */
+    fun dictSchemeCategotyInfo(): SBaseResponse{
+        val sBaseResponse = SBaseResponse()
+        val dictSchemeCategotyList = dictSchemeCategotyService.selectAll().exec()
+        if (dictSchemeCategotyList.size>0){
+            for (dictSchemeCategoty in dictSchemeCategotyList){
+                val dictSchemeCategotyInfoList =
+                    DictTypeApi.dictSchemeCategotyInfo(dictSchemeCategoty.schemeId!!, dictSchemeCategoty.classCode!!)
+                dictSchemeCategotyInfoService.delete(SFilter.eq("schemeId",dictSchemeCategoty.schemeId!!),SFilter.eq("classCode",dictSchemeCategoty.classCode!!))
+                if (dictSchemeCategotyInfoList.size>0){
+                    for (dictSchemeCategotyInfo in dictSchemeCategotyInfoList){
+                        val dictSchemeCategotyInfo1 = DictSchemeCategotyInfo()
+                        dictSchemeCategotyInfo1.classCode = dictSchemeCategotyInfo.classCode
+                        dictSchemeCategotyInfo1.id = dictSchemeCategotyInfo.id
+                        dictSchemeCategotyInfo1.infoCode = dictSchemeCategotyInfo.infoCode
+                        dictSchemeCategotyInfo1.schemeId = dictSchemeCategotyInfo.schemeId
+                        dictSchemeCategotyInfoService.insert(dictSchemeCategotyInfo1)
+                    }
+                }
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return  sBaseResponse
+    } // Fun dictSchemeCategotyInfo()
+
+    /**
+     * 查询项目和方案的关系
+     */
+    fun dictSchemeAndProject(): SBaseResponse{
+        val sBaseResponse = SBaseResponse()
+        val dictProjectList = dictProjectService.selectAll().exec()
+        if (dictProjectList.size>0){
+            dictSchemeAndProjectService.deleteAll()
+            for (dictProject in dictProjectList){
+                val dictSchemeAndProjectList = DictTypeApi.dictSchemeAndProject(dictProject.id!!)
+                if (dictSchemeAndProjectList.size>0){
+                    for (dictScheme in dictSchemeAndProjectList){
+                        val dictSchemeAndProject = DictSchemeAndProject()
+                        dictSchemeAndProject.id = dictScheme.id
+                        dictSchemeAndProject.projectId = dictScheme.projectId
+                        dictSchemeAndProject.schemeId = dictScheme.schemeId
+                        dictSchemeAndProjectService.insert(dictSchemeAndProject)
+                    }
+                }
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return  sBaseResponse
+    } // Fun dictSchemeAndProject()
+
+
+
+} // Object DClassDefService

+ 22 - 0
datasyn/src/main/resources/application-dev.yml

@@ -0,0 +1,22 @@
+server:
+  port: 8082
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://60.205.177.43:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+    broker-url:                         tcp://172.16.42.210:61616
+
+  kafka:
+#    bootstrap-servers:                      127.0.0.1:9092
+    bootstrap-servers:                      192.168.20.236:9092
+
+    consumer:
+      group-id:                             datacenter-consumer-group
+
+saga:
+  dataPlatform:                        http://192.168.3.203:8081/paas
+

+ 18 - 0
datasyn/src/main/resources/application-prod.yml

@@ -0,0 +1,18 @@
+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
+
+saga:
+                                          dataPlatform:                         http://data-platform:8888/data-platform-3
+#                                          dataPlatform:                         http://api.sagacloud.cn/data-platform-3
+                                          scanBuilding:                         http://mbi.sagacloud.cn:8080/ScanBuilding

+ 79 - 0
datasyn/src/main/resources/application.yml

@@ -0,0 +1,79 @@
+
+spring:
+
+  kafka:
+    producer:
+      retries:                              0
+      batch-size:                           16384
+      buffer-memory:                        33554432
+      key-serializer:                       org.apache.kafka.common.serialization.StringSerializer
+      value-serializer:                     org.apache.kafka.common.serialization.StringSerializer
+      properties:
+        linger.ms:                          1
+
+    consumer:
+      enable-auto-commit:                   false
+      auto-commit-interval:                 100ms
+      key-deserializer:                     org.apache.kafka.common.serialization.StringDeserializer
+      value-deserializer:                   org.apache.kafka.common.serialization.StringDeserializer
+      properties:
+        session.timeout.ms:                 15000
+
+
+  mvc:
+    favicon:
+      enabled:                          true
+  jmx:
+    default-domain:                     dataplatform-sync
+#    default-domain:                     dataplatform-sync-project
+
+  datasource:
+    name:                               dataplatform-sync
+#    name:                               dataplatform-sync-project
+    type:                               com.alibaba.druid.pool.DruidDataSource
+    #测试服务
+    driver-class-name:                  org.postgresql.Driver
+#    url:                                jdbc:postgresql://10.30.128.200:5432/datacenter
+#    username:                           postgres
+#    password:                           123qwe!@#
+#  datasource:
+#    url:                                jdbc:postgresql://47.93.187.165: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.16.42.210:61616
+  jms:
+    pub-sub-domain: true
+
+topic:                                 datacenter.broadcast
+
+mybatis:
+  typeAliasesPackage:                   cn.sagacloud.server.datacenter.entities
+
+
+## 分页插件配置
+#pagehelper:
+#  helperDialect:                        mysql
+#  reasonable:                           true
+#  supportMethodsArguments:              true
+#  params:                               count=countSql
+#saga:
+#  dataPlatform:                         http://47.93.187.165:9909/data-platform-3
+#  scanBuilding:                         http://mbi.sagacloud.cn:8080/ScanBuilding

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

@@ -0,0 +1,43 @@
+<!--
+  ~ *********************************************************************************************************************
+  ~
+  ~                     :*$@@%$*:                         ;:                ;;    ;;
+  ~                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+  ~                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+  ~                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+  ~                  =@*                                  %!              @ $= % %@=   =%@!      %=
+  ~             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+  ~           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+  ~         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+  ~         $@*   ;@@@%=!:                *@*
+  ~         =@$    ;;;!=%@@@@=!           =@!
+  ~          %@$:      =@%: :*@@@*       %@=                    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.persagy包的日志级别 -->
+    <logger name="com.persagy" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+    <!-- 定义日志级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT" />
+    </root>
+</configuration>

+ 2 - 2
gradle.properties

@@ -27,8 +27,8 @@ SAGA_KOTLIN_VERSION = 1.4.108
 SAGA_SERVICE_VERSION = 1.4.140
 SAGA_SERVICE_VERSION = 1.4.140
 
 
 PERSAGY_URL = http://www.persagy.cn
 PERSAGY_URL = http://www.persagy.cn
-PERSAGY_KOTLIN_VERSION = 1.4.112
-PERSAGY_SERVICE_VERSION = 1.4.148
+PERSAGY_KOTLIN_VERSION = 1.4.114
+PERSAGY_SERVICE_VERSION = 1.4.151
 
 
 
 
 
 

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

@@ -20,12 +20,14 @@
 
 
 package com.persagy.server.labsl
 package com.persagy.server.labsl
 
 
+import com.persagy.service.json.SJsonHttpMessageConverter
 import org.mybatis.spring.annotation.MapperScan
 import org.mybatis.spring.annotation.MapperScan
 import org.slf4j.LoggerFactory
 import org.slf4j.LoggerFactory
 import org.springframework.boot.SpringApplication
 import org.springframework.boot.SpringApplication
 import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.boot.builder.SpringApplicationBuilder
 import org.springframework.boot.builder.SpringApplicationBuilder
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
+import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.ComponentScan
 import org.springframework.context.annotation.ComponentScan
 
 
 /**
 /**
@@ -50,6 +52,19 @@ open class LaBSLApp : SpringBootServletInitializer() {
     override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
     override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
         return application.sources(LaBSLApp::class.java)
         return application.sources(LaBSLApp::class.java)
     } // Function configure
     } // 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
 } // Class Application
 
 
 /**
 /**

+ 33 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/controller/GraphCategoryController.kt

@@ -0,0 +1,33 @@
+package com.persagy.server.labsl.controller
+
+import com.persagy.server.labsl.models.entities.GraphCategory
+import com.persagy.server.labsl.models.request.GraphCategoryRequest
+import com.persagy.server.labsl.services.GraphCategoryService
+import com.persagy.service.models.responses.SQueryResponse
+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  wx
+ * @date  2020/9/15 11:40
+ */
+@Api(tags = ["005、系统图类型"])
+@RestController
+@RequestMapping("/graph-category")
+class GraphCategoryController {
+
+
+    @ApiOperation(value = "查询系统图类型信息", notes = "类型开关 true  获取所有 false 获取已有图形的类型")
+    @PostMapping(value = ["/query"])
+    fun graphCategoryQuery(@RequestBody request: GraphCategoryRequest): SQueryResponse<GraphCategory> {
+        return GraphCategoryService.graphCategoryQuery(request)
+    } // Fun graphCategoryQuery()
+
+
+} // Class GraphCategoryController

+ 90 - 20
labsl/src/main/kotlin/com/persagy/server/labsl/controller/GraphController.kt

@@ -1,7 +1,10 @@
 package com.persagy.server.labsl.controller
 package com.persagy.server.labsl.controller
 
 
 import com.persagy.server.labsl.models.entities.Graph
 import com.persagy.server.labsl.models.entities.Graph
+import com.persagy.server.labsl.models.entities.pub.GraphPub
+import com.persagy.server.labsl.models.response.SCommonResponse
 import com.persagy.server.labsl.services.GraphService
 import com.persagy.server.labsl.services.GraphService
+import com.persagy.server.labsl.services.pub.GraphPubService
 import com.persagy.service.models.requests.SCreateRequest
 import com.persagy.service.models.requests.SCreateRequest
 import com.persagy.service.models.requests.SQueryRequest
 import com.persagy.service.models.requests.SQueryRequest
 import com.persagy.service.models.requests.SUpdateRequest
 import com.persagy.service.models.requests.SUpdateRequest
@@ -22,7 +25,7 @@ import org.springframework.web.bind.annotation.RestController
  */
  */
 @Api(tags = ["001、图实例"])
 @Api(tags = ["001、图实例"])
 @RestController
 @RestController
-@RequestMapping("/service/graph")
+@RequestMapping("/graph")
 class GraphController {
 class GraphController {
 
 
     /**
     /**
@@ -31,8 +34,8 @@ class GraphController {
      * @param   request     待图对象列表
      * @param   request     待图对象列表
      * @return  创建完成图对象列表
      * @return  创建完成图对象列表
      */
      */
-    @ApiOperation(value="创建图", notes="")
-    @PostMapping("/create")
+    @ApiOperation(value="草稿箱-创建图", notes="")
+    @PostMapping("/drafts/create")
     fun create(@RequestBody request: SCreateRequest<Graph>): SCreateResponse<Graph> {
     fun create(@RequestBody request: SCreateRequest<Graph>): SCreateResponse<Graph> {
         return GraphService.createList(request)
         return GraphService.createList(request)
     } // Function create()
     } // Function create()
@@ -43,41 +46,48 @@ class GraphController {
      * @param   graph   待图对象
      * @param   graph   待图对象
      * @return  图对象列表
      * @return  图对象列表
      */
      */
-    @ApiOperation(value="提交图形", notes="")
-    @PostMapping("/save")
+    @ApiOperation(value="草稿箱-保存图形", notes="")
+    @PostMapping("/drafts/save")
     fun save(@RequestBody graph: Graph): SCreateResponse<Graph> {
     fun save(@RequestBody graph: Graph): SCreateResponse<Graph> {
         return GraphService.save(graph)
         return GraphService.save(graph)
     } // Function save()
     } // Function save()
 
 
     /**
     /**
-     * 根据id删除图形
-     *
-     * @param   idList      id数组
-     * @return              删除的结果信息
+     * 发布图形
      */
      */
-    @ApiOperation(value = "根据id删除图形信息", notes = "")
-    @PostMapping(value = ["/delete"])
-    fun delete(@RequestBody idList: ArrayList<Graph>): SBaseResponse {
-        return GraphService.deleteByKeysList(idList)
-    } // Function delete()
+    @ApiOperation(value="草稿箱-发布图形", notes=" Id 和 GraphId 必须填写")
+    @PostMapping("/drafts/publish")
+    fun pubDrawings(@RequestBody graph: GraphPub): SCreateResponse<GraphPub>{
+        return GraphService.pubDrawings(graph)
+    } // Function pubDrawings()
+
 
 
     /**
     /**
      * 图、移至或移出回收站
      * 图、移至或移出回收站
      */
      */
-    @ApiOperation(value = "图、移至或移出回收站", notes = "IsRelease true 移至回收站 false 移出回收站,")
-    @PostMapping(value = ["/recycle"])
+    @ApiOperation(value = "草稿箱-移至回收站", notes = " Id 和 GraphId 必填")
+    @PostMapping(value = ["/drafts/recycle"])
     fun recycle(@RequestBody idList: ArrayList<Graph>): SBaseResponse {
     fun recycle(@RequestBody idList: ArrayList<Graph>): SBaseResponse {
         return GraphService.recycle(idList)
         return GraphService.recycle(idList)
     } // Function recycle()
     } // Function recycle()
 
 
     /**
     /**
+     * 已发布图形移至回收站
+     */
+    @ApiOperation(value = "已发布-图形移至回收站", notes = "Id 和 GraphId 必填")
+    @PostMapping(value = ["/pub/recycle"])
+    fun recyclePub(@RequestBody idList: ArrayList<Graph>): SBaseResponse{
+        return GraphService.recyclePub(idList)
+    } // Function recyclePub()
+
+    /**
      * 更新图形信息
      * 更新图形信息
      *
      *
      * @param   request        更新的内容对象
      * @param   request        更新的内容对象
      * @return                  更新的结果
      * @return                  更新的结果
      */
      */
-    @ApiOperation(value = "更新图形信息", notes = "")
-    @PostMapping(value = ["/update"])
+    @ApiOperation(value = "草稿箱-更新图形信息", notes = "Id 和 GraphId 必填")
+    @PostMapping(value = ["/drafts/update"])
     fun update(@RequestBody request: SUpdateRequest<Graph>): SBaseResponse {
     fun update(@RequestBody request: SUpdateRequest<Graph>): SBaseResponse {
         return GraphService.updateList(request)
         return GraphService.updateList(request)
     } // Function update()
     } // Function update()
@@ -88,11 +98,71 @@ class GraphController {
      * @param   request        查询条件
      * @param   request        查询条件
      * @return                 查询结果
      * @return                 查询结果
      */
      */
-    @ApiOperation(value = "查询图形信息", notes = "")
-    @PostMapping(value = ["/query"])
+    @ApiOperation(value = "草稿箱-查询图形信息", notes = "state 1(草稿箱),state 4(回收站) ,Id 和 GraphId 必填")
+    @PostMapping(value = ["/drafts/query"])
     fun query(@RequestBody request: SQueryRequest): SQueryResponse<Graph> {
     fun query(@RequestBody request: SQueryRequest): SQueryResponse<Graph> {
         return GraphService.pageQuery(request)
         return GraphService.pageQuery(request)
     } // Function query()
     } // Function query()
 
 
+    /**
+     * 草稿箱 - 读取图形所有节点
+     */
+    @ApiOperation(value = "草稿箱-查询图形以及所有节点信息", notes = "Id 和 GraphId 必填")
+    @PostMapping(value = ["/drafts/read"])
+    fun readDrafts(@RequestBody graph: Graph): SCommonResponse<Graph> {
+        return GraphService.readDrafts(graph)
+    } // Fun readDrafts()
+
+    /**
+     * 已发布 - 读取图形所有节点
+     */
+    @ApiOperation(value = "已发布-查询图形以及所有节点信息", notes = "Id 和 GraphId 必填")
+    @PostMapping(value = ["/pub/read"])
+    fun readPub(@RequestBody graph: GraphPub): SCommonResponse<GraphPub>{
+        return GraphService.readPub(graph)
+    } // Fun readPub()
+
+    /**
+     * 已发布图形查询
+     */
+    @ApiOperation(value = "已发布-查询图形信息", notes = "Id 和 GraphId 必填")
+    @PostMapping(value = ["/pub/query"])
+    fun querPub(@RequestBody request: SQueryRequest): SQueryResponse<GraphPub> {
+        return GraphPubService.pageQuery(request)
+    } // Function querPub()
+
+    /**
+     * 更新图形信息
+     *
+     * @param   request        更新的内容对象
+     * @return                  更新的结果
+     */
+    @ApiOperation(value = "已发布-更新图形信息", notes = "")
+    @PostMapping(value = ["/pub/update"])
+    fun updatePub(@RequestBody request: SUpdateRequest<GraphPub>): SBaseResponse {
+        return GraphPubService.updateList(request)
+    } // Function update()
+
+    /**
+     * 回收站- 恢复图形
+     */
+    @ApiOperation(value = "回收站- 恢复图形", notes = "Id 和 GraphId 必填 ")
+    @PostMapping(value = ["recycle/recovery"])
+    fun recovery(@RequestBody graph: Graph): SBaseResponse{
+    return GraphService.recovery(graph)
+    } // Fun recovery()
+
+
+    /**
+     * 根据id删除图形
+     *
+     * @param   idList      id数组
+     * @return              删除的结果信息
+     */
+    @ApiOperation(value = "回收站-根据id删除图形信息,删除草稿箱图形", notes = "Id 和 GraphId 必填 ")
+    @PostMapping(value = ["recycle/delete"])
+    fun delete(@RequestBody idList: ArrayList<Graph>): SBaseResponse {
+        return GraphService.deleteByKeysList(idList)
+    } // Function delete()
 
 
 } // Class GraphController
 } // Class GraphController

+ 1 - 1
labsl/src/main/kotlin/com/persagy/server/labsl/controller/MarkersController.kt

@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController
  */
  */
 @Api(tags = ["003、文本注释,图上的图片说明"])
 @Api(tags = ["003、文本注释,图上的图片说明"])
 @RestController
 @RestController
-@RequestMapping("/service/marker")
+@RequestMapping("/marker")
 class MarkersController {
 class MarkersController {
 
 
     /**
     /**

+ 1 - 1
labsl/src/main/kotlin/com/persagy/server/labsl/controller/NodeController.kt

@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController
  */
  */
 @Api(tags = ["002、图例节点"])
 @Api(tags = ["002、图例节点"])
 @RestController
 @RestController
-@RequestMapping("/service/node")
+@RequestMapping("/node")
 class NodeController {
 class NodeController {
 
 
 
 

+ 1 - 1
labsl/src/main/kotlin/com/persagy/server/labsl/controller/RelationController.kt

@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController
  */
  */
 @Api(tags = ["004、管线对象"])
 @Api(tags = ["004、管线对象"])
 @RestController
 @RestController
-@RequestMapping("/service/relation")
+@RequestMapping("/relation")
 class RelationController {
 class RelationController {
 
 
 
 

+ 16 - 3
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Anchor.kt

@@ -16,15 +16,22 @@ import javax.persistence.Table
  */
  */
 @ApiModel(description = "锚点")
 @ApiModel(description = "锚点")
 @Table(name = "lbsl.anchor")
 @Table(name = "lbsl.anchor")
-class Anchor : SBaseEntity(), Serializable {
+open class Anchor : SBaseEntity(), Serializable {
 
 
-    /** 锚点id */
-    @ApiModelProperty(value = "锚点id")
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
     @Id
     @Id
     @Column(name = "id")
     @Column(name = "id")
     @JSONField(name = "Id")
     @JSONField(name = "Id")
     var id: String? = null
     var id: String? = null
 
 
+    /** 锚点id */
+    @ApiModelProperty(value = "锚点id")
+    @Id
+    @Column(name = "anchor_id")
+    @JSONField(name = "AnchorId")
+    var anchorId: String? = null
+
     /** 图id */
     /** 图id */
     @ApiModelProperty(value = "图id")
     @ApiModelProperty(value = "图id")
     @Column(name = "graph_id")
     @Column(name = "graph_id")
@@ -49,4 +56,10 @@ class Anchor : SBaseEntity(), Serializable {
     @JSONField(name = "ProjectId")
     @JSONField(name = "ProjectId")
     var projectId: String? = null
     var projectId: String? = null
 
 
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,4回收站 ,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = 1
+
 } // Class Anchor
 } // Class Anchor

+ 55 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/AttachObjectIds.kt

@@ -0,0 +1,55 @@
+package com.persagy.server.labsl.models.entities
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 图例节点与对象的关系
+ *
+ * @author  wx
+ * @date  2020/9/17 16:35
+ */
+@ApiModel(description = "图例节点与对象的关系")
+@Table(name = "lbsl.attach_object_ids")
+class AttachObjectIds : SBaseEntity(), Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 图例节点id */
+    @ApiModelProperty(value = "图例节点id",required = true )
+    @Id
+    @Column(name = "node_id")
+    @JSONField(name = "NodeId")
+    var nodeId: String? = null
+
+    /** 对象id */
+    @ApiModelProperty(value = "对象id",required = true )
+    @Id
+    @Column(name = "object_id")
+    @JSONField(name = "ObjectId")
+    var objectId: String? = null
+
+    /** 图id */
+    @ApiModelProperty(value = "图id")
+    @Column(name = "graph_id")
+    @JSONField(name = "GraphId")
+    var graphId: String? = null
+
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,4回收站 ,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = 1
+
+} // Class AttachObjectIds

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

@@ -17,43 +17,50 @@ import javax.persistence.Table
  */
  */
 @ApiModel(description = "图例")
 @ApiModel(description = "图例")
 @Table(name = "lbsl.graph")
 @Table(name = "lbsl.graph")
-class Graph : SBaseEntity(), Serializable {
+open class Graph : SBaseEntity(), Serializable {
 
 
-    /** 图类型id */
-    @ApiModelProperty(value = "图类型id")
+    /** 全局id */
+    @ApiModelProperty(value = "全局id" )
     @Id
     @Id
     @Column(name = "id")
     @Column(name = "id")
-    @JSONField(name = "Id")
+    @JSONField(name = "ID")
     var id: String? = null
     var id: String? = null
 
 
+    /** 图类型id */
+    @ApiModelProperty(value = "图类型id",required = true )
+    @Id
+    @Column(name = "graph_id")
+    @JSONField(name = "GraphID")
+    var graphId: String? = null
+
     /** 图名称 */
     /** 图名称 */
-    @ApiModelProperty(value = "图名称")
+    @ApiModelProperty(value = "图名称",required = true )
     @Column(name = "name")
     @Column(name = "name")
     @JSONField(name = "Name")
     @JSONField(name = "Name")
     var name: String? = null
     var name: String? = null
 
 
     /** 图分类id */
     /** 图分类id */
-    @ApiModelProperty(value = "图分类id")
+    @ApiModelProperty(value = "图分类id",required = true )
     @Column(name = "category_id")
     @Column(name = "category_id")
-    @JSONField(name = "CategoryId")
+    @JSONField(name = "CategoryID")
     var categoryId: String? = null
     var categoryId: String? = null
 
 
     /** 项目id */
     /** 项目id */
-    @ApiModelProperty(value = "项目id")
+    @ApiModelProperty(value = "项目id",required = true )
     @Column(name = "project_id")
     @Column(name = "project_id")
-    @JSONField(name = "ProjectId")
+    @JSONField(name = "ProjectID")
     var projectId: String? = null
     var projectId: String? = null
 
 
     /** 建筑id */
     /** 建筑id */
     @ApiModelProperty(value = "建筑id")
     @ApiModelProperty(value = "建筑id")
     @Column(name = "building_id")
     @Column(name = "building_id")
-    @JSONField(name = "BuildingId")
+    @JSONField(name = "BuildingID")
     var buildingId: String? = null
     var buildingId: String? = null
 
 
     /** 楼层id */
     /** 楼层id */
     @ApiModelProperty(value = "楼层id")
     @ApiModelProperty(value = "楼层id")
     @Column(name = "floor_id")
     @Column(name = "floor_id")
-    @JSONField(name = "FloorId")
+    @JSONField(name = "FloorID")
     var floorId: String? = null
     var floorId: String? = null
 
 
     /** 说明 */
     /** 说明 */
@@ -70,7 +77,7 @@ class Graph : SBaseEntity(), Serializable {
 
 
     @ApiModelProperty(value = "系统图展示所需数据")
     @ApiModelProperty(value = "系统图展示所需数据")
     @JSONField(name = "Elements")
     @JSONField(name = "Elements")
-    var elements: Elements? = null
+    open var elements: Elements? = null
 
 
     /** 移至回收站时间 */
     /** 移至回收站时间 */
     @ApiModelProperty(value = "移至回收站时间")
     @ApiModelProperty(value = "移至回收站时间")
@@ -78,11 +85,11 @@ class Graph : SBaseEntity(), Serializable {
     @JSONField(name = "DelTime")
     @JSONField(name = "DelTime")
     var delTime: Date? = null
     var delTime: Date? = null
 
 
-    /** 移至回收站时间 */
-    @ApiModelProperty(value = "移至回收站时间")
+    /** 是否移至回收站 */
+    @ApiModelProperty(value = "是否移至回收站 , false 正常,true 以至回收站")
     @Column(name = "is_available")
     @Column(name = "is_available")
     @JSONField(name = "IsAvailable")
     @JSONField(name = "IsAvailable")
-    var isAvailable: Boolean? = null
+    var isAvailable: Boolean? = false
 
 
     /** 内部版本号 */
     /** 内部版本号 */
     @ApiModelProperty(value = "内部版本号")
     @ApiModelProperty(value = "内部版本号")
@@ -94,6 +101,30 @@ class Graph : SBaseEntity(), Serializable {
     @ApiModelProperty(value = "是否发布(true 发布、false 未发布)")
     @ApiModelProperty(value = "是否发布(true 发布、false 未发布)")
     @Column(name = "is_pub")
     @Column(name = "is_pub")
     @JSONField(name = "IsPub")
     @JSONField(name = "IsPub")
-    var isPub: Boolean? = null
+    var isPub: Boolean = false
+
+    /** 图片Key */
+    @ApiModelProperty(value = "图片Key")
+    @Column(name = "pic")
+    @JSONField(name = "Pic")
+    var pic: String? = null
+
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,4回收站 ,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = 1
+
+    /** 页面尺寸 */
+    @ApiModelProperty(value = "页面尺寸")
+    @Column(name = "page_size")
+    @JSONField(name = "pageSize")
+    var pageSize: HashMap<String,Any?>? = null
+
+    /** 标签 */
+    @ApiModelProperty(value = " 标签 ")
+    @Column(name = "label")
+    @JSONField(name = "Label")
+    var label: ArrayList<String>? = null
 
 
 } // Class Graph
 } // Class Graph

+ 48 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/GraphCategory.kt

@@ -0,0 +1,48 @@
+package com.persagy.server.labsl.models.entities
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 图分类
+ *
+ * @author  wx
+ * @date  2020/9/15 11:33
+ */
+@ApiModel(description = "图分类")
+@Table(name = "lbsl.graph_category")
+class GraphCategory : SBaseEntity(), Serializable {
+
+    /** 分类编码Code */
+    @ApiModelProperty(value = "分类编码Code")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Code")
+    var id: String? = null
+
+    /** 分类名称 */
+    @ApiModelProperty(value = "分类名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    /** 上级节点 */
+    @ApiModelProperty(value = "上级节点")
+    @Column(name = "parent_id")
+    @JSONField(name = "ParentId")
+    var parentId: String? = null
+
+    @ApiModelProperty(value = "子节点列表")
+    @JSONField(name = "CategoryList")
+    var categoryList: ArrayList<GraphCategory>? = null
+
+    @JSONField(name = "CategoryList",serialize = false)
+    var sign: Boolean = false
+
+} //  Class GraphCategory

+ 25 - 6
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Markers.kt

@@ -16,15 +16,22 @@ import javax.persistence.Table
  */
  */
 @ApiModel(description = "文本注释,图上的图片说明")
 @ApiModel(description = "文本注释,图上的图片说明")
 @Table(name = "lbsl.marker")
 @Table(name = "lbsl.marker")
-class Markers : SBaseEntity(), Serializable {
+open class Markers : SBaseEntity(), Serializable {
 
 
-    /** 标识id */
-    @ApiModelProperty(value = "标识id")
+    /** 全局id */
+    @ApiModelProperty(value = "全局id" )
     @Id
     @Id
     @Column(name = "id")
     @Column(name = "id")
     @JSONField(name = "Id")
     @JSONField(name = "Id")
     var id: String? = null
     var id: String? = null
 
 
+    /** 标识id */
+    @ApiModelProperty(value = "标识id",required = true )
+    @Id
+    @Column(name = "marker_id")
+    @JSONField(name = "MarkerId")
+    var markerId: String? = null
+
     /** 标识名称 */
     /** 标识名称 */
     @ApiModelProperty(value = "标识名称")
     @ApiModelProperty(value = "标识名称")
     @Column(name = "name")
     @Column(name = "name")
@@ -51,9 +58,9 @@ class Markers : SBaseEntity(), Serializable {
 
 
     /** 旋转 */
     /** 旋转 */
     @ApiModelProperty(value = "旋转")
     @ApiModelProperty(value = "旋转")
-    @Column(name = "rolate")
-    @JSONField(name = "Rolate")
-    var rolate: Pos? = null
+    @Column(name = "rotate")
+    @JSONField(name = "Rotate")
+    var rotate: Pos? = null
 
 
     /** 大小 */
     /** 大小 */
     @ApiModelProperty(value = "大小")
     @ApiModelProperty(value = "大小")
@@ -68,8 +75,20 @@ class Markers : SBaseEntity(), Serializable {
 
 
     /** 图id */
     /** 图id */
     @ApiModelProperty(value = "图id")
     @ApiModelProperty(value = "图id")
+    @Id
     @Column(name = "graph_id")
     @Column(name = "graph_id")
     @JSONField(name = "GraphId")
     @JSONField(name = "GraphId")
     var graphId: String? = null
     var graphId: String? = null
 
 
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,4回收站 ,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = 1
+
+    @ApiModelProperty(value = "线的绘图样式")
+    @Column(name = "style")
+    @JSONField(name = "Style")
+    var style : HashMap<String,Any?>? = null
+
 } // Class Markers
 } // Class Markers

+ 29 - 7
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Node.kt

@@ -16,17 +16,24 @@ import javax.persistence.Table
  */
  */
 @ApiModel(description = "图例节点")
 @ApiModel(description = "图例节点")
 @Table(name = "lbsl.node")
 @Table(name = "lbsl.node")
-class Node : SBaseEntity(), Serializable {
+open class Node : SBaseEntity(), Serializable {
 
 
-    /** 图例节点id */
-    @ApiModelProperty(value = "图例节点id")
+    /** 全局id */
+    @ApiModelProperty(value = "全局id" )
     @Id
     @Id
     @Column(name = "id")
     @Column(name = "id")
     @JSONField(name = "Id")
     @JSONField(name = "Id")
     var id: String? = null
     var id: String? = null
 
 
+    /** 图例节点id */
+    @ApiModelProperty(value = "图例节点id",required = true )
+    @Id
+    @Column(name = "node_id")
+    @JSONField(name = "NodeId")
+    var nodeId: String? = null
+
     /** 图例节点名称 */
     /** 图例节点名称 */
-    @ApiModelProperty(value = "图例节点名称")
+    @ApiModelProperty(value = "图例节点名称",required = true )
     @Column(name = "name")
     @Column(name = "name")
     @JSONField(name = "Name")
     @JSONField(name = "Name")
     var name: String? = null
     var name: String? = null
@@ -69,9 +76,9 @@ class Node : SBaseEntity(), Serializable {
 
 
     /** 旋转 */
     /** 旋转 */
     @ApiModelProperty(value = "旋转")
     @ApiModelProperty(value = "旋转")
-    @Column(name = "rolate")
-    @JSONField(name = "Rolate")
-    var rolate: Pos? = null
+    @Column(name = "rotate")
+    @JSONField(name = "Rotate")
+    var rotate: Pos? = null
 
 
     /** 大小 */
     /** 大小 */
     @ApiModelProperty(value = "大小")
     @ApiModelProperty(value = "大小")
@@ -101,4 +108,19 @@ class Node : SBaseEntity(), Serializable {
     @JSONField(name = "AnchorList")
     @JSONField(name = "AnchorList")
     var anchorList: ArrayList<Anchor>? = null
     var anchorList: ArrayList<Anchor>? = null
 
 
+    @ApiModelProperty(value = "图例节点与对象的关系")
+    @JSONField(name = "AttachObjectIds")
+    var attachObjectIds: ArrayList<AttachObjectIds>? = null
+
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,4回收站 ,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = 1
+
+    @ApiModelProperty(value = "线的绘图样式")
+    @Column(name = "style")
+    @JSONField(name = "Style")
+    var style : HashMap<String,Any?>? = null
+
 } // Class node
 } // Class node

+ 17 - 3
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/Relation.kt

@@ -16,15 +16,22 @@ import javax.persistence.Table
  */
  */
 @ApiModel(description = "管线对象")
 @ApiModel(description = "管线对象")
 @Table(name = "lbsl.relation")
 @Table(name = "lbsl.relation")
-class Relation : SBaseEntity(), Serializable {
+open class Relation : SBaseEntity(), Serializable {
 
 
-    /** 关系id */
-    @ApiModelProperty(value = "关系id")
+    /** 全局id */
+    @ApiModelProperty(value = "全局id" )
     @Id
     @Id
     @Column(name = "id")
     @Column(name = "id")
     @JSONField(name = "Id")
     @JSONField(name = "Id")
     var id: String? = null
     var id: String? = null
 
 
+    /** 关系id */
+    @ApiModelProperty(value = "关系id",required = true )
+    @Id
+    @Column(name = "relation_id")
+    @JSONField(name = "RelationId")
+    var relationId: String? = null
+
     /** 关系名称 */
     /** 关系名称 */
     @ApiModelProperty(value = "关系名称")
     @ApiModelProperty(value = "关系名称")
     @Column(name = "name")
     @Column(name = "name")
@@ -86,8 +93,15 @@ class Relation : SBaseEntity(), Serializable {
 
 
     /** 图id */
     /** 图id */
     @ApiModelProperty(value = "图id")
     @ApiModelProperty(value = "图id")
+    @Id
     @Column(name = "graph_id")
     @Column(name = "graph_id")
     @JSONField(name = "GraphId")
     @JSONField(name = "GraphId")
     var graphId: String? = null
     var graphId: String? = null
 
 
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,4回收站 ,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = 1
+
 } // Class Relation
 } // Class Relation

+ 15 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/auxiliary/CategoryCode.kt

@@ -0,0 +1,15 @@
+package com.persagy.server.labsl.models.entities.auxiliary
+
+import java.io.Serializable
+
+/**
+ * 图类型
+ *
+ * @author  wx
+ * @date  2020/9/17 12:05
+ */
+class CategoryCode : Serializable {
+
+    var categoryId: String? = null
+
+} // Class CategoryCode

+ 16 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/AnchorPub.kt

@@ -0,0 +1,16 @@
+package com.persagy.server.labsl.models.entities.pub
+
+import com.persagy.server.labsl.models.entities.Anchor
+import io.swagger.annotations.ApiModel
+import java.io.Serializable
+import javax.persistence.Table
+
+/**
+ * 锚点
+ *
+ * @author wx
+ */
+@ApiModel(description = "锚点")
+@Table(name = "lbsl.anchor_pub")
+class AnchorPub : Anchor(), Serializable
+

+ 56 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/AttachObjectIdsPub.kt

@@ -0,0 +1,56 @@
+package com.persagy.server.labsl.models.entities.pub
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 图例节点与对象的关系
+ *
+ * @author  wx
+ * @date  2020/9/17 16:35
+ */
+@ApiModel(description = "图例节点与对象的关系")
+@Table(name = "lbsl.attach_object_ids_pub")
+class AttachObjectIdsPub : SBaseEntity(), Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 图例节点id */
+    @ApiModelProperty(value = "图例节点id",required = true )
+    @Id
+    @Column(name = "node_id")
+    @JSONField(name = "NodeId")
+    var nodeId: String? = null
+
+    /** 对象id */
+    @ApiModelProperty(value = "对象id",required = true )
+    @Id
+    @Column(name = "object_id")
+    @JSONField(name = "ObjectId")
+    var objectId: String? = null
+
+    /** 图id */
+    @ApiModelProperty(value = "图id")
+    @Column(name = "graph_id")
+    @JSONField(name = "GraphId")
+    var graphId: String? = null
+
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,4回收站 ,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = 1
+
+
+} // Class AttachObjectIds

+ 28 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/ElementsPub.kt

@@ -0,0 +1,28 @@
+package com.persagy.server.labsl.models.entities.pub
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.validation.Valid
+
+/**
+ * 系统图展示所需数据
+ *
+ * @author wx
+ */
+class ElementsPub : Serializable {
+
+    @ApiModelProperty(value = "图例节点")
+    @JSONField(name = "Nodes")
+    @Valid
+    var nodes : ArrayList<NodePub>? = null
+
+    @ApiModelProperty(value = "文本注释,图上的图片说明")
+    @JSONField(name = "Markers")
+    var markers : ArrayList<MarkersPub>? = null
+
+    @ApiModelProperty(value = "管线对象")
+    @JSONField(name = "Relations")
+    var relations : ArrayList<RelationPub>? = null
+
+} // Class Elements

+ 124 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/GraphPub.kt

@@ -0,0 +1,124 @@
+package com.persagy.server.labsl.models.entities.pub
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import java.util.*
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 图例
+ *
+ * @author wx
+ */
+@ApiModel(description = "图例")
+@Table(name = "lbsl.graph_pub")
+class GraphPub : SBaseEntity(), Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id" )
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 图类型id */
+    @ApiModelProperty(value = "图类型id",required = true )
+    @Id
+    @Column(name = "graph_id")
+    @JSONField(name = "GraphId")
+    var graphId: String? = null
+
+    /** 图名称 */
+    @ApiModelProperty(value = "图名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    /** 图分类id */
+    @ApiModelProperty(value = "图分类id")
+    @Column(name = "category_id")
+    @JSONField(name = "CategoryId")
+    var categoryId: 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 = "note")
+    @JSONField(name = "Note")
+    var note: String? = null
+
+    /** 版本号 */
+    @ApiModelProperty(value = "版本号")
+    @Column(name = "version")
+    @JSONField(name = "Version")
+    var version: String? = null
+
+    @ApiModelProperty(value = "系统图展示所需数据")
+    @JSONField(name = "Elements")
+    var elements: ElementsPub? = null
+
+    /** 移至回收站时间 */
+    @ApiModelProperty(value = "移至回收站时间")
+    @Column(name = "del_time")
+    @JSONField(name = "DelTime")
+    var delTime: Date? = null
+
+    /** 移至回收站时间 */
+    @ApiModelProperty(value = "移至回收站时间 , false 正常,true 以至回收站")
+    @Column(name = "is_available")
+    @JSONField(name = "IsAvailable")
+    var isAvailable: Boolean? = false
+
+    /** 内部版本号 */
+    @ApiModelProperty(value = "内部版本号")
+    @Column(name = "tag_version")
+    @JSONField(name = "TagVersion")
+    var tagVersion: Int? = null
+
+    /** 内部版本号 */
+    @ApiModelProperty(value = "是否发布(true 发布、false 未发布)")
+    @Column(name = "is_pub")
+    @JSONField(name = "IsPub")
+    var isPub: Boolean = false
+
+    /** 图片Key */
+    @ApiModelProperty(value = "图片Key")
+    @Column(name = "pic")
+    @JSONField(name = "Pic")
+    var pic: String? = null
+
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = null
+
+    /** 页面尺寸 */
+    @ApiModelProperty(value = "页面尺寸")
+    @Column(name = "page_size")
+    @JSONField(name = "pageSize")
+    var pageSize: HashMap<String, Any?>? = null
+
+} // Class Graph

+ 16 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/MarkersPub.kt

@@ -0,0 +1,16 @@
+package com.persagy.server.labsl.models.entities.pub
+
+import com.persagy.server.labsl.models.entities.Markers
+import io.swagger.annotations.ApiModel
+import java.io.Serializable
+import javax.persistence.Table
+
+/**
+ * 文本注释,图上的图片说明
+ *
+ * @author wx
+ */
+@ApiModel(description = "文本注释,图上的图片说明")
+@Table(name = "lbsl.marker_pub")
+class MarkersPub : Markers(), Serializable
+

+ 129 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/NodePub.kt

@@ -0,0 +1,129 @@
+package com.persagy.server.labsl.models.entities.pub
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.server.labsl.models.entities.Pos
+import com.persagy.server.labsl.models.entities.Size
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 图例节点
+ *
+ * @author wx
+ */
+@ApiModel(description = "图例节点")
+@Table(name = "lbsl.node_pub")
+class NodePub : SBaseEntity(), Serializable {
+
+    /** 全局id */
+    @ApiModelProperty(value = "全局id" )
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 图例节点id */
+    @ApiModelProperty(value = "图例节点id",required = true )
+    @Id
+    @Column(name = "node_id")
+    @JSONField(name = "NodeId")
+    var nodeId: String? = null
+
+    /** 图例节点名称 */
+    @ApiModelProperty(value = "图例节点名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+    /** 图例类型 None/Line/Zone/Image:非图例/线条/区域类型/图标 */
+    @ApiModelProperty(value = "图例类型 None/Line/Zone/Image:非图例/线条/区域类型/图标")
+    @Column(name = "graph_element_type")
+    @JSONField(name = "GraphElementType")
+    var graphElementType: String? = null
+
+    /** 图元ID */
+    @ApiModelProperty(value = "图元ID")
+    @Column(name = "graph_element_id")
+    @JSONField(name = "GraphElementId")
+    var graphElementId: String? = null
+
+    /** 图例数量 */
+    @ApiModelProperty(value = "图例数量")
+    @Column(name = "num")
+    @JSONField(name = "Num")
+    var num: Int? = null
+
+    /** 节点类型(image / zone) */
+    @ApiModelProperty(value = "节点类型(image / zone)")
+    @Column(name = "type")
+    @JSONField(name = "Type")
+    var type: Int? = null
+
+    /** 位置信息 */
+    @ApiModelProperty(value = "位置信息")
+    @Column(name = "pos")
+    @JSONField(name = "Pos")
+    var pos: Pos? = null
+
+    /** 缩放 */
+    @ApiModelProperty(value = "缩放")
+    @Column(name = "scale")
+    @JSONField(name = "Scale")
+    var scale: Pos? = null
+
+    /** 旋转 */
+    @ApiModelProperty(value = "旋转")
+    @Column(name = "rolate")
+    @JSONField(name = "Rolate")
+    var rolate: Pos? = null
+
+    /** 大小 */
+    @ApiModelProperty(value = "大小")
+    @Column(name = "size")
+    @JSONField(name = "Size")
+    var size: Size? = null
+
+    /** 轮廓线 */
+    @ApiModelProperty(value = "轮廓线")
+    @Column(name = "outline")
+    @JSONField(name = "Outline")
+    var outline: ArrayList<ArrayList<Pos>>? = null
+
+    @ApiModelProperty(value = "应用自定义")
+    @Column(name = "properties")
+    @JSONField(name = "Properties")
+    var properties : HashMap<String,Any?>? = null
+
+    /** 图id */
+    @ApiModelProperty(value = "图id")
+    @Column(name = "graph_id")
+    @JSONField(name = "GraphId")
+    var graphId: String? = null
+
+    /** 锚点列表 */
+    @ApiModelProperty(value = "锚点列表")
+    @JSONField(name = "AnchorList")
+    var anchorList: ArrayList<AnchorPub>? = null
+
+    @ApiModelProperty(value = "图例节点与对象的关系")
+    @JSONField(name = "AttachObjectIds")
+    var attachObjectIds: ArrayList<AttachObjectIdsPub>? = null
+
+    /** 图状态(1一般,2待审核,3审核完成,0发布) */
+    @ApiModelProperty(value = "图状态(1一般,2待审核,3审核完成,0发布)")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: Int? = null
+
+    @ApiModelProperty(value = "线的绘图样式")
+    @Column(name = "style")
+    @JSONField(name = "Style")
+    var style : HashMap<String,Any?>? = null
+
+
+} // Class

+ 16 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/entities/pub/RelationPub.kt

@@ -0,0 +1,16 @@
+package com.persagy.server.labsl.models.entities.pub
+
+import com.persagy.server.labsl.models.entities.Relation
+import io.swagger.annotations.ApiModel
+import java.io.Serializable
+import javax.persistence.Table
+
+/**
+ * 管线对象
+ *
+ * @author wx
+ */
+@ApiModel(description = "管线对象")
+@Table(name = "lbsl.relation_pub")
+class RelationPub : Relation(), Serializable
+

+ 19 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/request/GraphCategoryRequest.kt

@@ -0,0 +1,19 @@
+package com.persagy.server.labsl.models.request
+
+import com.alibaba.fastjson.annotation.JSONField
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+
+/**
+ * 系统图类型
+ * @author  wx
+ * @date  2020/9/17 10:42
+ */
+class GraphCategoryRequest : Serializable {
+
+    /** 类型开关 true  获取所有 false 获取已有图形的类型 */
+    @ApiModelProperty(value = "类型开关 true  获取所有 false 获取已有图形的类型")
+    @JSONField(name = "Switch")
+    var switch: Boolean = true
+
+} // Class GraphCategoryRequest

+ 31 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/models/response/SCommonResponse.kt

@@ -0,0 +1,31 @@
+package com.persagy.server.labsl.models.response
+
+import com.persagy.service.models.enums.SResponseType
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 返回体
+ * @author  蔡云飞
+ * @date  2020/6/9 14:56
+ */
+open class SCommonResponse<ENTITY: Any>(result: SResponseType? = SResponseType.success, message: String? = null) {
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var result: SResponseType? = SResponseType.failure
+    /** 消息 */
+    @ApiModelProperty(value = "消息")
+    var message: String? = ""
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    var content: ENTITY? = null
+
+    /** 初始化 */
+    init {
+        this.result = result
+        this.message = message
+    } // init()
+
+
+}

+ 0 - 3
labsl/src/main/kotlin/com/persagy/server/labsl/services/AnchorService.kt

@@ -10,7 +10,4 @@ import com.persagy.service.SObjectService
  * @author wx
  * @author wx
  */
  */
 object AnchorService  : SObjectService<Anchor>(SMybatisDao(Anchor::class.java)) {
 object AnchorService  : SObjectService<Anchor>(SMybatisDao(Anchor::class.java)) {
-
-
-
 } // Object AnchorService
 } // Object AnchorService

+ 15 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/services/AttachObjectIdsServices.kt

@@ -0,0 +1,15 @@
+package com.persagy.server.labsl.services
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.labsl.models.entities.AttachObjectIds
+import com.persagy.service.SObjectService
+
+/**
+ * 图例节点与对象的关系服务
+ *
+ * @author  wx
+ * @date  2020/9/17 17:02
+ */
+object AttachObjectIdsServices : SObjectService<AttachObjectIds>(SMybatisDao(AttachObjectIds::class.java)){
+
+} // Object AttachObjectIdsServices

+ 36 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/services/CustomService.kt

@@ -0,0 +1,36 @@
+package com.persagy.server.labsl.services
+
+import com.persagy.server.labsl.models.entities.auxiliary.CategoryCode
+import com.persagy.server.labsl.services.mappers.CustomMapper
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+/**
+ * 自定义SQL 服务
+ * @author  wx
+ * @date  2020/9/17 12:09
+ */
+@Service
+class CustomService {
+
+    /** 实例化 mapper 对象 */
+    @Autowired
+    lateinit var customMapper: CustomMapper
+
+
+    /**
+     * 草稿箱 已有类型
+     */
+    fun draftsCategory(projectId: String): ArrayList<CategoryCode>?{
+        return customMapper.calcAffected(projectId)
+    }  // Fun draftsCategory()
+
+    /**
+     * 已发布 类型
+     */
+    fun pubCategory(projectId: String): ArrayList<CategoryCode>?{
+        return customMapper.pubCategory(projectId)
+    } // Fun pubCategory()
+
+
+} // Class CustomService

+ 172 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/services/GraphCategoryService.kt

@@ -0,0 +1,172 @@
+package com.persagy.server.labsl.services
+
+import com.persagy.base.extensions.toJson
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.labsl.models.entities.GraphCategory
+import com.persagy.server.labsl.models.request.GraphCategoryRequest
+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
+import org.slf4j.LoggerFactory
+
+/**
+ * 分类服务
+ *
+ * @author  wx
+ * @date  2020/9/15 11:38
+ */
+object GraphCategoryService : SObjectService<GraphCategory>(SMybatisDao(GraphCategory::class.java)) {
+
+    /** 日志 */
+    private val logger = LoggerFactory.getLogger(GraphCategoryService::class.java)
+
+    /** 自定义sql */
+    private val customMapper by lazy {
+        SSpringContextUtil.getBean(CustomService::class.java) as CustomService
+    }
+
+    /**
+     * 系统图分类查询
+     */
+    fun graphCategoryQuery(request: GraphCategoryRequest): SQueryResponse<GraphCategory> {
+        /** 项目id */
+        val projectId = SPageContext.getHeader("ProjectId")
+        val sQueryResponse = SQueryResponse<GraphCategory>()
+        return try {
+            if (request.switch) {
+                val graphCategoryList = select(SFilter.isNull("parentId")).exec()
+                for (graphCategory in graphCategoryList) {
+                    val treeClimate = treeClimate(graphCategory.id!!, true)
+                    if (treeClimate.size > 0) {
+                        graphCategory.categoryList = treeClimate
+                    }
+                }
+                sQueryResponse.content = graphCategoryList
+                sQueryResponse.total = graphCategoryList.size.toLong()
+                sQueryResponse.result = SResponseType.success
+                sQueryResponse
+            } else {
+
+                val calcAffectedList = customMapper.draftsCategory(projectId!!)
+                val pubCategoryList = customMapper.pubCategory(projectId)
+                logger.debug("未发布:${calcAffectedList?.toJson()}")
+                logger.debug("已发布:${pubCategoryList?.toJson()}")
+                val set = HashSet<String>()
+                if (!pubCategoryList.isNullOrEmpty() || !calcAffectedList.isNullOrEmpty()) {
+                    if (!pubCategoryList.isNullOrEmpty()) {
+                        for (pubCategory in pubCategoryList) {
+                            set.add(pubCategory.categoryId!!)
+                        }
+                    }
+                    if (!calcAffectedList.isNullOrEmpty()) {
+                        for (calcAffected in calcAffectedList) {
+                            set.add(calcAffected.categoryId!!)
+                        }
+                    }
+                    val graphCategoryList = select(SFilter.isNull("parentId")).exec()
+                    for (graphCategory in graphCategoryList) {
+                        val treeClimate = treeClimate(graphCategory.id!!, true)
+                        if (treeClimate.size > 0) {
+                            graphCategory.categoryList = treeClimate
+                        }
+                    }
+
+                    for (id in set) {
+                        for (graphCategory in graphCategoryList) {
+                            if (graphCategory.id == id) {
+                                graphCategory.sign = true
+                            }
+                            if (!graphCategory.categoryList.isNullOrEmpty()) {
+                                val categoryList = graphCategory.categoryList!!
+                                for (category in categoryList) {
+                                    if (category.id == id) {
+                                        category.sign = true
+                                        graphCategory.sign = true
+                                    }
+                                    if (!category.categoryList.isNullOrEmpty()) {
+                                        val categoryList1 = category.categoryList!!
+                                        for (category2 in categoryList1) {
+                                            if (category2.id == id) {
+                                                category2.sign = true
+                                                category.sign = true
+                                                graphCategory.sign = true
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                        val iterator = graphCategoryList.iterator()
+                        while (iterator.hasNext()){
+                            val next = iterator.next()
+                            if (next.sign){
+                                if (!next.categoryList.isNullOrEmpty()){
+                                    val iterator1 = next.categoryList!!.iterator()
+                                    while (iterator1.hasNext()){
+                                        val next1 = iterator1.next()
+                                        if (next1.sign){
+                                            if (!next1.categoryList.isNullOrEmpty()){
+                                                val iterator2 = next1.categoryList!!.iterator()
+                                                while (iterator2.hasNext()){
+                                                    val next2 = iterator2.next()
+                                                    if (!next2.sign){
+                                                        iterator2.remove()
+                                                    }
+                                                }
+                                            }
+                                        }else{
+                                            iterator1.remove()
+                                        }
+                                    }
+                                }
+                            }else{
+                                iterator.remove()
+                            }
+                        }
+
+                    sQueryResponse.content = graphCategoryList
+                    sQueryResponse.total = graphCategoryList.size.toLong()
+                    sQueryResponse.result = SResponseType.success
+                    sQueryResponse
+                } else {
+                    sQueryResponse.content = ArrayList()
+                }
+                sQueryResponse.result = SResponseType.success
+                sQueryResponse
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            sQueryResponse.result = SResponseType.failure
+            sQueryResponse
+        }
+
+    } // Fun graphCategoryQuery()
+
+    /**
+     * 气候区 递归查询
+     *
+     * @param   parent  外键关系值
+     * @param   hasChildren 是否进行递归查询
+     */
+    fun treeClimate(parent: String, hasChildren: Boolean = true): ArrayList<GraphCategory> {
+        val content = select("parentId" to parent).exec()
+        if (hasChildren) {
+            for (item in content) {
+                try {
+                    val children = treeClimate(item.id!!)
+                    if (children.size > 0) {
+                        item.categoryList = children
+                    }
+                } catch (e: Exception) {
+                    // DO NOTHING
+                }
+            }
+        }
+        return content
+    } // Function treeClimate()
+
+} // Object GraphCategoryService

+ 697 - 25
labsl/src/main/kotlin/com/persagy/server/labsl/services/GraphService.kt

@@ -1,12 +1,21 @@
 package com.persagy.server.labsl.services
 package com.persagy.server.labsl.services
 
 
 import cn.sagacloud.server.datacenter.utils.IdUtils
 import cn.sagacloud.server.datacenter.utils.IdUtils
+import com.persagy.base.extensions.toJson
+import com.persagy.database.SFilter
 import com.persagy.mybatis.SMybatisDao
 import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.labsl.models.entities.Elements
 import com.persagy.server.labsl.models.entities.Graph
 import com.persagy.server.labsl.models.entities.Graph
+import com.persagy.server.labsl.models.entities.pub.*
+import com.persagy.server.labsl.models.response.SCommonResponse
+import com.persagy.server.labsl.services.pub.GraphPubService
 import com.persagy.service.SObjectService
 import com.persagy.service.SObjectService
+import com.persagy.service.SPageContext
 import com.persagy.service.models.enums.SResponseType
 import com.persagy.service.models.enums.SResponseType
 import com.persagy.service.models.responses.SBaseResponse
 import com.persagy.service.models.responses.SBaseResponse
 import com.persagy.service.models.responses.SCreateResponse
 import com.persagy.service.models.responses.SCreateResponse
+import org.slf4j.LoggerFactory
+import java.text.SimpleDateFormat
 import java.util.*
 import java.util.*
 import kotlin.collections.ArrayList
 import kotlin.collections.ArrayList
 
 
@@ -17,12 +26,41 @@ import kotlin.collections.ArrayList
  */
  */
 object GraphService : SObjectService<Graph>(SMybatisDao(Graph::class.java)) {
 object GraphService : SObjectService<Graph>(SMybatisDao(Graph::class.java)) {
 
 
+    /** 日志 */
+    private val logger = LoggerFactory.getLogger(GraphService::class.java)
+
+    /** 发布的图例节点服务 */
+    private val nodePubService = SObjectService(SMybatisDao(NodePub::class.java))
+    /** 注释、说明 */
+    private val markersPubService = SObjectService(SMybatisDao(MarkersPub::class.java))
+    /** 管线对象 */
+    private val relationPubService = SObjectService(SMybatisDao(RelationPub::class.java))
+    /** 锚点 */
+    private val anchorPubService = SObjectService(SMybatisDao(AnchorPub::class.java))
+    /** 图例节点与对象的关系 */
+    private val attachObjectIdsPubService = SObjectService(SMybatisDao(AttachObjectIdsPub::class.java))
+
+    val a = "http://adm.sagacloud.cn/image-service/common/image_upload?systemId=dataPlatform&secret=9e0891a7a8c8e885&overwrite=true&key=1600327559023.png"
+
     /**
     /**
      * 创建之前回调
      * 创建之前回调
      */
      */
     override fun onCreateBefore(entity: Graph): Boolean {
     override fun onCreateBefore(entity: Graph): Boolean {
+        /** 项目id */
+        val projectId = SPageContext.getHeader("projectId")
         // id 赋值
         // id 赋值
-        entity.id = IdUtils.uuidCreate()
+        if (entity.id.isNullOrEmpty()){
+            entity.id = IdUtils.uuidCreate()
+        }
+        if (entity.graphId.isNullOrEmpty()){
+            entity.graphId = IdUtils.uuidCreate()
+        }
+        if (entity.version.isNullOrEmpty())
+            entity.version = "2.0.1"
+
+        if (entity.projectId.isNullOrEmpty()){
+            entity.projectId = projectId
+        }
         return super.onCreateBefore(entity)
         return super.onCreateBefore(entity)
     } // Fun onCreateBefore()
     } // Fun onCreateBefore()
 
 
@@ -31,92 +69,412 @@ object GraphService : SObjectService<Graph>(SMybatisDao(Graph::class.java)) {
      * @param   graph   图对象
      * @param   graph   图对象
      */
      */
     fun save(graph: Graph): SCreateResponse<Graph> {
     fun save(graph: Graph): SCreateResponse<Graph> {
+        logger.debug("保存图形:${graph.toJson()}")
+        val sCreateResponse = SCreateResponse<Graph>()
+        /** 项目id */
+        val projectId = SPageContext.getHeader("projectId")
         //开启事务
         //开启事务
         openTransaction()
         openTransaction()
+        // 未发布
         if (graph.id.isNullOrEmpty()) {
         if (graph.id.isNullOrEmpty()) {
             // id赋值
             // id赋值
             graph.id = UUID.randomUUID().toString().replace("-", "")
             graph.id = UUID.randomUUID().toString().replace("-", "")
         }
         }
+        if (graph.graphId.isNullOrEmpty()){
+            graph.graphId = UUID.randomUUID().toString().replace("-", "")
+        }
+        if (graph.projectId.isNullOrEmpty()){
+            graph.projectId = projectId
+        }
+
+        /** 清除以前的版本 */
+        delOldData(graph)
+        /** 版本号 */
+        if (graph.version.isNullOrEmpty()) {
+            graph.version = "2.0.1"
+        } else {
+            val listVersion = graph.version!!.split(".")
+            val num = listVersion[2].toInt() + 1
+            graph.version = listVersion[0] + "." + listVersion[1] + "." + num
+        }
         val insertGraph = insert(graph)
         val insertGraph = insert(graph)
-        if (!insertGraph){
+        if (!insertGraph) {
             // 事务回滚
             // 事务回滚
             backTransaction()
             backTransaction()
+            sCreateResponse.result = SResponseType.failure
+            return  sCreateResponse
         }
         }
         if (graph.elements != null) {
         if (graph.elements != null) {
             val nodesList = graph.elements!!.nodes
             val nodesList = graph.elements!!.nodes
             if (!nodesList.isNullOrEmpty()) {
             if (!nodesList.isNullOrEmpty()) {
                 for (nodes in nodesList) {
                 for (nodes in nodesList) {
-                    nodes.graphId = graph.id
-                    if (nodes.id.isNullOrEmpty()) {
+                    nodes.graphId = graph.graphId
+                    nodes.id = graph.id
+                    if (nodes.nodeId.isNullOrEmpty()) {
                         // id赋值
                         // id赋值
-                        nodes.id = UUID.randomUUID().toString().replace("-", "")
+                        nodes.nodeId = UUID.randomUUID().toString().replace("-", "")
                     }
                     }
                     val insertNode = NodeService.insert(nodes)
                     val insertNode = NodeService.insert(nodes)
                     if (!insertNode) {
                     if (!insertNode) {
                         // 事务回滚
                         // 事务回滚
                         backTransaction()
                         backTransaction()
-                        break
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
                     }
                     }
                     val anchorList = nodes.anchorList
                     val anchorList = nodes.anchorList
                     if (!anchorList.isNullOrEmpty()) {
                     if (!anchorList.isNullOrEmpty()) {
                         for (anchor in anchorList) {
                         for (anchor in anchorList) {
-                            anchor.graphId = graph.id
+                            anchor.graphId = graph.graphId
+                            anchor.id = graph.id
                             anchor.nodeId = nodes.id
                             anchor.nodeId = nodes.id
-                            if (anchor.id.isNullOrEmpty()) {
+                            if (anchor.anchorId.isNullOrEmpty()) {
                                 // id赋值
                                 // id赋值
-                                anchor.id = UUID.randomUUID().toString().replace("-", "")
+                                anchor.anchorId = UUID.randomUUID().toString().replace("-", "")
                             }
                             }
                             val insertAnchor = AnchorService.insert(anchor)
                             val insertAnchor = AnchorService.insert(anchor)
                             if (insertAnchor) {
                             if (insertAnchor) {
                                 // 事务回滚
                                 // 事务回滚
                                 backTransaction()
                                 backTransaction()
-                                break
+                                sCreateResponse.result = SResponseType.failure
+                                return  sCreateResponse
                             }
                             }
                         }
                         }
                     }
                     }
+                    val attachObjectIdsList = nodes.attachObjectIds
+                    if (!attachObjectIdsList.isNullOrEmpty()){
+                        for (attachObjectIds in attachObjectIdsList){
+                            attachObjectIds.graphId = graph.graphId
+                            attachObjectIds.id = graph.id
+                            AttachObjectIdsServices.insert(attachObjectIds)
+                        }
+                    }
                 }
                 }
             }
             }
             val markersList = graph.elements!!.markers
             val markersList = graph.elements!!.markers
             if (!markersList.isNullOrEmpty()) {
             if (!markersList.isNullOrEmpty()) {
                 for (markers in markersList) {
                 for (markers in markersList) {
-                    markers.graphId = graph.id
-                    if (markers.id.isNullOrEmpty()) {
+                    markers.graphId = graph.graphId
+                    markers.id = graph.id
+                    markers.state = 1
+                    if (markers.markerId.isNullOrEmpty()) {
                         // id赋值
                         // id赋值
-                        markers.id = UUID.randomUUID().toString().replace("-", "")
+                        markers.markerId = UUID.randomUUID().toString().replace("-", "")
                     }
                     }
                     val insertMarkers = MarkersService.insert(markers)
                     val insertMarkers = MarkersService.insert(markers)
                     if (!insertMarkers) {
                     if (!insertMarkers) {
                         // 事务回滚
                         // 事务回滚
                         backTransaction()
                         backTransaction()
-                        break
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
                     }
                     }
                 }
                 }
             }
             }
             val relationsList = graph.elements!!.relations
             val relationsList = graph.elements!!.relations
             if (!relationsList.isNullOrEmpty()) {
             if (!relationsList.isNullOrEmpty()) {
                 for (relations in relationsList) {
                 for (relations in relationsList) {
-                    relations.graphId = graph.id
-                    if (relations.id.isNullOrEmpty()) {
+                    relations.graphId = graph.graphId
+                    relations.state = 1
+                    relations.relationId = graph.id
+                    if (relations.relationId.isNullOrEmpty()) {
                         // id赋值
                         // id赋值
-                        relations.id = UUID.randomUUID().toString().replace("-", "")
+                        relations.relationId = UUID.randomUUID().toString().replace("-", "")
                     }
                     }
                     val insertRelation = RelationService.insert(relations)
                     val insertRelation = RelationService.insert(relations)
                     if (!insertRelation) {
                     if (!insertRelation) {
                         // 事务回滚
                         // 事务回滚
                         backTransaction()
                         backTransaction()
-                        break
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
                     }
                     }
                 }
                 }
             }
             }
         }
         }
         // 提交事务
         // 提交事务
         commitTransaction()
         commitTransaction()
-        val sCreateResponse = SCreateResponse<Graph>(SResponseType.success)
+        sCreateResponse.result = SResponseType.success
         sCreateResponse.entityList = arrayListOf(graph)
         sCreateResponse.entityList = arrayListOf(graph)
         return sCreateResponse
         return sCreateResponse
     } // Fun save()
     } // Fun save()
 
 
     /**
     /**
+     *  回收站和草稿箱在一个表中,导致同一个图会有多个在回收站中需要配备多主键
+     * 发布图形
+     */
+    fun pubDrawings(graphPub: GraphPub): SCreateResponse<GraphPub> {
+        val sCreateResponse = SCreateResponse<GraphPub>()
+        /** 项目id */
+        val projectId = SPageContext.getHeader("projectId")
+        val graph1 = Graph()
+        graph1.projectId = projectId
+        graph1.id = graphPub.id
+        graph1.graphId = graphPub.graphId
+        /** 查询草稿箱 */
+        val squeryBuilder = GraphPubService.select(
+            SFilter.eq("projectId", projectId!!),
+            SFilter.eq("id", graphPub.id!!),
+            SFilter.eq("graphId", graphPub.graphId!!),
+            SFilter.eq("state", 1)
+        )
+        val graph = squeryBuilder.table("lbsl.graph_pub").entity()
+        if (graph!=null){
+            //开启事务
+            openTransaction()
+            /** 清除已发布的老数据 */
+            delOldDataPub(graph1)
+            /** 版本号 */
+            val listVersion = graph.version!!.split(".")
+            val num = listVersion[1].toInt() + 1
+            graph.version = listVersion[0] + "." + num + "." + 0
+            graph.state = 0
+            graph.isAvailable = true
+            graph.isPub = true
+            val insert = GraphPubService.insert(graph)
+            if (insert) {
+                // 回滚
+                backTransaction()
+                sCreateResponse.result = SResponseType.failure
+                return  sCreateResponse
+            }
+            /** 子节点 */
+            val nodebuilder = nodePubService.select(
+                SFilter.eq("projectId", projectId!!),
+                SFilter.eq("graphId", graph.graphId!!),
+                SFilter.eq("id", graphPub.id!!),
+                SFilter.eq("state", 1)
+            )
+            val nodePubList = nodebuilder.table("lbsl.node_pub").exec()
+            if (nodePubList.size>0){
+                for (nodePub in nodePubList){
+                    nodePub.id = graph.id
+                    nodePub.graphId = graph.graphId
+                    nodePub.state = 0
+                    val insert1 = nodePubService.insert(nodePub)
+                    if (!insert1){
+                        // 回滚
+                        backTransaction()
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
+                    }
+                }
+            }
+            val markersbuilder = markersPubService.select(
+                SFilter.eq("projectId", projectId!!),
+                SFilter.eq("graphId", graph.graphId!!),
+                SFilter.eq("id", graphPub.id!!),
+                SFilter.eq("state", 1)
+            )
+            val markersPubList = markersbuilder.table("lbsl.marker").exec()
+            if (markersPubList.size>0){
+                for (markersPub in markersPubList){
+                    markersPub.id = graph.id
+                    markersPub.graphId = graph.graphId
+                    markersPub.state = 0
+                    val insert1 = markersPubService.insert(markersPub)
+                    if (insert1){
+                        // 回滚
+                        backTransaction()
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
+                    }
+                }
+            }
+            val relationBuilder = relationPubService.select(
+                SFilter.eq("projectId", projectId!!),
+                SFilter.eq("graphId", graph.graphId!!),
+                SFilter.eq("id", graphPub.id!!),
+                SFilter.eq("state", 1)
+            )
+            val relationList = relationBuilder.table("lbsl.relation").exec()
+            if (relationList.size>0){
+                for (relation in relationList){
+                    relation.id = graph.id
+                    relation.graphId = graph.graphId
+                    relation.state = 0
+                    val insert1 = relationPubService.insert(relation)
+                    if (!insert1){
+                        // 回滚
+                        backTransaction()
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
+                    }
+                }
+            }
+            val anchorBuilder = anchorPubService.select(
+                SFilter.eq("projectId", projectId!!),
+                SFilter.eq("graphId", graph.graphId!!),
+                SFilter.eq("id", graphPub.id!!),
+                SFilter.eq("state", 1)
+            )
+            val anchorList = anchorBuilder.table("lbsl.anchor").exec()
+            if (anchorList.size>0){
+                for (anchor in anchorList){
+                    anchor.id = graph.id
+                    anchor.graphId = graph.graphId
+                    anchor.state = 0
+                    val insert1 = anchorPubService.insert(anchor)
+                    if (!insert1){
+                        // 回滚
+                        backTransaction()
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
+                    }
+                }
+            }
+
+            val attachObjectIdsBuilder = attachObjectIdsPubService.select(
+                SFilter.eq("projectId", projectId!!),
+                SFilter.eq("graphId", graph.graphId!!),
+                SFilter.eq("id", graphPub.id!!),
+                SFilter.eq("state", 1)
+            )
+            val attachObjectIdsList = attachObjectIdsBuilder.table("lbsl.attach_object_ids").exec()
+            if (attachObjectIdsList.size>0){
+                for (attachObjectIds in attachObjectIdsList){
+                    attachObjectIds.id = graph.id
+                    attachObjectIds.graphId = graph.graphId
+                    attachObjectIds.state = 0
+                    val insert1 = attachObjectIdsPubService.insert(attachObjectIds)
+                    if (!insert1){
+                        // 回滚
+                        backTransaction()
+                        sCreateResponse.result = SResponseType.failure
+                        return  sCreateResponse
+                    }
+                }
+            }
+
+            /** 清除草稿箱图 */
+            delOldData(graph1)
+            // 提交事务
+            commitTransaction()
+            sCreateResponse.entityList = arrayListOf(graph)
+            sCreateResponse.result = SResponseType.success
+        }else{
+            sCreateResponse.result = SResponseType.failure
+            sCreateResponse.message = "草稿箱中没有待发布图形"
+        }
+        return sCreateResponse
+    } // Fun pubDrawings()
+
+    /**
+     * 清除草稿箱以前数据
+     *
+     * @param   graph   对象
+     */
+    fun delOldData(graph: Graph) {
+        /** 清除以前的版本 */
+        val entity = select(
+            SFilter.eq("projectId", graph.projectId!!),
+            SFilter.eq("id", graph.id!!),
+            SFilter.eq("graphId", graph.graphId!!)
+        ).entity()
+
+        if (entity != null) {
+            /** 清除之前的草稿记录 */
+            val delete = delete(
+                SFilter.eq("projectId", graph.projectId!!),
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            )
+            if (delete){
+                /** 清除图下子集 */
+                NodeService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+                MarkersService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+                RelationService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+                AnchorService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+                AttachObjectIdsServices.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+            }
+        }
+    } // Fun delOldData()
+
+    /**
+     * 草稿箱 - 清除草稿箱正在使用的草稿
+     */
+    fun delOldDataTwo(graph: Graph) {
+        /** 清除以前的版本 */
+        val entity = select(
+            SFilter.eq("projectId", graph.projectId!!),
+            SFilter.eq("state", 1),
+            SFilter.eq("graphId", graph.graphId!!)
+        ).entity()
+
+        if (entity != null) {
+            /** 清除之前的草稿记录 */
+            val delete = delete(
+                SFilter.eq("projectId", graph.projectId!!),
+                SFilter.eq("state", 1),
+                SFilter.eq("graphId", graph.graphId!!)
+            )
+            if (delete){
+                /** 清除图下子集 */
+                NodeService.delete(
+                    SFilter.eq("state", 1),
+                    SFilter.eq("graphId", graph.graphId!!))
+                MarkersService.delete(
+                    SFilter.eq("state", 1),
+                    SFilter.eq("graphId", graph.graphId!!))
+                RelationService.delete(
+                    SFilter.eq("state", 1),
+                    SFilter.eq("graphId", graph.graphId!!))
+                AnchorService.delete(
+                    SFilter.eq("state", 1),
+                    SFilter.eq("graphId", graph.graphId!!))
+                AttachObjectIdsServices.delete(
+                    SFilter.eq("state", 1),
+                    SFilter.eq("graphId", graph.graphId!!))
+            }
+        }
+    } // Fun delOldData()
+
+    /**
+     * 清除已发布的老数据
+     *
+     * @param   graph   对象
+     */
+    fun delOldDataPub(graph: Graph) {
+        /** 清除以前的版本 */
+        val entity = GraphPubService.select(
+            SFilter.eq("projectId", graph.projectId!!),
+            SFilter.eq("id", graph.id!!),
+            SFilter.eq("graphId", graph.graphId!!)
+        ).entity()
+
+        if (entity != null) {
+            /** 清除之前的草稿记录 */
+            val delete = GraphPubService.delete(
+                SFilter.eq("projectId", graph.projectId!!),
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            )
+            if (delete){
+                /** 清除图下子集 */
+                nodePubService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+                markersPubService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+                relationPubService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+                anchorPubService.delete(
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!))
+            }
+        }
+    } // Fun delOldDataPub()
+
+    /**
      * 开启事务
      * 开启事务
      */
      */
     private fun openTransaction() {
     private fun openTransaction() {
@@ -133,29 +491,343 @@ object GraphService : SObjectService<Graph>(SMybatisDao(Graph::class.java)) {
     /**
     /**
      * 提交事务
      * 提交事务
      */
      */
-    private fun commitTransaction(){
+    private fun commitTransaction() {
 
 
     } // Fun commitTransaction()
     } // Fun commitTransaction()
 
 
 
 
     /**
     /**
-     * 图、移至回收站 或移出回收站
+     * 草稿图、移至回收站 或移出回收站
      */
      */
     fun recycle(idList: ArrayList<Graph>): SBaseResponse {
     fun recycle(idList: ArrayList<Graph>): SBaseResponse {
         val sBaseResponse = SBaseResponse()
         val sBaseResponse = SBaseResponse()
+        if (!idList.isNullOrEmpty()) {
+            for (graph in idList) {
+                graph.delTime = time()
+                graph.state = 4
+                val list = ArrayList<String>()
+                list.add("DelTime")
+                list.add("State")
+                update(graph, list)
+            }
+            sBaseResponse.result = SResponseType.success
+        } else {
+            sBaseResponse.result = SResponseType.failure
+        }
+        return sBaseResponse
+    } // Fun recycle()
+
+    /**
+     * 已发布图形移至回收站
+     */
+    fun recyclePub(idList: ArrayList<Graph>): SBaseResponse{
+        val sBaseResponse = SBaseResponse()
+        /** 项目id */
+        val projectId = SPageContext.getHeader("projectId")
+
         if (!idList.isNullOrEmpty()){
         if (!idList.isNullOrEmpty()){
             for (graph in idList){
             for (graph in idList){
-                val list = ArrayList<String>()
-                list.add("IsPub")
-                update(graph,list)
+                val graphBuilder = GraphService.select(
+                    SFilter.eq("projectId", projectId!!),
+                    SFilter.eq("id", graph.id!!),
+                    SFilter.eq("graphId", graph.graphId!!)
+                )
+                val graphPub = graphBuilder.table("lbsl.graph_pub").entity()
+                if (graphPub!=null){
+                    graphPub.id = IdUtils.uuidCreate()
+                    graphPub.state = 4
+                    val insert = GraphService.insert(graphPub)
+                    if (!insert){
+
+                    }
+                    val nodeBuilder = NodeService.select(
+                        SFilter.eq("id", graph.id!!),
+                        SFilter.eq("graphId", graph.graphId!!)
+                    )
+                    val nodeList = nodeBuilder.table("lbsl.node_pub").exec()
+                    if (nodeList.size>0){
+                        for (node in nodeList){
+                            node.id = graphPub.id
+                            node.state = 4
+                            NodeService.insert(node)
+                        }
+                        val anchorBuilder = AnchorService.select(
+                            SFilter.eq("id", graph.id!!),
+                            SFilter.eq("graphId", graph.graphId!!)
+                        )
+                        val anchorList = anchorBuilder.table("lbsl.anchor_pub").exec()
+                        if (anchorList.size>0){
+                            for (anchor in anchorList){
+                                anchor.id = graphPub.id
+                                anchor.state = 4
+                                AnchorService.insert(anchor)
+                            }
+                        }
+                        val attachObjectIdsBuilder = AttachObjectIdsServices.select(
+                            SFilter.eq("id", graph.id!!),
+                            SFilter.eq("graphId", graph.graphId!!)
+                        )
+                        val attachObjectIdsList = attachObjectIdsBuilder.table("lbsl.attach_object_ids_pub").exec()
+                        if (attachObjectIdsList.size>0){
+                            for (attachObjectIds in attachObjectIdsList){
+                                attachObjectIds.id = graphPub.id
+                                attachObjectIds.state = 4
+                                AttachObjectIdsServices.insert(attachObjectIds)
+                            }
+                        }
+                    }
+
+                    val markersBuilder = MarkersService.select(
+                        SFilter.eq("id", graph.id!!),
+                        SFilter.eq("graphId", graph.graphId!!)
+                    )
+                    val markersList = markersBuilder.table("lbsl.marker_pub").exec()
+                    if (markersList.size>0){
+                        for (markers in markersList){
+                            markers.id = graphPub.id
+                            markers.state = 4
+                            MarkersService.insert(markers)
+                        }
+                    }
+                    val relationBuilder = RelationService.select(
+                        SFilter.eq("id", graph.id!!),
+                        SFilter.eq("graphId", graph.graphId!!)
+                    )
+                    val relationList = relationBuilder.table("lbsl.relation_pub").exec()
+                    if (relationList.size>0){
+                        for (relation in relationList ){
+                            relation.id = graphPub.id
+                            relation.state = 4
+                            RelationService.insert(relation)
+                        }
+                    }
+                    delOldDataPub(graphPub)
+                }
+
             }
             }
             sBaseResponse.result = SResponseType.success
             sBaseResponse.result = SResponseType.success
         }else{
         }else{
             sBaseResponse.result = SResponseType.failure
             sBaseResponse.result = SResponseType.failure
         }
         }
         return sBaseResponse
         return sBaseResponse
-    } // Fun recycle()
+    } // Fun recyclePub()
+
+    /**
+     * 草稿箱图形数据读取所有节点
+     */
+    fun readDrafts(graphs: Graph): SCommonResponse<Graph> {
+        val sQueryResponse = SCommonResponse<Graph>()
+        /** 项目id */
+        val projectId = SPageContext.getHeader("projectId")
+        val graph = select(
+            SFilter.eq("projectId", projectId!!),
+            SFilter.eq("id", graphs.id!!),
+            SFilter.eq("graphId", graphs.graphId!!)
+        ).entity()
+        if (graph!=null){
+
+            val nodeList = NodeService.select(
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            ).exec()
+            val elements = Elements()
+            if (nodeList.size>0){
+                for (node in nodeList){
+                    try {
+                        val attachObjectIdsList = AttachObjectIdsServices.select(
+                            SFilter.eq("id", graph.id!!),
+                            SFilter.eq("graphId", graph.graphId!!),
+                            SFilter.eq("nodeId", node.nodeId!!)
+                        ).exec()
+                        if (attachObjectIdsList.size>0){
+                            node.attachObjectIds = attachObjectIdsList
+                        }
+                        val anchorList = AnchorService.select(
+                            SFilter.eq("id", graph.id!!),
+                            SFilter.eq("graphId", graph.graphId!!),
+                            SFilter.eq("nodeId", node.nodeId!!)
+                        ).exec()
+                        if (anchorList.size>0){
+                            node.anchorList = anchorList
+                        }
+                    } catch (e: Exception) {
+                        e.printStackTrace()
+                    }
+                }
+                elements.nodes = nodeList
+            }
+            val markersList = MarkersService.select(
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            ).exec()
+            val relationList = RelationService.select(
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            ).exec()
+            if (relationList.size>0){
+                elements.relations = relationList
+            }
+            if (markersList.size>0){
+                elements.markers = markersList
+            }
+            graph.elements = elements
+            sQueryResponse.result = SResponseType.failure
+            sQueryResponse.content = graph
+        }else{
+            sQueryResponse.result = SResponseType.failure
+        }
+        return sQueryResponse
+    } // Fun readDrafts()
+
+    /**
+     * 已发布图形数据读取所有节点
+     */
+    fun readPub(graphPub: GraphPub): SCommonResponse<GraphPub>{
+        val sQueryResponse = SCommonResponse<GraphPub>()
+        /** 项目id */
+        val projectId = SPageContext.getHeader("projectId")
+        val graph = GraphPubService.select(
+            SFilter.eq("projectId", projectId!!),
+            SFilter.eq("id", graphPub.id!!),
+            SFilter.eq("graphId", graphPub.graphId!!)
+        ).entity()
+        if (graph!=null){
+
+            val nodeList = nodePubService.select(
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            ).exec()
+            val elements = ElementsPub()
+            if (nodeList.size>0){
+                for (node in nodeList){
+                    try {
+                        val attachObjectIdsList = attachObjectIdsPubService.select(
+                            SFilter.eq("id", graph.id!!),
+                            SFilter.eq("graphId", graph.graphId!!),
+                            SFilter.eq("nodeId", node.nodeId!!)
+                        ).exec()
+                        if (attachObjectIdsList.size>0){
+                            node.attachObjectIds = attachObjectIdsList
+                        }
+                        val anchorList = anchorPubService.select(
+                            SFilter.eq("id", graph.id!!),
+                            SFilter.eq("graphId", graph.graphId!!),
+                            SFilter.eq("nodeId", node.nodeId!!)
+                        ).exec()
+                        if (anchorList.size>0){
+                            node.anchorList = anchorList
+                        }
+                    } catch (e: Exception) {
+                        e.printStackTrace()
+                    }
+                }
+                elements.nodes = nodeList
+            }
+            val markersList = markersPubService.select(
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            ).exec()
+            val relationList = relationPubService.select(
+                SFilter.eq("id", graph.id!!),
+                SFilter.eq("graphId", graph.graphId!!)
+            ).exec()
+            if (relationList.size>0){
+                elements.relations = relationList
+            }
+            if (markersList.size>0){
+                elements.markers = markersList
+            }
+            graph.elements = elements
+            sQueryResponse.result = SResponseType.failure
+            sQueryResponse.content = graph
+        }else{
+            sQueryResponse.result = SResponseType.failure
+        }
+        return sQueryResponse
+    } // Fun readPub()
+
+    /**
+     * 回收站-恢复
+     */
+    fun recovery(graphs: Graph): SBaseResponse{
+
+        /** 项目id */
+        val projectId = SPageContext.getHeader("projectId")
+        graphs.projectId = projectId
+        val graph = select(
+            SFilter.eq("projectId", projectId!!),
+            SFilter.eq("id", graphs.id!!),
+            SFilter.eq("graphId", graphs.graphId!!)
+        ).entity()
+        if (graph!=null){
+            val markersList = MarkersService.select(
+                SFilter.eq("id", graphs.id!!),
+                SFilter.eq("graphId", graphs.graphId!!)
+            ).exec()
+            val nodeList = NodeService.select(
+                SFilter.eq("id", graphs.id!!),
+                SFilter.eq("graphId", graphs.graphId!!)
+            ).exec()
+            val anchorList = AnchorService.select(
+                SFilter.eq("id", graphs.id!!),
+                SFilter.eq("graphId", graphs.graphId!!)
+            ).exec()
+            val attachObjectIdsList = AttachObjectIdsServices.select(
+                SFilter.eq("id", graphs.id!!),
+                SFilter.eq("graphId", graphs.graphId!!)
+            ).exec()
+            val relationList = RelationService.select(
+                SFilter.eq("id", graphs.id!!),
+                SFilter.eq("graphId", graphs.graphId!!)
+            ).exec()
+            /** 清除草稿箱数据 */
+            delOldDataTwo(graphs)
+
+            val listState = ArrayList<String>()
+            listState.add("State")
+            graph.state = 1
+            update(graph,listState)
+            if (!markersList.isNullOrEmpty()){
+                for (markers in markersList){
+                    markers.state = 1
+                    MarkersService.update(markers,listState)
+                }
+            }
+            if (!nodeList.isNullOrEmpty()){
+                for (node in nodeList){
+                    node.state = 1
+                    NodeService.update(node,listState)
+                }
+            }
+            if (!anchorList.isNullOrEmpty()){
+                for (anchor in anchorList){
+                    anchor.state = 1
+                    AnchorService.update(anchor,listState)
+                }
+            }
+            if (!attachObjectIdsList.isNullOrEmpty()){
+                for (attachObjectIds in attachObjectIdsList){
+                    attachObjectIds.state = 1
+                    AttachObjectIdsServices.update(attachObjectIds,listState)
+                }
+            }
+            if (!relationList.isNullOrEmpty()){
+                for (relation in relationList){
+                    relation.state = 1
+                    RelationService.update(relation,listState)
+                }
+            }
+        }
+        return SBaseResponse(SResponseType.success)
+    } // Fun recovery()
+
 
 
+    fun time():Date {
+        val df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式
+        println(df.format(Date())) // new Date()为获取当前系统时间
+        val format = df.format(Date())
 
 
+        return df.parse(format)
+    }
 
 
 } // Object GraphService
 } // Object GraphService

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

@@ -0,0 +1,25 @@
+package com.persagy.server.labsl.services.mappers
+
+import com.persagy.server.labsl.models.entities.auxiliary.CategoryCode
+import org.apache.ibatis.annotations.Mapper
+import org.apache.ibatis.annotations.Param
+import org.apache.ibatis.annotations.Select
+import org.springframework.stereotype.Repository
+
+/**
+ * 自定义SQL
+ * @author  wx
+ * @date  2020/9/17 12:01
+ */
+@Repository
+@Mapper
+interface CustomMapper {
+    /** 未发布 */
+    @Select("SELECT category_id as categoryId FROM lbsl.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")
+    fun pubCategory(@Param("projectId") projectId: String) : ArrayList<CategoryCode>?
+
+} // Interface CustomMapper

+ 12 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/services/pub/AnchorPubService.kt

@@ -0,0 +1,12 @@
+package com.persagy.server.labsl.services.pub
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.labsl.models.entities.pub.AnchorPub
+import com.persagy.service.SObjectService
+
+/**
+ * 锚点服务
+ *
+ * @author wx
+ */
+object AnchorPubService  : SObjectService<AnchorPub>(SMybatisDao(AnchorPub::class.java))

+ 14 - 0
labsl/src/main/kotlin/com/persagy/server/labsl/services/pub/GraphPubService.kt

@@ -0,0 +1,14 @@
+package com.persagy.server.labsl.services.pub
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.labsl.models.entities.pub.GraphPub
+import com.persagy.service.SObjectService
+
+/**
+ * 已发布图
+ *
+ * @author  wx
+ * @date  2020/9/14 18:15
+ */
+object GraphPubService : SObjectService<GraphPub>(SMybatisDao(
+    GraphPub::class.java))

+ 1 - 1
labsl/src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
 server:
-  port: 8083
+  port: 8084
 
 
 spring:
 spring:
   datasource:
   datasource:

+ 1 - 1
labsl/src/main/resources/application-prod.yml

@@ -3,7 +3,7 @@ server:
 
 
 spring:
 spring:
   datasource:
   datasource:
-    url:                                jdbc:postgresql://data-center:5432/datacenter
+    url:                                jdbc:postgresql://172.17.11.228:5432/datacenter
     username:                           postgres
     username:                           postgres
     password:                           123qwe!@#
     password:                           123qwe!@#
 
 

+ 1 - 1
labsl/src/main/resources/logback-spring.xml

@@ -27,7 +27,7 @@
     </appender>
     </appender>
 
 
     <!-- 定义cn.sagacloud包的日志级别 -->
     <!-- 定义cn.sagacloud包的日志级别 -->
-    <logger name="com.persagy" level="DEBUG" additivity="false">
+    <logger name="com.persagy" level="debug" additivity="false">
         <appender-ref ref="STDOUT"/>
         <appender-ref ref="STDOUT"/>
     </logger>
     </logger>
 
 

+ 108 - 0
meiku/build.gradle

@@ -0,0 +1,108 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*             
+ *         =@$    ;;;!=%@@@@=!           =@!      
+ *          %@$:      =@%: :*@@@*       %@=                    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
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // 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
+    // 单元测试
+    compile group:"org.springframework.boot", name:"spring-boot-starter-test", 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
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // persagy依赖
+    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
+
+
+    // TestNG 测试框架
+    compile group: "org.testng", name: "testng", version: TESTNG_VERSION
+    // Log 工具
+    compile group: "org.projectlombok", name: "lombok", version: LOMBOK_VERSION
+
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // 数据中心依赖  
+    compile project(":data-core")
+
+    //Gson
+    compile 'com.google.code.gson:gson:2.8.0'
+
+
+//    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//    // 二维码与条形码
+//    // https://mvnrepository.com/artifact/com.google.zxing/core
+//    compile group: "com.google.zxing", name: "core", version: ZXING_VERSION
+    
+}

+ 63 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/MeiKuApp.kt

@@ -0,0 +1,63 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.meiku
+
+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.ComponentScan
+
+/**
+ * 应用配置
+ *
+ * @author  Andy
+ */
+@ComponentScan(basePackages = ["com.persagy", "com.persagy.server"])           // 配置组件扫描路径
+@MapperScan("com.persagy", "com.persagy.server")                       // Mapper组件扫描路径
+@SpringBootApplication
+open class MeiKuApp : SpringBootServletInitializer() {
+    companion object {
+        // 日志
+        private val logger = LoggerFactory.getLogger(MeiKuApp::class.java)
+    } // Companion object
+
+    /**
+     * 配置应用
+     *
+     * @param   application     应用构建对象
+     */
+    override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
+        return application.sources(MeiKuApp::class.java)
+    } // Function configure
+} // Class Application
+
+/**
+ * Web应用入口
+ *
+ * @param   args        命令行参数
+ */
+fun main(args: Array<String>) {
+    SpringApplication.run(MeiKuApp::class.java, *args)
+    return
+} // Function main()

+ 89 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/Swagger2Config.kt

@@ -0,0 +1,89 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.meiku
+
+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 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()
+        pars.add(builder.build())
+        pars.add(builderComming.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.persagy.com/")
+                .contact(Contact("张维新", "", "plx3000@163.com"))
+                .version("2.0")
+                .build()
+    } // Function apiInfo()
+} // Class Swagger2Config

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

@@ -0,0 +1,46 @@
+/*
+ * ********************************************************************************************************************
+ *
+ *                     :*$@@%$*:                         ;:                ;;    ;;
+ *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+ *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+ *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+ *                  =@*                                  %!              @ $= % %@=   =%@!      %=
+ *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+ *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+ *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+ *         $@*   ;@@@%=!:                *@*
+ *         =@$    ;;;!=%@@@@=!           =@!
+ *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+ *           ;%@@$=$@@%*       *@@@$=%@@%;
+ *              ::;::             ::;::                                              All rights reserved.
+ *
+ * ********************************************************************************************************************
+ */
+
+package com.persagy.server.meiku
+
+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)
+
+    } // Function addInterceptors()
+} // Class WebMvcConf()

+ 81 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/controller/MeiKuController.kt

@@ -0,0 +1,81 @@
+package com.persagy.server.meiku.controller
+
+import com.persagy.server.meiku.models.entities.MeiKu
+import com.persagy.server.meiku.services.MeiKuService
+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.requests.SUpdateRequest
+import com.persagy.service.models.responses.SBaseResponse
+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.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  wx
+ * @date  2020/9/18 21:53
+ */
+@Api(tags = ["001、图例库"])
+@RestController
+@RequestMapping("/legend")
+class MeiKuController {
+
+    /**
+     * 创建图例
+     */
+    @ApiOperation(value="创建图例-批量", notes="不包含状态和锚点")
+    @PostMapping("/create")
+    fun create(@RequestBody request: SCreateRequest<MeiKu>): SCreateResponse<MeiKu> {
+        return MeiKuService.createList(request)
+    } // Function create()
+
+    /**
+     * 创建图例-单个
+     */
+    @ApiOperation(value="创建图例-单个", notes="包含状态和锚点")
+    @PostMapping("/save")
+    fun save(@RequestBody meiku: MeiKu): SCreateResponse<MeiKu> {
+        return MeiKuService.save(meiku)
+    } // Function create()
+
+    /**
+     * 更新图例
+     */
+    @ApiOperation(value = "图例修改-批量", notes = "不包含状态和锚点")
+    @PostMapping(value = ["/update"])
+    fun update(@RequestBody request: SUpdateRequest<MeiKu>): SBaseResponse {
+        return MeiKuService.updateList(request)
+    } // Function update()
+
+    @ApiOperation(value = "图例修改-单个", notes = "包含状态和锚点")
+    @PostMapping(value = ["/revise"])
+    fun revise(@RequestBody meiku: MeiKu): SBaseResponse{
+        return MeiKuService.revise(meiku)
+    } //
+
+    /**
+     * 根据id删除图形
+     */
+    @ApiOperation(value = "图例删除", notes = "")
+    @PostMapping(value = ["/delete"])
+    fun delete(@RequestBody idList: ArrayList<MeiKu>): SBaseResponse {
+        return SBaseResponse(SResponseType.success)
+    } // Function delete()
+
+    /**
+     * 查询图形信息
+     */
+    @ApiOperation(value = "查询图例", notes = "")
+    @PostMapping(value = ["/query"])
+    fun query(@RequestBody request: SQueryRequest): SQueryResponse<Any> {
+        return SQueryResponse(SResponseType.success)
+    } // Function query()
+
+} // Class MeiKuController

+ 61 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/MeiKu.kt

@@ -0,0 +1,61 @@
+package com.persagy.server.meiku.models.entities
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 图库-美库
+ * @author  wx
+ * @date  2020/9/21 10:45
+ */
+@ApiModel(description = "锚点")
+@Table(name = "labsl_meiku.meiku")
+class MeiKu : Serializable, SBaseEntity() {
+
+    /** 图id */
+    @ApiModelProperty(value = "图id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 分类 */
+    @ApiModelProperty(value = "分类")
+    @Column(name = "category")
+    @JSONField(name = "Category")
+    var category: String? = null
+
+    /** 默认图Key */
+    @ApiModelProperty(value = "默认图Key")
+    @Column(name = "pic")
+    @JSONField(name = "Pic")
+    var pic: String? = null
+
+    /** 品牌 */
+    @ApiModelProperty(value = "品牌")
+    @Column(name = "brand")
+    @JSONField(name = "Brand")
+    var brand: String? = null
+
+    /** 型号 */
+    @ApiModelProperty(value = "型号")
+    @Column(name = "specification")
+    @JSONField(name = "Specification")
+    var specification: String? = null
+
+    /** 锚点列表 */
+    @ApiModelProperty(value = "锚点列表")
+    @JSONField(name = "AnchorList")
+    var anchorList: ArrayList<MeiKuAnchor>? = null
+
+    @ApiModelProperty(value = "状态")
+    @JSONField(name = "State")
+    var state: MeiKuState? = null
+
+} // Class MeiKu

+ 42 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/MeiKuAnchor.kt

@@ -0,0 +1,42 @@
+package com.persagy.server.meiku.models.entities
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 锚点
+ *
+ * @author  wx
+ * @date  2020/9/21 10:52
+ */
+@ApiModel(description = "锚点")
+@Table(name = "labsl_meiku.meiku_anchor")
+class MeiKuAnchor: Serializable, SBaseEntity() {
+
+    /** 锚点id */
+    @ApiModelProperty(value = "锚点id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 图id */
+    @ApiModelProperty(value = "图id")
+    @Id
+    @Column(name = "meitu_id")
+    @JSONField(name = "MeiTuId")
+    var meiTuId: String? = null
+
+    /** 锚点坐标 */
+    @ApiModelProperty(value = "锚点坐标")
+    @Column(name = "pos")
+    @JSONField(name = "Pos")
+    var pos: HashMap<String,Any?>? = null
+
+} // Class MeiKuAnchor

+ 41 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/MeiKuState.kt

@@ -0,0 +1,41 @@
+package com.persagy.server.meiku.models.entities
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 状态
+ * @author  wx
+ * @date  2020/9/21 11:08
+ */
+@ApiModel(description = "锚点")
+@Table(name = "labsl_meiku.meiku_state")
+class MeiKuState: Serializable, SBaseEntity() {
+
+    /** 状态id */
+    @ApiModelProperty(value = "状态id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 图id */
+    @ApiModelProperty(value = "图id")
+    @Id
+    @Column(name = "meitu_id")
+    @JSONField(name = "MeiTuId")
+    var meiTuId: String? = null
+
+    /** 状态内容 */
+    @ApiModelProperty(value = "状态内容")
+    @Column(name = "state")
+    @JSONField(name = "State")
+    var state: HashMap<String,Any?>? = null
+
+} // class MeiKuState

+ 35 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/models/entities/ObjectCategory.kt

@@ -0,0 +1,35 @@
+package com.persagy.server.meiku.models.entities
+
+import com.alibaba.fastjson.annotation.JSONField
+import com.persagy.service.models.SBaseEntity
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import java.io.Serializable
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 对象类型
+ *
+ * @author  wx
+ * @date  2020/9/21 11:13
+ */
+@ApiModel(description = "对象类型")
+@Table(name = "labsl_meiku.object_category")
+class ObjectCategory: Serializable, SBaseEntity() {
+
+    /** 图id */
+    @ApiModelProperty(value = "图id")
+    @Id
+    @Column(name = "id")
+    @JSONField(name = "Id")
+    var id: String? = null
+
+    /** 名称 */
+    @ApiModelProperty(value = "名称")
+    @Column(name = "name")
+    @JSONField(name = "Name")
+    var name: String? = null
+
+} // Class ObjectCategory

+ 22 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/services/MeiKuAnchorService.kt

@@ -0,0 +1,22 @@
+package com.persagy.server.meiku.services
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.meiku.models.entities.MeiKuAnchor
+import com.persagy.service.SObjectService
+import java.util.*
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/21 11:31
+ */
+object MeiKuAnchorService: SObjectService<MeiKuAnchor>(SMybatisDao(MeiKuAnchor::class.java)) {
+
+    override fun onCreateBefore(entity: MeiKuAnchor): Boolean {
+        if (entity.id.isNullOrEmpty()){
+            entity.id = UUID.randomUUID().toString().replace("-", "")
+        }
+        return super.onCreateBefore(entity)
+    }
+
+} // Object MeiKuAnchorService

+ 129 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/services/MeiKuService.kt

@@ -0,0 +1,129 @@
+package com.persagy.server.meiku.services
+
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.meiku.models.entities.MeiKu
+import com.persagy.service.SObjectService
+import com.persagy.service.models.enums.SResponseType
+import com.persagy.service.models.responses.SBaseResponse
+import com.persagy.service.models.responses.SCreateResponse
+import java.util.*
+
+/**
+ *
+ * @author  wx
+ * @date  2020/9/21 11:21
+ */
+object MeiKuService : SObjectService<MeiKu>(SMybatisDao(MeiKu::class.java)) {
+
+    override fun onCreateBefore(entity: MeiKu): Boolean {
+        if (entity.id.isNullOrEmpty()) {
+            entity.id = UUID.randomUUID().toString().replace("-", "")
+        }
+        return super.onCreateBefore(entity)
+    }
+
+    /**
+     * 保存
+     */
+    fun save(meiKu: MeiKu): SCreateResponse<MeiKu> {
+        val sCreateResponse = SCreateResponse<MeiKu>()
+        return try {
+            if (meiKu.id.isNullOrEmpty()) {
+                meiKu.id = UUID.randomUUID().toString().replace("-", "")
+            }
+            val insert = insert(meiKu)
+            if (!meiKu.anchorList.isNullOrEmpty()) {
+                for (anchor in meiKu.anchorList!!) {
+                    anchor.meiTuId = meiKu.id
+                    if (anchor.id.isNullOrEmpty()) {
+                        anchor.id = UUID.randomUUID().toString().replace("-", "")
+                    }
+                    val insert1 = MeiKuAnchorService.insert(anchor)
+                }
+            }
+            if (meiKu.state != null) {
+                val state = meiKu.state
+                state!!.meiTuId = meiKu.id
+                if (state!!.id.isNullOrEmpty()) {
+                    state!!.id = UUID.randomUUID().toString().replace("-", "")
+                }
+                MeiKuStateService.insert(meiKu.state!!)
+            }
+            sCreateResponse.entityList = arrayListOf(meiKu)
+            sCreateResponse.result = SResponseType.success
+            sCreateResponse
+        } catch (e: Exception) {
+            e.printStackTrace()
+            sCreateResponse.result = SResponseType.failure
+            sCreateResponse
+        }
+    } // Fun save()
+
+    /**
+     * 单个对象修改,包括下面节点
+     */
+    fun revise(meiKu: MeiKu): SBaseResponse {
+        val sBaseResponse = SBaseResponse()
+        return try {
+            if (!meiKu.id.isNullOrEmpty()) {
+                delete(SFilter.eq("id", meiKu.id!!))
+                MeiKuAnchorService.delete(SFilter.eq("id", meiKu.id!!))
+                MeiKuStateService.delete(SFilter.eq("id", meiKu.id!!))
+                val insert = insert(meiKu)
+                if (!meiKu.anchorList.isNullOrEmpty()){
+                    for (anchor in meiKu.anchorList!!) {
+                        anchor.meiTuId = meiKu.id
+                        if (anchor.id.isNullOrEmpty()) {
+                            anchor.id = UUID.randomUUID().toString().replace("-", "")
+                        }
+                        val insert1 = MeiKuAnchorService.insert(anchor)
+                    }
+                }
+                if (meiKu.state != null) {
+                    val state = meiKu.state
+                    state!!.meiTuId = meiKu.id
+                    if (state!!.id.isNullOrEmpty()) {
+                        state!!.id = UUID.randomUUID().toString().replace("-", "")
+                    }
+                    val insert1 = MeiKuStateService.insert(meiKu.state!!)
+                }
+                sBaseResponse.result = SResponseType.success
+            } else {
+                sBaseResponse.result = SResponseType.failure
+            }
+            sBaseResponse
+        } catch (e: Exception) {
+            e.printStackTrace()
+            sBaseResponse.result = SResponseType.failure
+            sBaseResponse.message = e.message.toString()
+            sBaseResponse
+        }
+    } // Fun revise()
+
+    /**
+     * 清除节点
+     */
+    override fun onDeleteSuccess(entityList: ArrayList<MeiKu>) {
+        for (entity in entityList){
+            MeiKuAnchorService.delete(SFilter.eq("id", entity.id!!))
+            MeiKuStateService.delete(SFilter.eq("id", entity.id!!))
+        }
+        super.onDeleteSuccess(entityList)
+    }
+
+    /**
+     * 读取图下面所有节点
+     */
+    fun read(meiKu: MeiKu){
+        if (!meiKu.id.isNullOrEmpty()){
+            val entity = select(SFilter.eq("id", meiKu.id!!)).entity()
+            if (entity!=null){
+
+            }
+        }
+
+    } // read()
+
+
+} // Object MeiKuService

+ 21 - 0
meiku/src/main/kotlin/com/persagy/server/meiku/services/MeiKuStateService.kt

@@ -0,0 +1,21 @@
+package com.persagy.server.meiku.services
+
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.meiku.models.entities.MeiKuState
+import com.persagy.service.SObjectService
+import java.util.*
+
+/**
+ * 状态
+ * @author  wx
+ * @date  2020/9/21 11:35
+ */
+object MeiKuStateService : SObjectService<MeiKuState>(SMybatisDao(MeiKuState::class.java)) {
+
+    override fun onCreateBefore(entity: MeiKuState): Boolean {
+        if (entity.id.isNullOrEmpty()){
+            entity.id = UUID.randomUUID().toString().replace("-", "")
+        }
+        return super.onCreateBefore(entity)
+    } //
+} // Object MeiKuStateService

+ 14 - 0
meiku/src/main/resources/application-dev.yml

@@ -0,0 +1,14 @@
+server:
+  port: 8083
+
+spring:
+  datasource:
+#    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!@#
+
+  activemq:
+    broker-url:                         tcp://172.16.42.210:61616

+ 11 - 0
meiku/src/main/resources/application-prod.yml

@@ -0,0 +1,11 @@
+server:
+  port: 8080
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://data-center:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+    broker-url:                         tcp://activemq:61616

+ 70 - 0
meiku/src/main/resources/application.yml

@@ -0,0 +1,70 @@
+###############################################################################################################
+# spring-cloud相关配置
+#eureka:
+#  client:                                   #客户端注册进eureka服务列表内
+#    service-url:
+#      defaultZone:                          http://eureka-service:8761/eureka
+#启用监控
+management:
+  endpoints:
+    web:
+      exposure:
+        include:
+          - "*"  # 开放所有端点health,info,metrics,通过actuator/+端点名就可以获取相应的信息。默认打开health和info
+  endpoint:
+    health:
+      #未开启actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。开启后打印详细信息
+      show-details:                       always
+###############################################################################################################
+
+spring:
+  servlet:
+    multipart:
+      enabled: true
+      max-file-size: 10000MB
+      max-request-size: 10000MB
+
+  application:
+    name:                               labsl
+  mvc:
+    favicon:
+      enabled:                          true
+
+  jmx:
+    default-domain:                     labsl
+
+  datasource:
+    name:                               labsl
+    type:                               com.alibaba.druid.pool.DruidDataSource
+    driver-class-name:                  org.postgresql.Driver
+#    url:                                jdbc:postgresql://60.205.177.43: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
+
+  jms:
+    pub-sub-domain: true
+
+topic:                                 datacenter.broadcast
+
+mybatis:
+  typeAliasesPackage:                   cn.sagacloud.server.datacenter.entities
+
+

+ 38 - 0
meiku/src/main/resources/logback-spring.xml

@@ -0,0 +1,38 @@
+<!--
+  ~ *********************************************************************************************************************
+  ~
+  ~                     :*$@@%$*:                         ;:                ;;    ;;
+  ~                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
+  ~                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
+  ~                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
+  ~                  =@*                                  %!              @ $= % %@=   =%@!      %=
+  ~             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
+  ~           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
+  ~         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
+  ~         $@*   ;@@@%=!:                *@*
+  ~         =@$    ;;;!=%@@@@=!           =@!
+  ~          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
+  ~           ;%@@$=$@@%*       *@@@$=%@@%;
+  ~              ::;::             ::;::                                              All rights reserved.
+  ~
+  ~ *********************************************************************************************************************
+  -->
+
+<configuration scan="true" debug="false">
+    <contextName>scanbuilding</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>
+
+    <!-- 定义日志级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT" />
+    </root>
+</configuration>

+ 1 - 1
settings.gradle

@@ -5,5 +5,5 @@ include 'data-core'         // 实体类
 include 'scanbuilding'      // 扫楼
 include 'scanbuilding'      // 扫楼
 include 'labsl'             // 蜡笔森林
 include 'labsl'             // 蜡笔森林
 include 'datasyn'           // 数据同步
 include 'datasyn'           // 数据同步
-
+include 'meiku'             // 图例库