浏览代码

add:创建项目

zhangweixin 4 年之前
当前提交
b8c3dc42ba

+ 6 - 0
.gitignore

@@ -0,0 +1,6 @@
+.idea
+*.iml
+.gradle
+build
+out
+gradle.properties

+ 83 - 0
admp-entity/build.gradle

@@ -0,0 +1,83 @@
+/*
+ * *********************************************************************************************************************
+ *
+ *          !!
+ *        .F88X
+ *        X8888Y
+ *      .}888888N;
+ *        i888888N;        .:!              .I$WI:
+ *          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
+ *          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
+ *            +888888N;  .8888888Y                                  "&&8Y.}8,
+ *            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
+ *              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
+ *              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
+ *            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
+ *            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
+ *          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
+ *        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
+ *      .:R888888I
+ *      .&888888I                                          Copyright (c) 2009-2020.  博锐尚格科技股份有限公司
+ *        ~8888'
+ *        .!88~                                                                     All rights reserved.
+ *
+ * *********************************************************************************************************************
+ */
+
+apply plugin: "kotlin"
+
+group 'com.persagy.server'
+version '2.0.0'
+
+sourceCompatibility = JVM_TARGET
+
+
+compileKotlin {
+    kotlinOptions.jvmTarget = JVM_TARGET
+}
+compileTestKotlin {
+    kotlinOptions.jvmTarget = JVM_TARGET
+}
+
+sourceCompatibility = 1.8
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+//    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+//    testCompile group: 'junit', name: 'junit', version: '4.12'
+
+    // kotlin 依赖
+    compile group: "org.jetbrains.kotlin", name: "kotlin-stdlib-jdk8", version: KOTLIN_VERSION
+    compile group: "org.jetbrains.kotlin", name: "kotlin-reflect", version: KOTLIN_VERSION
+
+    //消息
+    compile group: "org.springframework.boot", name: "spring-boot-starter-activemq", version: SPRING_BOOT_VERSION
+
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // RESTful API 文档生成工具
+    // https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui
+    compile group: 'org.springdoc', name: 'springdoc-openapi-ui', version: SPRING_DOC_VERSION
+    // https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-common
+    compile group: "org.springdoc", name: "springdoc-openapi-common", version: SPRING_DOC_VERSION
+
+//    compile group: "cn.sagacloud", name: "saga-kotlin-base", version: SAGA_KOTLIN_VERSION
+//    compile group: "cn.sagacloud", name: "saga-kotlin-database", version: SAGA_KOTLIN_VERSION
+//    compile group: "cn.sagacloud", name: "saga-kotlin-mybatis", version: SAGA_KOTLIN_VERSION
+//    compile group: "cn.sagacloud", name: "saga-kotlin-postgresql", version: SAGA_KOTLIN_VERSION
+//    compile group: "cn.sagacloud", name: "saga-service-base", version: SAGA_SERVICE_VERSION
+//    compile group: "cn.sagacloud", name: "saga-service-mybatis", version: SAGA_SERVICE_VERSION
+
+    compile group: "com.persagy", name: "persagy-kotlin-base", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-database", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-mybatis", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-postgresql", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-service-base", version: PERSAGY_SERVICE_VERSION
+    compile group: "com.persagy", name: "persagy-service-mybatis", version: PERSAGY_SERVICE_VERSION
+
+    //Gson
+    compile 'com.google.code.gson:gson:2.8.0'
+}

+ 4 - 0
admp-entity/src/main/kotlin/com/persagy/admp/entity/a.java

@@ -0,0 +1,4 @@
+package com.persagy.admp.entity;
+
+public class a {
+}

+ 25 - 0
admp-entity/src/main/kotlin/com/persagy/admp/entity/obj/Project.kt

@@ -0,0 +1,25 @@
+package com.persagy.admp.entity.obj
+
+import com.persagy.gis.entity.SGisMultiPolygon
+import io.swagger.v3.oas.annotations.media.Schema
+import javax.persistence.Column
+import javax.persistence.Table
+
+/**
+ * 项目实体类
+ *
+ * @author  张维新 <zhangweixin@sagacloud.cn>
+ */
+@Schema(description = "平台字典对象类型")
+@Table(name = "obj.roads1")
+class Project {
+
+    @Schema(description = "全局 id")
+    @Column(name = "id")
+    var id: String? = null
+    @Schema(description = "全局 id")
+    @Column(name = "geom")
+    var geom: SGisMultiPolygon? = null
+
+
+}

