|
|
@ -0,0 +1,723 @@
|
|
|
package com.yihu.jw.basic.standard.service.adapter;
|
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.yihu.jw.basic.standard.dao.IStdDataSetModelDao;
|
|
|
import com.yihu.jw.basic.standard.dao.IStdMetaDataModelDao;
|
|
|
import com.yihu.jw.basic.standard.match.matchModel.MetadataMatchVO;
|
|
|
import com.yihu.jw.basic.standard.match.metadata.MetadataStrategyExecute;
|
|
|
import com.yihu.jw.basic.standard.match.metadata.MetatdataStandardNameStrategy;
|
|
|
import com.yihu.jw.basic.standard.model.TreeView;
|
|
|
import com.yihu.jw.basic.standard.model.adapter.AdapterDatasetModel;
|
|
|
import com.yihu.jw.basic.standard.model.adapter.AdapterDictModel;
|
|
|
import com.yihu.jw.basic.standard.model.adapter.AdapterMetadataModel;
|
|
|
import com.yihu.jw.basic.standard.model.adapter.AdapterSchemeVersionModel;
|
|
|
import com.yihu.jw.basic.standard.model.standard.StdDataSetModel;
|
|
|
import com.yihu.jw.basic.standard.model.standard.StdMetaDataModel;
|
|
|
import com.yihu.jw.basic.standard.service.bo.AdapterVersion;
|
|
|
import com.yihu.jw.basic.standard.service.bo.StandardVersion;
|
|
|
import com.yihu.jw.basic.standard.service.standard.StdMetadataService;
|
|
|
import com.yihu.jw.basic.util.GetChineseFirst;
|
|
|
import com.yihu.jw.lang.SpringContext;
|
|
|
import com.yihu.jw.restmodel.web.Envelop;
|
|
|
import com.yihu.jw.restmodel.web.ListEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.ObjEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.PageEnvelop;
|
|
|
import com.yihu.jw.util.common.StringUtil;
|
|
|
import com.yihu.jw.util.sql.ErrorCode;
|
|
|
import com.yihu.jw.basic.standard.dao.SQLGeneralDAO;
|
|
|
import com.yihu.jw.exception.ApiException;
|
|
|
import com.yihu.jw.basic.standard.model.Result;
|
|
|
import com.yihu.jw.util.sql.BeanTransformer;
|
|
|
import com.yihu.jw.util.sql.SqlConstants;
|
|
|
import com.yihu.jw.util.sql.SqlCreator;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.hibernate.Query;
|
|
|
import org.hibernate.Session;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
@Transactional
|
|
|
@Service("AdapterDatasetService")
|
|
|
public class AdapterDatasetService extends SQLGeneralDAO {
|
|
|
|
|
|
public static final String BEAN_ID = "AdapterDatasetService";
|
|
|
|
|
|
@Autowired
|
|
|
private AdapterMetadataService adapterMetadataService;
|
|
|
|
|
|
@Autowired
|
|
|
private AdapterSchemeVersionService adapterSchemeVersionService;
|
|
|
|
|
|
@Autowired
|
|
|
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
|
|
|
|
|
@Autowired
|
|
|
private IStdMetaDataModelDao stdMetaDataModelDao;
|
|
|
|
|
|
@Autowired
|
|
|
private IStdDataSetModelDao stdDataSetModelDao;
|
|
|
|
|
|
@Autowired
|
|
|
private StdMetadataService stdMetadataService;
|
|
|
|
|
|
private AdapterDatasetService adapterDatasetService;
|
|
|
|
|
|
public AdapterDatasetService() {
|
|
|
}
|
|
|
|
|
|
public void finalize() throws Throwable {
|
|
|
super.finalize();
|
|
|
}
|
|
|
|
|
|
public ObjEnvelop add(String adapterVersion, String dataset) {
|
|
|
try {
|
|
|
AdapterVersion version = new AdapterVersion(adapterVersion);
|
|
|
AdapterDatasetModel adapterDatasetModel = objectMapper.readValue(dataset, AdapterDatasetModel.class);
|
|
|
adapterDatasetModel.setId(getMaxId(version.getDataSetTableName()));
|
|
|
JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDatasetModel));
|
|
|
SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
|
|
|
String sql = sqlCreator.insertData(version.getDataSetTableName(), jsonNode);
|
|
|
Query query = getExeuteQuery(sqlCreator, sql);
|
|
|
query.executeUpdate();
|
|
|
return ObjEnvelop.getSuccess("保存适配数据集成功",adapterDatasetModel);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return ObjEnvelop.getError("保存适配数据集失败",-1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public Envelop delete(String adapterVersion, Integer datasetId) {
|
|
|
try {
|
|
|
if (adapterVersion == null || adapterVersion.length() == 0) {
|
|
|
return Envelop.getSuccess("无效适配版本");
|
|
|
}
|
|
|
AdapterVersion version = new AdapterVersion(adapterVersion);
|
|
|
Session session = getCurrentSession();
|
|
|
String sql = "delete from " + version.getDataSetTableName() + " where id = :id";
|
|
|
Query query = session.createSQLQuery(sql);
|
|
|
query.setInteger("id", datasetId);
|
|
|
query.executeUpdate();
|
|
|
return Envelop.getSuccess("删除适配数据集成功");
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return Envelop.getError("删除适配数据集失败",-1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public ObjEnvelop modify(String adapterVersion, String dataset) {
|
|
|
try {
|
|
|
AdapterVersion version = new AdapterVersion(adapterVersion);
|
|
|
AdapterDatasetModel adapterDatasetModel = objectMapper.readValue(dataset, AdapterDatasetModel.class);
|
|
|
JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDatasetModel));
|
|
|
SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
|
|
|
String sql = sqlCreator.updateDataByTableKey(version.getDataSetTableName(), jsonNode);
|
|
|
Query query = getExeuteQuery(sqlCreator, sql);
|
|
|
query.executeUpdate();
|
|
|
return ObjEnvelop.getSuccess("修改适配数据集成功",adapterDatasetModel);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return ObjEnvelop.getError("修改适配数据集失败",-1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public ObjEnvelop get(String version, Integer datasetId) {
|
|
|
try {
|
|
|
AdapterVersion adapterVersion = new AdapterVersion(version);
|
|
|
AdapterDatasetModel adapterDatasetModel = (AdapterDatasetModel) get(AdapterDatasetModel.class, adapterVersion.getDataSetTableName(), datasetId);
|
|
|
return ObjEnvelop.getSuccess("获取适配数据集成功",adapterDatasetModel);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return ObjEnvelop.getError("获取适配数据集失败",-1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public PageEnvelop getDetailModelResult(String version, String condition, String order, Integer rows, Integer page) {
|
|
|
try {
|
|
|
AdapterVersion adapterVersion = new AdapterVersion(version);
|
|
|
List<AdapterDatasetModel> dataSetModelList = getDatasetList(AdapterDatasetModel.class, version, condition, order, rows, page);
|
|
|
Integer count = getDatasetInt(AdapterDatasetModel.class, adapterVersion, condition);
|
|
|
PageEnvelop detailModelResult = PageEnvelop.getSuccess("获取适配数据集成功");
|
|
|
detailModelResult.setDetailModelList(dataSetModelList);
|
|
|
detailModelResult.setTotalCount(count);
|
|
|
return detailModelResult;
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return PageEnvelop.getError("获取适配数据集失败",-1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public List getDatasetList(Class tClass, String version, String condition, String order, Integer limit, Integer offset) throws Exception {
|
|
|
AdapterVersion adapterVersion = new AdapterVersion(version);
|
|
|
String tableName = adapterVersion.getDataSetTableName();
|
|
|
SqlCreator sqlCreator = new SqlCreator(tClass);
|
|
|
if (!StringUtil.isEmpty(condition)) {
|
|
|
JsonNode jsonNode = objectMapper.readTree(condition);
|
|
|
String name = jsonNode.get("name").asText();
|
|
|
sqlCreator.likeOrCondition("stdDatasetName", "stdDatasetCode", name);
|
|
|
}
|
|
|
if (!StringUtil.isEmpty(order)) {
|
|
|
JsonNode jsonNode = objectMapper.readTree(order);
|
|
|
Iterator<String> fieldNames = jsonNode.fieldNames();
|
|
|
while (fieldNames.hasNext()) {
|
|
|
String fieldName = fieldNames.next();
|
|
|
String value = jsonNode.get(fieldName).asText().toUpperCase();
|
|
|
sqlCreator.order(fieldName, value);
|
|
|
}
|
|
|
}
|
|
|
String sql = sqlCreator.selectData(tableName);
|
|
|
Query query = getQuery(sqlCreator, sql);
|
|
|
if (limit != null) {
|
|
|
query.setMaxResults(limit);
|
|
|
if (offset != null) {
|
|
|
query.setFirstResult((offset - 1) * limit);
|
|
|
}
|
|
|
}
|
|
|
return query.list();
|
|
|
}
|
|
|
|
|
|
public Integer getDatasetInt(Class tClass, AdapterVersion adapterVersion, String condition) {
|
|
|
try {
|
|
|
String tableName = adapterVersion.getDataSetTableName();
|
|
|
SqlCreator sqlCreator = new SqlCreator(tClass);
|
|
|
if (!StringUtil.isEmpty(condition)) {
|
|
|
JsonNode jsonNode = objectMapper.readTree(condition);
|
|
|
String name = jsonNode.get("name").asText();
|
|
|
sqlCreator.likeOrCondition("stdDatasetName", "stdDatasetCode", name);
|
|
|
}
|
|
|
String sql = sqlCreator.countData(tableName);
|
|
|
Query query = getCurrentSession().createSQLQuery(sql);
|
|
|
for (String key : sqlCreator.getKeyValueMap().keySet()) {
|
|
|
query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
|
|
|
}
|
|
|
Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
|
|
|
return count;
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
throw new ApiException(ErrorCode.GetDataSetListFailed.getErrorCode());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void getAdapterCustomize(String adapterVersion, List<TreeView> treeViewList, List<Integer> hasCheckDatasetIdList, List<Integer> hasCheckMetadataIdList) {
|
|
|
boolean adapter = false; //定制是否添加根节点
|
|
|
//获取所有定制数据集
|
|
|
AdapterVersion aVersion = new AdapterVersion(adapterVersion);
|
|
|
List<AdapterDatasetModel> adapterDataSetList = getList(AdapterDatasetModel.class, aVersion.getDataSetTableName(), "", "", null, null);
|
|
|
List<AdapterMetadataModel> adapterMetaDataList = getList(AdapterMetadataModel.class, aVersion.getMetaDataTableName(), "", "", null, null);
|
|
|
List<TreeView> adapterCustomizeList = new ArrayList<>();
|
|
|
//数据集
|
|
|
for (AdapterDatasetModel adapterDataset : adapterDataSetList) {
|
|
|
TreeView parent = new TreeView();
|
|
|
parent.setId("AD" + adapterDataset.getStdDatasetId());
|
|
|
parent.setPid("A0");
|
|
|
parent.setText(adapterDataset.getStdDatasetName());
|
|
|
parent.setIschecked(true);
|
|
|
adapterCustomizeList.add(parent);
|
|
|
adapter = true;
|
|
|
hasCheckDatasetIdList.add(adapterDataset.getStdDatasetId());
|
|
|
}
|
|
|
//数据元
|
|
|
for (AdapterMetadataModel adapterMetadat : adapterMetaDataList) {
|
|
|
TreeView child = new TreeView();
|
|
|
child.setId("AM" + adapterMetadat.getStdMetadataId());
|
|
|
child.setPid("AD" + adapterMetadat.getStdDatasetId());
|
|
|
child.setText(adapterMetadat.getStdMetadataName());
|
|
|
child.setIschecked(true);
|
|
|
adapterCustomizeList.add(child);
|
|
|
adapter = true;
|
|
|
hasCheckMetadataIdList.add(adapterMetadat.getStdMetadataId());
|
|
|
}
|
|
|
//根节点
|
|
|
if (adapter) {
|
|
|
TreeView adapterRoot = new TreeView();
|
|
|
adapterRoot.setId("A0");
|
|
|
adapterRoot.setPid("-1");
|
|
|
adapterRoot.setText("数据集");
|
|
|
adapterRoot.setIschecked(true);
|
|
|
adapterCustomizeList.add(adapterRoot);
|
|
|
}
|
|
|
treeViewList.addAll(adapterCustomizeList);
|
|
|
}
|
|
|
|
|
|
public void getStdCustomize(String stdVersion, List<TreeView> treeViewList, List<Integer> hasCheckDatasetIdList, List<Integer> hasCheckMetadataIdList) {
|
|
|
String id;
|
|
|
boolean check; //是否勾选
|
|
|
boolean std = false; //标准是否添加根节点
|
|
|
long childCheckCount;
|
|
|
long datasetCount = 0;
|
|
|
|
|
|
//获取所有标准数据集
|
|
|
StandardVersion sVersion = new StandardVersion(stdVersion);
|
|
|
List<StdDataSetModel> dataSetList = getList(StdDataSetModel.class, sVersion.getDataSetTableName(), "", "", null, null);
|
|
|
String idListStr = SqlConstants.EMPTY;
|
|
|
for (StdDataSetModel dataSet : dataSetList) {
|
|
|
idListStr += dataSet.getId() + SqlConstants.COMMA;
|
|
|
}
|
|
|
Map<Integer, List<StdMetaDataModel>> stdDataSetModelMap = new HashMap<>();
|
|
|
if (!StringUtil.isEmpty(idListStr)) {
|
|
|
String tableName = sVersion.getMetaDataTableName();
|
|
|
SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
|
|
|
String sql = sqlCreator.selectData(tableName);
|
|
|
Query query = getQuery(sqlCreator, sql);
|
|
|
List<StdMetaDataModel> stdMetaDataModelList = query.list();
|
|
|
for (StdMetaDataModel stdMetaDataModel : stdMetaDataModelList) {
|
|
|
List<StdMetaDataModel> stdMetaDataModels = stdDataSetModelMap.get(stdMetaDataModel.getDatasetId());
|
|
|
if (stdMetaDataModels == null) {
|
|
|
stdMetaDataModels = new ArrayList<>();
|
|
|
}
|
|
|
stdMetaDataModels.add(stdMetaDataModel);
|
|
|
stdDataSetModelMap.put(stdMetaDataModel.getDatasetId(), stdMetaDataModels);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<TreeView> stdCustomizeList = new ArrayList<>();
|
|
|
|
|
|
for (StdDataSetModel dataSet : dataSetList) {
|
|
|
TreeView parent = new TreeView();
|
|
|
parent.setId("SD" + dataSet.getId());
|
|
|
parent.setPid("S0");
|
|
|
parent.setText(dataSet.getName());
|
|
|
parent.setIschecked(false);
|
|
|
std = true;
|
|
|
childCheckCount = 0;
|
|
|
List<StdMetaDataModel> metaDataList = stdDataSetModelMap.get(dataSet.getId());
|
|
|
if (!CollectionUtils.isEmpty(metaDataList)) {
|
|
|
for (StdMetaDataModel metaData : metaDataList) {
|
|
|
id = String.valueOf(metaData.getId());
|
|
|
if (hasCheckMetadataIdList.contains(metaData.getId())) {
|
|
|
check = true;
|
|
|
childCheckCount++;
|
|
|
} else {
|
|
|
check = false;
|
|
|
}
|
|
|
TreeView child = new TreeView();
|
|
|
child.setId("SM" + id);
|
|
|
child.setPid("SD" + dataSet.getId());
|
|
|
child.setText(metaData.getName());
|
|
|
child.setIschecked(check);
|
|
|
stdCustomizeList.add(child);
|
|
|
}
|
|
|
std = true;
|
|
|
}
|
|
|
if (!CollectionUtils.isEmpty(metaDataList) && metaDataList.size() == childCheckCount && childCheckCount > 0) {
|
|
|
parent.setIschecked(true);//子节点全选
|
|
|
datasetCount++;
|
|
|
} else if (CollectionUtils.isEmpty(metaDataList) && hasCheckDatasetIdList.contains(dataSet.getId())) {
|
|
|
parent.setIschecked(true);
|
|
|
datasetCount++;
|
|
|
}
|
|
|
stdCustomizeList.add(parent);
|
|
|
}
|
|
|
//根节点
|
|
|
if (std) {
|
|
|
TreeView stdRoot = new TreeView();
|
|
|
stdRoot.setId("S0");
|
|
|
stdRoot.setPid("-1");
|
|
|
stdRoot.setText("数据集");
|
|
|
if (datasetCount == dataSetList.size()) {
|
|
|
stdRoot.setIschecked(true);
|
|
|
} else {
|
|
|
stdRoot.setIschecked(false);
|
|
|
}
|
|
|
|
|
|
stdCustomizeList.add(stdRoot);
|
|
|
}
|
|
|
treeViewList.addAll(stdCustomizeList);
|
|
|
}
|
|
|
|
|
|
public ListEnvelop getDatasetCustomize(String adapterVersion, String stdVersion) {
|
|
|
try {
|
|
|
List<TreeView> treeViewList = new ArrayList<>();
|
|
|
List<Integer> hasCheckDatasetIdList = new ArrayList<>();
|
|
|
List<Integer> hasCheckMetadataIdList = new ArrayList<>();
|
|
|
getAdapterCustomize(adapterVersion, treeViewList, hasCheckDatasetIdList, hasCheckMetadataIdList);
|
|
|
getStdCustomize(stdVersion, treeViewList, hasCheckDatasetIdList, hasCheckMetadataIdList);
|
|
|
ListEnvelop detailModelResult = ListEnvelop.getSuccess("获取定制数据集列表成功",treeViewList);
|
|
|
return detailModelResult;
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return ListEnvelop.getError("获取定制数据集列表失败");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public Envelop updateCustomize(Integer schemeId, String adapterVersion, String stdVersion, String datasetIdStr, String metaDataIdStr) {
|
|
|
AdapterVersion aVersion = new AdapterVersion(adapterVersion);
|
|
|
StandardVersion sVersion = new StandardVersion(stdVersion);
|
|
|
try {
|
|
|
String[] datasetIdList = datasetIdStr.split(",");
|
|
|
String[] metadataIdList = metaDataIdStr.split(",");
|
|
|
List<Integer> newDatasetIdList = new ArrayList<>();
|
|
|
List<Integer> newMetadataIdList = new ArrayList<>();
|
|
|
|
|
|
for (String datasetId : datasetIdList) {
|
|
|
if (!StringUtil.isStrEmpty(datasetId)) {
|
|
|
Integer newDatasetId = Integer.parseInt(datasetId);
|
|
|
newDatasetIdList.add(newDatasetId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (String metadataId : metadataIdList) {
|
|
|
if (!StringUtil.isStrEmpty(metadataId)) {
|
|
|
Integer newMetadataId = Integer.parseInt(metadataId);
|
|
|
newMetadataIdList.add(newMetadataId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (newDatasetIdList.size() == 0) {
|
|
|
return Envelop.getError("定制内容为空");
|
|
|
}
|
|
|
|
|
|
updateDatasetCustomizeData(schemeId, aVersion, sVersion, newDatasetIdList, newMetadataIdList);
|
|
|
return Envelop.getSuccess("定制数据集成功");
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return Envelop.getError("定制数据集失败");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void updateDatasetCustomizeData(Integer schemeId, AdapterVersion aVersion, StandardVersion sVersion, List<Integer> newDatasetIdList, List<Integer> newMetadataIdList) throws Exception {
|
|
|
List<StdMetaDataModel> metadataList = new ArrayList<StdMetaDataModel>();
|
|
|
if (newMetadataIdList.size() > 0) {
|
|
|
SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
|
|
|
sqlCreator.inCondition("id", newMetadataIdList);
|
|
|
String sql = sqlCreator.selectData(sVersion.getMetaDataTableName());
|
|
|
Query query = getQuery(sqlCreator, sql);
|
|
|
metadataList = query.list();
|
|
|
}
|
|
|
|
|
|
List<Integer> newDictdList = new ArrayList<>();
|
|
|
for (StdMetaDataModel stdMetaDataModel : metadataList) {
|
|
|
if (stdMetaDataModel.getDictId() != null && !newDictdList.contains(stdMetaDataModel.getDictId())) {
|
|
|
newDictdList.add(stdMetaDataModel.getDictId());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<String> insertSqlList = new ArrayList<>();
|
|
|
// 找出新增 删除 modify by cyj
|
|
|
List<AdapterDatasetModel> datasetModels = selectData(aVersion.getDataSetTableName(), AdapterDatasetModel.class);
|
|
|
List<AdapterMetadataModel> metadataModels = selectData(aVersion.getMetaDataTableName(), AdapterMetadataModel.class);
|
|
|
List<AdapterDictModel> dictModels = selectData(aVersion.getDictTableName(), AdapterDictModel.class);
|
|
|
// List<AdapterDictEntryModel> dictEntryModels = selectData(aVersion.getDictEntryTableName(), AdapterDictEntryModel.class);
|
|
|
List<Integer> oldDatasetIdList = new ArrayList<>();
|
|
|
for (AdapterDatasetModel datasetModel : datasetModels) {
|
|
|
oldDatasetIdList.add(datasetModel.getId());
|
|
|
}
|
|
|
List<Integer> oldMetadataIdList = new ArrayList<>();
|
|
|
for (AdapterMetadataModel metadataModel : metadataModels) {
|
|
|
oldMetadataIdList.add(metadataModel.getId());
|
|
|
}
|
|
|
List<Integer> oldDictIdList = new ArrayList<>();
|
|
|
for (AdapterDictModel dictModel : dictModels) {
|
|
|
oldDictIdList.add(dictModel.getId());
|
|
|
}
|
|
|
// List<Integer> oldDictEntryIdList = new ArrayList<>();
|
|
|
// for (AdapterDictEntryModel entryModel : dictEntryModels) {
|
|
|
// oldDictEntryIdList.add(entryModel.getStdDictId());
|
|
|
// }
|
|
|
Map<String, List<Integer>> datasetMap = getDiffId(newDatasetIdList, oldDatasetIdList);
|
|
|
Map<String, List<Integer>> metaMap = getDiffId(newMetadataIdList, oldMetadataIdList);
|
|
|
Map<String, List<Integer>> dicMap = getDiffId(newDictdList, oldDictIdList);
|
|
|
// Map<String,List<Integer>> dicEntryMap = getDiffId(newDictdList,oldDictEntryIdList);
|
|
|
// add del
|
|
|
List<Integer> delDatasetList = datasetMap.get("del");
|
|
|
if (delDatasetList.size() > 0) {
|
|
|
insertSqlList.add(delData(aVersion.getDataSetTableName(), "id", delDatasetList));
|
|
|
}
|
|
|
List<Integer> delMetaList = metaMap.get("del");
|
|
|
if (delMetaList.size() > 0) {
|
|
|
insertSqlList.add(delData(aVersion.getMetaDataTableName(), "id", delMetaList));
|
|
|
}
|
|
|
List<Integer> delDicList = dicMap.get("del");
|
|
|
if (delDicList.size() > 0) {
|
|
|
insertSqlList.add(delData(aVersion.getDictTableName(), "id", delDicList));
|
|
|
insertSqlList.add(delData(aVersion.getDictEntryTableName(), "std_dict_id", delDicList));
|
|
|
}
|
|
|
/* insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getDataSetTableName());
|
|
|
insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getMetaDataTableName());
|
|
|
insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getDictTableName());
|
|
|
insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getDictEntryTableName());*/
|
|
|
|
|
|
List<Integer> addDataSetList = datasetMap.get("add");
|
|
|
if (addDataSetList.size() > 0) {
|
|
|
insertSqlList.add(insertData(aVersion.getDataSetTableName(), sVersion.getDataSetTableName(),
|
|
|
new String[]{"id,std_dataset_id,std_dataset_code,std_dataset_name"},
|
|
|
new String[]{"id,id,code,name"},
|
|
|
schemeId,
|
|
|
"id",
|
|
|
addDataSetList));
|
|
|
}
|
|
|
List<Integer> addMetaList = metaMap.get("add");
|
|
|
if (addMetaList.size() > 0) {
|
|
|
insertSqlList.add(insertData(aVersion.getMetaDataTableName(), sVersion.getMetaDataTableName(),
|
|
|
new String[]{"id,std_metadata_id,std_metadata_code,std_metadata_name,std_dataset_id,std_dict_id"},
|
|
|
new String[]{"id,id,code,name,dataset_id,dict_id"},
|
|
|
schemeId,
|
|
|
"id",
|
|
|
addMetaList));
|
|
|
}
|
|
|
List<Integer> addDicList = dicMap.get("add");
|
|
|
if (addDicList.size() > 0) {
|
|
|
insertSqlList.add(insertData(aVersion.getDictTableName(), sVersion.getDictTableName(),
|
|
|
new String[]{"id,std_dict_id,std_dict_code,std_dict_name"},
|
|
|
new String[]{"id,id,code,name"},
|
|
|
schemeId,
|
|
|
"id",
|
|
|
addDicList));
|
|
|
insertSqlList.add(insertData(aVersion.getDictEntryTableName(), sVersion.getDictEntryTableName(),
|
|
|
new String[]{"id,std_entry_id,std_entry_code,std_entry_value,std_dict_id"},
|
|
|
new String[]{"id,id,code,value,dict_id"},
|
|
|
schemeId,
|
|
|
"dict_id",
|
|
|
addDicList));
|
|
|
}
|
|
|
|
|
|
if (insertSqlList.size() > 0) {
|
|
|
insertBatch(insertSqlList);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private String delData(String adapterTableName, String item, List<Integer> idList) {
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
String idStr = SqlConstants.EMPTY;
|
|
|
for (Integer id : idList) {
|
|
|
idStr += id + SqlConstants.COMMA;
|
|
|
}
|
|
|
if (!StringUtil.isEmpty(idStr)) {
|
|
|
idStr = SqlConstants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) + SqlConstants.RIGHT_BRACKET;
|
|
|
}
|
|
|
sql.append(SqlConstants.DELETE + SqlConstants.FROM).append(adapterTableName).append(SqlConstants.WHERE).append(item).append(SqlConstants.IN).append(idStr);
|
|
|
return sql.toString();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 将第一个数组放入map(id,1) 然后循环第二个数组,如果map中找到对应键值就+1 不存在设置 1
|
|
|
*
|
|
|
* @param firtList new
|
|
|
* @param secondList old
|
|
|
*/
|
|
|
private Map<String, List<Integer>> getDiffId(List<Integer> firtList, List<Integer> secondList) {
|
|
|
Map<Integer, Integer> map = new HashMap<>();
|
|
|
for (Integer id : firtList) {
|
|
|
map.put(id, 1);
|
|
|
}
|
|
|
|
|
|
for (Integer id1 : secondList) {
|
|
|
Integer flag = map.get(id1);
|
|
|
if (flag != null) {
|
|
|
map.put(id1, ++flag);
|
|
|
} else {
|
|
|
map.put(id1, 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
List<Integer> diffLs = new ArrayList<>();
|
|
|
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
|
|
|
if (entry.getValue() == 1) {
|
|
|
diffLs.add(entry.getKey());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<Integer> delIDLs = new ArrayList<>();
|
|
|
List<Integer> addIDLs = new ArrayList<>();
|
|
|
for (Integer diffL : diffLs) {
|
|
|
if (firtList.contains(diffL)) {
|
|
|
addIDLs.add(diffL);
|
|
|
} else if (secondList.contains(diffL)) {
|
|
|
delIDLs.add(diffL);
|
|
|
}
|
|
|
}
|
|
|
Map<String, List<Integer>> listMap = new HashMap<>();
|
|
|
listMap.put("del", delIDLs);
|
|
|
listMap.put("add", addIDLs);
|
|
|
return listMap;
|
|
|
}
|
|
|
|
|
|
private String insertData(String adapterTableName, String stdTableName, String[] item1, String[] item2, Integer schemeId, String item, List<Integer> idList) {
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
String idStr = SqlConstants.EMPTY;
|
|
|
for (Integer id : idList) {
|
|
|
idStr += id + SqlConstants.COMMA;
|
|
|
}
|
|
|
if (!StringUtil.isEmpty(idStr)) {
|
|
|
idStr = SqlConstants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) + SqlConstants.RIGHT_BRACKET;
|
|
|
}
|
|
|
|
|
|
sql.append(SqlConstants.INSERT_INTO + adapterTableName + SqlConstants.LEFT_BRACKET);
|
|
|
for (String it : item1) {
|
|
|
sql.append(it + SqlConstants.COMMA);
|
|
|
}
|
|
|
sql.append("scheme_id" + SqlConstants.RIGHT_BRACKET + SqlConstants.LEFT_BRACKET + SqlConstants.SELECT);
|
|
|
for (String it : item2) {
|
|
|
sql.append(it + SqlConstants.COMMA);
|
|
|
}
|
|
|
sql.append(schemeId + SqlConstants.FROM + stdTableName + SqlConstants.WHERE + item + SqlConstants.IN + idStr + SqlConstants.RIGHT_BRACKET);
|
|
|
return sql.toString();
|
|
|
}
|
|
|
|
|
|
public List selectData(String adapterTableName, Class clazz) throws Exception {
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
sql.append("SELECT * FROM ").append(adapterTableName);
|
|
|
return queryListBySql(sql.toString(), clazz);
|
|
|
}
|
|
|
|
|
|
public List getAdapterDatasetNotNullList(AdapterVersion adapterVersion, String condition) {
|
|
|
try {
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
sql.append("SELECT * FROM ").append(adapterVersion.getDataSetTableName());
|
|
|
if (!StringUtil.isEmpty(condition)) {
|
|
|
JsonNode jsonNode = objectMapper.readTree(condition);
|
|
|
String column = jsonNode.get("column").asText();
|
|
|
sql.append(" WHERE ").append(column).append(" IS NOT NULL");
|
|
|
}
|
|
|
Query query = getCurrentSession().createSQLQuery(sql.toString());
|
|
|
query.setResultTransformer(new BeanTransformer(AdapterDatasetModel.class));
|
|
|
return query.list();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public List getListByAdapterDatasetIdList(AdapterVersion adapterVersion, List<Integer> datasetIdList) {
|
|
|
try {
|
|
|
if (CollectionUtils.isEmpty(datasetIdList)) {
|
|
|
return null;
|
|
|
}
|
|
|
SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
|
|
|
sqlCreator.inCondition("stdDatasetId", datasetIdList);
|
|
|
String sql = sqlCreator.selectData(adapterVersion.getDataSetTableName());
|
|
|
Query query = getQuery(sqlCreator, sql);
|
|
|
return query.list();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public AdapterDatasetModel getAdapterDatasetByCode(String version, String datasetCode) {
|
|
|
try {
|
|
|
if (StringUtil.isEmpty(datasetCode)) {
|
|
|
return null;
|
|
|
}
|
|
|
SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
|
|
|
sqlCreator.equalCondition("stdDatasetCode", datasetCode);
|
|
|
String sql = sqlCreator.selectData("adapter_dataset_" + version);
|
|
|
Query query = getQuery(sqlCreator, sql);
|
|
|
return (AdapterDatasetModel) query.uniqueResult();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public List<AdapterDatasetModel> getAdapterDatasetByAdapterIdList(AdapterVersion adapterVersion, List<Integer> datasetIdList) {
|
|
|
try {
|
|
|
if (CollectionUtils.isEmpty(datasetIdList)) {
|
|
|
return null;
|
|
|
}
|
|
|
SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
|
|
|
sqlCreator.inCondition("adapterDatasetId", datasetIdList);
|
|
|
String sql = sqlCreator.selectData(adapterVersion.getDataSetTableName());
|
|
|
Query query = getQuery(sqlCreator, sql);
|
|
|
return query.list();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void strategy(String version,String std_version,String adapter_std_version) throws Exception {
|
|
|
List<AdapterMetadataModel> unAdapterMetadataModels = adapterMetadataService.getAllUnAdaptMetadata(version);//等待适配的标准数据元
|
|
|
List<AdapterMetadataModel> adapterMetadataModel = new ArrayList<AdapterMetadataModel>();//之前已经适配好的适配方案
|
|
|
//获取所有未匹配的
|
|
|
//查找出 之前已经适配好的适配方案
|
|
|
List<AdapterSchemeVersionModel> all = adapterSchemeVersionService.getAll();
|
|
|
if(all!=null){
|
|
|
for(AdapterSchemeVersionModel adapterSchemeVersionModel:all){
|
|
|
String vers = adapterSchemeVersionModel.getVersion();
|
|
|
if(org.apache.commons.lang3.StringUtils.isNotBlank(vers)){
|
|
|
List<AdapterMetadataModel> adaptMetadata = adapterMetadataService.getAllAdaptMetadata(adapterSchemeVersionModel.getVersion());
|
|
|
adapterMetadataModel.addAll(adaptMetadata);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
MetadataMatchVO matchVO = new MetadataMatchVO();
|
|
|
matchVO.setCodeAdapter(matchVO.geNameGroup(adapterMetadataModel));
|
|
|
|
|
|
//設置匹配的机构数据緩存
|
|
|
List<StdMetaDataModel> orgMetadatas = stdMetadataService.getList(adapter_std_version, null, null, null, null, null);//查找出机构所有的metadatas
|
|
|
for (StdMetaDataModel stdMetadata:orgMetadatas){
|
|
|
StdDataSetModel stdDataset = stdDataSetModelDao.getDatasetName(std_version, stdMetadata.getDatasetId());
|
|
|
if(null != stdDataset){
|
|
|
MetatdataStandardNameStrategy.getNameMap().put(stdMetadata.getName() + "_" + stdDataset.getCode(),stdMetadata);
|
|
|
MetatdataStandardNameStrategy.getRemarkMap().put(stdMetadata.getDefinition() + "_" + stdDataset.getCode(),stdMetadata);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//执行匹配
|
|
|
MetadataStrategyExecute.setFirst(version, unAdapterMetadataModels.size());//设置第一次匹配
|
|
|
Set<String> sqlList = new HashSet<String>();
|
|
|
|
|
|
for (AdapterMetadataModel unAdapterMetadataModel : unAdapterMetadataModels) {
|
|
|
threadPoolTaskExecutor.execute(new MetadataStrategyExecute(unAdapterMetadataModel, matchVO, std_version,adapter_std_version,version, stdMetaDataModelDao,stdDataSetModelDao,adapterMetadataService));
|
|
|
|
|
|
String metadataNameFirstCode = GetChineseFirst.cn2py(unAdapterMetadataModel.getStdMetadataName());//待匹配
|
|
|
List<AdapterMetadataModel> adapterMetadatas = matchVO.getCodeAdapter().get(metadataNameFirstCode);//已存在
|
|
|
if (adapterMetadatas != null && adapterMetadatas.size() > 0) {
|
|
|
//获取待适配的数据集名
|
|
|
Integer unAdaptStdId = unAdapterMetadataModel.getStdDatasetId();
|
|
|
StdDataSetModel adapterDataset = stdDataSetModelDao.getDatasetName(adapter_std_version, unAdaptStdId);
|
|
|
if (adapterDataset != null) {
|
|
|
adapterDatasetService = SpringContext.getService(AdapterDatasetService.BEAN_ID);
|
|
|
AdapterDatasetModel entity = adapterDatasetService.getAdapterDatasetByCode(version, adapterDataset.getCode());
|
|
|
String sqrSql = null;
|
|
|
if(null != entity){
|
|
|
sqrSql = adapterDatasetService.saveAdaptDatasetSql(entity, adapterDataset, version);
|
|
|
}
|
|
|
if(null != sqrSql && !"".equals(sqrSql)){
|
|
|
sqlList.add(sqrSql);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(CollectionUtils.isNotEmpty(sqlList)){
|
|
|
List list=new ArrayList();
|
|
|
Iterator it=sqlList.iterator();
|
|
|
while(it.hasNext()){
|
|
|
list.add((String) it.next());
|
|
|
}
|
|
|
super.insertBatch(list);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
public void saveAdaptDataset(AdapterDatasetModel strategyDataset,StdDataSetModel orgDataset,String version) throws Exception {
|
|
|
if(null != strategyDataset){
|
|
|
strategyDataset.setAdapterDatasetId(orgDataset.getId());
|
|
|
strategyDataset.setAdapterDatasetCode(orgDataset.getCode());
|
|
|
strategyDataset.setAdapterDatasetName(orgDataset.getName());
|
|
|
JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(strategyDataset));
|
|
|
SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
|
|
|
String sql = sqlCreator.updateDataByTableKey(new AdapterVersion(version).getDataSetTableName(), jsonNode);
|
|
|
Query query = getExeuteQuery(sqlCreator, sql);
|
|
|
query.executeUpdate();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public String saveAdaptDatasetSql(AdapterDatasetModel strategyDataset,StdDataSetModel orgDataset,String version) throws Exception {
|
|
|
StringBuilder sqlBuffer = new StringBuilder();
|
|
|
sqlBuffer.append(SqlConstants.UPDATE + new AdapterVersion(version).getDataSetTableName() + SqlConstants.SET);
|
|
|
sqlBuffer.append(" adapter_dataset_id = " + orgDataset.getId());
|
|
|
sqlBuffer.append(",adapter_dataset_code = '" + orgDataset.getCode() + "'");
|
|
|
sqlBuffer.append(",adapter_dataset_name = '" + orgDataset.getName() + "'");
|
|
|
sqlBuffer.append(" where id=" + strategyDataset.getId());
|
|
|
return sqlBuffer.toString();
|
|
|
}
|
|
|
}
|