Sfoglia il codice sorgente

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

 Conflicts:
	revit-algorithm/src/main/resources-dev/application.yml
lijie 3 anni fa
parent
commit
d035171376

+ 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 = "级联-设备分类")

+ 13 - 2
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/controllers/modelFile/FloorModelController.kt

@@ -19,6 +19,7 @@
  */
 package cn.sagacloud.server.algorithm.controllers.modelFile
 
+import cn.sagacloud.server.algorithm.backstage.state.ExportPassedState_3
 import cn.sagacloud.server.algorithm.backstage.sync.SyncUtil
 import cn.sagacloud.server.algorithm.dao.mapper.FloorMapper
 import cn.sagacloud.server.algorithm.models.config.MyProperties
@@ -97,7 +98,12 @@ class FloorModelController {
     @ApiOperation(value = "查询文件夹下的所有楼层", notes = "")
     @PostMapping(value = ["/query-list"])
     fun queryList(@RequestBody request: SQueryRequest): SQueryResponse<FloorModelView> {
-        val response = FloorModelService.pageQuery(request)
+        val response: SQueryResponse<FloorModelView>
+        if(SPageContext.getHeader("ProjectId") != null && SPageContext.getHeader("ProjectId")!!.isNotEmpty()) {
+            response = FloorModelService.pageQuery(request, arrayListOf(SFilter.eq("projectId", SPageContext.getHeader("ProjectId").toString())))
+        } else {
+            response = FloorModelService.pageQuery(request)
+        }
         val list = response.content
         if(list != null && list.isNotEmpty())
             response.content = list.sortedWith(floorComparator)
@@ -114,7 +120,12 @@ class FloorModelController {
     @ApiOperation(value = "查询文件夹下的所有楼层", notes = "")
     @PostMapping(value = ["/query-list-missing"])
     fun queryListWithMissing(@RequestBody request: SQueryRequest): SQueryResponse<FloorModelView> {
-        val response = FloorModelService.pageQuery(request)
+        val response: SQueryResponse<FloorModelView>
+        if(SPageContext.getHeader("ProjectId") != null && SPageContext.getHeader("ProjectId")!!.isNotEmpty()) {
+            response = FloorModelService.pageQuery(request, arrayListOf(SFilter.eq("projectId", SPageContext.getHeader("ProjectId").toString())))
+        } else {
+            response = FloorModelService.pageQuery(request)
+        }
         val list = response.content
         if(list != null && list.isNotEmpty())
             response.content = list.sortedWith(floorComparator)

+ 1 - 2
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/endpoint/FloorModelService.kt

@@ -26,8 +26,7 @@ object FloorModelService : SObjectService<FloorModelView>(SMybatisDao(FloorModel
         tableName.append("  file.data_check_result, file.size, file.original_name, file.revit_version ");
         tableName.append("FROM revit.model_floor floor INNER JOIN revit.model_file file ");
         tableName.append("  ON floor.current_model_id = file.id ");
-        tableName.append("WHERE file.removed != true ");
-        tableName.append("  and floor.project_id = '" + SPageContext.getHeader("ProjectId") + "') model_floor_file ");
+        tableName.append("WHERE file.removed != true) model_floor_file ");
         queryBuilder.tableName = tableName.toString()
     }
 }

+ 4 - 2
revit-algorithm/src/main/kotlin/cn/sagacloud/server/algorithm/services/modelCheck/ModelCheckService.kt

@@ -28,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Component
 import java.lang.StringBuilder
 import java.util.stream.Collectors
+import javax.servlet.http.HttpServletRequest
+import javax.servlet.http.HttpServletRequestWrapper
 import kotlin.collections.Map as Map
 
 @Component
@@ -47,7 +49,7 @@ class ModelCheckService {
 //        queryBuilder.tableName = "revit_calc.check_grid_valid('${projectId}', '${folderId}', '${modelId}')"
         // 查询楼层模型
         var request = SQueryRequest()
-        request.filters = " folderId = '"+ folderId!! +"' and ( status = 4 or currentModelId = '" + modelId!! + "') ";
+        request.filters = " projectId = '"+projectId+"' and folderId = '"+ folderId!! +"' and ( status = 4 or currentModelId = '" + modelId!! + "') ";
         val select = FloorModelService.pageQuery(request)
         var list = select.content
         if(list == null || list.isEmpty()){
@@ -77,7 +79,7 @@ class ModelCheckService {
 //        return queryBuilder.exec()
         // 查询楼层模型
         var request = SQueryRequest()
-        request.filters = " folderId = '"+ folderId!! +"' and ( status = 4 or currentModelId = '" + modelId!! + "') ";
+        request.filters = " projectId = '"+projectId+"' and folderId = '"+ folderId!! +"' and ( status = 4 or currentModelId = '" + modelId!! + "') ";
         val select = FloorModelService.pageQuery(request)
         var list = select.content
         if(list == null || list.isEmpty()){

+ 6 - 5
revit-algorithm/src/main/resources-dev/application.yml

@@ -80,8 +80,7 @@ properties:
   #文件服务器配置
   fileService:
     # 基本属性
-    url:                               http://api.sagacloud.cn/dp-auxiliary/image-service/
-    # http://47.93.33.207:28888/image-service/ #http://adm.sagacloud.cn/image-service/
+    url:                               http://api.sagacloud.cn/dp-auxiliary/image-service/ # http://47.93.33.207:28888/image-service/ #http://adm.sagacloud.cn/image-service/
     #url:                               http://image-service:8080/
     systemId:                          dataPlatform
     secret:                            9e0891a7a8c8e885
@@ -114,7 +113,7 @@ properties:
 
 
   datacenter:
-    url:                                http://adm-middleware:8080/
+    url:                                http://39.105.112.36/datacenter/
     # 设备相关接口
     equipCreate: ${properties.datacenter.url}object/equip/create
     equipDelete: ${properties.datacenter.url}object/equip/delete
@@ -137,7 +136,9 @@ properties:
     # 绑定楼层接口
     floorBind: ${properties.datacenter.url}rel/update/equip-ispace
     #    # 资产接口
+
     #    propertyQuery: ${properties.datacenter.url}object/property/query
+
     #    propertyUpdate: ${properties.datacenter.url}object/property/update
     # 同步构件接口
     windowCreate: ${properties.datacenter.url}window/create_ignore
@@ -145,6 +146,6 @@ properties:
     doorCreate: ${properties.datacenter.url}door/create_ignore
 
   message:
-    url: http://message-center:8080/
+    url: http://39.105.112.36/message-center/
     # 发送消息接口
-    createPath: ${properties.message.url}message/create
+    createPath: ${properties.message.url}message/create

+ 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)
     }