Browse Source

增加docker文件,解决查询/planar/graph/drafts/query空指针问题

linhuili 3 years ago
parent
commit
aa4d51d155

+ 36 - 0
docker/dockerfiles/revit-algorithm/Dockerfile

@@ -0,0 +1,36 @@
+#构建此镜像的基础镜像
+FROM java:8-jre
+#指定作者名称
+MAINTAINER lijie<lijie@persagy.com>
+
+#定义标签属性
+LABEL tier=backend
+LABEL product=adm
+LABEL project=revit-algorithm
+LABEL name=revit-algorithm
+
+#设置环境变量
+ENV JAVA_OPTS -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m
+ENV TZ Asia/Shanghai
+#ARG 可以接收docker build命令中以--build-arg 指定的参数
+ARG WORKER_HOME
+
+#执行的命令
+RUN apt-get install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/*
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime	&& echo 'Asia/Shanghai' > /etc/timezone
+
+RUN mkdir -p $WORKER_HOME/config
+
+#复制文件到容器内
+COPY *.jar $WORKER_HOME/app.jar
+COPY entrypoint.sh $WORKER_HOME/
+COPY version.txt $WORKER_HOME/
+COPY config $WORKER_HOME/config
+#设置工作目录
+WORKDIR $WORKER_HOME
+
+#查看上述复制的文件,是否复制成功
+RUN ls
+
+#启动执行
+ENTRYPOINT ["sh","./entrypoint.sh"]

+ 3 - 0
docker/dockerfiles/revit-algorithm/entrypoint.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+echo "entrypoint run..."
+java -jar $JAVA_OPTS -Deureka.client.service-url.defaultZone=$EUREKA_CLIENT_DEFAULT_ZONE -Dspring.cloud.config.profile=$SPRING_CLOUD_CONFIG_PROFILE -Dspring.cloud.config.uri=$SPRING_CLOUD_CONFIG_URI app.jar

+ 36 - 0
docker/dockerfiles/scheduler/Dockerfile

@@ -0,0 +1,36 @@
+#构建此镜像的基础镜像
+FROM java:8-jre
+#指定作者名称
+MAINTAINER lijie<lijie@persagy.com>
+
+#定义标签属性
+LABEL tier=backend
+LABEL product=adm
+LABEL project=scheduler
+LABEL name=scheduler
+
+#设置环境变量
+ENV JAVA_OPTS -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m
+ENV TZ Asia/Shanghai
+#ARG 可以接收docker build命令中以--build-arg 指定的参数
+ARG WORKER_HOME
+
+#执行的命令
+RUN apt-get install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/*
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime	&& echo 'Asia/Shanghai' > /etc/timezone
+
+RUN mkdir -p $WORKER_HOME/config
+
+#复制文件到容器内
+COPY *.jar $WORKER_HOME/app.jar
+COPY entrypoint.sh $WORKER_HOME/
+COPY version.txt $WORKER_HOME/
+COPY config $WORKER_HOME/config
+#设置工作目录
+WORKDIR $WORKER_HOME
+
+#查看上述复制的文件,是否复制成功
+RUN ls
+
+#启动执行
+ENTRYPOINT ["sh","./entrypoint.sh"]

+ 3 - 0
docker/dockerfiles/scheduler/entrypoint.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+echo "entrypoint run..."
+java -jar $JAVA_OPTS -Deureka.client.service-url.defaultZone=$EUREKA_CLIENT_DEFAULT_ZONE -Dspring.cloud.config.profile=$SPRING_CLOUD_CONFIG_PROFILE -Dspring.cloud.config.uri=$SPRING_CLOUD_CONFIG_URI app.jar

+ 77 - 0
docker/k8sfiles/revit-algorithm.yml

@@ -0,0 +1,77 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: revit-algorithm
+  labels:
+    app: revit-algorithm
+spec:
+  selector:
+    app: revit-algorithm
+  ports:
+  - port: 8080
+    targetPort: 8080
+    name: server-port
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: revit-algorithm
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: revit-algorithm
+  template:
+    metadata:
+      labels:
+        app: revit-algorithm
+    spec:
+      containers:
+      - name: revit-algorithm
+        image: labisenlin.persagy.com/library/revit-algorithm:latest
+        imagePullPolicy: Always
+        ports:
+        - containerPort: 8080
+          name: server-port
+        env:
+        - name: TZ
+          value: Asia/Shanghai
+        - name: SERVER_PORT
+          value: "8080"
+        - name: SPRING_CLOUD_CONFIG_URI
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: spring.cloud.config.uri
+        - name: SPRING_PROFILES_ACTIVE
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: spring.profiles.active
+        - name: SPRING_CLOUD_CONFIG_PROFILE
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: spring.cloud.config.profile
+        - name: EUREKA_CLIENT_FETCH_REGISTRY
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.client.fetch-registry
+        - name: EUREKA_CLIENT_REGISTER_WITH_EUREKA
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.client.register-with-eureka
+        - name: EUREKA_CLIENT_DEFAULT_ZONE
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.client.default.zone
+        - name: EUREKA_INSTANCE_IP_ADDRESS
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.instance.ip.address

+ 77 - 0
docker/k8sfiles/scheduler.yml

@@ -0,0 +1,77 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: revit-algorithm
+  labels:
+    app: revit-algorithm
+spec:
+  selector:
+    app: revit-algorithm
+  ports:
+  - port: 8080
+    targetPort: 8080
+    name: server-port
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: revit-algorithm
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: revit-algorithm
+  template:
+    metadata:
+      labels:
+        app: revit-algorithm
+    spec:
+      containers:
+      - name: revit-algorithm
+        image: labisenlin.persagy.com/library/revit-algorithm:latest
+        imagePullPolicy: Always
+        ports:
+        - containerPort: 8080
+          name: server-port
+        env:
+        - name: TZ
+          value: Asia/Shanghai
+        - name: SERVER_PORT
+          value: "8080"
+        - name: SPRING_CLOUD_CONFIG_URI
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: spring.cloud.config.uri
+        - name: SPRING_PROFILES_ACTIVE
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: spring.profiles.active
+        - name: SPRING_CLOUD_CONFIG_PROFILE
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: spring.cloud.config.profile
+        - name: EUREKA_CLIENT_FETCH_REGISTRY
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.client.fetch-registry
+        - name: EUREKA_CLIENT_REGISTER_WITH_EUREKA
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.client.register-with-eureka
+        - name: EUREKA_CLIENT_DEFAULT_ZONE
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.client.default.zone
+        - name: EUREKA_INSTANCE_IP_ADDRESS
+          valueFrom:
+            configMapKeyRef:
+              name: revit-algorithm
+              key: eureka.instance.ip.address

+ 6 - 1
gradle.properties

@@ -18,6 +18,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_NEXUS_RELEASE_URL = http://47.93.132.139:8081/nexus/content/repositories/persagy/
+MAVEN_REPO_NEXUS_PUBLIC_URL = http://47.93.132.139:8081/nexus/content/groups/public/
+
 NEXUS_USERNAME = saga
 NEXUS_PASSWORD = saga
 
@@ -92,7 +94,7 @@ PROTOBUF_VERSION = 3.11.1
 # https://mvnrepository.com/artifact/com.google.protobuf/protobuf-gradle-plugin
 PROTOBUF_GRADLE_VERSION = 0.8.10
 # https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
-SPRING_BOOT_VERSION = 2.2.2.RELEASE
+SPRING_BOOT_VERSION = 2.2.1.RELEASE
 # https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server
 SPRING_CLOUD_VERSION = 1.4.7.RELEASE
 # https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config
@@ -117,3 +119,6 @@ SPRING_DOC_VERSION = 1.4.8
 PLANTUML_VERSION = 1.0.24
 
 DIGITAL_START_VERSION = 1.0.0
+
+
+PERSAGY_INTERGERT_VERSION = 1.0.0

+ 7 - 1
labsl/build.gradle

@@ -17,6 +17,7 @@ compileTestKotlin {
 }
 
 repositories {
+    maven{url MAVEN_REPO_NEXUS_PUBLIC_URL}
     maven{url MAVEN_REPO_NEXUS_RELEASE_URL}
     mavenCentral()
     jcenter()
@@ -41,10 +42,13 @@ dependencies {
     // 单元测试
     compile group:"org.springframework.boot", name:"spring-boot-starter-test", version: SPRING_BOOT_VERSION
 
+    //compile group: "org.springframework.cloud", name: "spring-cloud-starter-netflix-ribbon", version: SPRING_CLOUD_CONFIG_VERSION
+
+    //compile group: "com.alibaba.cloud", name: "spring-cloud-starter-alibaba-nacos-discovery", version: SPRING_CLOUD_CONFIG_VERSION
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // spring cloud 依赖
-//    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka', version: SPRING_CLOUD_VERSION
+    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client', version:  SPRING_CLOUD_CONFIG_VERSION
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -64,7 +68,9 @@ dependencies {
     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
+    //compile group: "com.persagy", name: "integrated-config-client", version: PERSAGY_INTERGERT_VERSION
 
+   // compile group: "com.persagy", name: "integrated-eureka", version: PERSAGY_INTERGERT_VERSION
     // TestNG 测试框架
     compile group: "org.testng", name: "testng", version: TESTNG_VERSION
     // Log 工具

+ 0 - 53
labsl/src/main/kotlin/com/persagy/labsl/models/request/InstanceUrlParam.java

@@ -1,53 +0,0 @@
-package com.persagy.labsl.models.request;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- * @description: 对象、关系请求url通用参数
- **/
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class InstanceUrlParam implements Serializable {
-
-    private static final long serialVersionUID = -994117732505752231L;
-
-    /**
-     * 集团编码
-     */
-    private String groupCode;
-
-    /**
-     * 方案id
-     */
-    private String schemeId;
-
-    /**
-     * 项目id
-     */
-    private String projectId;
-
-    /**
-     * 应用id
-     */
-    private String appId;
-    /**
-     * 用户id
-     */
-    private String userId;
-
-    public InstanceUrlParam(String groupCode, String schemeId, String projectId, String appId) {
-        this.groupCode = groupCode;
-        this.schemeId = schemeId;
-        this.projectId = projectId;
-        this.appId = appId;
-    }
-}