+ 177 - 0
admp/build.gradle

@@ -0,0 +1,177 @@
+/*
+ * *********************************************************************************************************************
+ *
+ *          !!
+ *        .F88X
+ *        X8888Y
+ *      .}888888N;
+ *        i888888N;        .:!              .I$WI:
+ *          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
+ *          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
+ *            +888888N;  .8888888Y                                  "&&8Y.}8,
+ *            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
+ *              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
+ *              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
+ *            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
+ *            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
+ *          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
+ *        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
+ *      .:R888888I
+ *      .&888888I                                          Copyright (c) 2009-2020.  博锐尚格科技股份有限公司
+ *        ~8888'
+ *        .!88~                                                                     All rights reserved.
+ *
+ * *********************************************************************************************************************
+ */
+
+group rootProject.group
+version rootProject.version
+
+apply plugin: "kotlin"
+apply plugin: "org.jetbrains.dokka"
+apply plugin: "war"
+apply plugin: 'org.springframework.boot'
+apply plugin: 'io.spring.dependency-management'
+
+sourceCompatibility = JVM_TARGET
+
+compileKotlin {
+    kotlinOptions.jvmTarget = JVM_TARGET
+}
+compileTestKotlin {
+    kotlinOptions.jvmTarget = JVM_TARGET
+}
+
+dependencies {
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // kotlin 依赖
+    compile group: "org.jetbrains.kotlin", name: "kotlin-stdlib-jdk8", version: KOTLIN_VERSION
+    compile group: "org.jetbrains.kotlin", name: "kotlin-reflect", version: KOTLIN_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // 页面
+    compile group: "org.springframework.boot", name: "spring-boot-starter-freemarker", version: SPRING_BOOT_VERSION
+    // spring boot 依赖
+    compile group: "org.springframework.boot", name: "spring-boot-starter-web", version: SPRING_BOOT_VERSION
+    compile group: "org.springframework.boot", name: "spring-boot-configuration-processor", version: SPRING_BOOT_VERSION
+    compile group: "org.springframework.boot", name: "spring-boot-starter-actuator", version: SPRING_BOOT_VERSION
+    compile group: "org.springframework.boot", name: "spring-boot-starter-logging", version: SPRING_BOOT_VERSION
+    //消息
+//    compile group: "org.springframework.boot", name: "spring-boot-starter-activemq", version: SPRING_BOOT_VERSION
+    providedCompile group: "org.springframework.boot", name:"spring-boot-starter-tomcat", version: SPRING_BOOT_VERSION
+    // spring boot 缓存
+    compile group:"org.springframework.boot", name:"spring-boot-starter-cache", version: SPRING_BOOT_VERSION
+    // RabbitMQ
+    compile group: 'org.springframework.boot',    name: 'spring-boot-starter-amqp', version: SPRING_BOOT_VERSION
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // spring cloud 依赖
+//    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka', version: SPRING_CLOUD_VERSION
+
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*
+    // RESTful API 文档生成工具
+    // https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui
+    compile group: 'org.springdoc', name: 'springdoc-openapi-ui', version: SPRING_DOC_VERSION
+    // https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-common
+    compile group: "org.springdoc", name: "springdoc-openapi-common", version: SPRING_DOC_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    compile group: "com.persagy", name: "persagy-kotlin-base", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-database", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-mybatis", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-kotlin-postgresql", version: PERSAGY_KOTLIN_VERSION
+    compile group: "com.persagy", name: "persagy-service-base", version: PERSAGY_SERVICE_VERSION
+    compile group: "com.persagy", name: "persagy-service-mybatis", version: PERSAGY_SERVICE_VERSION
+
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // Excel操作
+    // https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
+    compile group: 'org.apache.poi', name: 'poi-ooxml', version: POI_VERSION
+    // kafka
+//    compile group: 'com.persagy',   name: 'sybotan-service-kafka',       version: SYBOTAN_SERVICE_VERSION
+    //文档
+    compile group: 'com.persagy',   name: 'persagy-service-postgresql', version: PERSAGY_SERVICE_VERSION
+    // 校验器
+    // https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator
+    compile group: "org.hibernate.validator", name: "hibernate-validator", version: VALIDATOR_VERSION
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // 单元测试
+    compile group: 'org.springframework.boot',   name: 'spring-boot-starter-test', version: SPRING_BOOT_VERSION
+
+    // 实体类依赖
+    compile project(":admp-entity")
+}
+
+
+dependencyManagement {
+    imports {
+        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${SPRING_CLOUD_DEPENDENCIES}"
+    }
+}
+
+sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-dev']
+//ext.needTest = 'true'
+
+task buildProd {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-prod"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+//
+task buildDev {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-dev']
+    }
+    finalizedBy(build)
+}
+
+task buildTest {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-test']
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+
+task buildjm {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-jm']
+    }
+    finalizedBy(build)
+}
+
+task buildsuning {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-suning']
+    }
+    finalizedBy(build)
+}
+
+task buildguancheng {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-guancheng']
+    }
+    finalizedBy(build)
+}
+task buildasia {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-asia']
+    }
+    finalizedBy(build)
+}
+
+task buildwanda {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ['src/main/resources', 'src/main/resources-wanda']
+    }
+    finalizedBy(build)
+}

