|  | @ -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());
 |