+ 32 - 0
labsl/src/main/kotlin/com/persagy/labsl/models/request/InstanceUrlParam.kt

@@ -0,0 +1,32 @@
+package com.persagy.labsl.models.request
+
+import lombok.NoArgsConstructor
+import lombok.AllArgsConstructor
+import com.fasterxml.jackson.annotation.JsonInclude
+import lombok.Builder
+import lombok.Data
+import java.io.Serializable
+import java.math.BigInteger
+
+/**
+ * @description: 对象、关系请求url通用参数
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonInclude(JsonInclude.Include.NON_NULL)
+class InstanceUrlParam {
+        /**
+         * 集团编码
+         */
+        var groupCode: String? = null
+        /**
+         * 项目id
+         */
+        var projectId: String? = null
+
+
+        val serialVersionUID : Long? = -994117732505752231L
+
+}

+ 0 - 80
labsl/src/main/kotlin/com/persagy/labsl/models/response/DmpResult.java

@@ -1,80 +0,0 @@
-package com.persagy.labsl.models.response;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.Serializable;
-import java.lang.reflect.*;
-
-/**
- * @description: 数据中台返回值通用类
- * @author: lgy
- * @since: 2021/08/11 15:40
- * @version: V1.0
- */
-@Data
-@NoArgsConstructor
-@Slf4j
-public class DmpResult<T> implements Serializable {
-
-    /**
-     * 成功
-     */
-    public final static String SUCCESS = "success";
-    /**
-     * 失败
-     */
-    public final static String FAILURE = "failure";
-
-    private static final long serialVersionUID = 1L;
-
-    private String result;
-
-    private T data;
-
-    private Integer count;
-
-    private String message;
-
-    public T getData(Class<T> clazz) {
-        if (data == null) {
-            T t = null;
-            try {
-                t = clazz.newInstance();
-            } catch (Exception e) {
-                log.error(e.getMessage(),e);
-            }
-            return t;
-        }
-        return data;
-    }
-
-    public T getData(T t) {
-        if (data == null) {
-            return t;
-        }
-        return data;
-    }
-    // type不能直接实例化对象,通过type获取class的类型,然后实例化对象
-    public static Class<?> getRawType(Type type) {
-        if (type instanceof Class) {
-            return (Class) type;
-        } else if (type instanceof ParameterizedType) {
-            ParameterizedType parameterizedType = (ParameterizedType) type;
-            Type rawType = parameterizedType.getRawType();
-            return (Class) rawType;
-        } else if (type instanceof GenericArrayType) {
-            Type componentType = ((GenericArrayType) type).getGenericComponentType();
-            return Array.newInstance(getRawType(componentType), 0).getClass();
-        } else if (type instanceof TypeVariable) {
-            return Object.class;
-        } else if (type instanceof WildcardType) {
-            return getRawType(((WildcardType) type).getUpperBounds()[0]);
-        } else {
-            String className = type == null ? "null" : type.getClass().getName();
-            throw new IllegalArgumentException("Expected a Class, ParameterizedType, or GenericArrayType, but <" + type + "> is of type " + className);
-        }
-    }
-
-}