+ 42 - 0
admp/src/main/kotlin/com/persagy/admp/AdmpApp.kt

@@ -0,0 +1,42 @@
+package com.persagy.admp
+
+import org.mybatis.spring.annotation.MapperScan
+import org.springframework.boot.autoconfigure.SpringBootApplication
+import org.springframework.boot.builder.SpringApplicationBuilder
+import org.springframework.boot.runApplication
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
+import org.springframework.context.annotation.ComponentScan
+
+/**
+ * 建筑信息管理平台应用用配置
+ *
+ * @author  张维新 <zhangweixin@sagacloud.cn>
+ */
+@ComponentScan(basePackages = ["com.persagy.admp", "com.persagy"])
+@MapperScan("com.persagy.admp", "com.persagy")                       // Mapper组件扫描路径
+//@ComponentScan("com.persagy", "com.persagy.admp")
+//@NacosPropertySource(groupId = "ibms", dataId = "bimp", autoRefreshed = true)
+@SpringBootApplication
+open class AdmpApp : SpringBootServletInitializer() {
+
+    /**
+     * 配置应用
+     *
+     * @param   builder         应用 builder 对象
+     *
+     * @return  配置好的应用 builder 对象
+     */
+    override fun configure(builder: SpringApplicationBuilder): SpringApplicationBuilder {
+        return builder.sources(AdmpApp::class.java)
+    }
+}
+
+/**
+ * Web 应用入口
+ *
+ * @param   args        命令行参数
+ */
+fun main(args: Array<String>) {
+    runApplication<AdmpApp>(*args)
+    return
+}

+ 133 - 0
admp/src/main/kotlin/com/persagy/admp/WebApiConfig.kt

