Browse Source

Merge branch 'develop' of http://39.106.8.246:3003/BDTP/adm-backgroud into develop

lijie 3 years ago
parent
commit
5ff59b3b5d
26 changed files with 1181 additions and 229 deletions
  1. 5 0
      .idea/jarRepositories.xml
  2. 4 2
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/objects/Equipment.kt
  3. 5 3
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/objects/ZoneIspace.kt
  4. 5 0
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/task/EquipCategoryDic.kt
  5. 3 3
      data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/task/PropertyScanTask.kt
  6. 2 0
      gradle.properties
  7. 1 1
      labsl/src/main/kotlin/com/persagy/labsl/models/entities/pbs/Building.kt
  8. 4 0
      message-center/build.gradle
  9. 50 12
      message-center/src/main/kotlin/com/persagy/server/messagecenter/controllers/MessageController.kt
  10. 3 2
      message-center/src/main/resources/application-dev.yml
  11. 31 30
      message-center/src/main/resources/application.yml
  12. 2 0
      scanbuilding/build.gradle
  13. 57 1
      scanbuilding/src/main/kotlin/com/persagy/server/client/AdmMiddlewareClient.kt
  14. 26 1
      scanbuilding/src/main/kotlin/com/persagy/server/constant/AdmMiddlewareUrlConstant.java
  15. 2 2
      scanbuilding/src/main/kotlin/com/persagy/server/controller/task/PropertyScanTaskController.kt
  16. 8 8
      scanbuilding/src/main/kotlin/com/persagy/server/mappers/StatisticsCountMapper.kt
  17. 137 5
      scanbuilding/src/main/kotlin/com/persagy/server/services/AdmBaseService.kt
  18. 19 1
      scanbuilding/src/main/kotlin/com/persagy/server/services/DmpBaseService.kt
  19. 51 0
      scanbuilding/src/main/kotlin/com/persagy/server/services/StatisticsCountService.kt
  20. 58 3
      scanbuilding/src/main/kotlin/com/persagy/server/services/task/EquipScanTaskQueryService.kt
  21. 80 47
      scanbuilding/src/main/kotlin/com/persagy/server/services/task/EquipScanTaskService.kt
  22. 42 0
      scanbuilding/src/main/kotlin/com/persagy/server/services/task/ModelScanTaskQueryService.kt
  23. 282 78
      scanbuilding/src/main/kotlin/com/persagy/server/services/task/ModelScanTaskService.kt
  24. 188 22
      scanbuilding/src/main/kotlin/com/persagy/server/services/task/PropertyScanTaskService.kt
  25. 12 8
      scanbuilding/src/main/kotlin/com/persagy/server/services/task/ScanTaskBaseService.kt
  26. 104 0
      scanbuilding/src/main/kotlin/com/persagy/server/util/GeoToolsUtil.java

+ 5 - 0
.idea/jarRepositories.xml

@@ -46,5 +46,10 @@
       <option name="name" value="maven4" />
       <option name="url" value="http://47.93.132.139:8081/nexus/content/groups/public/" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven7" />
+      <option name="name" value="maven7" />
+      <option name="url" value="https://repo.osgeo.org/repository/release/" />
+    </remote-repository>
   </component>
 </project>

+ 4 - 2
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/objects/Equipment.kt

@@ -27,6 +27,7 @@
 package com.persagy.server.datacenter.models.entities.objects
 
 import com.alibaba.fastjson.annotation.JSONField
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties
 import com.persagy.server.datacenter.models.entities.assistant.BIMLocation
 import com.persagy.server.datacenter.models.entities.base.BaseInfo
 import com.persagy.server.datacenter.models.entities.dict.EquipCategory
@@ -43,7 +44,8 @@ import javax.persistence.Table
  * @author  张维新
  */
 @Schema(description = "设备信息实体类")