+ 77 - 0
labsl/src/main/kotlin/com/persagy/labsl/models/response/DmpResult.kt

@@ -0,0 +1,77 @@
+package com.persagy.labsl.models.response
+
+import com.alibaba.fastjson.JSONArray
+import lombok.NoArgsConstructor
+import lombok.extern.slf4j.Slf4j
+import java.lang.Exception
+import com.persagy.labsl.models.response.DmpResult
+import lombok.Data
+import java.io.Serializable
+import java.lang.IllegalArgumentException
+import java.lang.reflect.*
+import java.lang.reflect.Array
+
+/**
+ * @description: 数据中台返回值通用类
+ * @author: lgy
+ * @since: 2021/08/11 15:40
+ * @version: V1.0
+ */
+@Data
+@NoArgsConstructor
+@Slf4j
+class DmpResult<T> : Serializable {
+    val result: String? = null
+    val data: T? = null
+    val count: Int? = null
+    val message: String? = null
+    fun getData(clazz: Class<T>): T? {
+        if (data == null) {
+            var t: T? = null
+            try {
+                t = clazz.newInstance()
+            } catch (e: Exception) {
+                //DmpResult.log.error(e.message, e)
+            }
+            return t
+        }
+        return data
+    }
+
+    fun getData(t: T): T {
+        return data ?: t
+    }
+
+    companion object {
+        /**
+         * 成功
+         */
+        const val SUCCESS = "success"
+
+        /**
+         * 失败
+         */
+        const val FAILURE = "failure"
+        private const val serialVersionUID = 1L
+
+        // type不能直接实例化对象,通过type获取class的类型,然后实例化对象
+        fun getRawType(type: Type?): Class<*> {
+            return if (type is Class<*>) {
+                type
+            } else if (type is ParameterizedType) {
+                val rawType = type.rawType
+                rawType as Class<*>
+            } else if (type is GenericArrayType) {
+                val componentType = type.genericComponentType
+                Array.newInstance(getRawType(componentType), 0).javaClass
+            } else if (type is TypeVariable<*>) {
+                Any::class.java
+            } else if (type is WildcardType) {
+                getRawType(type.upperBounds[0])
+            } else {
+                val className = if (type == null) "null" else type.javaClass.name
+                throw IllegalArgumentException("Expected a Class, ParameterizedType, or GenericArrayType, but <$type> is of type $className")
+            }
+        }
+    }
+}

