Explorar o código

Merge remote-tracking branch 'remotes/origin/develop-wanda' into v2.0.0

# Conflicts:
#	dmp-rwd/src/main/resources/bootstrap-dev.yml
#	dmp-rwd/src/main/resources/logback-spring.xml
lijie %!s(int64=3) %!d(string=hai) anos
pai
achega
5b18fead36

+ 2 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/FuncidDefModel.java

@@ -25,6 +25,8 @@ public class FuncidDefModel {
     private String projectId;
     private String firstTag;
     private String secondTag;
+    private String aliasFirstTag;
+    private String aliasSecondTag;
     private String priority;
     private String inputMode;
     private String unit;

+ 19 - 1
dmp-rwd/pom.xml

@@ -38,11 +38,23 @@
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.18</version>
         </dependency>
-        <dependency>
+        <!--<dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>
             <version>1.1.20</version>
+        </dependency>-->
+        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.1.22</version>
         </dependency>
         <dependency>
             <groupId>com.querydsl</groupId>
@@ -67,6 +79,12 @@
             <groupId>com.querydsl</groupId>
             <artifactId>querydsl-jpa</artifactId>
         </dependency>
+        <!-- mybatisPlus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.3.1</version>
+        </dependency>
         <dependency>
             <groupId>com.vladmihalcea</groupId>
             <artifactId>hibernate-types-52</artifactId>

+ 5 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/controller/ObjectInstanceController.java

@@ -35,6 +35,11 @@ public class ObjectInstanceController {
         return queryService.query(criteria);
     }
 
+    @PostMapping("/batchQueryProjectByIds")
+    public PagedResponse<ObjectNode> batchQueryProjectByIds(@RequestBody List<String> idList) {
+        return queryService.batchQueryProjectByIds(idList);
+    }
+
     @PostMapping("/create")
     public MapResponse create(@RequestBody ArrayNode paramList) {
         return createService.create(paramList);

+ 6 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/entity/FuncidDef.java

@@ -35,6 +35,8 @@ public class FuncidDef {
 	private String type;
 	private String firstTag;
 	private String secondTag;
+	private String aliasFirstTag;
+	private String aliasSecondTag;
 	private String priority;
 	private String inputMode;
 	private String unit;
@@ -66,6 +68,8 @@ public class FuncidDef {
 		entity.setProjectId(model.getProjectId());
 		entity.setFirstTag(model.getFirstTag());
 		entity.setSecondTag(model.getSecondTag());
+		entity.setAliasFirstTag(model.getAliasFirstTag());
+		entity.setAliasSecondTag(model.getAliasSecondTag());
 		entity.setPriority(model.getPriority());
 		entity.setInputMode(model.getInputMode());
 		entity.setUnit(model.getUnit());
@@ -96,6 +100,8 @@ public class FuncidDef {
 		model.setProjectId(this.getProjectId());
 		model.setFirstTag(this.getFirstTag());
 		model.setSecondTag(this.getSecondTag());
+		model.setAliasFirstTag(this.getAliasFirstTag());
+		model.setAliasSecondTag(this.getAliasSecondTag());
 		model.setPriority(this.getPriority());
 		model.setInputMode(this.getInputMode());
 		model.setUnit(this.getUnit());

+ 8 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/entity/ObjectInstance.java

@@ -1,11 +1,16 @@
 package com.persagy.dmp.rwd.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.rwd.handler.JsonTypeHandlerFactory;
 import com.persagy.dmp.rwd.model.ObjectInstanceModel;
 import com.vladmihalcea.hibernate.type.json.JsonStringType;
 import lombok.Getter;
 import lombok.Setter;
 import org.hibernate.annotations.*;
+import org.hibernate.annotations.NamedNativeQuery;
 
 import javax.persistence.*;
 import javax.persistence.Entity;
@@ -19,6 +24,7 @@ import java.util.List;
 @Table(name = "rwd_object")
 @TypeDef(name = "json", typeClass = JsonStringType.class)
 @IdClass(GroupProjectPK.class)
+@TableName(autoResultMap = true)
 public class ObjectInstance {
 
 	@Id
@@ -39,9 +45,11 @@ public class ObjectInstance {
 	private Integer grouping;
 
 	@Type(type = "json")
+	@TableField(value = "infos",typeHandler = JsonTypeHandlerFactory.ObjectNodeHandler.class)
 	private ObjectNode infos;
 
 	@Type(type = "json")
+	@TableField(value = "virtual_info_codes", typeHandler = JacksonTypeHandler.class)
 	private List<String> virtualInfoCodes;
 
 	private Integer valid;

+ 47 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/handler/DbJsonTypeHandler.java

@@ -0,0 +1,47 @@
+package com.persagy.dmp.rwd.handler;
+
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+import org.springframework.util.Assert;
+
+/***
+ * Description: 针对mysql中json类型与Model映射处理器.用于处理集合的泛型不是String类型的
+ * @author : lijie
+ * @date :2021/4/27 15:18
+ * Update By lijie 2021/4/27 15:18
+ */
+@Slf4j
+@MappedTypes({ Object.class })
+@MappedJdbcTypes(JdbcType.VARCHAR)
+public class DbJsonTypeHandler extends AbstractJsonTypeHandler<Object> {
+
+    private final Class<?> clazz;
+
+    public DbJsonTypeHandler(Class<?> type, Class<?> innerType) {
+        if (log.isTraceEnabled()) {
+            log.trace("JacksonTypeHandler(" + type + ")");
+        }
+        Assert.notNull(type, "Type argument cannot be null");
+
+        this.clazz = innerType;
+    }
+
+    @Override
+    protected Object parse(String json) {
+        if (JSONUtil.isJsonArray(json)) {
+            return JSONUtil.toList(JSONUtil.parseArray(json), this.clazz);
+        } else {
+            return JSONUtil.toBean(json, this.clazz);
+        }
+    }
+
+    @Override
+    protected String toJson(Object obj) {
+        return JSONUtil.toJsonStr(obj);
+    }
+
+}

+ 11 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/handler/JsonTypeHandlerFactory.java

@@ -0,0 +1,11 @@
+package com.persagy.dmp.rwd.handler;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+public class JsonTypeHandlerFactory {
+    public static class ObjectNodeHandler extends DbJsonTypeHandler {
+        public ObjectNodeHandler(Class<?> type) {
+            super(type, ObjectNode.class);
+        }
+    }
+}

+ 11 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/repository/ObjectInstanceRepository.java

@@ -2,8 +2,19 @@ package com.persagy.dmp.rwd.repository;
 
 import com.persagy.dmp.rwd.entity.ObjectInstance;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.querydsl.QuerydslPredicateExecutor;
 
+import java.util.List;
+
 public interface ObjectInstanceRepository extends JpaRepository<ObjectInstance, String>, QuerydslPredicateExecutor<ObjectInstance>{
+    @Query(nativeQuery=true,value = "USE mysql;")
+    void selectUseDatabase();
+    @Query(nativeQuery=true,value = "SET SESSION group_concat_max_len = 65535;")
+    void setSessionConcatMaxLen();
+    @Query(nativeQuery=true,value = "SELECT REPLACE(GROUP_CONCAT(CONCAT(\"(SELECT * FROM \",table_name,\" WHERE class_code='project') UNION\")),\",\",\" \") "
+            + "from mysql.innodb_table_stats where table_name like '%rwd_object_wd%'")
+    String queryAllProjectTableNames();
+
 }
 

+ 39 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/repository/ProjectDao.java

@@ -0,0 +1,39 @@
+package com.persagy.dmp.rwd.repository;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.entity.ObjectInstance;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 数据库操作dao
+ * @author Charlie Yu
+ * @date 2021-03-30
+ */
+@Mapper
+@Repository
+public interface ProjectDao  extends BaseMapper<ObjectInstance> {
+
+    /***
+     * Description: 根据集团code查询所有集团下的表名称
+     * @param groupCode : 集团code
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/6/30 22:31
+     * Update By lijie 2021/6/30 22:31
+     */
+    String queryRwdObjectTableNamesByGroupCode(@Param("groupCode") String groupCode,@Param("rwdDatabaseName") String rwdDatabaseName);
+    /***
+     * Description:查询所有的项目信息
+     * @param querySql : 查询语句
+     * @return : java.util.List<com.persagy.dmp.rwd.entity.ObjectInstance>
+     * @author : lijie
+     * @date :2021/6/30 22:31
+     * Update By lijie 2021/6/30 22:31
+     */
+    List<ObjectInstance> queryAllProjects(@Param("querySql") String querySql);
+}

+ 142 - 72
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceQueryService.java

@@ -15,11 +15,20 @@ import com.persagy.dmp.rwd.entity.QObjectInstance;
 import com.persagy.dmp.rwd.entity.QRelationInstance;
 import com.persagy.dmp.rwd.enums.FuncidDataType;
 import com.persagy.dmp.rwd.model.FuncidDefModel;
+import com.persagy.dmp.rwd.repository.ObjectInstanceRepository;
+import com.persagy.dmp.rwd.repository.ProjectDao;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import com.querydsl.core.types.dsl.Expressions;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -35,6 +44,10 @@ public class ObjectInstanceQueryService extends BaseService {
     private FuncidDefService funcidDefService;
 
     private Set<String> set = new HashSet<>();
+    @Autowired
+    private ProjectDao projectDao;
+    @Value("${persagy.mysql.database:dmp_rwd}")
+    private String rwdDatabaseName;
 
     {
         set.add("ProjID");
@@ -301,96 +314,153 @@ public class ObjectInstanceQueryService extends BaseService {
 
     public PagedResponse<ObjectNode> query(JacksonCriteria criteria) {
         PagedResponse<ObjectNode> result = new PagedResponse<>();
-//        Integer grouping = criteria.getInteger("grouping");
-//        if (grouping == null) {
-//            criteria.add("grouping", 1);
-//        }
         super.checkParam(result, RwdConstants.QUERY_GROUPCODE, RwdConstants.QUERY_PROJECTID);
         if (!result.success()) {
             return result;
         }
         criteria.add(RwdConstants.OBJECT_GROUPCODE, DmpParameterStorage.getGroupCode());
         criteria.add(RwdConstants.OBJECT_PROJECTID, DmpParameterStorage.getProjectId());
+        queryObjInstance(criteria,result);
+        return result;
+    }
+    /***
+     * Description: 查询对象实例
+     * @param criteria : 查询条件
+     * @param result : 结果
+     * @return : void
+     * @author : lijie
+     * @date :2021/6/30 17:48
+     * Update By lijie 2021/6/30 17:48
+     */
+    private void queryObjInstance(JacksonCriteria criteria,PagedResponse<ObjectNode> result){
         prepareCriteria(criteria);
         PagedResponse<ObjectInstance> resp = criteriaUtils.query(QObjectInstance.objectInstance, this::parse, criteria);
         result.setCount(resp.getCount());
         List<ObjectInstance> dataList = resp.getData();
+        analysisQueryResult(dataList,criteria,result);
+    }
+    /***
+     * Description:解析查询结果
+     * @param dataList : 结果集
+     * @return : void
+     * @author : lijie
+     * @date :2021/6/30 22:36
+     * Update By lijie 2021/6/30 22:36
+     */
+    private void analysisQueryResult(List<ObjectInstance> dataList,JacksonCriteria criteria,PagedResponse<ObjectNode> result) {
         Map<String, List<String>> infoCodes = new HashMap<>();
-        if (dataList != null && dataList.size() > 0) {
-            List<ObjectNode> collect = dataList.stream().map(entity -> {
-                ObjectNode model = JsonNodeFactory.instance.objectNode();
-                model.put(RwdConstants.OBJECT_ID, entity.getId());
-                model.put(RwdConstants.OBJECT_CLASSCODE, entity.getClassCode());
-                model.put(RwdConstants.OBJECT_PROJECTID, entity.getProjectId());
-                model.put(RwdConstants.OBJECT_GROUPING, entity.getGrouping());
-                model.put(RwdConstants.OBJECT_OBJTYPE, entity.getObjType());
-                model.put(RwdConstants.OBJECT_VALID, entity.getValid());
-                if (entity.getName() != null) {
-                    model.put(RwdConstants.OBJECT_NAME, entity.getName());
-                }
-                if (entity.getLocalId() != null) {
-                    model.put(RwdConstants.OBJECT_LOCALID, entity.getLocalId());
-                }
-                if (entity.getLocalName() != null) {
-                    model.put(RwdConstants.OBJECT_LOCALNAME, entity.getLocalName());
-                }
-                if (entity.getCreateUser() != null) {
-                    model.put(RwdConstants.OBJECT_CREATE_USER, entity.getCreateUser());
-                }
-                if (entity.getCreateTime() != null) {
-                    model.putPOJO(RwdConstants.OBJECT_CREATE_TIME, entity.getCreateTime());
-                }
-                if (entity.getCreateApp() != null) {
-                    model.put(RwdConstants.OBJECT_CREATE_APP, entity.getCreateApp());
-                }
-                if (entity.getUpdateUser() != null) {
-                    model.put(RwdConstants.OBJECT_UPDATE_USER, entity.getUpdateUser());
-                }
-                if (entity.getUpdateTime() != null) {
-                    model.putPOJO(RwdConstants.OBJECT_UPDATE_TIME, entity.getUpdateTime());
-                }
-                if (entity.getUpdateApp() != null) {
-                    model.put(RwdConstants.OBJECT_UPDATE_APP, entity.getUpdateApp());
-                }
-                if (entity.getVirtualInfoCodes() != null || entity.getVirtualInfoCodes().size() == 0) {
-                    model.putPOJO(RwdConstants.OBJECT_VIRTUAL_INFO_CODES, entity.getVirtualInfoCodes());
-                }
+        if (dataList == null || dataList.size() <= 0) {
+            return;
+        }
+        List<ObjectNode> collect = dataList.stream().map(entity -> {
+            ObjectNode model = JsonNodeFactory.instance.objectNode();
+            model.put(RwdConstants.OBJECT_ID, entity.getId());
+            model.put(RwdConstants.OBJECT_CLASSCODE, entity.getClassCode());
+            model.put(RwdConstants.OBJECT_PROJECTID, entity.getProjectId());
+            model.put(RwdConstants.OBJECT_GROUPING, entity.getGrouping());
+            model.put(RwdConstants.OBJECT_OBJTYPE, entity.getObjType());
+            model.put(RwdConstants.OBJECT_VALID, entity.getValid());
+            if (entity.getName() != null) {
+                model.put(RwdConstants.OBJECT_NAME, entity.getName());
+            }
+            if (entity.getLocalId() != null) {
+                model.put(RwdConstants.OBJECT_LOCALID, entity.getLocalId());
+            }
+            if (entity.getLocalName() != null) {
+                model.put(RwdConstants.OBJECT_LOCALNAME, entity.getLocalName());
+            }
+            if (entity.getCreateUser() != null) {
+                model.put(RwdConstants.OBJECT_CREATE_USER, entity.getCreateUser());
+            }
+            if (entity.getCreateTime() != null) {
+                model.putPOJO(RwdConstants.OBJECT_CREATE_TIME, entity.getCreateTime());
+            }
+            if (entity.getCreateApp() != null) {
+                model.put(RwdConstants.OBJECT_CREATE_APP, entity.getCreateApp());
+            }
+            if (entity.getUpdateUser() != null) {
+                model.put(RwdConstants.OBJECT_UPDATE_USER, entity.getUpdateUser());
+            }
+            if (entity.getUpdateTime() != null) {
+                model.putPOJO(RwdConstants.OBJECT_UPDATE_TIME, entity.getUpdateTime());
+            }
+            if (entity.getUpdateApp() != null) {
+                model.put(RwdConstants.OBJECT_UPDATE_APP, entity.getUpdateApp());
+            }
+            if (entity.getVirtualInfoCodes() != null && entity.getVirtualInfoCodes().size() > 0) {
+                model.putPOJO(RwdConstants.OBJECT_VIRTUAL_INFO_CODES, entity.getVirtualInfoCodes());
+            }
 
 
-                String classCode = entity.getClassCode();
-                Set<String> withColumns = criteria.getWithColumns();
-                if (!infoCodes.containsKey(classCode)) {
-                    JacksonCriteria funcidCriteria = JacksonCriteria.newInstance();
-                    funcidCriteria.setWithoutCount(true);
-                    funcidCriteria.add(RwdConstants.OBJECT_CLASSCODE, classCode);
-                    ListResponse<FuncidDefModel> funcidDefModelListResponse = funcidDefService.queryFuncid(DmpParameterStorage.getGroupCode(),
-                            DmpParameterStorage.getSchemaId(), DmpParameterStorage.getProjectId(), DmpParameterStorage.getAppId(), funcidCriteria);
+            String classCode = entity.getClassCode();
+            Set<String> withColumns = criteria.getWithColumns();
+            if (!infoCodes.containsKey(classCode)) {
+                JacksonCriteria funcidCriteria = JacksonCriteria.newInstance();
+                funcidCriteria.setWithoutCount(true);
+                funcidCriteria.add(RwdConstants.OBJECT_CLASSCODE, classCode);
+                ListResponse<FuncidDefModel> funcidDefModelListResponse = funcidDefService.queryFuncid(DmpParameterStorage.getGroupCode(),
+                        DmpParameterStorage.getSchemaId(), DmpParameterStorage.getProjectId(), DmpParameterStorage.getAppId(), funcidCriteria);
 
-                    if (funcidDefModelListResponse.getData() == null) {
-                        infoCodes.put(classCode, Collections.emptyList());
-                    } else {
-                        List<String> codes = funcidDefModelListResponse.getData().stream()
-                                .map(FuncidDefModel::getCode)
-                                .filter(code -> withColumns == null || withColumns.size() == 0 || withColumns.contains(code))
-                                .collect(Collectors.toList());
-                        infoCodes.put(classCode, codes);
-                    }
+                if (funcidDefModelListResponse.getData() == null) {
+                    infoCodes.put(classCode, Collections.emptyList());
+                } else {
+                    List<String> codes = funcidDefModelListResponse.getData().stream()
+                            .map(FuncidDefModel::getCode)
+                            .filter(code -> withColumns == null || withColumns.size() == 0 || withColumns.contains(code))
+                            .collect(Collectors.toList());
+                    infoCodes.put(classCode, codes);
                 }
-                List<String> codes = infoCodes.get(classCode);
-                ObjectNode infos = entity.getInfos();
-                if (codes.size() > 0 && infos != null) {
-                    for (String code : codes) {
-                        if (infos.has(code)) {
-                            model.put(code, infos.get(code));
-                        }
+            }
+            List<String> codes = infoCodes.get(classCode);
+            ObjectNode infos = entity.getInfos();
+            if (codes.size() > 0 && infos != null) {
+                for (String code : codes) {
+                    if (infos.has(code)) {
+                        model.put(code, infos.get(code));
                     }
                 }
-                return model;
-            }).collect(Collectors.toList());
-            result.setData(collect);
+            }
+            return model;
+        }).collect(Collectors.toList());
+        result.setData(collect);
+        result.setCount((long) collect.size());
+    }
+
+    /***
+     * Description: 批量查询项目信息.因为之前的query参数校验了项目必填,为防止改之前的代码出问题所以新增一个接口
+     * @return : com.persagy.common.web.PagedResponse<com.fasterxml.jackson.databind.node.ObjectNode>
+     * @author : lijie
+     * @date :2021/6/30 17:44
+     * Update By lijie 2021/6/30 17:44
+     */
+    public PagedResponse<ObjectNode> batchQueryProjectByIds(List<String> idList) {
+        PagedResponse<ObjectNode> result = new PagedResponse<>();
+        super.checkParam(result, RwdConstants.QUERY_GROUPCODE);
+        if (!result.success()) {
+            return result;
+        }
+        // 1.查询rwd_object所有的集团下的表
+        String tableNames = projectDao.queryRwdObjectTableNamesByGroupCode(DmpParameterStorage.getGroupCode(),rwdDatabaseName);
+        if (StringUtils.isBlank(tableNames)){
+            return result;
         }
+        // 2.去掉最后的UNION
+        String querySql = tableNames.substring(0, tableNames.lastIndexOf("UNION"));
+        Query nativeQuery = entityManager.createNativeQuery(querySql,ObjectInstance.class);
+        List<ObjectInstance> projects = nativeQuery.getResultList();
+        //List<ObjectInstance> projects = projectDao.queryAllProjects(querySql);
+        if (CollectionUtils.isEmpty(projects)){
+            return result;
+        }
+        if (!CollectionUtils.isEmpty(idList)
+                && !CollectionUtils.isEmpty(projects)){
+            HashSet<String> filterProjectIds = new HashSet<>(idList);
+            projects = projects.stream()
+                    .filter(project->filterProjectIds.contains(project.getId()))
+                    .collect(Collectors.toList());
+        }
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        analysisQueryResult(projects,criteria,result);
         return result;
     }
-
-
 }

+ 21 - 0
dmp-rwd/src/main/resources/mapper/ProjectDao.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.persagy.dmp.rwd.repository.ProjectDao">
+	<select id="queryRwdObjectTableNamesByGroupCode" parameterType="hashmap" resultType="string">
+		USE INFORMATION_SCHEMA;
+		SET SESSION group_concat_max_len = 65535;
+		SELECT REPLACE
+			( GROUP_CONCAT( CONCAT( "(SELECT * FROM ", TABLE_NAME, " WHERE class_code='project') UNION ALL" ) ), ",", " " )
+		FROM
+			INFORMATION_SCHEMA.TABLES
+		WHERE
+			table_name LIKE CONCAT('rwd_object_', LOWER(#{groupCode}), '%' ) AND TABLE_ROWS>=0;
+		USE ${rwdDatabaseName};
+	</select>
+	<select id="queryAllProjects" parameterType="string" resultType="com.persagy.dmp.rwd.entity.ObjectInstance">
+		${querySql}
+	</select>
+
+</mapper>