-@Table(name = "equipment")
+//@Table(name = "equipment")
+@JsonIgnoreProperties(ignoreUnknown = true)
 open class Equipment : BaseInfo() {
 
     /** 设备id */
@@ -282,6 +284,6 @@ open class Equipment : BaseInfo() {
     /** 级联-部件   table  对应关系表   idColumn 对应 本类的id    childIdColumn 级联对象的关系id */
     @Schema(description = "级联-部件")
     @SCascade(table="equipment", idColumn="parent_id", childIdColumn="id")
-    var component: ArrayList<Equipment>? = null
+    var component: ArrayList<Component>? = null
 
 }

+ 5 - 3
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/objects/ZoneIspace.kt

@@ -30,7 +30,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties
 import com.persagy.server.datacenter.models.entities.assistant.PointPosition
 import com.persagy.server.datacenter.models.entities.base.BaseInfo
 import io.swagger.v3.oas.annotations.media.Schema
-import java.util.*
 import javax.persistence.Column
 import javax.persistence.Id
 import javax.persistence.Table
@@ -155,8 +154,11 @@ open class ZoneIspace : BaseInfo() {
     @Column(name = "model_id")
     var modelId: String? = null
 
+   // @Schema(description = "轮廓线")
+   // @Column(name = "outline")
+    //var outline: ArrayList<ArrayList<PointPosition>>? = null
+
     @Schema(description = "轮廓线")
-    @Column(name = "outline")
-    var outline: ArrayList<ArrayList<PointPosition>>? = null
+    val outLine: List<LinkedHashMap<String, Any>>? = null
 
 }

+ 5 - 0
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/task/EquipCategoryDic.kt

@@ -47,4 +47,9 @@ class EquipCategoryDic : Serializable {
     @Schema(description = "name")
     @Column(name = "name")
     var name: String? = null
+
+    /** 名称 */
+    @Schema(description = "classCode")
+    @Column(name = "classCode")
+    var classCode: String? = null
 }

+ 3 - 3
data-core/src/main/kotlin/com/persagy/server/datacenter/models/entities/task/PropertyScanTask.kt

@@ -57,17 +57,17 @@ open class PropertyScanTask : ScanTaskBase() {
 
     /** 级联-项目   table  对应关系表   idColumn 对应 本类的id    childIdColumn 级联对象的关系id */
     @Schema(description = "级联-项目")
-    @SCascade(table="scantask.property_scan_task", idColumn="id", childIdColumn="project_id")
+    //@SCascade(table="scantask.property_scan_task", idColumn="id", childIdColumn="project_id")
     var project: Project? = null
 
     /** 级联-建筑 */
     @Schema(description = "级联-建筑")
-    @SCascade(table="scantask.property_scan_task", idColumn="id", childIdColumn="building_id")
+   // @SCascade(table="scantask.property_scan_task", idColumn="id", childIdColumn="building_id")
     var building: Building? = null
 
     /** 级联-楼层 */
     @Schema(description = "级联-楼层")
-    @SCascade(table="scantask.property_scan_task", idColumn="id", childIdColumn="floor_id")
+    //@SCascade(table="scantask.property_scan_task", idColumn="id", childIdColumn="floor_id")
     var floor: Floor? = null
 
     /** 级联-方案*/

+ 2 - 0
gradle.properties

@@ -28,6 +28,8 @@ MAVEN_REPO_PUBLIC_URL = http://dev.dp.sagacloud.cn:8082/repository/maven-public/
 MAVEN_REPO_RELEASE_URL = http://dev.dp.sagacloud.cn:8082/repository/maven-releases/
 MAVEN_REPO_SNAPSHOT_URL = http://dev.dp.sagacloud.cn:8082/repository/maven-snapshots/
 
+MAVEN_REPO_GEO_SNAPSHOT_URL = https://repo.osgeo.org/repository/release/
+
 NEXUS_USERNAME = admin
 NEXUS_PASSWORD = 123qwe!@#
 

+ 1 - 1
labsl/src/main/kotlin/com/persagy/labsl/models/entities/pbs/Building.kt

@@ -11,7 +11,7 @@ import javax.persistence.Table
  * @date  2020/12/2 19:08
  */
 @Schema(description = "建筑信息实体类")
-@Table(name = "public.building")
+//@Table(name = "public.building")
 class Building {
 
     /** 建筑体ID */

+ 4 - 0
message-center/build.gradle

@@ -103,6 +103,10 @@ dependencies {
     compile group: "com.persagy", name: "persagy-service-base", version: PERSAGY_SERVICE_VERSION
     compile group: "com.persagy", name: "persagy-service-mybatis", version: PERSAGY_SERVICE_VERSION
     compile group: "com.persagy", name: "persagy-service-mysql", version: PERSAGY_SERVICE_VERSION
+    compile group: "com.persagy", name: "dmp-digital-starter", version: DIGITAL_START_VERSION
+
+    // spring cloud 依赖
+    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client', version:  SPRING_CLOUD_CONFIG_VERSION
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // 数据中心依赖

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

@@ -26,11 +26,18 @@
 
 package com.persagy.server.messagecenter.controllers
 
+import cn.hutool.core.collection.CollUtil
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
+import com.fasterxml.jackson.databind.node.ObjectNode
 import com.persagy.base.extensions.toJson
+import com.persagy.dmp.basic.model.QueryCriteria
+import com.persagy.dmp.basic.utils.JsonNodeUtils
+import com.persagy.dmp.digital.client.DigitalObjectFacade
 import com.persagy.server.messagecenter.models.entities.Message
+import com.persagy.server.messagecenter.models.entities.Project
 import com.persagy.server.messagecenter.models.request.MessageRequest
 import com.persagy.server.messagecenter.services.MessageService
-import com.persagy.server.messagecenter.services.activemq.JMSProducer
+import com.persagy.service.SPageContext
 import com.persagy.service.models.requests.SCountRequest
 import com.persagy.service.models.requests.SQueryRequest
 import com.persagy.service.models.requests.SUpdateRequest
@@ -40,9 +47,7 @@ import com.persagy.service.models.responses.SCreateResponse
 import com.persagy.service.models.responses.SQueryResponse
 import io.swagger.v3.oas.annotations.Operation
 import io.swagger.v3.oas.annotations.tags.Tag
-import org.apache.activemq.command.ActiveMQTopic
 import org.slf4j.LoggerFactory
-import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.web.bind.annotation.PostMapping
 import org.springframework.web.bind.annotation.RequestBody
 import org.springframework.web.bind.annotation.RequestMapping
@@ -75,15 +80,48 @@ open class MessageController {
     @PostMapping(value = ["/page-query"])
     fun pageQuery(@RequestBody request: SQueryRequest): SQueryResponse<Message> {
         logger.debug("MessageQuery =${request.toJson()}")
-//        val projectId = SPageContext.getHeader("projectId");
-//
-//        if(projectId != null){
-//            val withFilterList = ArrayList<SFilter>()
-//            withFilterList.add(SFilter.eq("projectId",projectId ))
-//
-//            return MessageService.pageQuery(request,withFilterList)
-//        }
-        return MessageService.pageQuery(request)
+        val response = MessageService.pageQuery(request)
+        if(response == null || response!!.content.isNullOrEmpty()) {
+            return response
+        }
+        val content = response.content
+        val ids = content!!.mapNotNull { it.projectId }
+//        val ids = CollUtil.getFieldValues(response.content, "projectId", String.Companion.javaClass)
+        if(ids == null || ids!!.isNullOrEmpty()) {
+            return response
+        }
+        val idSet = HashSet<String>()
+        idSet.addAll(ids)
+        val cond = QueryCriteria();
+        cond.criteria = JsonNodeFactory.instance.objectNode()
+        val arrayNode = cond.criteria.putArray("id")
+        for(id in idSet) {
+            arrayNode.add(id)
+        }
+        cond.criteria.put("classCode", "project")
+        val projects = DigitalObjectFacade.query(SPageContext.getHeader("groupCode"), null,
+                SPageContext.getHeader("appId"), SPageContext.getHeader("userId"), cond)
+        if(projects == null || projects!!.isNullOrEmpty()) {
+            return response
+        }
+        val projectMap = HashMap<String, ObjectNode>()
+        for(project in projects) {
+            projectMap[project.get("id").textValue()] = project
+        }
+        for(message in content!!) {
+            val project = projectMap[message.projectId]
+            if(project == null) {
+                continue;
+            }
+            val pro = Project();
+            pro.id = project.get("id")!!.textValue()
+            pro.groupCode = project.get("groupCode")!!.textValue();
+            pro.name = project.get("name")!!.textValue();
+            pro.localName = project.get("localName")!!.textValue()
+            pro.localId = project.get("localId")!!.textValue()
+            message.project = arrayListOf(pro)
+        }
+        return response
 
     }
 

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

@@ -4,7 +4,7 @@ eureka:
   client:                                   #客户端注册进eureka服务列表内
     service-url:
       #       defaultZone:                          http://192.168.20.235:8080/cloud-center/eureka
-      defaultZone:                          http://127.0.0.1:8761/eureka
+      defaultZone:                          http://frame:123456@39.105.112.36/integrated-eureka/eureka/
   instance:
     # 实例ID
     # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
@@ -45,7 +45,8 @@ spring:
     multipart:
       max-request-size:                500MB        # 限制上传的多个文件的总大小
       max-file-size:                   500MB        # 限制单个文件的最大值
-
+  main:
+    allow-bean-definition-overriding: true
   kafka:
     bootstrap-servers:                      192.168.20.236:9092
 #    bootstrap-servers:                      127.0.0.1:9092

+ 31 - 30
message-center/src/main/resources/application.yml

@@ -2,36 +2,37 @@ server:
   port: 8080
 
 spring:
-    application:
-      name:                               message-center
-    mvc:
-      favicon:
-        enabled:                          true
-
-    jmx:
-      default-domain:                     message-center
-
-
-    datasource:
-      name:                               message-center
-      type:                               com.alibaba.druid.pool.DruidDataSource
-      driver-class-name:                  com.mysql.cj.jdbc.Driver
-      url:                                jdbc:mysql://rm-2ze20ntn5y9ljsx147o.mysql.rds.aliyuncs.com:3306/message?allowMultiQueries=true&serverTimezone=UTC&useUnicode=true&useSSL=false&characterEncoding=UTF-8
-      username:                           root
-      password:                           zVmW58LaAtjIKbb
-
-    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
-
+  application:
+    name:                               message-center
+  mvc:
+    favicon:
+      enabled:                          true
+
+  jmx:
+    default-domain:                     message-center
+
+
+  datasource:
+    name:                               message-center
+    type:                               com.alibaba.druid.pool.DruidDataSource
+    driver-class-name:                  com.mysql.cj.jdbc.Driver
+    url:                                jdbc:mysql://rm-2ze20ntn5y9ljsx147o.mysql.rds.aliyuncs.com:3306/message?allowMultiQueries=true&serverTimezone=UTC&useUnicode=true&useSSL=false&characterEncoding=UTF-8
+    username:                           root
+    password:                           zVmW58LaAtjIKbb
+
+  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
+  main:
+    allow-bean-definition-overriding: true
 #    activemq:
 #      broker-url:                         tcp://192.168.64.14:61616
 #      in-memory:                          true

+ 2 - 0
scanbuilding/build.gradle

@@ -44,6 +44,7 @@ compileTestKotlin {
 repositories {
     maven{url MAVEN_REPO_NEXUS_PUBLIC_URL}
     maven{url MAVEN_REPO_NEXUS_RELEASE_URL}
+    maven{url MAVEN_REPO_GEO_SNAPSHOT_URL}
     mavenCentral()
     jcenter()
 }
@@ -110,6 +111,7 @@ dependencies {
     // Log 工具
     compile group: "org.projectlombok", name: "lombok", version: LOMBOK_VERSION
 
+    compile group: "org.geotools", name: "gt-main", version: 25.2
 //    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //    // 二维码与条形码
 //    // https://mvnrepository.com/artifact/com.google.zxing/core

+ 57 - 1
scanbuilding/src/main/kotlin/com/persagy/server/client/AdmMiddlewareClient.kt

@@ -1,18 +1,25 @@
 package com.persagy.server.client
 
+import com.alibaba.fastjson.JSONArray
+import com.alibaba.fastjson.JSONObject
+import com.fasterxml.jackson.databind.node.ArrayNode
 import com.persagy.dmp.basic.config.DigitalFeignConfig
 import com.persagy.server.Opts
 import com.persagy.server.constant.AdmMiddlewareUrlConstant
 import com.persagy.server.datacenter.models.entities.objects.Building
+import com.persagy.server.datacenter.models.entities.objects.Component
 import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.server.datacenter.models.entities.objects.Property
 import com.persagy.server.datacenter.models.entities.task.BuildingDic
 import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SUpdateRequest
 import com.persagy.service.models.responses.SQueryResponse
 import org.springframework.cloud.openfeign.FeignClient
 import org.springframework.cloud.openfeign.SpringQueryMap
 import org.springframework.web.bind.annotation.PostMapping
 import org.springframework.web.bind.annotation.RequestBody
 import org.springframework.web.bind.annotation.RequestHeader
+import javax.swing.text.html.parser.Entity
 
 /**
  * @description:数据中台dmp-rwd 物理世界、数据字典、IOT 接口feign
@@ -37,7 +44,56 @@ interface AdmMiddlewareClient{
      * @return: com.persagy.dmp.common.DmpResult
      */
     @PostMapping(AdmMiddlewareUrlConstant.EQUIP_QUERY)
-    fun queryEquip(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?,@RequestBody criteria: SQueryRequest?): SQueryResponse<Equipment>?
+    fun queryEquip(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?,@RequestBody criteria: SQueryRequest?): SQueryResponse<JSONObject>?
 
 
+    /**
+     * @description: 更新设备列表
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(AdmMiddlewareUrlConstant.EQUIP_UPDATE)
+    fun updateEquip(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?, @RequestBody criteria: SUpdateRequest<Equipment>): SUpdateRequest<Equipment>?
+
+
+    /**
+     * @description: 更新设备列表
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(AdmMiddlewareUrlConstant.COMPONENT_UPDATE)
+    fun updateComponent(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?, @RequestBody criteria: SUpdateRequest<Component>): SUpdateRequest<Component>?
+
+
+    /**
+     * @description: 查询资产列表
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(AdmMiddlewareUrlConstant.PROPERTY_QUERY)
+    fun queryProperty(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?,@RequestBody criteria: SQueryRequest?): SQueryResponse<JSONObject>?
+
+
+    /**
+     * @description: 更新资产列表
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(AdmMiddlewareUrlConstant.PROPERTY_UPDATE)
+    fun updateProperty(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?, @RequestBody criteria: SUpdateRequest<Property>): SUpdateRequest<Property>?
+
+
+    /**
+     * @description: 查询元空间列表
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(AdmMiddlewareUrlConstant.ISPACE_QUERY)
+    fun queryIspace(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?,@RequestBody criteria: SQueryRequest?): SQueryResponse<JSONObject>?
+
 }

+ 26 - 1
scanbuilding/src/main/kotlin/com/persagy/server/constant/AdmMiddlewareUrlConstant.java

@@ -14,9 +14,34 @@ public class AdmMiddlewareUrlConstant {
     public final static String BUILDING_QUERY = "/object/building/query";
 
 
-
     /**
      * 设备查询
      */
     public final static String EQUIP_QUERY = "/object/equip/query";
+
+    /**
+     * 设备更新
+     */
+    public final static String EQUIP_UPDATE = "/object/equip/update";
+
+    /**
+     * 部件更新
+     */
+    public final static String COMPONENT_UPDATE = "/object/component/update";
+
+
+    /**
+     * 资产查询
+     */
+    public final static String PROPERTY_QUERY = "/object/property/query";
+
+    /**
+     * 资产更新
+     */
+    public final static String PROPERTY_UPDATE = "/object/property/update";
+
+    /**
+     * 元空间查询
+     */
+    public final static String ISPACE_QUERY = "/object/ispace/query";
 }

+ 2 - 2
scanbuilding/src/main/kotlin/com/persagy/server/controller/task/PropertyScanTaskController.kt

@@ -77,8 +77,8 @@ open class PropertyScanTaskController {
     fun pageQuery(@RequestBody request: SQueryRequest): SQueryResponse<PropertyScanTask> {
         logger.debug("propertyScanTaskQuery =${request.toJson()}")
         val withFilterList = ArrayList<SFilter>()
-        withFilterList.add(SFilter.eq("projectId", SPageContext.getHeader("projectId").toString()))
-        return PropertyScanTaskService.pageQuery(request,withFilterList);
+       // withFilterList.add(SFilter.eq("projectId", SPageContext.getHeader("projectId").toString()))
+        return PropertyScanTaskService.pageQuerys(request);
     } // Function pageQuery()
 
     /**

File diff suppressed because it is too large
+ 8 - 8
scanbuilding/src/main/kotlin/com/persagy/server/mappers/StatisticsCountMapper.kt


+ 137 - 5
scanbuilding/src/main/kotlin/com/persagy/server/services/AdmBaseService.kt

@@ -1,14 +1,19 @@
 package com.persagy.server.services
 
 import cn.hutool.core.collection.CollUtil
+import com.alibaba.fastjson.JSON
+import com.alibaba.fastjson.JSONObject
 import com.persagy.server.Opts
 import com.persagy.server.client.AdmMiddlewareClient
-import com.persagy.server.datacenter.models.entities.objects.Building
-import com.persagy.server.datacenter.models.entities.objects.Equipment
-import com.persagy.server.datacenter.models.entities.task.BuildingDic
+import com.persagy.server.datacenter.models.entities.objects.*
+
+import com.persagy.service.models.SCascadeQuery
 import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.requests.SUpdateRequest
 import com.persagy.service.utils.SSpringContextUtil
 import org.springframework.stereotype.Service
+import java.util.*
+import kotlin.collections.ArrayList
 
 /**
  * ADM基础接口查询
@@ -40,14 +45,141 @@ class AdmBaseService {
     /**
      * 查询设备
      */
-    fun queryEquip(criteria: SQueryRequest?):List<Equipment>?{
+    fun queryEquip(criteria: SQueryRequest?): List<Equipment>? {
         //查询对象信息
         val result = admMiddlewareClient!!.queryEquip(Opts.groupCode,Opts.projectId,criteria) ?: return ArrayList()
         if(CollUtil.isEmpty(result.content)){
             return ArrayList<Equipment>()
         }
-        return result.content
+        return result.content?.let { entityAttributeConvert(it) }
+    }
+
+
+    /**
+     * 更新设备
+     */
+    fun updateEquip(equipments: ArrayList<Equipment>){
+        val sUpdateRequest = SUpdateRequest<Equipment>()
+        sUpdateRequest.content = equipments
+        val updateEquip = admMiddlewareClient.updateEquip(Opts.groupCode, Opts.projectId, sUpdateRequest)
+    }
+
+
+    /**
+     * 更新部件
+     */
+    fun updateComponent(components: ArrayList<Component>){
+        val sUpdateRequest = SUpdateRequest<Component>()
+        sUpdateRequest.content = components
+        val updateEquip = admMiddlewareClient.updateComponent(Opts.groupCode, Opts.projectId, sUpdateRequest)
+    }
+
+    /**
+     * 查询资产
+     */
+    fun queryProperty(criteria: SQueryRequest?): List<Property>? {
+        //查询对象信息
+        val result = admMiddlewareClient!!.queryProperty(Opts.groupCode,Opts.projectId,criteria) ?: return ArrayList()
+        if(CollUtil.isEmpty(result.content)){
+            return ArrayList<Property>()
+        }
+        return result.content?.let { propertyAttributeConvert(it) }
     }
 
 
+    /**
+     * 更新资产
+     */
+    fun updateProperty(properties: ArrayList<Property>){
+        val sUpdateRequest = SUpdateRequest<Property>()
+        sUpdateRequest.content = properties
+        val updateEquip = admMiddlewareClient.updateProperty(Opts.groupCode, Opts.projectId, sUpdateRequest)
+    }
+
+
+    /**
+     * 查询元空间信息
+     */
+    fun queryIspace(criteria: SQueryRequest?): List<ZoneIspace>? {
+        //查询对象信息
+        val result = admMiddlewareClient!!.queryIspace(Opts.groupCode,Opts.projectId,criteria) ?: return ArrayList()
+        if(CollUtil.isEmpty(result.content)){
+            return ArrayList<ZoneIspace>()
+        }
+        val content = ArrayList<ZoneIspace>()
+        for(obj in result.content!!){
+            val ispace = JSON.toJavaObject(obj, ZoneIspace::class.java)
+            content.add(ispace)
+        }
+        return content
+    }
+
+    /**
+     * 实体属性转换
+     */
+    fun entityAttributeConvert(objects:List<JSONObject>): List<Equipment>? {
+        val result = ArrayList<Equipment>()
+        if(objects == null){
+            return result
+        }
+        for(obj in objects){
+            val equipment = JSON.toJavaObject(obj, Equipment::class.java)
+            result.add(equipment)
+        }
+        return result
+    }
+
+
+    /**
+     * 根据设备id查询部件
+     */
+    fun queryComponyByEquipId(id:String): ArrayList<Component>? {
+        var equipRequest = SQueryRequest()
+        equipRequest.filters = "id = '"+id+"'"
+        //级联查询部件
+        var cascade = SCascadeQuery()
+        cascade.name = "component"
+        equipRequest.cascade = arrayListOf(cascade)
+
+        val equipmentList = queryEquip(equipRequest)
+        if(CollUtil.isEmpty(equipmentList)){
+            return ArrayList();
+        }
+        val equipment = equipmentList?.get(0)
+
+        return equipment?.component
+    }
+
+    /**
+     * 根据设备id查询设备信息
+     */
+    fun queryEquipById(id:String): List<Equipment>? {
+        var equipRequest = SQueryRequest()
+        equipRequest.filters = "id = '"+id+"'"
+        return queryEquip(equipRequest)
+    }
+
+    /**
+     * 实体属性转换
+     */
+    fun propertyAttributeConvert(objects:List<JSONObject>): List<Property>? {
+        val result = ArrayList<Property>()
+        if(objects == null){
+            return result
+        }
+        for(obj in objects){
+            val equipment = JSON.toJavaObject(obj, Property::class.java)
+            result.add(equipment)
+        }
+        return result
+    }
+
+    /**
+     * 根据设备id查询设备信息
+     */
+    fun queryPropertyById(id:String): List<Property>? {
+        var equipRequest = SQueryRequest()
+        equipRequest.filters = "id = '"+id+"'"
+        return queryProperty(equipRequest)
+    }
 }

+ 19 - 1
scanbuilding/src/main/kotlin/com/persagy/server/services/DmpBaseService.kt

@@ -1,10 +1,12 @@
 package com.persagy.server.services
 
 import cn.hutool.core.collection.CollUtil
-import com.alibaba.fastjson.JSONArray
 import com.alibaba.fastjson.JSONObject
+import com.persagy.dmp.basic.utils.JsonNodeUtils
+import com.persagy.dmp.digital.entity.ObjectDigital
 import com.persagy.server.Opts
 import com.persagy.server.client.DmpDicClient
+import com.persagy.server.datacenter.models.entities.dict.EquipCategory
 import com.persagy.server.datacenter.models.entities.task.EquipCategoryDic
 import com.persagy.server.entities.request.InstanceUrlParam
 import com.persagy.server.util.AdmEntityTransferUtil
@@ -42,5 +44,21 @@ class DmpBaseService {
         return AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.data, null, EquipCategoryDic::class.java)
     }
 
+    /**
+     * 查询设备类型
+     */
+    fun getEquipCategory(classCode:String): List<EquipCategory>? {
+        //查询中台类型数据,2021.10.25日中心中台整合调整
+        val param = JSONObject()
+        val criteria = JSONObject()
+        criteria["code"] = classCode!!
+        param["criteria"] = criteria
+        val dictTypes = queryDictType(param)
+        return AdmEntityTransferUtil.toAdmMultiEntity(dictTypes, null, EquipCategory::class.java)
+
+    }
+
+
+
 
 }

File diff suppressed because it is too large
+ 51 - 0
scanbuilding/src/main/kotlin/com/persagy/server/services/StatisticsCountService.kt


+ 58 - 3
scanbuilding/src/main/kotlin/com/persagy/server/services/task/EquipScanTaskQueryService.kt

@@ -33,6 +33,7 @@ import com.persagy.database.functions.SLength
 import com.persagy.mybatis.SMybatisDao
 import com.persagy.server.datacenter.models.entities.dictnew.DefClass
 import com.persagy.server.datacenter.models.entities.objects.Equipment
+import com.persagy.server.datacenter.models.entities.task.CategoryStatistics
 import com.persagy.server.datacenter.models.entities.task.EquipScanTaskQuery
 import com.persagy.server.services.AdmBaseService
 import com.persagy.server.services.DmpBaseService
@@ -51,7 +52,7 @@ import java.util.stream.Collectors
  *
  * @author  邓婷婷
  */
-object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDao(EquipScanTaskQuery::class.java))  {
+object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDao(EquipScanTaskQuery::class.java))  { // Class EquipScanTaskService
 
     /** 字典平台对象类型 */
   //  private val defClassService = SBaseService(SMybatisDao(DefClass::class.java))
@@ -78,6 +79,18 @@ object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDa
             val equipScanTaskList = pageQuery.content
             var cascadeQueryAdmEquip = arrayListOf<Equipment>()
             if (equipScanTaskList != null) {
+
+                val cascades = ArrayList<SCascadeQuery>()
+                //级联查询建筑
+                val buildCacade = SCascadeQuery()
+                buildCacade.name = "building"
+                cascades.add(buildCacade)
+                //级联查询楼层
+                val floorCacade = SCascadeQuery()
+                floorCacade.name="floor"
+                cascades.add(floorCacade)
+                request.cascade= cascades
+
                 cascadeQueryAdmEquip = cascadeQueryAdmEquip(equipScanTaskList, request) as ArrayList<Equipment>
             }
             val equipMap = cascadeQueryAdmEquip?.stream()?.collect(Collectors.groupingBy { item: Equipment -> item.id })
@@ -176,7 +189,7 @@ object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDa
         }
         val equipIds = equipScanTaskList?.stream()?.map(EquipScanTaskQuery::equipId)?.collect(Collectors.toList<String>())
         var equipRequest = SQueryRequest()
-        equipRequest.filters = "id in "+"(\'" + java.lang.String.join("\',\'", equipIds) + "\'"
+        equipRequest.filters = "id in "+"(\'" + java.lang.String.join("\',\'", equipIds) + "\')"
 
         val requestCascade = request.cascade
         //查询级联关系
@@ -195,4 +208,46 @@ object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDa
     }
 
 
-} // Class EquipScanTaskService
+
+    /**
+     * 分类统计
+     */
+    fun categoryStatistics(projectId:String,id: String,equipId: String): ArrayList<CategoryStatistics>{
+        val result = ArrayList<CategoryStatistics>()
+        //查询所有的设备类别
+        val dictTypeList = dmpBaseService?.queryDictType(JSONObject())
+        val dictTypeMap = HashMap<String, String>()
+        if (dictTypeList != null) {
+            for(dictType in dictTypeList){
+                dictType.code?.let { dictType.name?.let { it1 -> dictTypeMap.put(it, it1) } }
+            }
+        }
+
+        //查询设备任务
+        val request = SQueryRequest()
+        val withFilterList = ArrayList<SFilter>()
+        withFilterList.add(SFilter.eq("projectId", projectId))
+        withFilterList.add(SFilter.eq("taskParentId", id))
+        withFilterList.add(SFilter.eq("parentId", equipId))
+        val pageQuery = EquipScanTaskQueryService.pageQuery(request, withFilterList)
+        val equipScanTask = pageQuery.content
+
+        if (!pageQuery.content.isNullOrEmpty()&&pageQuery.content!!.size>0) {
+            val equipScanTaskMap: Map<String?, List<EquipScanTaskQuery>> = equipScanTask?.stream()
+                    ?.collect(Collectors.groupingBy(EquipScanTaskQuery::classCode)) as Map<String?, List<EquipScanTaskQuery>>
+
+            for ((key, value) in equipScanTaskMap.entries) {
+                val categoryStatistics = CategoryStatistics()
+                categoryStatistics.code = key
+                categoryStatistics.name = dictTypeMap.get(key)
+                categoryStatistics.count = value.size
+                result.add(categoryStatistics)
+            }
+
+        }
+        return result
+    }
+
+
+
+}

+ 80 - 47
scanbuilding/src/main/kotlin/com/persagy/server/services/task/EquipScanTaskService.kt

@@ -36,6 +36,7 @@ import com.persagy.database.SFilter
 import com.persagy.mybatis.SMybatisDao
 import com.persagy.server.Opts
 import com.persagy.server.datacenter.models.entities.assistant.TaskPic
+import com.persagy.server.datacenter.models.entities.objects.Component
 import com.persagy.server.datacenter.models.entities.objects.Equipment
 import com.persagy.server.datacenter.models.entities.task.EquipScanTask
 import com.persagy.server.datacenter.models.entities.task.SchemeUtils
@@ -43,7 +44,6 @@ import com.persagy.server.scanbuilding.UserLog
 import com.persagy.server.services.AdmBaseService
 import com.persagy.server.services.EquipmentService
 import com.persagy.server.services.base.RService
-
 import com.persagy.server.util.IdUtils
 import com.persagy.service.SBaseService
 import com.persagy.service.SObjectService
@@ -51,6 +51,7 @@ import com.persagy.service.SPageContext
 import com.persagy.service.models.SCascadeQuery
 import com.persagy.service.models.requests.SCreateRequest
 import com.persagy.service.models.requests.SQueryRequest
+import org.omg.CORBA.INTERNAL
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.web.bind.annotation.RequestBody
@@ -121,10 +122,7 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
                /* val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
                 val equipment = equipmentService.select(SFilter.eq("id", equipScanTask.equipId!!)).entity()*/
                 //2021.10.26调整为从中间件查询设备信息
-                var equipRequest = SQueryRequest()
-                equipRequest.filters = "id = '"+equipScanTask.equipId+"'"
-                val equipmentList = admBaseService?.queryEquip(equipRequest)
-
+                val equipmentList = admBaseService?.queryEquipById(equipScanTask.equipId!!)
                 if(CollUtil.isEmpty(equipmentList)){
                     return false
                     logger.info("设备任务创建:设备不存在 id "+equipScanTask.equipId)
@@ -132,7 +130,8 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
                 val equipment = equipmentList?.get(0)
                 if (equipScanTask.schemeId.isNullOrEmpty()){
                     if (equipmentList != null) {
-                        equipScanTask.schemeId = SchemeUtils.setScheme(equipmentList.get(0)!!.classCode!!)
+                        val equipment = equipmentList.get(0);
+                        equipScanTask.schemeId = SchemeUtils.setScheme(equipment!!.classCode!!)
                     }
                 }
 //                equipment.ledgerParam.PhotoDoc.Pic
@@ -280,20 +279,7 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
             //val componentList = equipmentService.select("parentId" to task.equipId!!).exec()
 
             //2021.10.26调整为从中间件查询设备信息
-            var equipRequest = SQueryRequest()
-            equipRequest.filters = "id = '"+task.equipId+"'"
-            //级联查询部件
-            var cascade = SCascadeQuery()
-            cascade.name = "component"
-            equipRequest.cascade = arrayListOf(cascade)
-
-            val equipmentList = admBaseService?.queryEquip(equipRequest)
-            if(CollUtil.isEmpty(equipmentList)){
-                return ;
-            }
-            val equipment = equipmentList?.get(0)
-
-            val componentList = equipment?.component
+            val componentList = task.equipId?.let { queryComponyByEquipId(it) }
             if (componentList != null) {
                 for(equipment in componentList){
                     val equipScanTask = EquipScanTask()
@@ -331,6 +317,26 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
 
     } // Fun onCreateSuccess
 
+
+    /**
+     * 根据设备id查询部件
+     */
+     fun queryComponyByEquipId(id:String): ArrayList<Component>? {
+        var equipRequest = SQueryRequest()
+        equipRequest.filters = "id = '"+id+"'"
+        //级联查询部件
+        var cascade = SCascadeQuery()
+        cascade.name = "component"
+        equipRequest.cascade = arrayListOf(cascade)
+
+        val equipmentList = admBaseService?.queryEquip(equipRequest)
+        if(CollUtil.isEmpty(equipmentList)){
+            return ArrayList();
+        }
+        val equipment = equipmentList?.get(0)
+
+        return equipment?.component
+    }
     /**
      * 状态修改完成之后,若修改为  已完成状态  则级联部件任务状态全部修改为  已完成
      */
@@ -339,7 +345,8 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
         for (task in list) {
             val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
             if(task.equipId == null ){
-                val equipScanTaskScanTask = EquipScanTaskService.select("id" to task.id!!).entity()
+                //val equipScanTaskScanTask = EquipScanTaskService.select("id" to task.id!!).entity()
+                val equipScanTaskScanTask = EquipScanTaskService.select(SFilter.eq("id", task.id!!)).entity()
                 task.equipId = equipScanTaskScanTask!!.equipId
             }
             if (!task.confirmingPersonId.isNullOrEmpty()&&task.taskState == 0){
@@ -356,7 +363,8 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
                 updateComponetTaskStatus(task)
             }
             //更改设备对象的状态
-            val equipmentOld = equipmentService.select("id" to task.equipId!!).entity()
+            //val equipmentOld = equipmentService.select("id" to task.equipId!!).entity()
+            val equipmentOld = admBaseService?.queryEquipById(task.equipId!!)?.get(0)
             if(equipmentOld!!.taskState != -1){//未找到
                 val equip = Equipment()
                 equip.id = task.equipId!!
@@ -390,18 +398,28 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
      */
     fun updateComponetObjStatus(task: EquipScanTask){
         val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
-        val componentList = equipmentService.select("parentId" to task!!.equipId!!).exec()
-
+        //val componentList = equipmentService.select("parentId" to task!!.equipId!!).exec()
+        val componentList = task.equipId?.let { queryComponyByEquipId(it) }
         if(task.taskState == 1 || task.taskState == -1){ // 待验证和未找到
-            for(component in componentList){
-                component.taskState = task.taskState
-                equipmentService.update(component)
+            if (componentList != null) {
+                for(component in componentList){
+                    val infos = HashMap<String, Any?>()
+                    infos.put("taskState",task.taskState!!)
+                    component.infos = infos
+                  // equipmentService.update(component)
+                    admBaseService?.updateComponent(arrayListOf(component))
+                }
             }
         }else if(task.taskState == 0){ // 已完成
-            for(component in componentList){
-                if(component.taskState != -1){//如果部件状态为未找到,则不改变状态
-                    component.taskState = task.taskState
-                    equipmentService.update(component)
+            if (componentList != null) {
+                for(component in componentList){
+                    if(component.taskState != -1){//如果部件状态为未找到,则不改变状态
+                        val infos = HashMap<String, Any?>()
+                        infos.put("taskState",task.taskState!!)
+                        component.infos = infos
+                        //equipmentService.update(component)
+                        admBaseService?.updateComponent(arrayListOf(component))
+                    }
                 }
             }
         }
@@ -413,9 +431,8 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
     fun updateComponetTaskStatus(task: EquipScanTask){
         val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
         val equipScanTaskService = SBaseService(SMybatisDao(EquipScanTask::class.java))
-
-        val componentTaskList = equipScanTaskService.select("parentId" to task!!.equipId!!).exec()
-
+       // val componentTaskList = equipScanTaskService.select("parentId" to task!!.equipId!!).exec()
+        val componentTaskList = equipScanTaskService.select(SFilter.eq("projectId", task!!.equipId!!)).exec()
         for(childTask in componentTaskList){
             childTask.taskState = task.taskState
             EquipScanTaskService.update(childTask)
@@ -426,11 +443,17 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
      * 更新设备对象状态时,对应更改部件对象状态
      */
     fun resetComponetObjStatus(task: EquipScanTask){
-        val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
-        val componentList = equipmentService.select("parentId" to task!!.equipId!!).exec()
-        for(component in componentList){
-            component.taskState = task.taskState
-            equipmentService.update(component)
+       // val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
+        // val componentList = equipmentService.select("parentId" to task!!.equipId!!).exec()
+        val componentList = queryComponyByEquipId(task!!.equipId!!)
+        if (componentList != null) {
+            for(component in componentList){
+                val infos = HashMap<String, Any?>()
+                infos.put("taskState",task.taskState!!)
+                component.infos = infos
+                //equipmentService.update(component)
+                admBaseService?.updateComponent(arrayListOf(component))
+            }
         }
     }
 
@@ -440,7 +463,9 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
     fun resetTaskStatus(task: EquipScanTask) {
         val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
         val equipScanTaskService = SBaseService(SMybatisDao(EquipScanTask::class.java))
-        val resetTask = equipScanTaskService.select("equipId" to task.equipId!!, "taskState" to -1).entity()
+
+        //val resetTask = equipScanTaskService.select("equipId" to task.equipId!!, "taskState" to -1).entity()
+        val resetTask = equipScanTaskService.select(SFilter.eq("equipId", task!!.equipId!!), SFilter.eq("taskState",-1)).entity()
         if (resetTask != null) {
             resetTask.taskState = 0
             equipScanTaskService.update(resetTask)//更改设备任务状态
@@ -451,13 +476,16 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
          * 重新生成任务时,将设备和部件状态改变为待验证
          */
      fun resetObjStatus(task: EquipScanTask){
-        val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
-
+       // val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
         //更改设备对象状态
         val equip = Equipment()
         equip.id = task.equipId!!
-        equip.taskState = task.taskState
-        equipmentService.update(equip)
+
+        val infos = HashMap<String, Any?>()
+        infos.put("taskState",task.taskState!!)
+        equip.infos = infos
+
+        admBaseService?.updateEquip(arrayListOf(equip))
         //更改部件对象状态
         resetComponetObjStatus(task)
     }
@@ -465,11 +493,16 @@ object EquipScanTaskService : RService<EquipScanTask>(SMybatisDao(EquipScanTask:
     override fun onDeleteBefore(entity: EquipScanTask): Boolean {
         try {
             val entity2 = select(SFilter.eq("id", entity.id!!)).entity()
-            val entity1 = EquipmentService.select(SFilter.eq("id", entity2!!.equipId!!)).entity()
+            //val entity1 = EquipmentService.select(SFilter.eq("id", entity2!!.equipId!!)).entity()
+            val entity1 = admBaseService?.queryEquipById(entity2!!.equipId!!)?.get(0)
             if (entity1!=null){
                 if (entity1.taskState == 1){
-                    entity1.taskState = null
-                    EquipmentService.update(entity1, arrayListOf("taskState"))
+                    //entity1.taskState = null
+                    val infos = HashMap<String, Any?>()
+                    infos.put("taskState",null)
+                    entity1.infos = infos
+                   // EquipmentService.update(entity1, arrayListOf("taskState"))
+                    admBaseService?.updateEquip(arrayListOf(entity1))
                 }
             }
         } catch (e: Exception) {

+ 42 - 0
scanbuilding/src/main/kotlin/com/persagy/server/services/task/ModelScanTaskQueryService.kt

@@ -31,6 +31,8 @@ import com.persagy.database.SFilter
 import com.persagy.database.functions.SLength
 import com.persagy.mybatis.SMybatisDao
 import com.persagy.server.datacenter.models.entities.dictnew.DefClass
+import com.persagy.server.datacenter.models.entities.task.CategoryStatistics
+import com.persagy.server.datacenter.models.entities.task.EquipScanTaskQuery
 import com.persagy.server.datacenter.models.entities.task.ModelScanTaskQuery
 import com.persagy.server.services.DmpBaseService
 import com.persagy.server.services.base.RService
@@ -40,6 +42,7 @@ import com.persagy.service.SPageContext
 import com.persagy.service.models.requests.SQueryRequest
 import com.persagy.service.models.responses.SQueryResponse
 import org.springframework.beans.factory.annotation.Autowired
+import java.util.stream.Collectors
 
 
 /**
@@ -112,4 +115,43 @@ object ModelScanTaskQueryService : RService<ModelScanTaskQuery>(SMybatisDao(Mode
         return pageQuery
     } // Fun
 
+
+    /**
+     * 分类统计
+     */
+    fun categoryStatisticsModel(projectId:String,id: String,equipId: String): ArrayList<CategoryStatistics>{
+        val result = ArrayList<CategoryStatistics>()
+        //查询所有的设备类别
+        val dictTypeList = dmpBaseService?.queryDictType(JSONObject())
+        val dictTypeMap = HashMap<String, String>()
+        if (dictTypeList != null) {
+            for(dictType in dictTypeList){
+                dictType.code?.let { dictType.name?.let { it1 -> dictTypeMap.put(it, it1) } }
+            }
+        }
+        //查询设备任务
+        val request = SQueryRequest()
+        val withFilterList = ArrayList<SFilter>()
+        withFilterList.add(SFilter.eq("projectId", projectId))
+        withFilterList.add(SFilter.eq("taskParentId", id))
+        withFilterList.add(SFilter.eq("parentId", equipId))
+        val pageQuery = ModelScanTaskQueryService.pageQuery(request, withFilterList)
+        val equipScanTask = pageQuery.content
+
+        if (!pageQuery.content.isNullOrEmpty()&&pageQuery.content!!.size>0) {
+            val equipScanTaskMap: Map<String?, List<ModelScanTaskQuery>> = equipScanTask?.stream()
+                    ?.collect(Collectors.groupingBy(ModelScanTaskQuery::classCode)) as Map<String?, List<ModelScanTaskQuery>>
+
+            for ((key, value) in equipScanTaskMap.entries) {
+                val categoryStatistics = CategoryStatistics()
+                categoryStatistics.code = key
+                categoryStatistics.name = dictTypeMap.get(key)
+                categoryStatistics.count = value.size
+                result.add(categoryStatistics)
+            }
+
+        }
+        return result
+    }
+
 } // Class ModelScanTaskService

File diff suppressed because it is too large
+ 282 - 78
scanbuilding/src/main/kotlin/com/persagy/server/services/task/ModelScanTaskService.kt


+ 188 - 22
scanbuilding/src/main/kotlin/com/persagy/server/services/task/PropertyScanTaskService.kt

@@ -26,6 +26,7 @@
 
 package com.persagy.server.services.task
 
+import cn.hutool.core.collection.CollUtil
 import cn.sagacloud.server.scanbuilding.User
 import com.alibaba.fastjson.JSONObject
 import com.google.gson.Gson
@@ -33,23 +34,35 @@ import com.google.gson.reflect.TypeToken
 import com.persagy.base.extensions.toJson
 import com.persagy.database.SFilter
 import com.persagy.database.SPageQueryInfo
+import com.persagy.database.functions.SLength
 import com.persagy.mybatis.SMybatisDao
 import com.persagy.server.Opts
 import com.persagy.server.datacenter.models.entities.assistant.TaskPic
 import com.persagy.server.datacenter.models.entities.dict.EquipFamilyCategory
+import com.persagy.server.datacenter.models.entities.dictnew.DefClass
+import com.persagy.server.datacenter.models.entities.objects.Equipment
 import com.persagy.server.datacenter.models.entities.objects.Property
+import com.persagy.server.datacenter.models.entities.task.EquipScanTaskQuery
 import com.persagy.server.datacenter.models.entities.task.PropertyScanTask
 import com.persagy.server.datacenter.models.entities.task.SchemeUtils
 import com.persagy.server.scanbuilding.UserLog
+import com.persagy.server.services.AdmBaseService
+import com.persagy.server.services.DmpBaseService
 import com.persagy.server.services.base.RService
+import com.persagy.server.util.AdmEntityTransferUtil
 import com.persagy.server.util.IdUtils
 import com.persagy.service.SBaseService
 import com.persagy.service.SObjectService
 import com.persagy.service.SPageContext
+import com.persagy.service.models.SCascadeQuery
 import com.persagy.service.models.requests.SCreateRequest
+import com.persagy.service.models.requests.SQueryRequest
+import com.persagy.service.models.responses.SQueryResponse
 import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.web.bind.annotation.RequestBody
 import java.util.*
+import java.util.stream.Collectors
 import kotlin.collections.ArrayList
 
 /**
@@ -66,8 +79,113 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
     var userLogService = SObjectService(SMybatisDao(UserLog::class.java))
     /** 用户 */
     var userService = SObjectService(SMybatisDao(User::class.java))
+
     /** 用户 */
-    var equipFamilyCategoryService = SObjectService(SMybatisDao(EquipFamilyCategory::class.java))
+    //var equipFamilyCategoryService = SObjectService(SMybatisDao(EquipFamilyCategory::class.java))
+
+    @Autowired
+    private val admBaseService: AdmBaseService? = AdmBaseService()
+
+    @Autowired
+    private val dmpBaseService: DmpBaseService? = DmpBaseService()
+
+
+    fun pageQuerys(request: SQueryRequest): SQueryResponse<PropertyScanTask> {
+        //查询设备台账任务
+        val projectId = SPageContext.getHeader("projectId").toString()
+        val withFilterList = ArrayList<SFilter>()
+        withFilterList.add(SFilter.eq("projectId", SPageContext.getHeader("projectId").toString()))
+        //withFilterList.add(SFilter.lt(SLength("classCode"), 7))
+        val pageQuery = PropertyScanTaskService.pageQuery(request, withFilterList)
+        if (!pageQuery.content.isNullOrEmpty()&&pageQuery.content!!.size>0){
+
+            //级联查询设备相关信息:建筑,楼层,空间等
+            val equipScanTaskList = pageQuery.content
+            var cascadeQueryAdmEquip = arrayListOf<Property>()
+            if (equipScanTaskList != null) {
+
+                val cascades = ArrayList<SCascadeQuery>()
+                //级联查询建筑
+                val buildCacade = SCascadeQuery()
+                buildCacade.name = "building"
+                cascades.add(buildCacade)
+                //级联查询楼层
+                val floorCacade = SCascadeQuery()
+                floorCacade.name="floor"
+                cascades.add(floorCacade)
+
+                val cascade = request.cascade
+                if (cascade != null) {
+                    cascade.addAll(cascades)
+                    request.cascade= cascade
+                }else{
+                    request.cascade= cascades
+                }
+                cascadeQueryAdmEquip = cascadeQueryAdmProperty(equipScanTaskList, request) as ArrayList<Property>
+            }
+            val equipMap = cascadeQueryAdmEquip?.stream()?.collect(Collectors.groupingBy { item: Property -> item.id })
+            for (content in pageQuery.content!!){
+                //设置级联查询结果
+                val caseNodes = equipMap.get(content.equipId)
+                if(CollUtil.isNotEmpty(caseNodes)){
+                    val equip = caseNodes?.get(0)
+                    if (equip != null) {
+                        content.building = equip.building
+                        content.floor = equip.floor
+                        /*val component = equip.component
+                        val toAdmMultiEntity = AdmEntityTransferUtil.toAdmMultiEntity(component, null, EquipScanTaskQuery::class.java)
+                        content.component = toAdmMultiEntity*/
+                    }
+                }
+
+                //查询组件
+               /* val exec = EquipScanTaskQueryService.select(SFilter.eq("parentId", content.equipId!!), SFilter.eq("taskParentId", content.id!!)).exec()
+                if (exec.size>0){
+                    content.component = exec
+                }*/
+                //查询中台类型数据,2021.10.25日中心中台整合调整
+                val param = JSONObject()
+                val criteria = JSONObject()
+                criteria["code"] = content.classCode!!
+                param["criteria"] = criteria
+                val dictTypes = dmpBaseService?.queryDictType(param)
+                val entity = AdmEntityTransferUtil.toAdmMultiEntity(dictTypes, null, EquipFamilyCategory::class.java)?.get(0)
+                if (entity!=null) {
+                    content.equipFamily = entity
+                }
+            }
+        }
+        return pageQuery
+    } // Fun
+
+    /**
+     * 级联查询资产相关信息:建筑,楼层,空间等
+     */
+    fun cascadeQueryAdmProperty(equipScanTaskList: List<PropertyScanTask>?, request: SQueryRequest): List<Property>? {
+        //级联查询设备相关信息:建筑,楼层,空间等
+        if(CollUtil.isEmpty(equipScanTaskList)){
+            return ArrayList<Property>()
+        }
+        val equipIds = equipScanTaskList?.stream()?.map(PropertyScanTask::equipId)?.collect(Collectors.toList<String>())
+        var equipRequest = SQueryRequest()
+        equipRequest.filters = "id in "+"(\'" + java.lang.String.join("\',\'", equipIds) + "\')"
+
+        val requestCascade = request.cascade
+        //查询级联关系
+        val cascadeList = arrayListOf<SCascadeQuery>()
+        if (requestCascade != null) {
+            for(cascade in requestCascade){
+                if("scanScheme".equals(cascade.name)){
+                    continue
+                }
+                cascadeList.add(cascade)
+            }
+            equipRequest.cascade = cascadeList;
+            return admBaseService?.queryProperty(equipRequest)
+        }
+        return ArrayList<Property>()
+    }
+
     /**
      * 插入之前先过滤已经存在未验证任务的对象,返回新列表
      */
@@ -75,7 +193,7 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
         val propertyTaskList = request.content;
         var newList = arrayListOf<PropertyScanTask>()
         for(property in propertyTaskList){
-            val propertyTask = PropertyScanTaskService.select("equipId" to property.equipId!!,"taskState" to 1).entity()
+            val propertyTask = PropertyScanTaskService.select(SFilter.eq("equipId", property.equipId!!),SFilter.eq("taskState", 1)).entity()
             if(propertyTask==null){//表示当前设备已经存在未验证的任务
                 newList.add(property)
             }
@@ -97,7 +215,9 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
                 flag = true
 
                 val propertyScanTaskService = SBaseService(SMybatisDao(PropertyScanTask::class.java))
-                val resetTask = propertyScanTaskService.select("equipId" to propertyScanTask.equipId!!,"taskState" to -1).entity()
+               val resetTask = propertyScanTaskService.select(SFilter.eq("equipId", propertyScanTask.equipId!!),SFilter.eq("taskState", -1)
+               ).entity()
+
                 if( resetTask!=null ){
                     resetTask.taskState = 0
                     propertyScanTaskService.update(resetTask)
@@ -114,8 +234,10 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
             propertyScanTask.taskState = 1//任务状态为待验证
             propertyScanTask.taskType = "1"
             if (!propertyScanTask.equipId.isNullOrEmpty()) {//当设备id不为空时,去设备表查询对应的详细信息
-                val propertyService = SBaseService(SMybatisDao(Property::class.java))
-                val property = propertyService.select("id" to propertyScanTask.equipId!!).entity()
+               // val propertyService = SBaseService(SMybatisDao(Property::class.java))
+               // val property = propertyService.select(SFilter.eq("id", propertyScanTask.equipId!!)
+                //).entity()
+                val property = admBaseService?.queryPropertyById(propertyScanTask.equipId!!)?.get(0)
                 if (propertyScanTask.schemeId.isNullOrEmpty()){
                     propertyScanTask.schemeId = SchemeUtils.setScheme(property!!.family!!)
                 }
@@ -234,13 +356,28 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
 
 
     override fun onDeleteBefore(entity: PropertyScanTask): Boolean {
-        val entity1 = select(SFilter.eq("id", entity.id!!)).entity()
-        val propertyService = SBaseService(SMybatisDao(Property::class.java))
-        val property = propertyService.select(SFilter.eq("id", entity1!!.equipId!!)).entity()
-        val list = ArrayList<String>()
-        list.add("TaskState")
-        property!!.taskState = null
-        propertyService.update(property,list)
+        /*  val entity1 = select(SFilter.eq("id", entity.id!!)).entity()
+         val propertyService = SBaseService(SMybatisDao(Property::class.java))
+         val property = propertyService.select(SFilter.eq("id", entity1!!.equipId!!)).entity()
+
+          val list = ArrayList<String>()
+          list.add("TaskState")
+          property!!.taskState = null
+          propertyService.update(property,list)*/
+
+        val property = admBaseService?.queryPropertyById(entity!!.equipId!!)?.get(0)
+        val infos = HashMap<String, Any?>()
+        infos.put("taskState",null)
+        if (property != null) {
+            property.infos = infos
+        }
+
+        val list = ArrayList<Property>()
+        if (property != null) {
+            list.add(property)
+        }
+        admBaseService?.updateProperty(list)
+
         return super.onDeleteBefore(entity)
     }
 
@@ -250,11 +387,21 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
      */
     override fun onCreateSuccess(propertyScanTaskList: ArrayList<PropertyScanTask>) {
         for(task in propertyScanTaskList){
-            val property = Property()
+            /*val property = Property()
             val propertyService = SBaseService(SMybatisDao(Property::class.java))
             property.id = task.equipId!!
             property.taskState = 1
-            propertyService.update(property)
+            propertyService.update(property)*/
+
+            val property = Property()
+            property.id = task.equipId!!
+            val infos = HashMap<String, Any?>()
+            infos.put("taskState",1)
+            if (property != null) {
+                property.infos = infos
+            }
+            admBaseService?.updateProperty(arrayListOf(property))
+
         }
     } // Fun onCreateSuccess
 
@@ -264,18 +411,28 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
     override fun onUpdateSuccess(list: ArrayList<PropertyScanTask>) {
         val projectId = SPageContext.getHeader("projectId")
         for (task in list) {
-            val propertyService = SBaseService(SMybatisDao(Property::class.java))
+           // val propertyService = SBaseService(SMybatisDao(Property::class.java))
             if(task.equipId == null ){
-                val propertyScanTask = PropertyScanTaskService.select("id" to task.id!!).entity()
+                val propertyScanTask = PropertyScanTaskService.select(SFilter.eq("id", task.id!!)).entity()
                 task.equipId = propertyScanTask!!.equipId
             }
             //更改设备对象的状态
-            val propertyOld = propertyService.select("id" to task.equipId!!).entity()
+            //val propertyOld = propertyService.select(SFilter.eq("id", task.equipId!!)).entity()
+            val propertyOld = admBaseService?.queryPropertyById(task!!.equipId!!)?.get(0)
             if(propertyOld!!.taskState != -1) {//未找到
-                val property = Property()
+              /*  val property = Property()
                 property.id = task.equipId!!
                 property.taskState = task.taskState
-                propertyService.update(property)
+                propertyService.update(property)*/
+
+                val property = Property()
+                property.id = task.equipId!!
+                val infos = HashMap<String, Any?>()
+                infos.put("taskState",task.taskState!!)
+                if (property != null) {
+                    property.infos = infos
+                }
+                admBaseService?.updateProperty(arrayListOf(property))
             }
             try {
                 if (!Opts.coming.isNullOrEmpty()&&Opts.coming == "app"){
@@ -300,17 +457,26 @@ object PropertyScanTaskService : RService<PropertyScanTask>(SMybatisDao(Property
     } // Fun onUpdateSuccess
 
     override fun onQuerySuccess(pageInfo: SPageQueryInfo<PropertyScanTask>) {
-        if (!pageInfo.content.isNullOrEmpty()){
+       /* if (!pageInfo.content.isNullOrEmpty()){
             for (content in pageInfo.content!!){
-                val entity = equipFamilyCategoryService.select(SFilter.eq("family", content.classCode!!)).entity()
+              //  val entity = equipFamilyCategoryService.select(SFilter.eq("family", content.classCode!!)).entity()
+                //查询中台类型数据,2021.10.25日中心中台整合调整
+                val param = JSONObject()
+                val criteria = JSONObject()
+                criteria["code"] = content.classCode!!
+                param["criteria"] = criteria
+                val dictTypes = dmpBaseService?.queryDictType(param)
+                val entity = AdmEntityTransferUtil.toAdmMultiEntity(dictTypes, null, EquipFamilyCategory::class.java)?.get(0)
                 if (entity!=null) {
                     content.equipFamily = entity
                 }else {
 
                 }
             }
-        }
+        }*/
         super.onQuerySuccess(pageInfo)
     }
 
+
+
 } // Class PropertyScanTaskService

+ 12 - 8
scanbuilding/src/main/kotlin/com/persagy/server/services/task/ScanTaskBaseService.kt

@@ -36,6 +36,7 @@ import com.persagy.server.datacenter.models.entities.task.base.ScanTaskBase
 import com.persagy.server.mappers.StatisticsCountMapper
 import com.persagy.server.services.AdmBaseService
 import com.persagy.server.services.DmpBaseService
+import com.persagy.server.services.StatisticsCountService
 import com.persagy.server.services.base.RService
 import com.persagy.server.util.AdmEntityTransferUtil
 import com.persagy.service.SPageContext
@@ -64,6 +65,9 @@ object ScanTaskBaseService : RService<ScanTaskBase>(SMybatisDao(ScanTaskBase::cl
     @Autowired
     private val admBaseService: AdmBaseService? = AdmBaseService()
 
+    @Autowired
+    private val statisticsCountService: StatisticsCountService? = StatisticsCountService()
+
     /**
      * 查询所有设备类型或设备族
      */
@@ -178,13 +182,13 @@ object ScanTaskBaseService : RService<ScanTaskBase>(SMybatisDao(ScanTaskBase::cl
                 var buildingRequest = SQueryRequest()
 
                // buildingRequest.filters = "id in (" +builds!!.joinToString(",", ",", "'").substring(1) + ")"
-                buildingRequest.filters = "id in "+"(\'" + java.lang.String.join("\',\'", builds) + "\'"
+                buildingRequest.filters = "id in "+"(\'" + java.lang.String.join("\',\'", builds) + "\')"
                 buildingRequest.pageSize = 1000
                 buildingRequest.pageNumber = 1
                 var cascade = SCascadeQuery()
                 cascade.name = "floor"
                 //cascade.filters = "id in (" +floors!!.joinToString(",", ",", "'").substring(1) + ")"
-                cascade.filters = "id in "+"(\'" + java.lang.String.join("\',\'", floors) + "\'"
+                cascade.filters = "id in "+"(\'" + java.lang.String.join("\',\'", floors) + "\')"
                 buildingRequest.cascade = arrayListOf(cascade)
                 //调用adm-middleware建筑查询接口
                 val buildingList = admBaseService?.queryBuilding(buildingRequest) as ArrayList<Building>?
@@ -281,9 +285,9 @@ object ScanTaskBaseService : RService<ScanTaskBase>(SMybatisDao(ScanTaskBase::cl
         try {
             val projectId = SPageContext.getHeader("projectId").toString()
             if (!equipScanTask.id.isNullOrEmpty()&&!equipScanTask.equipId.isNullOrEmpty()){
-                val categoryStatistics = mapper.categoryStatistics(projectId,equipScanTask.id!!, equipScanTask.equipId!!)
+                val categoryStatistics = statisticsCountService?.categoryStatistics(projectId,equipScanTask.id!!, equipScanTask.equipId!!)
                 val sQueryResponse = SQueryResponse<CategoryStatistics>()
-                sQueryResponse.total = categoryStatistics.size.toLong()
+                sQueryResponse.total = categoryStatistics?.size?.toLong()
                 sQueryResponse.content = categoryStatistics
                 sQueryResponse.result = SResponseType.success
                 return sQueryResponse
@@ -307,16 +311,16 @@ object ScanTaskBaseService : RService<ScanTaskBase>(SMybatisDao(ScanTaskBase::cl
             val projectId = SPageContext.getHeader("projectId")
             if (!equipScanTask.id.isNullOrEmpty()&&!equipScanTask.equipId.isNullOrEmpty()){
                 if (!type.isNullOrEmpty()&&type == "model"){
-                    val categoryStatistics = ModelScanTaskService.mapper.categoryStatisticsModel(projectId!!,equipScanTask.id!!, equipScanTask.equipId!!)
+                    val categoryStatistics = statisticsCountService?.categoryStatisticsModel(projectId!!,equipScanTask.id!!, equipScanTask.equipId!!)
                     val sQueryResponse = SQueryResponse<CategoryStatistics>()
-                    sQueryResponse.total = categoryStatistics.size.toLong()
+                    sQueryResponse.total = categoryStatistics?.size?.toLong()
                     sQueryResponse.content = categoryStatistics
                     sQueryResponse.result = SResponseType.success
                     return sQueryResponse
                 }else{
-                    val categoryStatistics = mapper.categoryStatistics(projectId!!,equipScanTask.id!!, equipScanTask.equipId!!)
+                    val categoryStatistics = statisticsCountService?.categoryStatistics(projectId!!,equipScanTask.id!!, equipScanTask.equipId!!)
                     val sQueryResponse = SQueryResponse<CategoryStatistics>()
-                    sQueryResponse.total = categoryStatistics.size.toLong()
+                    sQueryResponse.total = categoryStatistics?.size?.toLong()
                     sQueryResponse.content = categoryStatistics
                     sQueryResponse.result = SResponseType.success
                     return sQueryResponse

+ 104 - 0
scanbuilding/src/main/kotlin/com/persagy/server/util/GeoToolsUtil.java

@@ -0,0 +1,104 @@
+package com.persagy.server.util;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.geotools.geometry.jts.JTSFactoryFinder;
+import org.locationtech.jts.geom.*;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+
+/**
+ * @ClassName GeoToolsUtil
+ * @Description: 点面包含关系分析
+ * @Author linhuili
+ * @Date 2021/9/3 20:31
+ * @Version V1.0
+ **/
+public class GeoToolsUtil {
+    /**
+     * 创建点
+     * @param pointLocal
+     */
+    private static Point createPoint(ObjectNode pointLocal){
+        double x =0L;
+        double y =0L;
+        double z =0L;
+        if(pointLocal.get("X") != null){
+            x =pointLocal.get("X").doubleValue();
+        }
+        if(pointLocal.get("Y") != null){
+            y = pointLocal.get("Y").doubleValue();
+        }
+        GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
+        Coordinate coord = new Coordinate(x, y,z);
+        Point point = geometryFactory.createPoint(coord);
+        return point;
+    }
+
+    /**
+     * 创建面
+     * @param outLines
+     */
+    private static Polygon createPolygon(List<LinkedHashMap<String,Object>> outLines){
+        GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
+        List<Coordinate> objects = new ArrayList<>();
+        for (LinkedHashMap<String,Object> outLine : outLines) {
+            double x = Double.parseDouble(outLine.getOrDefault("X",0.0D).toString());
+            double y = Double.parseDouble(outLine.getOrDefault("Y",0.0D).toString());
+            double z = 0L;
+            Coordinate coordinate = new Coordinate(x, y, z);
+            objects.add(coordinate);
+        }
+        //注意数据的闭合
+        Coordinate[] coordinates = objects.toArray(new Coordinate[0]);
+        LinearRing ring = geometryFactory.createLinearRing(coordinates);
+        LinearRing holes[] = null;
+        Polygon polygon = geometryFactory.createPolygon(ring, holes);
+
+        return polygon;
+    }
+
+    /**
+     * 点面包含关系判断
+     * 用途:判断一个面是否包含一个点,即一个点是否在一个面内
+     * @param pointLocal 坐标点
+     * @param outLines 轮廓线
+     * @return
+     */
+    public static Boolean isPointInPoly(ObjectNode pointLocal, List<LinkedHashMap<String,Object>> outLines) {
+        if (null==pointLocal || CollUtil.isEmpty(outLines)){
+            return false;
+        }
+        //创建点
+        Point point = createPoint(pointLocal);
+        //创建面
+        Polygon polygon = createPolygon(outLines);
+        //判断点面包含关系
+        return polygon.contains(point);
+    }
+    /**
+     * 点面包含关系判断
+     * 用途:判断一个面是否包含一个点,即一个点是否在一个面内
+     * @param fromOutLines: 轮廓坐标
+     * @param toOutLines: 轮廓坐标
+     * @return
+     */
+    public static Boolean isPolyInPoly(List<LinkedHashMap<String,Object>> fromOutLines,
+                                       List<LinkedHashMap<String,Object>> toOutLines) {
+        if (CollUtil.isEmpty(fromOutLines) || CollUtil.isEmpty(toOutLines)){
+            return false;
+        }
+        //创建点
+        Polygon fromPolygon = createPolygon(fromOutLines);
+        //创建面
+        Polygon toPolygon = createPolygon(toOutLines);
+        //判断面-面包含关系
+        return fromPolygon.contains(toPolygon)
+                || fromPolygon.equalsTopo(toPolygon)
+                || fromPolygon.overlaps(toPolygon)
+                || toPolygon.contains(fromPolygon);
+    }
+}