@@ -0,0 +1,133 @@
+package com.persagy.admp
+
+import io.swagger.v3.oas.annotations.enums.ParameterIn
+import io.swagger.v3.oas.models.*
+import io.swagger.v3.oas.models.info.Contact
+import io.swagger.v3.oas.models.info.Info
+import io.swagger.v3.oas.models.info.License
+import io.swagger.v3.oas.models.media.StringSchema
+import io.swagger.v3.oas.models.parameters.Parameter
+import io.swagger.v3.oas.models.security.SecurityScheme
+import org.springdoc.core.GroupedOpenApi
+import org.springdoc.core.customizers.OperationCustomizer
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+import org.springframework.web.method.HandlerMethod
+
+/**
+ * API 文档生成器 Swagger3 配置
+ *
+ * @author  张维新 <zhangweixin@sagacloud.cn>
+ */
+ @Configuration
+open class WebApiConfig {
+    /** 标题 */
+    private val title = "建筑信息管理平台"
+    /** API 版本号 */
+    private val version = "2.0"
+
+    private val operationCustomizer = GlobalHeaderOperationCustomizer()
+
+    /**
+     * API 信息
+     */
+    @Bean
+    open fun openApi(): OpenAPI {
+        val contact = Contact().name("张维新").email("zhangweixin@sagacloud.cn")
+        val projectId = Parameter().`in`(ParameterIn.HEADER.toString())
+                .name("projectId").description("项目 id")
+                .schema(StringSchema()).required(false)
+
+        val api = OpenAPI()
+                .components(Components()
+                        .addSecuritySchemes("basicScheme", SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("basic")))
+                .info(Info()
+                        .title(title)
+                        .version(version)
+                        .termsOfService("http://www.persagy.com")
+                        .contact(contact)
+                        .license(License()
+                                .name("Apache 2.0")
+                                .url("http://www.persagy.com")))
+
+        api.addExtension("abc", "dd")
+        return api
+    }
+
+    /**
+     * 全部 API 组
+     *
+     * @return 全部 API 组
+     */
+    @Bean
+    open fun allApiGroup(): GroupedOpenApi {
+        return GroupedOpenApi.builder()
+            .group("全部")
+            .pathsToMatch("/**")
+            .build()
+    }
+
+    /**
+     * 字典 API 组
+     *
+     * @return 字典 API 组
+     */
+    @Bean
+    open fun dictApiGroup(): GroupedOpenApi {
+        return GroupedOpenApi.builder()
+                .group("数据字典")
+                .pathsToMatch("/dict/**")
+                .build()
+    }
+
+    /**
+     * 项目管理 API 组
+     *
+     * @return 项目 API 组
+     */
+    @Bean
+    open fun pmApiGroup(): GroupedOpenApi {
+        return GroupedOpenApi.builder()
+                .group("项目管理")
+                .pathsToMatch("/pm/**")
+                .addOperationCustomizer(operationCustomizer)
+                .build()
+    }
+
+    /**
+     * 建筑 API 组 (architecture manage)
+     *
+     * @return  建筑 API 组
+     */
+    @Bean
+    open fun amApiGroup(): GroupedOpenApi {
+        return GroupedOpenApi.builder()
+                .group("建筑模型")
+                .pathsToMatch("/am/**")
+                .addOperationCustomizer(operationCustomizer)
+                .build()
+    }
+
+    /**
+     *  http 请求头自定义
+     *
+     *  @author 张维新 <zhangweixin@sagacloud.cn>
+     */
+    class GlobalHeaderOperationCustomizer : OperationCustomizer {
+        /**
+         * 接口定义器
+         *
+         * @param   operation       接口
+         * @param   handlerMethod   原接口方法
+         *
+         * @return  新定义的接口
+         */
+        override fun customize(operation: Operation, handlerMethod: HandlerMethod): Operation {
+            val projectId = Parameter().`in`(ParameterIn.HEADER.toString())
+                    .name("projectId").description("项目 id")
+                    .schema(StringSchema()).required(false)
+            operation.addParametersItem(projectId)
+            return operation
+        }
+    }
+}

+ 27 - 0
admp/src/main/kotlin/com/persagy/admp/WebConfig.kt

@@ -0,0 +1,27 @@
+package com.persagy.admp
+
+import com.persagy.service.interceptors.SPageInterceptor
+import org.springframework.context.annotation.Configuration
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
+
+/**
+ * 数据管理平台 MVC 配置
+ *
+ * @author  张维新 <zhangweixin@sagacloud.cn>
+ */
+@Configuration
+open class WebConfig : WebMvcConfigurer {
+
+    /**
+     * 添加拦截器
+     *
+     * @param   registry    拦截器注册器
+     */
+    override fun addInterceptors(registry: InterceptorRegistry) {
+        /** 多个拦截器组成一个拦截器链 */
+        registry.addInterceptor(SPageInterceptor()).addPathPatterns("/**")
+        super.addInterceptors(registry)
+        return
+    }
+}

+ 44 - 0
admp/src/main/kotlin/com/persagy/admp/controllers/ProjectController.kt