+ 77 - 0
labsl/src/main/kotlin/com/persagy/labsl/services/DmpBaseService.kt

@@ -0,0 +1,77 @@
+package com.persagy.labsl.services
+
+import com.alibaba.fastjson.JSONObject
+import com.persagy.labsl.Opts
+import com.persagy.labsl.client.DmpRwdClient
+import com.persagy.labsl.models.entities.pbs.Building
+import com.persagy.labsl.models.entities.pbs.Floor
+import com.persagy.labsl.models.request.InstanceUrlParam
+import com.persagy.labsl.utils.AdmEntityTransferUtil
+import com.persagy.service.utils.SSpringContextUtil
+import org.springframework.stereotype.Service
+
+/**
+ * 物理世界对象查询
+ * @author:linhuili
+ * @date:2021/10/19
+ */
+@Service
+class DmpBaseService {
+
+    /** 自定义 sql */
+    private val rwdClient by lazy {
+        SSpringContextUtil.getBean(DmpRwdClient::class.java) as DmpRwdClient
+    }
+
+    /* public List<T> queryDmpObject(JSONObject params, Class<T> clazz){
+        //封装基础查询参数
+        InstanceUrlParam instanceUrlParam = new InstanceUrlParam();
+        instanceUrlParam.setGroupCode(Opts.INSTANCE.getGroupCode());
+        instanceUrlParam.setProjectId(Opts.INSTANCE.getProjectId());
+        //查询对象信息
+        DmpResult<JSONArray> dmpResult = rwdClient.queryObject(instanceUrlParam, params);
+        if(dmpResult == null){
+            return new ArrayList<>();
+        }
+        return AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), null, clazz);
+    }*/
+
+
+    /**
+     * 查询建筑
+     * @param params
+     * @return
+     */
+    fun queryBuilding(params: JSONObject?): List<Building>? {
+        //封装基础查询参数
+        val instanceUrlParam = InstanceUrlParam()
+        instanceUrlParam.groupCode = Opts.groupCode
+        instanceUrlParam.projectId = Opts.projectId
+        //查询对象信息
+        val dmpResult = rwdClient!!.queryObject(instanceUrlParam, params) ?: return ArrayList()
+        if(dmpResult.data == null){
+            return ArrayList<Building>()
+        }
+        return AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.data, null, Building::class.java)
+    }
+
+
+
+    /**
+     * 查询楼层
+     * @param params
+     * @return
+     */
+    fun queryFloor(params: JSONObject?): List<Floor>? {
+        //封装基础查询参数
+        val instanceUrlParam = InstanceUrlParam()
+        instanceUrlParam.groupCode = Opts.groupCode
+        instanceUrlParam.projectId = Opts.projectId
+        //查询对象信息
+        val dmpResult = rwdClient!!.queryObject(instanceUrlParam, params) ?: return ArrayList()
+        if(dmpResult.data == null){
+            return ArrayList<Floor>()
+        }
+        return AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.data, null, Floor::class.java)
+    }
+}

