Browse Source

建筑,楼层等级联查询修改

linhuili 3 years ago
parent
commit
965321a1aa

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

@@ -287,12 +287,12 @@ class EquipScanTaskQuery :  RBaseInfo()  {
 
     /** 级联-建筑 */
     @Schema(description = "级联-建筑")
-    @SCascade(table="scantask.equip_scan_task", idColumn="id", childIdColumn="building_id")
+    //@SCascade(table="scantask.equip_scan_task", idColumn="id", childIdColumn="building_id")
     var building: Building? = null
 
     /** 级联-楼层 */
     @Schema(description = "级联-楼层")
-    @SCascade(table="scantask.equip_scan_task", idColumn="id", childIdColumn="floor_id")
+    //@SCascade(table="scantask.equip_scan_task", idColumn="id", childIdColumn="floor_id")
     var floor: Floor? = null
 
     /** 级联-方案*/
@@ -303,7 +303,7 @@ class EquipScanTaskQuery :  RBaseInfo()  {
     /** 级联-部件   table  对应关系表   idColumn 对应 本类的id    childIdColumn 级联对象的关系id */
     @Schema(description = "级联-部件")
     @SCascade(table="scantask.equip_scan_task", idColumn="parent_id", childIdColumn="equip_id")
-    var component: ArrayList<EquipScanTaskQuery>? = null
+    var component: List<EquipScanTaskQuery>? = null
 
     /** 级联-设备分类 */
     @Schema(description = "级联-设备分类")

+ 18 - 4
scanbuilding/src/main/kotlin/com/persagy/server/client/AdmMiddlewareClient.kt

@@ -1,7 +1,10 @@
 package com.persagy.server.client
 
 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.Equipment
 import com.persagy.server.datacenter.models.entities.task.BuildingDic
 import com.persagy.service.models.requests.SQueryRequest
 import com.persagy.service.models.responses.SQueryResponse
@@ -9,6 +12,7 @@ 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
 
 /**
  * @description:数据中台dmp-rwd 物理世界、数据字典、IOT 接口feign
@@ -16,14 +20,24 @@ import org.springframework.web.bind.annotation.RequestBody
  * @data:2021/8/11 14:56
  */
 @FeignClient(name = "adm-middleware", configuration = [DigitalFeignConfig::class])
-interface AdmMiddlewareClient {
+interface AdmMiddlewareClient{
     /**
-     * @description: 查询对象列表
+     * @description: 查询建筑列表
      * @param: objectUrlParam 对象请求url通用参数
      * @param: criteria post请求参数
      * @return: com.persagy.dmp.common.DmpResult
      */
     @PostMapping(AdmMiddlewareUrlConstant.BUILDING_QUERY)
-    fun queryBuilding(@SpringQueryMap projectId: String?, @RequestBody criteria: SQueryRequest?): SQueryResponse<BuildingDic>?
+    fun queryBuilding(@RequestHeader(defaultValue = "0" ) groupCode: String?, @RequestHeader(defaultValue = "0" ) projectId: String?, @RequestBody criteria: SQueryRequest?): SQueryResponse<Building>?
 
- }
+    /**
+     * @description: 查询设备列表
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @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>?
+
+
+}

+ 7 - 0
scanbuilding/src/main/kotlin/com/persagy/server/constant/AdmMiddlewareUrlConstant.java

@@ -12,4 +12,11 @@ public class AdmMiddlewareUrlConstant {
      * 建筑查询
      */
     public final static String BUILDING_QUERY = "/object/building/query";
+
+
+
+    /**
+     * 设备查询
+     */
+    public final static String EQUIP_QUERY = "/object/equip/query";
 }

+ 17 - 3
scanbuilding/src/main/kotlin/com/persagy/server/services/AdmBaseService.kt

@@ -3,6 +3,8 @@ package com.persagy.server.services
 import cn.hutool.core.collection.CollUtil
 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.service.models.requests.SQueryRequest
 import com.persagy.service.utils.SSpringContextUtil
@@ -26,11 +28,23 @@ class AdmBaseService {
      * @param params
      * @return
      */
-    fun queryBuilding(criteria: SQueryRequest?): List<BuildingDic>? {
+    fun queryBuilding(criteria: SQueryRequest?): List<Building>? {
         //查询对象信息
-        val result = admMiddlewareClient!!.queryBuilding(Opts.projectId, criteria) ?: return ArrayList()
+        val result = admMiddlewareClient!!.queryBuilding(Opts.groupCode,Opts.projectId,criteria) ?: return ArrayList()
         if(CollUtil.isEmpty(result.content)){
-            return ArrayList<BuildingDic>()
+            return ArrayList<Building>()
+        }
+        return result.content
+    }
+
+    /**
+     * 查询设备
+     */
+    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
     }

+ 108 - 10
scanbuilding/src/main/kotlin/com/persagy/server/services/task/EquipScanTaskQueryService.kt

@@ -26,17 +26,25 @@
 
 package com.persagy.server.services.task
 
+import cn.hutool.core.collection.CollUtil
+import com.alibaba.fastjson.JSONObject
 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.objects.Equipment
 import com.persagy.server.datacenter.models.entities.task.EquipScanTaskQuery
-import com.persagy.service.SBaseService
+import com.persagy.server.services.AdmBaseService
+import com.persagy.server.services.DmpBaseService
+import com.persagy.server.util.AdmEntityTransferUtil
 import com.persagy.service.SObjectService
 import com.persagy.service.SPageContext
+import com.persagy.service.models.SCascadeQuery
 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 java.util.stream.Collectors
 
 /**
  * 设备台账任务
@@ -46,27 +54,63 @@ import org.slf4j.LoggerFactory
 object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDao(EquipScanTaskQuery::class.java))  {
 
     /** 字典平台对象类型 */
-    private val defClassService = SBaseService(SMybatisDao(DefClass::class.java))
+  //  private val defClassService = SBaseService(SMybatisDao(DefClass::class.java))
     // 日志
     private val logger = LoggerFactory.getLogger(EquipScanTaskQueryService::class.java)
 
+    @Autowired
+    private val dmpBaseService: DmpBaseService? = DmpBaseService()
+
+    @Autowired
+    private val admBaseService: AdmBaseService? = AdmBaseService()
+
 
     fun pageQuerys(request: SQueryRequest): SQueryResponse<EquipScanTaskQuery> {
+        //查询设备台账任务
         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 = pageQuery(request, withFilterList)
         if (!pageQuery.content.isNullOrEmpty()&&pageQuery.content!!.size>0){
+
+            //级联查询设备相关信息:建筑,楼层,空间等
+            val equipScanTaskList = pageQuery.content
+            var cascadeQueryAdmEquip = arrayListOf<Equipment>()
+            if (equipScanTaskList != null) {
+                cascadeQueryAdmEquip = cascadeQueryAdmEquip(equipScanTaskList, request) as ArrayList<Equipment>
+            }
+            val equipMap = cascadeQueryAdmEquip?.stream()?.collect(Collectors.groupingBy { item: Equipment -> 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 = select(SFilter.eq("parentId", content.equipId!!),SFilter.eq("taskParentId", content.id!!)).exec()
                 if (exec.size>0){
                     content.component = exec
                 }
-                val defClass =
-                    defClassService.select(SFilter.eq("code", content.classCode!!)).entity()
-                if (defClass!=null) {
-                    content.equipCategory = defClass
+                //查询中台类型数据,2021.10.25日中心中台整合调整
+                val param = JSONObject()
+                val criteria = JSONObject()
+                criteria["code"] = content.classCode!!
+                param["criteria"] = criteria
+                val dictTypes =dmpBaseService!!.queryDictType(param)
+                val defClass = AdmEntityTransferUtil.toAdmMultiEntity(dictTypes, null, DefClass::class.java)
+                /*   val defClass =
+                       defClassService.select(SFilter.eq("projectId", projectId), SFilter.eq("code", content.classCode!!)).entity()*/
+                if (defClass!=null && defClass.size>0) {
+                    content.equipCategory = defClass.get(0)
                 }
             }
         }
@@ -79,15 +123,42 @@ object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDa
         withFilterList.add(SFilter.eq("projectId", SPageContext.getHeader("projectId").toString()))
         val pageQuery = pageQuery(request, withFilterList)
         if (!pageQuery.content.isNullOrEmpty()&&pageQuery.content!!.size>0){
+            //级联查询设备相关信息:建筑,楼层,空间等
+            val equipScanTaskList = pageQuery.content
+            var cascadeQueryAdmEquip = arrayListOf<Equipment>()
+            if (equipScanTaskList != null) {
+                cascadeQueryAdmEquip = cascadeQueryAdmEquip(equipScanTaskList, request) as ArrayList<Equipment>
+            }
+            val equipMap = cascadeQueryAdmEquip?.stream()?.collect(Collectors.groupingBy { item: Equipment -> 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 = select(SFilter.eq("parentId", content.equipId!!),SFilter.eq("taskParentId", content.id!!)).exec()
                 if (exec.size>0){
                     content.component = exec
                 }
-                val defClass =
-                    defClassService.select( SFilter.eq("code", content.classCode!!)).entity()
-                if (defClass!=null) {
-                    content.equipCategory = defClass
+                //查询中台类型数据,2021.10.25日中心中台整合调整
+                val param = JSONObject()
+                val criteria = JSONObject()
+                criteria["code"] = content.classCode!!
+                param["criteria"] = criteria
+                val dictTypes =dmpBaseService!!.queryDictType(param)
+                val defClass = AdmEntityTransferUtil.toAdmMultiEntity(dictTypes, null, DefClass::class.java)
+                /*   val defClass =
+                       defClassService.select(SFilter.eq("projectId", projectId), SFilter.eq("code", content.classCode!!)).entity()*/
+                if (defClass!=null && defClass.size>0) {
+                    content.equipCategory = defClass.get(0)
                 }
             }
         }
@@ -95,6 +166,33 @@ object EquipScanTaskQueryService : SObjectService<EquipScanTaskQuery>(SMybatisDa
     } // Fun
 
 
+    /**
+     * 级联查询设备相关信息:建筑,楼层,空间等
+     */
+    fun cascadeQueryAdmEquip(equipScanTaskList: List<EquipScanTaskQuery>,request: SQueryRequest): List<Equipment>? {
+        //级联查询设备相关信息:建筑,楼层,空间等
+        if(CollUtil.isEmpty(equipScanTaskList)){
+            return ArrayList<Equipment>()
+        }
+        val equipIds = equipScanTaskList?.stream()?.map(EquipScanTaskQuery::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?.queryEquip(equipRequest)
+        }
+        return ArrayList<Equipment>()
+    }
 
 
 } // Class EquipScanTaskService

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

@@ -30,12 +30,14 @@ import com.alibaba.fastjson.JSONObject
 import com.persagy.database.SFilter
 import com.persagy.database.SPageQueryInfo
 import com.persagy.mybatis.SMybatisDao
+import com.persagy.server.datacenter.models.entities.objects.Building
 import com.persagy.server.datacenter.models.entities.task.*
 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.base.RService
+import com.persagy.server.util.AdmEntityTransferUtil
 import com.persagy.service.SPageContext
 import com.persagy.service.models.SCascadeQuery
 import com.persagy.service.models.enums.SResponseType
@@ -175,23 +177,26 @@ object ScanTaskBaseService : RService<ScanTaskBase>(SMybatisDao(ScanTaskBase::cl
                 val floors = tasks.map { it.floorId }
                 var buildingRequest = SQueryRequest()
 
-                buildingRequest.filters = "id in (" +builds!!.joinToString(",", ",", "'").substring(1) + ")"
+               // buildingRequest.filters = "id in (" +builds!!.joinToString(",", ",", "'").substring(1) + ")"
+                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 (" +floors!!.joinToString(",", ",", "'").substring(1) + ")"
+                cascade.filters = "id in "+"(\'" + java.lang.String.join("\',\'", floors) + "\')"
                 buildingRequest.cascade = arrayListOf(cascade)
-                // TODO 调用adm-middleware建筑查询接口
-                pageQuery.content = admBaseService?.queryBuilding(buildingRequest) as ArrayList<BuildingDic>?
-                // TODO 转换为BuildingDic
-                // ...
+                //调用adm-middleware建筑查询接口
+                val buildingList = admBaseService?.queryBuilding(buildingRequest) as ArrayList<Building>?
+                //转换为BuildingDic
+                val buildingDicList = AdmEntityTransferUtil.toAdmMultiEntity(buildingList, null, BuildingDic::class.java)
+                pageQuery.content = buildingDicList as ArrayList<BuildingDic>?
             }
 //            val queryBuilder = service.select(request.filters)
 //            queryBuilder.tableName = "scantask.f_get_building_dic('$type','$projectId')"
 //            pageQuery = queryBuilder.pageQuery(1, 1000)
 
-            if (resultList!!.size>0){
+            if (pageQuery.content!!.size>0){
 //                for(floor in resultList!!){
 //                    if(floor.floorListStr != null){
 //                        val listStr = floor.floorListStr!!.replace("/\\","")

+ 3 - 0
scanbuilding/src/main/kotlin/com/persagy/server/util/AdmEntityTransferUtil.kt

@@ -39,6 +39,9 @@ object AdmEntityTransferUtil {
      * @return
     </T> */
     fun <T> toAdmMultiEntity(array: List<*>?, projection: List<String?>?, clazz: Class<T>?): List<T>? {
+        if(CollUtil.isEmpty(array)){
+            return null;
+        }
         val dataNode = JsonNodeUtils.toArrayNode(array, null, null)
         return toAdmMultiEntity(dataNode, projection, clazz)
     }