@@ -0,0 +1,44 @@
+package com.persagy.admp.controllers
+
+import com.persagy.admp.entity.obj.Project
+import com.persagy.database.SFilter
+import com.persagy.mybatis.SMybatisDao
+import com.persagy.service.SObjectService
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.responses.SQueryResponse
+import io.swagger.v3.oas.annotations.Operation
+import io.swagger.v3.oas.annotations.tags.Tag
+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  张维新 <zhangweixin@sagacloud.cn>
+ */
+@Tag(name = "01. project", description = "建筑对象接口")
+@RestController
+@RequestMapping("/dict/project/")
+class ProjectController {
+
+
+    var projectService = SObjectService(SMybatisDao(Project::class.java))
+
+
+    /**
+     * 查询楼层信息
+     *
+     * @param request     查询信息条件
+     * @return 查询结果
+     */
+    @Operation(summary = "查询楼层信息", description = "级联对象:建筑(building)、项目(project)、楼层贯通关系(floorThroughList)")
+    @PostMapping(value = ["/query"])
+    fun query(@RequestBody request: SQueryRequest): SQueryResponse<Project> {
+        return projectService.pageQuery(request)
+    }
+
+
+
+}

+ 76 - 0
admp/src/main/resources/application-dev.yml

@@ -0,0 +1,76 @@
+
+# spring-cloud相关配置
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      #       defaultZone:                          http://192.168.20.235:8080/cloud-center/eureka
+      defaultZone:                          http://127.0.0.1:8761/eureka
+  instance:
+    # 实例ID
+    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+    # 优先使用IP地址方式进行注册服务
+    prefer-ip-address:                      true
+
+#启用监控
+management:
+  endpoints:
+    web:
+      exposure:
+        include:
+          - "*"  # 开放所有端点health,info,metrics,通过actuator/+端点名就可以获取相应的信息。默认打开health和info
+  endpoint:
+    health:
+      #未开启actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。开启后打印详细信息
+      show-details:                       always
+
+
+
+server:
+  port: 8010
+
+spring:
+  datasource:
+    name:                               datacenter
+    type:                               com.alibaba.druid.pool.DruidDataSource
+    driver-class-name:                  org.postgresql.Driver
+
+    url:                                jdbc:postgresql://127.0.0.1:15000/admp
+    username:                           postgres
+#    password:                           persagy_2020qwe!@#
+    password:                           123456
+
+  servlet:
+    multipart:
+      max-request-size:                500MB        # 限制上传的多个文件的总大小
+      max-file-size:                   500MB        # 限制单个文件的最大值
+
+    #配置rabbitMq 服务器
+#  rabbitmq:
+#    host: 192.168.64.15
+#    port: 9936
+#    username: admin
+#    password: brzj123456
+#    #虚拟host 可以不设置,使用 server 默认 host
+#    virtual-host: /test
+
+#  rabbitmq:
+#    host: 39.102.43.179
+#    port: 9936
+#    username: admin
+#    password: brzj123456
+#    #虚拟host 可以不设置,使用server默认host
+#    virtual-host: /test
+
+
+
+mqtopid: # 消息
+  exchange:                           exchange-dmp
+  routingKey:                         routingKey-center-adm
+  admQueue:                           queue-center-adm
+  synQueue:                           queue-center-syn
+  routingKey01:                       routing-dmp-rwd
+  routingKey02:                       routing-dmp-org
+
+
+
+

+ 72 - 0
admp/src/main/resources/application.yml