+ 77 - 58
labsl/src/main/kotlin/com/persagy/labsl/services/planar/PlanarGraphService.kt

@@ -5,13 +5,9 @@ import com.alibaba.fastjson.JSONObject
 import com.persagy.base.extensions.toJson
 import com.persagy.database.SFilter
 import com.persagy.labsl.Opts
-import com.persagy.labsl.Opts.groupCode
-import com.persagy.labsl.Opts.projectId
-import com.persagy.labsl.client.DmpRwdClient
 import com.persagy.labsl.models.entities.pbs.*
-import com.persagy.labsl.models.request.InstanceUrlParam
-import com.persagy.labsl.models.response.DmpResult
 import com.persagy.labsl.models.response.SCommonResponse
+import com.persagy.labsl.services.DmpBaseService
 import com.persagy.labsl.utils.AdmEntityTransferUtil
 import com.persagy.labsl.utils.IdUtils
 import com.persagy.mybatis.SMybatisDao
@@ -22,6 +18,7 @@ import com.persagy.service.models.requests.SUpdateRequest
 import com.persagy.service.models.responses.SBaseResponse
 import com.persagy.service.models.responses.SCreateResponse
 import com.persagy.service.models.responses.SQueryResponse
+import org.apache.poi.ss.formula.functions.T
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
 import java.text.SimpleDateFormat
