|
@ -1,23 +1,18 @@
|
|
|
package com.yihu.ehr.crawler.format;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
import com.yihu.ehr.crawler.model.adapter.AdapterDataSet;
|
|
|
import com.yihu.ehr.crawler.model.adapter.AdapterDict;
|
|
|
import com.yihu.ehr.crawler.model.adapter.AdapterMetaData;
|
|
|
import com.yihu.ehr.crawler.model.config.SysConfig;
|
|
|
import com.yihu.ehr.crawler.model.patient.Patient;
|
|
|
import com.yihu.ehr.crawler.model.transform.DictDataType;
|
|
|
import com.yihu.ehr.crawler.model.transform.MetaDataVerify;
|
|
|
import com.yihu.ehr.crawler.model.transform.TransformType;
|
|
|
import com.yihu.ehr.crawler.service.EsbHttp;
|
|
|
import com.yihu.ehr.crawler.service.standard.StdMetaData;
|
|
|
import com.yihu.ehr.dbhelper.jdbc.DBHelper;
|
|
|
import com.yihu.ehr.framework.constrant.Constants;
|
|
|
import com.yihu.ehr.standard.model.adapter.AdapterSchemeVersionModel;
|
|
|
import com.yihu.ehr.standard.model.standard.StdMetaDataModel;
|
|
|
import com.yihu.ehr.framework.util.operator.StringUtil;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.Map;
|
|
|
|
|
@ -37,57 +32,48 @@ import java.util.Map;
|
|
|
* <p>
|
|
|
* Created by Air on 2015/6/4.
|
|
|
*/
|
|
|
public class DataSetTransformer implements IDataTransformer {
|
|
|
private ObjectNode jsonObject;
|
|
|
protected AdapterScheme adapterScheme;
|
|
|
protected Patient patient;
|
|
|
|
|
|
public DataSetTransformer(AdapterScheme adapterScheme) {
|
|
|
this.adapterScheme = adapterScheme;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Patient getPatient() {
|
|
|
return patient;
|
|
|
public class DataSetTransformer implements IDataTransformer{
|
|
|
private JsonNode jsonObject;
|
|
|
private Patient patient;
|
|
|
private static DBHelper db;
|
|
|
public JsonNode getJsonObject() {
|
|
|
return jsonObject;
|
|
|
}
|
|
|
|
|
|
public ObjectNode getJsonObject() {
|
|
|
return jsonObject;
|
|
|
public DataSetTransformer() {
|
|
|
if (db == null) {
|
|
|
db = new DBHelper();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean transfer() {
|
|
|
public boolean transfer(Map<String, AdapterDataSet> dataSetMap) {
|
|
|
if (jsonObject != null) {
|
|
|
String dataSetCode = jsonObject.get("code").asText();
|
|
|
ArrayNode jsonArray = (ArrayNode) jsonObject.get("data");
|
|
|
boolean transfer = transferJson(jsonArray, dataSetCode);
|
|
|
AdapterDataSet adapterDataSet = dataSetMap.get(dataSetCode);
|
|
|
boolean transfer = transferJson(jsonArray, adapterDataSet);
|
|
|
|
|
|
return transfer;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String getData(String orgCode) {
|
|
|
public String getData() {
|
|
|
//确保文档有版本信息
|
|
|
String version = EsbHttp.getRemoteVersion(orgCode);
|
|
|
jsonObject.put("inner_version", version);//TODO 获取远程版本号
|
|
|
return jsonObject.asText();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void setData(String data) {
|
|
|
try {
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
jsonObject = objectMapper.readValue(data, ObjectNode.class);
|
|
|
} catch (IOException e) {
|
|
|
//DebugLogger.fatal("", e);
|
|
|
}
|
|
|
|
|
|
public void setData(JsonNode data) {
|
|
|
jsonObject = data;
|
|
|
setPatient();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Patient getPatient() {
|
|
|
return patient;
|
|
|
}
|
|
|
|
|
|
public TransformType getTransformType() {
|
|
|
return TransformType.DATA_SET_JSON;
|
|
|
}
|
|
@ -104,89 +90,68 @@ public class DataSetTransformer implements IDataTransformer {
|
|
|
* [{"metadata_code1":"1","metadata_code2":"2"}]}
|
|
|
*
|
|
|
* @param jsonArray
|
|
|
* @param dataSetCode
|
|
|
* @param adapterDataSet
|
|
|
* @return
|
|
|
*/
|
|
|
public boolean transferJson(ArrayNode jsonArray, String dataSetCode) {
|
|
|
public boolean transferJson(ArrayNode jsonArray, AdapterDataSet adapterDataSet) {
|
|
|
for (Object objectRow : jsonArray) {
|
|
|
if (objectRow instanceof JsonNode) {
|
|
|
transferJsonRow((ObjectNode) objectRow, dataSetCode);
|
|
|
transferJsonRow((ObjectNode) objectRow, adapterDataSet);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
public void transferJsonRow(ObjectNode jsonObject, String dataSetCode) {
|
|
|
public void transferJsonRow(ObjectNode jsonObject, AdapterDataSet adapterDataSet) {
|
|
|
Iterator<Map.Entry<String, JsonNode>> fields = jsonObject.fields();
|
|
|
while (fields.hasNext()) {
|
|
|
Map.Entry<String, JsonNode> next = fields.next();
|
|
|
String key = next.getKey();
|
|
|
JsonNode jsonNode = next.getValue();
|
|
|
String value = jsonNode.asText();
|
|
|
String stdValue = transferElem(dataSetCode, key, value);
|
|
|
String stdValue = transferElem(adapterDataSet, key, value);
|
|
|
|
|
|
if (jsonNode instanceof JsonNode) {
|
|
|
// ObjectNode objectNode = (ObjectNode) next;
|
|
|
jsonObject.put(key, stdValue);
|
|
|
if (jsonNode instanceof ObjectNode) {
|
|
|
ObjectNode objectNode = (ObjectNode) next;
|
|
|
objectNode.put(key, stdValue);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param dataSetCode 数据集编码
|
|
|
* @param adapterDataSet 数据集编码
|
|
|
* @param code 数据元编码
|
|
|
* @param data 数据
|
|
|
* @param esbData 数据
|
|
|
* @return String 标准值
|
|
|
* @modify 2015.09.16 airhead 增加值与编码转换
|
|
|
*/
|
|
|
public String transferElem(String dataSetCode, String code, String data) {
|
|
|
AdapterMetaData adapterMetaData = adapterScheme.getAdapterMetaData(dataSetCode, code);
|
|
|
if (adapterMetaData == null) {
|
|
|
//BusinessLogger.fatal("获取数据元适配错误,数据集编码:" + dataSetCode + "数据元编码:" + code);
|
|
|
return Constants.EMPTY;
|
|
|
}
|
|
|
|
|
|
public String transferElem(AdapterDataSet adapterDataSet, String code, String esbData) {
|
|
|
Map<String, AdapterMetaData> adapterMetaDataMap = adapterDataSet.getAdapterMetaDataMap();
|
|
|
AdapterMetaData adapterMetaData = adapterMetaDataMap.get(code);
|
|
|
AdapterDict adapterDict = adapterMetaData.getAdapterDict();
|
|
|
StdMetaData metaData = adapterMetaData.getStdMetaData();
|
|
|
if (!adapterDict.isValidAdapterDict()) {
|
|
|
MetaDataVerify metaDataVerify = new MetaDataVerify(metaData, data);
|
|
|
boolean check = metaDataVerify.check();
|
|
|
if (!check) {
|
|
|
//BusinessLogger.fatal("保存:数据元校验错误." + metaDataVerify.getErrorInfo());
|
|
|
return Constants.EMPTY; //未校验成功数据,清空
|
|
|
}
|
|
|
|
|
|
return data;
|
|
|
if (adapterDict == null) {
|
|
|
return esbData;
|
|
|
}
|
|
|
|
|
|
String stdData = Constants.EMPTY;
|
|
|
DictDataType stdDictDataType = metaData.getDictDataType();
|
|
|
DictDataType orgDictDataType = adapterMetaData.getAdapterDictDataType();
|
|
|
if (stdDictDataType == DictDataType.VALUE) {
|
|
|
if (orgDictDataType == DictDataType.VALUE) {
|
|
|
stdData = adapterDict.getEhrDictEntryValueByCode(data);
|
|
|
} else if (orgDictDataType == DictDataType.CODE) {
|
|
|
String stdDictItemCode = adapterDict.getEhrDictEntryCodeByValue(data);
|
|
|
stdData = adapterDict.getStdDict().toValue(stdDictItemCode);
|
|
|
}
|
|
|
} else if (stdDictDataType == DictDataType.CODE) {
|
|
|
if (orgDictDataType == DictDataType.VALUE) {
|
|
|
String stdDictItemValue = adapterDict.getEhrDictEntryValueByCode(data);
|
|
|
stdData = adapterDict.getStdDict().toCode(stdDictItemValue);
|
|
|
} else if (orgDictDataType == DictDataType.CODE) {
|
|
|
stdData = adapterDict.getEhrDictEntryCodeByValue(data);
|
|
|
}
|
|
|
String ehrData = null;
|
|
|
DictDataType adapterDictDataType = adapterMetaData.getAdapterDictDataType();
|
|
|
if (adapterDictDataType == DictDataType.VALUE) {
|
|
|
ehrData = adapterDict.getAdapterValueToCodeMap().get(esbData);
|
|
|
} else if (adapterDictDataType == DictDataType.CODE) {
|
|
|
ehrData = adapterDict.getAdapterCodeToValueMap().get(esbData);
|
|
|
}
|
|
|
|
|
|
return stdData;
|
|
|
if (StringUtil.isEmpty(ehrData)) {
|
|
|
return Constants.EMPTY;
|
|
|
}
|
|
|
return ehrData;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据DataSet信息构造Patient
|
|
|
*/
|
|
|
private void setPatient() {
|
|
|
patient=new Patient();
|
|
|
patient = new Patient();
|
|
|
patient.setPatientId(jsonObject.get("patient_id").asText());
|
|
|
patient.setEventNo(jsonObject.get("event_no").asText());
|
|
|
patient.setOrgCode(jsonObject.get("org_code").asText());
|