@@ -0,0 +1,72 @@
+###############################################################################################################
+
+#启用监控
+#management:
+#  endpoints:
+#    web:
+#      exposure:
+#        include:
+#          - "*"  # 开放所有端点health,info,metrics,通过actuator/+端点名就可以获取相应的信息。默认打开health和info
+#  endpoint:
+#    health:
+#      #未开启actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。开启后打印详细信息
+#      show-details:                       always
+###############################################################################################################
+
+#eureka:
+#  client:                                   #客户端注册进eureka服务列表内
+#    service-url:
+#      defaultZone:                          http://172.17.11.174:8761/eureka
+#
+#  instance:
+#    # 实例ID
+#    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+#    # 优先使用IP地址方式进行注册服务
+#    prefer-ip-address:                      true
+
+
+server:
+  port: 8080
+
+spring:
+  application:
+    name:                               datacenter
+
+  mvc:
+    favicon:
+      enabled:                          true
+
+  jmx:
+    default-domain:                     datacenter
+
+  datasource:
+    name:                               datacenter
+    type:                               com.alibaba.druid.pool.DruidDataSource
+    driver-class-name:                  org.postgresql.Driver
+
+  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
+
+# spring-doc 配置
+springdoc:
+  # springdoc 扫描的包,多个包之间使用逗号分隔
+  packagesToScan:                           com.persagy.admp
+  swagger-ui:
+    # API 组排序方式:asc 升序,desc 降序
+    groups-order:                           asc
+    # 标识排序方式:alpha 按字母升序排列
+    tags-sorter:                            alpha
+    # API 接口排序方式:alpha 按字母升序排列,method 按方法的定义顺序。
+    operations-sorter:                      alpha
+
+mybatis:
+  typeAliasesPackage:                   cn.sagacloud.server.datacenter.entities

+ 225 - 0
admp/src/main/resources/logback-spring.xml