@@ -61,9 +58,8 @@ object PlanarGraphService : SObjectService<PlanarGraph>(SMybatisDao(PlanarGraph:
     /** 楼层 */
    // val floorService = SObjectService(SMybatisDao(Floor::class.java))
 
-
     @Autowired
-    private val rwdClient: DmpRwdClient? = null
+    private val dmpBaseService: DmpBaseService? = DmpBaseService()
 
     /**
      * 创建图形
@@ -1184,12 +1180,47 @@ object PlanarGraphService : SObjectService<PlanarGraph>(SMybatisDao(PlanarGraph:
 
 
     /**
+     * 查询对象信息
+     * @param ids
+     * @param type
+     * @return
+     */
+    fun queryBuilding(ids: SFilter): List<Building?>? {
+        val param = JSONObject()
+        val criteria = JSONObject()
+        criteria["id"] = ids.second
+        param["criteria"] = criteria
+        return dmpBaseService!!.queryBuilding(param)
+    }
+
+
+    /**
+     * 查询对象信息
+     * @param ids
+     * @param type
+     * @return
+     */
+    fun queryFloor(ids: SFilter): List<Floor?>? {
+        val param = JSONObject()
+        val criteria = JSONObject()
+        criteria["id"] = ids.second
+        param["criteria"] = criteria
+        //排序
+        val orders = JSONArray()
+        val order = JSONObject()
+        order["column"] = "floorSequenceID"
+        order["asc"] = false
+        orders.add(order)
+        param["orders"] = orders
+        return dmpBaseService!!.queryFloor(param)
+    }
+
+    /**
      * 查询草稿箱平面图
      *
      * @param request       查询条件
      */
     fun pageQuerysDrafts(request: SQueryRequest): SQueryResponse<Building> {
-       // val projectId = instanceUrlParam.projectId;
         val sQueryResponse = SQueryResponse<Building>()
         try {
             val pageQuery = PlanarGraphService.pageQuery(request, arrayListOf(SFilter.eq("projectId", Opts.projectId!!)))
@@ -1205,35 +1236,34 @@ object PlanarGraphService : SObjectService<PlanarGraph>(SMybatisDao(PlanarGraph:
                     for (content in pageQuery.content!!) {
                         setFloor.add(content.floorId!!)
                     }
+                    val buildingList = queryBuilding(SFilter.inList("id", setBuilding.toList()))
+                    val floorList = queryFloor(SFilter.inList("id", setFloor.toList()))
 
-                    // val buildingList = buildingService.select(SFilter.inList("id", setBuilding.toList())).exec()
-                    var dmpBuildResult = queryDmpObject(SFilter.inList("id", setBuilding.toList()))
-                    val buildingList = AdmEntityTransferUtil.toAdmMultiEntity(dmpBuildResult!!.data, null, Building::class.java)
-
-                    //val floorList = floorService.select(SFilter.inList("id", setFloor.toList())).order("floorSequenceId desc").exec()
-                    var dmpFloorResult = queryDmpObject(SFilter.inList("id", setFloor.toList()))
-                    val floorList = AdmEntityTransferUtil.toAdmMultiEntity(dmpFloorResult!!.data, null, Floor::class.java)
-                    for (floor in floorList) {
+                    for (floor in floorList!!) {
                         for (content in pageQuery.content!!) {
-                            if (content.floorId == floor.id) {
-                                if (floor.planarGraphList.isNullOrEmpty()) {
-                                    floor.planarGraphList =  ArrayList()
+                            if (floor != null) {
+                                if (content.floorId == floor.id) {
+                                    if (floor!!.planarGraphList.isNullOrEmpty()) {
+                                        floor.planarGraphList =  ArrayList()
+                                    }
+                                    floor.planarGraphList!!.add(content)
                                 }
-                                floor.planarGraphList!!.add(content)
                             }
                         }
                     }
-                    for (building in buildingList) {
+                    for (building in buildingList!!) {
                         for (floor in floorList) {
-                            if (floor.buildingId == building.id) {
-                                if (building.floorList.isNullOrEmpty()) {
-                                    building.floorList = ArrayList<Floor>()
+                            if (building != null) {
+                                if (floor!!.buildingId == building.id) {
+                                    if (building.floorList.isNullOrEmpty()) {
+                                        building.floorList = ArrayList<Floor>()
+                                    }
+                                    building.floorList!!.add(floor)
                                 }
-                                building.floorList!!.add(floor)
                             }
                         }
                     }
-                    sQueryResponse.content = buildingList
+                    sQueryResponse.content = buildingList as List<Building>?
                 }else{
                     sQueryResponse.content = ArrayList()
                 }
@@ -1249,19 +1279,6 @@ object PlanarGraphService : SObjectService<PlanarGraph>(SMybatisDao(PlanarGraph:
         return sQueryResponse
     }
 
-    /**
-     * 查询物理世界对象信息
-     */
-    fun queryDmpObject(id: SFilter): DmpResult<JSONArray?>? {
-        val context = InstanceUrlParam()
-        context.groupCode = groupCode
-        context.projectId = projectId
-        val param = JSONObject()
-        val criteria = JSONObject()
-        criteria["id"] = id
-        param["criteria"] = id
-        return rwdClient?.queryObject(context,criteria)
-    }
 
     /**
      * 查询已发布平面图
@@ -1282,35 +1299,37 @@ object PlanarGraphService : SObjectService<PlanarGraph>(SMybatisDao(PlanarGraph:
                     for (content in pageQuery.content!!) {
                         setFloor.add(content.floorId!!)
                     }
-                    //val buildingList = buildingService.select(SFilter.inList("id", setBuilding.toList())).exec()
-                    var dmpBuildResult = queryDmpObject(SFilter.inList("id", setBuilding.toList()))
-                    val buildingList = AdmEntityTransferUtil.toAdmMultiEntity(dmpBuildResult!!.data, null, Building::class.java)
 
-                    //val floorList = floorService.select(SFilter.inList("id", setFloor.toList())).order("floorSequenceId desc").exec()
-                    var dmpFloorResult = queryDmpObject(SFilter.inList("id", setFloor.toList()))
-                    val floorList = AdmEntityTransferUtil.toAdmMultiEntity(dmpFloorResult!!.data, null, Floor::class.java)
+                    val buildingList = queryBuilding(SFilter.inList("id", setBuilding.toList()))
+                    val floorList = queryFloor(SFilter.inList("id", setFloor.toList()))
 
-                    for (floor in floorList) {
-                        for (content in pageQuery.content!!) {
-                            if (content.floorId == floor.id) {
-                                if (floor.planarGraphList.isNullOrEmpty()) {
-                                    floor.planarGraphList =  ArrayList()
+                    if (floorList != null) {
+                        for (floor in floorList) {
+                            for (content in pageQuery.content!!) {
+                                if (content.floorId == floor!!.id) {
+                                    if (floor.planarGraphList.isNullOrEmpty()) {
+                                        floor.planarGraphList =  ArrayList()
+                                    }
+                                    floor.planarGraphList!!.add(content)
                                 }
-                                floor.planarGraphList!!.add(content)
                             }
                         }
                     }
-                    for (building in buildingList) {
-                        for (floor in floorList) {
-                            if (floor.buildingId == building.id) {
-                                if (building.floorList.isNullOrEmpty()) {
-                                    building.floorList = ArrayList<Floor>()
+                    if (buildingList != null) {
+                        for (building in buildingList) {
+                            if (floorList != null) {
+                                for (floor in floorList) {
+                                    if (floor!!.buildingId == building!!.id) {
+                                        if (building.floorList.isNullOrEmpty()) {
+                                            building.floorList = ArrayList<Floor>()
+                                        }
+                                        building.floorList!!.add(floor)
+                                    }
                                 }
-                                building.floorList!!.add(floor)
                             }
                         }
                     }
-                    sQueryResponse.content = buildingList
+                    sQueryResponse.content = buildingList as List<Building>?
                 }else{
                     sQueryResponse.content = ArrayList()
                 }

+ 59 - 60
labsl/src/main/kotlin/com/persagy/labsl/utils/AdmEntityTransferUtil.kt

@@ -1,30 +1,26 @@
-package com.persagy.labsl.utils;
+package com.persagy.labsl.utils
 
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ArrayUtil;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.persagy.dmp.basic.utils.JsonNodeUtils;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
+import com.persagy.dmp.basic.utils.JsonNodeUtils
+import com.persagy.labsl.utils.AdmEntityTransferUtil
+import cn.hutool.core.collection.CollUtil
+import cn.hutool.core.util.ArrayUtil
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.node.ArrayNode
+import com.fasterxml.jackson.databind.node.ObjectNode
 
 /**
  * ADM通用查询条件
  * @author Charlie Yu
  * @date 2021-08-16
  */
-public class AdmEntityTransferUtil {
-
+object AdmEntityTransferUtil {
     /**
      * 转换为数据中台对象
      * @param objList
      * @return
      */
-    public static ArrayNode toDmpMultiEntity(List objList) {
-        return JsonNodeUtils.toArrayNode(objList, "infos", null);
+    fun toDmpMultiEntity(objList: List<*>?): ArrayNode {
+        return JsonNodeUtils.toArrayNode(objList, "infos", null)
     }
 
     /**
@@ -32,8 +28,8 @@ public class AdmEntityTransferUtil {
      * @param obj
      * @return
      */
-    public static JsonNode toDmpSingleEntity(Object obj) {
-        return JsonNodeUtils.toObjectNode(obj, "infos", null);
+    fun toDmpSingleEntity(obj: Any?): JsonNode {
+        return JsonNodeUtils.toObjectNode(obj, "infos", null)
     }
 
     /**
@@ -42,31 +38,34 @@ public class AdmEntityTransferUtil {
      * @param clazz 数据中心对象class
      * @param <T>
      * @return
-     */
-    public static <T> List<T> toAdmMultiEntity(List array, List<String> projection, Class<T> clazz) {
-        ArrayNode dataNode = JsonNodeUtils.toArrayNode(array, null, null);
-        return toAdmMultiEntity(dataNode, projection, clazz);
+    </T> */
+    fun <T> toAdmMultiEntity(array: List<*>?, projection: List<String?>?, clazz: Class<T>?): List<T>? {
+        val dataNode = JsonNodeUtils.toArrayNode(array, null, null)
+        return toAdmMultiEntity(dataNode, projection, clazz)
     }
 
     /**
      * 转换为数据中心对象
-     * @param array
      * @param clazz
      * @param <T>
      * @return
-     */
-    public static <T> List<T> toAdmMultiEntity(ArrayNode array, List<String> projection, Class<T> clazz) {
-        if(ArrayUtil.isEmpty(array)) {
-            return null;
+     * @param array
+    </T> */
+    fun <T> toAdmMultiEntity(array: ArrayNode, projection: List<String?>?, clazz: Class<T>?): List<T>? {
+        if (ArrayUtil.isEmpty(array)) {
+            return null
         }
         // 转换属性名
-        for(int i = 0, j = array.size();i < j;i++) {
-            JsonNode node = array.get(i);
-            if(node != null && node.isObject()) {
-                resetAdmProperty((ObjectNode) node, projection);
+        var i = 0
+        val j = array.size()
+        while (i < j) {
+            val node = array[i]
+            if (node != null && node.isObject) {
+                resetAdmProperty(node as ObjectNode, projection)
             }
+            i++
         }
-        return JsonNodeUtils.toEntity(array, clazz, "infos");
+        return JsonNodeUtils.toEntity(array, clazz, "infos")
     }
 
     /**
@@ -75,22 +74,22 @@ public class AdmEntityTransferUtil {
      * @param clazz
      * @param <T>
      * @return
-     */
-    public static <T> T toAdmSingleEntity(ObjectNode node, List<String> projection, Class<T> clazz) {
-        resetAdmProperty(node, projection);
-        return JsonNodeUtils.toEntity(node, clazz, "infos");
+    </T> */
+    fun <T> toAdmSingleEntity(node: ObjectNode, projection: List<String?>?, clazz: Class<T>?): T {
+        resetAdmProperty(node, projection)
+        return JsonNodeUtils.toEntity(node, clazz, "infos")
     }
 
     /**
      * 处理dmp转adm对象的属性名
      * @param node
      */
-    private static void resetAdmProperty(ObjectNode node, List<String> projection) {
+    private fun resetAdmProperty(node: ObjectNode, projection: List<String?>?) {
         // 转换属性名 TODO 目前只有创建时间和修改时间需要转换,后续有其他时通过建立映射在此转换即可
-        copyProperty(node, "creationTime", "createTime");
-        copyProperty(node, "modifiedTime", "lastUpdate");
-        copyProperty(node, "objType", "objectType");
-        removeProperty(node, projection);
+        copyProperty(node, "creationTime", "createTime")
+        copyProperty(node, "modifiedTime", "lastUpdate")
+        copyProperty(node, "objType", "objectType")
+        removeProperty(node, projection)
     }
 
     /**
@@ -99,42 +98,42 @@ public class AdmEntityTransferUtil {
      * @param srcProp 数据中台属性名
      * @param desProp 对应的数据中心属性名
      */
-    private static void copyProperty(ObjectNode dmpData, String srcProp, String desProp) {
-        if(dmpData == null) {
-            return;
+    private fun copyProperty(dmpData: ObjectNode?, srcProp: String, desProp: String) {
+        if (dmpData == null) {
+            return
         }
-        JsonNode value = dmpData.get(srcProp);
-        if(value == null || value.isNull()) {
-            return;
+        val value = dmpData[srcProp]
+        if (value == null || value.isNull) {
+            return
         }
-        dmpData.set(desProp, value);
-        dmpData.remove(srcProp);
+        dmpData.set<JsonNode>(desProp, value)
+        dmpData.remove(srcProp)
     }
 
     /**
      * 删除掉数据中心不需要的属性
      * @param dmpData
      */
-    private static void removeProperty(ObjectNode dmpData, List<String> projection){
-        if(CollUtil.isNotEmpty(projection)) {
+    private fun removeProperty(dmpData: ObjectNode, projection: List<String?>?) {
+        if (CollUtil.isNotEmpty(projection)) {
             // 转换为Set,提供遍历效率
-            Set<String> fieldSet = CollUtil.newHashSet(projection);
-            Iterator<String> fields =  dmpData.fieldNames();
+            val fieldSet: Set<String?> = CollUtil.newHashSet(projection)
+            val fields = dmpData.fieldNames()
             while (fields.hasNext()) {
-                String field = fields.next();
+                val field = fields.next()
                 // 返回结果中包含的不处理
-                if(fieldSet.contains(field)) {
-                    continue;
+                if (fieldSet.contains(field)) {
+                    continue
                 }
                 // 去掉不包含的属性
-                fields.remove();
+                fields.remove()
             }
         } else {
             // 返回全部时,去掉不需要属性
-            List<String> removeList = CollUtil.newArrayList("creator","valid", "createApp", "virtualCodes", "updateApp", "grouping", "modifier");
-            for(String removeField:removeList) {
-                dmpData.remove(removeField);
+            val removeList: List<String> = CollUtil.newArrayList("creator", "valid", "createApp", "virtualCodes", "updateApp", "grouping", "modifier")
+            for (removeField in removeList) {
+                dmpData.remove(removeField)
             }
         }
     }
-}
+}

+ 8 - 0
labsl/src/main/resources/application.yml

@@ -43,6 +43,14 @@ spring:
     username: root
     password: zVmW58LaAtjIKbb
 
+  second-datasource:
+    name: labsl
+    type: com.alibaba.druid.pool.DruidDataSource
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://rm-2ze20ntn5y9ljsx147o.mysql.rds.aliyuncs.com:3306/qibaishi_gallery?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

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

@@ -24,6 +24,14 @@ spring:
     username: root
     password: zVmW58LaAtjIKbb
 
+  second-datasource:
+    name: labsl
+    type: com.alibaba.druid.pool.DruidDataSource
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://rm-2ze20ntn5y9ljsx147o.mysql.rds.aliyuncs.com:3306/qibaishi_gallery?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