瀏覽代碼

资源注册:导入数据集时,数据集和数据元列表应该是只取集成标准各版本的并集去重

yingjie 9 年之前
父節點
當前提交
51e3d7a20d

+ 0 - 11
Hos-Framework/src/main/java/com/yihu/ehr/framework/util/sql/SqlCreator.java

@ -104,17 +104,6 @@ public class SqlCreator {
        return selectData();
    }
    public String selectSingleData(String tabelName) {
        setTableName(tabelName);
        itemList.clear();
        for(Object key : transformer.columnToProperty.keySet()){
            itemList.add(StringUtil.toString(key));
        }
        return selectData();
    }
    public String selectData() {
        StringBuilder sqlBuffer = new StringBuilder();

+ 26 - 22
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdMetadataService.java

@ -325,10 +325,10 @@ public class StdMetadataService extends SQLGeneralDAO {
    }
    public List getAllVersionMetadataList(String condition) {
        //数据元列表应该是所选择的数据集列表的数据元并集去重 @modify by yingjie chen
        //数据元列表应该是所选择的数据集列表的数据元并集去重 @modify by Yingjie Chen
        try {
            List<String>  versionList = new ArrayList<>();
            String sql = Constants.EMPTY;
            Map<String,List<StdDataSetModel>> version2DataSetMap = new HashMap<>();
            String sql;
            ObjectMapper objectMapper = new ObjectMapper();
            String code = Constants.EMPTY;
            if (!StringUtil.isEmpty(condition)) {
@ -343,6 +343,7 @@ public class StdMetadataService extends SQLGeneralDAO {
            List<StandardModel> standardModelList = criteria.list();
            List<Integer> idList = standardModelList.stream().map(StandardModel::getId).collect(Collectors.toList());
            List<StandardVersionModel> versionModelList;
            Session session = getCurrentSession();
            if (!CollectionUtil.isEmpty(idList)) {
                String hql = "FROM StandardVersionModel WHERE publishTime is not null AND standardId IN :idList order by publishTime";
                Query query = getCurrentSession().createQuery(hql);
@ -351,36 +352,41 @@ public class StdMetadataService extends SQLGeneralDAO {
                for (StandardVersionModel versionModel : versionModelList) {
                    SqlCreator sqlDatasetCreator = new SqlCreator(StdDataSetModel.class);
                    StandardVersion version = new StandardVersion(versionModel.getVersion());
                    versionList.add(versionModel.getVersion());
                    sqlDatasetCreator.equalCondition("code", code);
                    sql = sql + sqlDatasetCreator.selectData(version.getDataSetTableName()) + Constants.UNION;
                    sql = sqlDatasetCreator.selectData(version.getDataSetTableName());
                    SQLQuery sqlQuery = session.createSQLQuery(sql);
                    BeanTransformer datasetTransformer = new BeanTransformer(StdDataSetModel.class);
                    sqlQuery.setResultTransformer(datasetTransformer);
                    sqlQuery.setParameter("code", code);
                    List<StdDataSetModel> dataList = sqlQuery.list();
                    if (dataList.size() > 0) {
                        version2DataSetMap.put(versionModel.getVersion(),dataList);
                    }
                }
            }
            BeanTransformer datasetTransformer = new BeanTransformer(StdDataSetModel.class);
            if (!StringUtil.isEmpty(sql)) {
                sql = sql.substring(0, sql.length() - Constants.UNION.length());
                SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
                sqlQuery.setResultTransformer(datasetTransformer);
                sqlQuery.setParameter("code", code);
                List<StdDataSetModel> modelList = sqlQuery.list();
            if (!version2DataSetMap.isEmpty()) {
                sql = Constants.EMPTY;
                Integer count = 1;
                Map<Integer, String> datasetIdMap = new HashMap<>();
                for (StdDataSetModel model : modelList) {
                Iterator iter = version2DataSetMap.entrySet().iterator();
                while (iter.hasNext()) {
                    Map.Entry entry = (Map.Entry) iter.next();
                    SqlCreator sqlMetadataCreator = new SqlCreator(StdMetaDataModel.class);
                    sqlMetadataCreator.equalConditionQue("datasetId", model.getId());
                    for (String versionKey : versionList) {
                        datasetIdMap.put(count++, StringUtil.toString(model.getId()));
                        StandardVersion version = new StandardVersion(versionKey);
                        sql = sql + sqlMetadataCreator.selectSingleData(version.getMetaDataTableName()) + Constants.UNION;
                    }
                    StandardVersion version = new StandardVersion((String) entry.getKey());
                    List<StdDataSetModel> dataList = (List<StdDataSetModel>) entry.getValue();
                    datasetIdMap.put(count++, StringUtil.toString(dataList.get(0).getId()));
                    sqlMetadataCreator.equalConditionQue("datasetId", dataList.get(0).getId());
                    sql = sql + sqlMetadataCreator.selectData(version.getMetaDataTableName()) + Constants.UNION;
                }
                BeanTransformer metadataTransformer = new BeanTransformer(StdMetaDataModel.class);
                List<StdMetaDataModel> distinctModelList = new ArrayList<>();
                if (!StringUtil.isEmpty(sql)) {
                    sql = sql.substring(0, sql.length() - Constants.UNION.length());
                    SQLQuery sqlQuery;
                    sqlQuery = getCurrentSession().createSQLQuery(sql);
                    sqlQuery.setResultTransformer(metadataTransformer);
                    for (int i = 1; i < count; i++) {
@ -391,9 +397,7 @@ public class StdMetadataService extends SQLGeneralDAO {
                    for (StdMetaDataModel model : metadataList) {
                        meatadataModelMap.put(model.getCode(), model);
                    }
                    for (String key : meatadataModelMap.keySet()) {
                        distinctModelList.add(meatadataModelMap.get(key));
                    }
                    distinctModelList.addAll(meatadataModelMap.keySet().stream().map(meatadataModelMap::get).collect(Collectors.toList()));
                }
                return distinctModelList;