@@ -0,0 +1,225 @@
+<!--
+  ~ **********************************************************************************************************************
+  ~
+  ~          !!
+  ~        .F88X
+  ~        X8888Y
+  ~      .}888888N;
+  ~        i888888N;        .:!              .I$WI:
+  ~          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
+  ~          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
+  ~            +888888N;  .8888888Y                                  "&&8Y.}8,
+  ~            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
+  ~              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
+  ~              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
+  ~            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
+  ~            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
+  ~          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
+  ~        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
+  ~      .:R888888I
+  ~      .&888888I                                          Copyright (c) 2009-2020.  博锐尚格科技股份有限公司
+  ~        ~8888'
+  ~        .!88~                                                                     All rights reserved.
+  ~
+  ~ **********************************************************************************************************************
+  -->
+<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
+<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
+<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
+
+<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
+	debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<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="TRACE" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+    <!-- 定义com.persagy包的日志级别 -->
+    <logger name="com.persagy.admp" level="debug" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+
+    <!-- ERROR级别日志 -->
+    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
+<!--    <appender name="ERROR"-->
+<!--              class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+<!--        &lt;!&ndash; 过滤器,只记录WARN级别的日志 &ndash;&gt;-->
+<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
+<!--            <level>ERROR</level>-->
+<!--            <onMatch>ACCEPT</onMatch>-->
+<!--            <onMismatch>DENY</onMismatch>-->
+<!--        </filter>-->
+<!--        &lt;!&ndash; 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 &ndash;&gt;-->
+<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
+
+<!--            &lt;!&ndash;日志输出位置 可相对、和绝对路径 &ndash;&gt;-->
+<!--            <fileNamePattern>-->
+<!--                ${log_dir}/dataCenter_app_error.%d{yyyy-MM-dd}.%i.log-->
+<!--            </fileNamePattern>-->
+<!--            &lt;!&ndash; 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6, 则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 &ndash;&gt;-->
+<!--            <maxHistory>${maxHistory}</maxHistory>-->
+<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
+<!--                <maxFileSize>${maxFileSize}</maxFileSize>-->
+<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
+
+<!--        </rollingPolicy>-->
+
+
+<!--        &lt;!&ndash; 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。-->
+<!--            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">-->
+<!--            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern> <minIndex>1</minIndex>-->
+<!--            <maxIndex>3</maxIndex> </rollingPolicy> &ndash;&gt;-->
+<!--        &lt;!&ndash; 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动 <triggeringPolicy-->
+<!--            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize>-->
+<!--            </triggeringPolicy> &ndash;&gt;-->
+
+<!--        <encoder>-->
+<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>-->
+<!--        </encoder>-->
+<!--    </appender>-->
+
+
+
+<!--    &lt;!&ndash; WARN级别日志 appender &ndash;&gt;-->
+<!--    <appender name="WARN"-->
+<!--              class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+<!--        &lt;!&ndash; 过滤器,只记录WARN级别的日志 &ndash;&gt;-->
+<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
+<!--            <level>WARN</level>-->
+<!--            <onMatch>ACCEPT</onMatch>-->
+<!--            <onMismatch>DENY</onMismatch>-->
+<!--        </filter>-->
+<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
+<!--            &lt;!&ndash; 按天回滚 daily &ndash;&gt;-->
+<!--            <fileNamePattern>-->
+<!--                ${log_dir}/dataCenter_app_warn.%d{yyyy-MM-dd}.%i.log-->
+<!--            </fileNamePattern>-->
+<!--            &lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;-->
+<!--            <maxHistory>${maxHistory}</maxHistory>-->
+<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
+<!--                <maxFileSize>${maxFileSize}</maxFileSize>-->
+<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
+<!--        </rollingPolicy>-->
+<!--        <encoder>-->
+<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>-->
+<!--        </encoder>-->
+<!--    </appender>-->
+
+
+
+
+<!--    &lt;!&ndash; INFO级别日志 appender &ndash;&gt;-->
+<!--    <appender name="INFO"-->
+<!--              class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+<!--        &lt;!&ndash; 过滤器,只记录INFO级别的日志 &ndash;&gt;-->
+<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
+<!--            <level>INFO</level>-->
+<!--            <onMatch>ACCEPT</onMatch>-->
+<!--            <onMismatch>DENY</onMismatch>-->
+<!--        </filter>-->
+<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
+<!--            &lt;!&ndash; 按天回滚 daily &ndash;&gt;-->
+<!--            <fileNamePattern>-->
+<!--                ${log_dir}/dataCenter_app_info.%d{yyyy-MM-dd}.%i.log-->
+<!--            </fileNamePattern>-->
+<!--            &lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;-->
+<!--            <maxHistory>${maxHistory}</maxHistory>-->
+<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
+<!--                <maxFileSize>${maxFileSize}</maxFileSize>-->
+<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
+<!--        </rollingPolicy>-->
+<!--        <encoder>-->
+<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>-->
+<!--        </encoder>-->
+<!--    </appender>-->
+
+
+
+
+<!--    &lt;!&ndash; DEBUG级别日志 appender &ndash;&gt;-->
+<!--    <appender name="DEBUG"-->
+<!--              class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+<!--        &lt;!&ndash; 过滤器,只记录DEBUG级别的日志 &ndash;&gt;-->
+<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
+<!--            <level>DEBUG</level>-->
+<!--            <onMatch>ACCEPT</onMatch>-->
+<!--            <onMismatch>DENY</onMismatch>-->
+<!--        </filter>-->
+<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
+<!--            &lt;!&ndash; 按天回滚 daily &ndash;&gt;-->
+<!--            <fileNamePattern>-->
+<!--                ${log_dir}/dataCenter_app_debug.%d{yyyy-MM-dd}.%i.log-->
+<!--            </fileNamePattern>-->
+<!--            &lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;-->
+<!--            <maxHistory>${maxHistory}</maxHistory>-->
+<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
+<!--                <maxFileSize>${maxFileSize}</maxFileSize>-->
+<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
+<!--        </rollingPolicy>-->
+<!--        <encoder>-->
+<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>-->
+<!--        </encoder>-->
+<!--    </appender>-->
+
+<!--    &lt;!&ndash; TRACE级别日志 appender &ndash;&gt;-->
+<!--    <appender name="TRACE"-->
+<!--              class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+<!--        &lt;!&ndash; 过滤器,只记录ERROR级别的日志 &ndash;&gt;-->
+<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
+<!--            <level>TRACE</level>-->
+<!--            <onMatch>ACCEPT</onMatch>-->
+<!--            <onMismatch>DENY</onMismatch>-->
+<!--        </filter>-->
+<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
+<!--            &lt;!&ndash; 按天回滚 daily &ndash;&gt;-->
+<!--            <fileNamePattern>-->
+<!--                ${log_dir}/dataCenter_app_trace.%d{yyyy-MM-dd}.%i.log-->
+<!--            </fileNamePattern>-->
+<!--            &lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;-->
+<!--            <maxHistory>${maxHistory}</maxHistory>-->
+
+<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
+<!--                <maxFileSize>${maxFileSize}</maxFileSize>-->
+<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
+<!--        </rollingPolicy>-->
+<!--        <encoder>-->
+<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>-->
+<!--        </encoder>-->
+<!--    </appender>-->
+
+<!--    <logger name="java.sql.PreparedStatement" value="DEBUG" />-->
+<!--    <logger name="java.sql.Connection" value="DEBUG" />-->
+<!--    <logger name="java.sql.Statement" value="DEBUG" />-->
+<!--    <logger name="com.ibatis" value="DEBUG" />-->
+<!--    <logger name="com.ibatis.common.jdbc.SimpleDataSource" value="DEBUG" />-->
+<!--    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />-->
+<!--    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"-->
+<!--            value="DEBUG" />-->
+<!--    <logger name="com.apache.ibatis" level="TRACE" />-->
+
+
+
+    <!-- 定义日志级别 -->
+    <!-- root级别 DEBUG -->
+<!--    <root level="debug">-->
+<!--        &lt;!&ndash; 文件输出 &ndash;&gt;-->
+<!--        <appender-ref ref="ERROR" />-->
+<!--        <appender-ref ref="INFO" />-->
+<!--        <appender-ref ref="WARN" />-->
+<!--        <appender-ref ref="DEBUG" />-->
+<!--        <appender-ref ref="TRACE" />-->
+<!--    </root>-->
+    <!-- 定义日志级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT" />
+    </root>
+</configuration>

+ 68 - 0
build.gradle

@@ -0,0 +1,68 @@
+/*
+ * *********************************************************************************************************************
+ *
+ *          !!
+ *        .F88X
+ *        X8888Y
+ *      .}888888N;
+ *        i888888N;        .:!              .I$WI:
+ *          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
+ *          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
+ *            +888888N;  .8888888Y                                  "&&8Y.}8,
+ *            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
+ *              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
+ *              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
+ *            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
+ *            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
+ *          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
+ *        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
+ *      .:R888888I
+ *      .&888888I                                          Copyright (c) 2009-2020.  博锐尚格科技股份有限公司
+ *        ~8888'
+ *        .!88~                                                                     All rights reserved.
+ *
+ * *********************************************************************************************************************
+ */
+
+
+group 'com.persagy.server'
+version '2.0.0'
+
+buildscript {
+    repositories {
+        maven{url MAVEN_REPO_PUBLIC_URL}
+        maven{ url "http://maven.aliyun.com/nexus/content/groups/public/"}
+        mavenCentral()
+        jcenter()
+    }
+    dependencies {
+        classpath group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: SPRING_BOOT_VERSION
+        classpath group: 'org.jetbrains.kotlin', name: 'kotlin-gradle-plugin', version: KOTLIN_VERSION
+        classpath group: 'org.jetbrains.dokka', name: 'dokka-gradle-plugin', version: DOKKA_VERSION
+        classpath group: 'com.google.protobuf', name: 'protobuf-gradle-plugin', version: PROTOBUF_GRADLE_VERSION
+        // ssh插件, 用于部署
+        classpath 'org.hidetake:gradle-ssh-plugin:2.10.1'
+    }
+}
+
+allprojects {
+    repositories {
+        maven{ url "http://maven.aliyun.com/nexus/content/groups/public/"}
+        maven{
+            url MAVEN_REPO_PUBLIC_URL
+            credentials {
+                username = NEXUS_USERNAME
+                password = NEXUS_PASSWORD
+            }
+        }
+        maven { url "https://repo.spring.io/milestone" }
+        mavenCentral()
+        jcenter()
+    }
+    tasks.withType(Javadoc) {
+        options{ encoding "UTF-8"
+            charSet "UTF-8"
+            links "http://docs.oracle.com/javase/8/docs/api"
+        }
+    }
+}

+ 4 - 0
settings.gradle

@@ -0,0 +1,4 @@
+rootProject.name = 'admp'
+
+include 'admp'         // 建筑数据管理平台
+include 'admp-entity'         // 建筑数据管理平台