Browse Source

采集上传时间转换

huangzhiyong 8 years ago
parent
commit
cffb7216e8

+ 4 - 1
hos-camel2/pom.xml

@ -94,7 +94,10 @@
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>
    </dependencies>
</project>

+ 30 - 4
hos-camel2/src/main/java/camel/api7/processor/ToWsProcessor.java

@ -1,12 +1,20 @@
package camel.api7.processor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.apache.camel.Exchange;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.*;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
@Component("toWsProcessor")
public class ToWsProcessor {
@ -49,7 +57,11 @@ public class ToWsProcessor {
        try {
//            String requestText = requestWs(exchange, wsdl, "test");
            return createDefaultSoapMessage(exchange.getIn().getBody().toString());
            XmlMapper xmlMapper = new XmlMapper();
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String,Object> map = objectMapper.readValue(exchange.getIn().getBody().toString(),Map.class);
            String xmlResponse = xmlMapper.writeValueAsString(map);
            return createDefaultSoapMessage(xmlResponse);
        } catch (Exception e) {
            e.printStackTrace();
            return createDefaultSoapMessage(e.getClass().getName());
@ -105,9 +117,8 @@ public class ToWsProcessor {
            SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
            QName payloadName = new QName("http://gateway.api", "test", "ns1");
            SOAPBodyElement payload = body.addBodyElement(payloadName);
            SOAPElement message = payload.addChildElement("response");
            message.addTextNode(requestMessage);
            SOAPElement message = payload.addChildElement("body");
            body.addDocument(parseXMLDocument(requestMessage));
            return soapMessage;
        } catch (SOAPException e) {
            e.printStackTrace();
@ -115,4 +126,19 @@ public class ToWsProcessor {
        }
    }
    public static Document parseXMLDocument(String xmlString) {
        if (xmlString == null) {
            throw new IllegalArgumentException();
        }
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
            return documentBuilder.parse(
                    new InputSource(new StringReader(xmlString)));
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }
}

+ 33 - 0
hos-core/src/main/java/com/yihu/hos/core/datatype/DateUtil.java

@ -46,6 +46,7 @@ public class DateUtil {
    public static final String DEFAULT_NOW_STRING_FORMAT = "yyyyMMddHHmmssSSS";
    public static final String DATE_MDY_FORMAT = "MMddyyyy";
    public static final String DATE_MY_FORMAT = "MMyyyy";
    public static final String DATE_WORLD_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
    public static String changeFormat(String changeDate, String beforeFormat, String afterFormat) {
@ -1412,4 +1413,36 @@ public class DateUtil {
        return  cal.getTime();
    }
    public static String getUtcDate(String dateStr,String format){
        SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_WORLD_FORMAT);
        SimpleDateFormat sdf2 = new SimpleDateFormat(format);
        String date= null;
        try {
            date = sdf1.format(sdf2.parse(dateStr));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    public static String getUtcDate(java.util.Date date){
        SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_WORLD_FORMAT);
        String utcDate = sdf1.format(date);
        return utcDate;
    }
    //utc时间转换
    public static String utcToDate(String utcTime,String format){
        SimpleDateFormat utcSdf = new SimpleDateFormat(DATE_WORLD_FORMAT);
        SimpleDateFormat newSdf = new SimpleDateFormat(format);
        String date= null;
        try {
            if (!StringUtil.isEmpty(utcTime))
                date = newSdf.format(utcSdf.parse(utcTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

+ 1 - 0
hos-core/src/main/java/com/yihu/hos/core/http/DefaultClientImpl.java

@ -47,6 +47,7 @@ class DefaultClientImpl implements HTTPClient {
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
        }

+ 77 - 6
hos-rest/src/main/java/com/yihu/hos/rest/common/format/DataSetTransformer.java

@ -4,13 +4,16 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.ehr.dbhelper.jdbc.DBHelper;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDataSet;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDict;
import com.yihu.hos.rest.models.crawler.adapter.AdapterMetaData;
import com.yihu.hos.rest.models.crawler.adapter.StdDataSet;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import com.yihu.hos.rest.models.crawler.transform.DictDataType;
import com.yihu.hos.rest.models.crawler.transform.TransformType;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import com.yihu.hos.web.framework.constant.SqlConstants;
import java.util.Iterator;
@ -32,10 +35,11 @@ import java.util.Map;
 * <p>
 * Created by Air on 2015/6/4.
 */
public class DataSetTransformer implements IDataTransformer{
public class DataSetTransformer implements IDataTransformer {
    private JsonNode jsonObject;
    private Patient patient;
    private static DBHelper db;
    public JsonNode getJsonObject() {
        return jsonObject;
    }
@ -59,6 +63,51 @@ public class DataSetTransformer implements IDataTransformer{
        return false;
    }
    /**
     * 转换时间格式为utc、
     *
     * @param dataSetMap
     * @return
     */
    public boolean transferTimeFormat(Map<String, StdDataSet> dataSetMap) {
        if (jsonObject != null) {
            try {
                String dataSetCode = jsonObject.get("code").asText();
                ArrayNode jsonArray = (ArrayNode) jsonObject.get("data");
                StdDataSet stdDataSet = dataSetMap.get(dataSetCode);
                Map<Integer, Map<String, StdMetaDataModel>> stdDataSetMetasMap = stdDataSet.getStdDataSetMetasMap();
                Map<String, StdMetaDataModel> stdMetaDataModelMap = stdDataSetMetasMap.get(stdDataSet.getStdDataSetId());
                for (Object objectRow : jsonArray) {
                    if (objectRow instanceof JsonNode) {
                        ObjectNode jsonObject = (ObjectNode) objectRow;
                        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 = transferElemTime(stdMetaDataModelMap, key, value);
                            jsonObject.put(key, stdValue);
//                            if (jsonNode instanceof ObjectNode) {
//                                ObjectNode objectNode = (ObjectNode) next;
//                                objectNode.put(key, stdValue);
//                            }
                        }
                    }
                }
                return true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }
        return false;
    }
    public String getData() {
        //确保文档有版本信息
        return jsonObject.asText();
@ -105,23 +154,28 @@ public class DataSetTransformer implements IDataTransformer{
    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(adapterDataSet, key, value);
            if (jsonNode instanceof ObjectNode) {
                ObjectNode objectNode = (ObjectNode) next;
                objectNode.put(key, stdValue);
            if (!StringUtil.isEmpty(value) && StringUtil.isEmpty(stdValue)){
                System.out.println("value:"+value +" stdValue:"+stdValue);
            }
            jsonObject.put(key,stdValue);
//            if (jsonNode instanceof ObjectNode) {
//                ObjectNode objectNode = (ObjectNode) next;
//                objectNode.put(key, stdValue);
//            }
        }
    }
    /**
     * @param adapterDataSet 数据集编码
     * @param code        数据元编码
     * @param code           数据元编码
     * @param esbData        数据
     * @return String 标准值
     * @modify 2015.09.16 airhead 增加值与编码转换
@ -147,6 +201,23 @@ public class DataSetTransformer implements IDataTransformer{
        return ehrData;
    }
    public String transferElemTime(Map<String, StdMetaDataModel> stdMetaDataModelMap, String code, String esbData) {
        StdMetaDataModel stdMetaData = stdMetaDataModelMap.get(code);
        String columnType = stdMetaData.getColumnType();
        if (columnType == null) {
            return esbData;
        }
        if ("DATE".equals(columnType) || "DATETIME".equals(columnType)){
            //时间转换
            String utcDate = DateUtil.getUtcDate(esbData, DateUtil.DEFAULT_YMDHMSDATE_FORMAT);
            return utcDate;
        }else {
            return esbData;
        }
    }
    /**
     * 根据DataSet信息构造Patient
     */

+ 21 - 0
hos-rest/src/main/java/com/yihu/hos/rest/common/format/StdBase.java

@ -0,0 +1,21 @@
package com.yihu.hos.rest.common.format;
import com.yihu.hos.rest.services.standard.standard.StdMetadataService;
/**
 * 适配器基类,DAO缓存
 *
 * @created Created by Air on 2015/6/10.
 */
public class StdBase {
    private static StdMetadataService stdMetadataService;
    public static StdMetadataService getStdMetadataService() {
        return stdMetadataService;
    }
    public static void setStdMetadataService(StdMetadataService stdMetadataService) {
        StdBase.stdMetadataService = stdMetadataService;
    }
}

+ 6 - 5
hos-rest/src/main/java/com/yihu/hos/rest/common/http/EHRHttpHelper.java

@ -19,6 +19,7 @@ import java.util.Properties;
//TODO:对于Basic认证内容,暂时未验证,可以使用http://user:password@host的方式尝试访问
public class EHRHttpHelper {
    public static String defaultHttpUrl;
    public static String httpCouldUrl;
    public static String clientId;
    public static String clientKey;
    private static SSLConnectionSocketFactory defaultSSL;
@ -32,7 +33,7 @@ public class EHRHttpHelper {
            Resource resource = new ClassPathResource(defaultPropertiesPath);
            EncodedResource encRes = new EncodedResource(resource, "UTF-8");
            Properties props = PropertiesLoaderUtils.loadProperties(encRes);
            httpCouldUrl = props.getProperty("httpCouldUrl");
            defaultHttpUrl = props.getProperty("httpUrl");
            defaultHttpUser = props.getProperty("httpUser");
            defaultHttpPassword = props.getProperty("httpPassword");
@ -121,12 +122,12 @@ public class EHRHttpHelper {
        return HttpClientKit.request("POST", url, params, header);
    }
    public static HTTPResponse postFile(String url, Map<String, String> formParams, String filePath, Map<String, String> header) {
        return HttpClientKit.postFile(url, filePath, formParams);
    public static HTTPResponse postFile(String url, Map<String, String> formParams, String filePath, Map<String, String> headers) {
        return HttpClientKit.postFile(url, filePath, formParams,headers);
    }
    public static HTTPResponse postFile(String url, Map<String, String> formParams, File file, Map<String, String> header) {
        return HttpClientKit.postFile(url, file.getAbsolutePath(), formParams);
    public static HTTPResponse postFile(String url, Map<String, String> formParams, File file, Map<String, String> headers) {
        return HttpClientKit.postFile(url, file.getAbsolutePath(), formParams,headers);
    }
    /**************************

+ 4 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/adapter/AdapterDataSet.java

@ -8,6 +8,7 @@ import com.yihu.hos.rest.models.standard.adapter.AdapterDatasetModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterDictEntryModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterMetadataModel;
import com.yihu.hos.rest.models.standard.bo.AdapterVersion;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import java.util.*;
@ -22,6 +23,7 @@ public class AdapterDataSet extends AdapterBase {
    private List<AdapterMetaData> adapterMetaDataList;
    private AdapterDatasetModel adapterDatasetModel;
    private Map<String, AdapterMetaData> adapterMetaDataMap;
    private Map<String, StdMetaDataModel> stdMetaDataMap;
    private String eventNoCode;
    private AdapterVersion adapterVersion;
@ -44,6 +46,8 @@ public class AdapterDataSet extends AdapterBase {
            ObjectMapper objectMapper = new ObjectMapper();
            List<StdMetaDataModel> stdMetaDataModelList = getAdapterMetadataService().getAdapterMetadataNotNullList(adapterVersion, adapterDatasetModel.getStdDatasetId(),objectMapper.writeValueAsString(condition));
            List<AdapterMetadataModel> adapterMetaDataModelList = getAdapterMetadataService().getAdapterMetadataNotNullList(adapterVersion, adapterDatasetModel.getStdDatasetId(),objectMapper.writeValueAsString(condition));
            List<Integer> stdMetaDataIdList = new ArrayList<>();
            if (!CollectionUtil.isEmpty(adapterMetaDataModelList)) {

+ 90 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/adapter/StdDataSet.java

@ -0,0 +1,90 @@
package com.yihu.hos.rest.models.crawler.adapter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.rest.common.format.StdBase;
import com.yihu.hos.rest.models.standard.bo.StandardVersion;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author Air
 * @version 1.0
 * @created 2015.08.11 11:29
 */
public class StdDataSet extends StdBase {
    private  Map<Integer, Map<String,StdMetaDataModel>> stdDataSetMetasMap;
    private  Map<String, StdMetaDataModel> stdMetaDataMap;
    private List<StdMetaDataModel> stdMetaDataModelList;
    private StandardVersion standardVersion;
    private Integer stdDataSetId;
    public StdDataSet(Integer  stdDataSetId,StandardVersion standardVersion) {
        this.stdDataSetId = stdDataSetId;
        this.standardVersion = standardVersion;
        prepareData();
    }
    public void prepareData() {
        try {
            stdMetaDataModelList = new ArrayList<>();
            stdDataSetMetasMap = new HashMap<>();
            stdMetaDataMap = new HashMap<>();
            Map<String, Object> condition = new HashMap<>();
            condition.put("column", "code");
            ObjectMapper objectMapper = new ObjectMapper();
             stdMetaDataModelList = getStdMetadataService().getStdMetadataNotNullList(standardVersion, stdDataSetId, objectMapper.writeValueAsString(condition));
            if (!CollectionUtil.isEmpty(stdMetaDataModelList)) {
                for (StdMetaDataModel stdMetadataModel : stdMetaDataModelList) {
                    stdMetaDataMap.put(stdMetadataModel.getCode(),stdMetadataModel);
                }
                if (!stdDataSetMetasMap.containsKey(stdDataSetId)){
                    stdDataSetMetasMap.put(stdDataSetId,stdMetaDataMap);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public Map<Integer, Map<String, StdMetaDataModel>> getStdDataSetMetasMap() {
        return stdDataSetMetasMap;
    }
    public void setStdDataSetMetasMap(Map<Integer, Map<String, StdMetaDataModel>> stdDataSetMetasMap) {
        this.stdDataSetMetasMap = stdDataSetMetasMap;
    }
    public List<StdMetaDataModel> getStdMetaDataModelList() {
        return stdMetaDataModelList;
    }
    public void setStdMetaDataModelList(List<StdMetaDataModel> stdMetaDataModelList) {
        this.stdMetaDataModelList = stdMetaDataModelList;
    }
    public Map<String, StdMetaDataModel> getStdMetaDataMap() {
        return stdMetaDataMap;
    }
    public void setStdMetaDataMap(Map<String, StdMetaDataModel> stdMetaDataMap) {
        this.stdMetaDataMap = stdMetaDataMap;
    }
    public Integer getStdDataSetId() {
        return stdDataSetId;
    }
    public void setStdDataSetId(Integer stdDataSetId) {
        this.stdDataSetId = stdDataSetId;
    }
}

+ 11 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/standard/adapter/AdapterMetadataModel.java

@ -42,6 +42,17 @@ public class AdapterMetadataModel extends Result implements Serializable {
    @Column(name = "adapter_dict_id")
    private Integer adapterDictId;
    @Column(name = "adapter_info")
    private String adapterInfo;
    public String getAdapterInfo() {
        return adapterInfo;
    }
    public void setAdapterInfo(String adapterInfo) {
        this.adapterInfo = adapterInfo;
    }
    public Integer getId() {
        return id;
    }

+ 2 - 1
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/CrawlerFlowManager.java

@ -160,7 +160,8 @@ public class CrawlerFlowManager {
             */
            try {
                if (!CollectionUtil.isEmpty(dataMap.keySet())) {
                    if (!dispatch.upload(dataMap, patient, adapterDataSetMap)) {
                    //TODO set stdDatasetMap 2017/05/02
                    if (!dispatch.upload(dataMap, patient, adapterDataSetMap,null)) {
                        logger.error("上传档案失败");
                        return false;
                    }

+ 74 - 12
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/CrawlerManager.java

@ -7,21 +7,25 @@ import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.rest.common.dao.DatacollectDao;
import com.yihu.hos.rest.common.format.AdapterBase;
import com.yihu.hos.rest.common.format.StdBase;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDataSet;
import com.yihu.hos.rest.models.crawler.adapter.StdDataSet;
import com.yihu.hos.rest.models.crawler.config.SysConfig;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import com.yihu.hos.rest.models.rs.RsJobConfig;
import com.yihu.hos.rest.models.standard.adapter.AdapterDatasetModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterDictEntryModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterSchemeModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterSchemeVersionModel;
import com.yihu.hos.rest.models.standard.bo.AdapterVersion;
import com.yihu.hos.rest.models.standard.bo.StandardVersion;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import com.yihu.hos.rest.services.standard.adapter.*;
import com.yihu.hos.rest.services.standard.standard.StdMetadataService;
import com.yihu.hos.web.framework.model.DataGridResult;
import com.yihu.hos.web.framework.model.DictItem;
import com.yihu.hos.web.framework.model.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -42,12 +46,23 @@ public class CrawlerManager {
    private AdapterSchemeVersionService adapterSchemeVersionService;
    @Resource
    private DatacollectManager datacollect;
    @Resource
    private StdMetadataService StdMetadataService;
    @Resource(name = AdapterSchemeService.BEAN_ID)
    private AdapterSchemeService adapterSchemeService;
    private static DataCollectDispatcher dispatch = DataCollectDispatcher.getInstance();
    private static SysConfig sysConfig=SysConfig.getInstance();
    private static Map<String, Map<String, AdapterDataSet>> adapterDataSetVersionMap = new HashMap<>();
    private static Map<String, Map<String, StdDataSet>> stdDataSetVersionMap = new HashMap<>();
    private static Map<Integer, List<StdMetaDataModel>> stdMetaDataMap = new HashMap<>();
    private Map<String, AdapterDataSet> adapterDataSetMap;
    private Map<String, StdDataSet> stdDataSetMap;
    private Boolean adapterFlg = false;
    private Boolean stdFlg = false;
    private String schemeVersion;
    private List<DictItem> datasetList;
@ -62,21 +77,41 @@ public class CrawlerManager {
        logger.info("档案采集上传开始,流水号:" + random + ",jobId:"+jobId);
        Date begin = rsJobConfig.getRepeatStartTime();
        Date end = rsJobConfig.getRepeatEndTime();
        if (end == null) {
            int totalOffset = rsJobConfig.getDelayTime();
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date(DateUtil.getSysDateTime().getTime()));
            instance.add(Calendar.SECOND, - totalOffset);    //调整截止时间,当前时间-偏移量
            end = instance.getTime();
        }
        if ((end.getTime() - begin.getTime()) <= 0) {
            return Result.error("错误:采集结束时间小于开始时间!"); //结束时间小于开始时间时,不获取
        }
        end = DateUtil.fromatDateToTimestamp(end);
        if (!rsJobConfig.getJobType().equals("0")) {
            //调整截止时间,当前时间-偏移量
            end = DateUtil.addDate(-rsJobConfig.getDelayTime(), DateUtil.getSysDateTime());
            if ((end.getTime() - begin.getTime()) <= 0) {
                return Result.success(""); //结束时间小于开始时间时,不获取
                return Result.success("错误:采集结束时间小于开始时间!"); //结束时间小于开始时间时,不获取
            }
        }
        if (DateUtil.getDifferenceOfDays(begin, end) > 1) {
            end = DateUtil.addDate(1, begin);
            end = DateUtil.fromatDateToTimestamp(end);
        }
        DataGridResult dataGridResult = datacollect.getJobDatasetByJobId(jobId);
        this.datasetList = dataGridResult.getDetailModelList();
        this.schemeVersion = rsJobConfig.getSchemeVersion();
        Result result = dataCrawler(begin, end);
        if (!rsJobConfig.getJobType().equals("0")) {
            rsJobConfig.setRepeatStartTime(end);
            rsJobConfig.setRepeatEndTime(DateUtil.formatYMDToYMDHMS(DateUtil.getSysDateTime().toString()));
//            rsJobConfig.setRepeatEndTime(DateUtil.formatYMDToYMDHMS(DateUtil.getSysDateTime().toString()));
        }
        datacollect.updateJob(rsJobConfig);
        logger.info("档案采集上传结束,流水号:" + random + ",jobId:" + jobId + ",message:" + result.getMessage());
@ -123,10 +158,10 @@ public class CrawlerManager {
        logger.trace("采集->注册->打包上传,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
        try {
            //getToken
            if (!dispatch.getToken()) {
                logger.error("token获取失败");
                return false;
            }
//            if (!dispatch.getToken()) {
//                logger.error("token获取失败");
//                return false;
//            }
            //getRemoteVersion
            if (!dispatch.getRemoteVersion(patient.getOrgCode())) {
@ -169,7 +204,7 @@ public class CrawlerManager {
            logger.info("上传病人档案");
            try {
                if (!CollectionUtil.isEmpty(dataMap.keySet())) {
                    if (!dispatch.upload(dataMap, patient, dataSetMap)) {
                    if (!dispatch.upload(dataMap, patient, dataSetMap,stdDataSetMap)) {
                        logger.error("上传档案失败");
                        return false;
                    }
@ -247,7 +282,7 @@ public class CrawlerManager {
            logger.info("上传病人档案");
            try {
                if (!CollectionUtil.isEmpty(dataMap.keySet())) {
                    if (!dispatch.upload(dataMap, patient, dataSetMap)) {
                    if (!dispatch.upload(dataMap, patient, dataSetMap,stdDataSetMap)) {
                        logger.error("上传档案失败");
                        return false;
                    }
@ -265,16 +300,19 @@ public class CrawlerManager {
    public Boolean getDataForPrepare() {
        if (adapterFlg) {
        if (adapterFlg && stdFlg) {
            return true;
        }
        AdapterBase.setAdapterMetadataService(adapterMetadataService);
        AdapterBase.setAdapterDictService(adapterDictService);
        AdapterBase.setAdapterSchemeVersionService(adapterSchemeVersionService);
        StdBase.setStdMetadataService(StdMetadataService);
        logger.info("适配基本相关数据准备");
        try {
            adapterDataSetMap = new HashMap<>();
            stdDataSetMap = new HashMap<>();
            AdapterVersion adapterVersion;
            StandardVersion standardVersion = null;
            List<AdapterDatasetModel> adapterDataSetModelList;
            if (!CollectionUtil.isEmpty(datasetList)) {
                /**
@ -283,9 +321,21 @@ public class CrawlerManager {
                adapterVersion = new AdapterVersion(schemeVersion);
                List<Integer> datasetIdList = new ArrayList<>();
                for (DictItem dictItem : datasetList) {
                    datasetIdList.add(Integer.parseInt(dictItem.getCode()));
                    Integer dataSetId = Integer.parseInt(dictItem.getCode());
                    datasetIdList.add(dataSetId);
                }
                adapterDataSetModelList = adapterDatasetService.getAdapterDatasetByAdapterIdList(adapterVersion, datasetIdList);
                if (adapterDataSetModelList!=null && !adapterDataSetModelList.isEmpty()){
                    AdapterSchemeModel adapterScheme = adapterSchemeService.getEntity(AdapterSchemeModel.class, adapterDataSetModelList.get(0).getSchemeId());
                    standardVersion = new StandardVersion(adapterScheme.getStdVersion());
                    for (DictItem dictItem : datasetList) {
                        Integer dataSetId = Integer.parseInt(dictItem.getCode());
                        if (!stdMetaDataMap.containsKey(dataSetId)){
                            stdMetaDataMap.put(dataSetId,new StdDataSet(dataSetId, standardVersion).getStdMetaDataModelList());
                        }
                    }
                }
            } else {
                /**
                 * 推模式接口调用,默认只使用最新版本的适配
@ -301,8 +351,17 @@ public class CrawlerManager {
                if (adapterDataSetVersionMap.get(schemeVersion) != null) {
                    adapterDataSetMap = adapterDataSetVersionMap.get(schemeVersion);
                    adapterFlg = true;
                }
                if (stdDataSetVersionMap.get(schemeVersion) != null) {
                    stdDataSetMap = stdDataSetVersionMap.get(schemeVersion);
                    stdFlg = true;
                }
                if (adapterFlg && stdFlg){
                    return true;
                }
                Map<String, String> condition = new HashMap<>();
                condition.put("column", "adapter_dataset_code");
                ObjectMapper mapper = new ObjectMapper();
@ -328,9 +387,12 @@ public class CrawlerManager {
             */
            for (AdapterDatasetModel adapterDatasetModel : adapterDataSetModelList) {
                adapterDataSetMap.put(adapterDatasetModel.getStdDatasetCode(), new AdapterDataSet(adapterDatasetModel, adapterVersion, adapterDictEntryModelMap));
                stdDataSetMap.put(adapterDatasetModel.getStdDatasetCode(), new StdDataSet(adapterDatasetModel.getStdDatasetId(),standardVersion));
            }
            adapterDataSetVersionMap.put(schemeVersion, adapterDataSetMap);
            stdDataSetVersionMap.put(schemeVersion,stdDataSetMap);
            adapterFlg = true;
            stdFlg = true;
            return true;
        } catch (Exception e) {
            return false;

+ 6 - 3
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/DataCollectDispatcher.java

@ -16,6 +16,7 @@ import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.rest.common.format.DataSetTransformer;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDataSet;
import com.yihu.hos.rest.models.crawler.adapter.AdapterMetaData;
import com.yihu.hos.rest.models.crawler.adapter.StdDataSet;
import com.yihu.hos.rest.models.crawler.config.SysConfig;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import com.yihu.hos.rest.models.crawler.patient.PatientIdentity;
@ -275,8 +276,8 @@ public class DataCollectDispatcher {
                String agencyCode = patient.getOrgCode();
                jsonObject.put("org_code", agencyCode);
                jsonObject.put("inner_version", SysConfig.getInstance().getVersionMap().get(patient.getOrgCode()));
                jsonObject.put("create_date", DateUtil.toString(new Date(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT));
                jsonObject.put("event_time", patient.getReferenceTime());//DateUtil.toString(patient.getReferenceTime(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT)
                jsonObject.put("create_date", DateUtil.getUtcDate(new Date()));
                jsonObject.put("event_time", DateUtil.getUtcDate(patient.getReferenceTime(),DateUtil.DEFAULT_YMDHMSDATE_FORMAT));//DateUtil.toString(patient.getReferenceTime(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT)
                if (StringUtil.isEmpty(patient.getReUploadFlg())) {
                    jsonObject.put("reUploadFlg", LogicValues.LOGIC_FALSE);
                } else {
@ -318,12 +319,13 @@ public class DataCollectDispatcher {
        return EsbHttp.register(patient, data, token);
    }
    public Boolean upload(Map<String, JsonNode> dataMap, Patient patient, Map<String, AdapterDataSet> dataSetMap) {
    public Boolean upload(Map<String, JsonNode> dataMap, Patient patient, Map<String, AdapterDataSet> dataSetMap, Map<String,StdDataSet> stdDataSetMap) {
        Boolean result = true;
        try {
            DataSetTransformer dataTransformer = new DataSetTransformer();
            for (String key : dataMap.keySet()) {
                dataTransformer.setData(dataMap.get(key));
                dataTransformer.transferTimeFormat(stdDataSetMap);
                if (!toFile(dataTransformer, patient, "origin")) {
                    logger.info("存储原始文件失败:patient_id=" + patient.getPatientId()
                            + "event_no=" + patient.getEventNo());
@ -343,6 +345,7 @@ public class DataCollectDispatcher {
                result = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            result = false;
        }
        return result;

+ 9 - 6
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/EsbHttp.java

@ -159,7 +159,7 @@ public class EsbHttp {
     */
    public static String getPublicKey(String orgCode) {
        try {
            String token = getToken();
//            String token = getToken();
            if (!StringUtil.isEmpty(SysConfig.getInstance().getPublicKeyMap().get(orgCode))) {
                return SysConfig.getInstance().getPublicKeyMap().get(orgCode);
            }
@ -167,8 +167,8 @@ public class EsbHttp {
            header.put("Authorization", "Basic " + EHRHttpHelper.clientKey);
            Map<String, String> paramMap = new HashMap<>();
            paramMap.put("org_code", orgCode);
            paramMap.put("token", token);
            String publicKeyMethod = EHRHttpHelper.defaultHttpUrl + "/organizations/" + orgCode + "/key";
//            paramMap.put("token", token);
            String publicKeyMethod = EHRHttpHelper.httpCouldUrl + "/organizations/" + orgCode + "/key";
            HTTPResponse response = EHRHttpHelper.get(publicKeyMethod, paramMap, header);
            if (response != null && response.getStatusCode() == HttpStatus.SC_OK) {
                JSONObject json = new JSONObject(response.getBody());
@ -191,6 +191,7 @@ public class EsbHttp {
            }
        } catch (Exception e) {
            logger.info(e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
@ -245,7 +246,7 @@ public class EsbHttp {
                    return false;
                } else {
                    String idCord = p.getString(colName);
                    String registerMethod = EHRHttpHelper.defaultHttpUrl + "/patients/" + idCord;
                    String registerMethod = EHRHttpHelper.httpCouldUrl + "/patients/" + idCord;
                    if (StringUtil.isEmpty(data)) {
                        logger.info("注册病人信息请求失败:无具体病人信息,patient_id=" + patient.getPatientId() + ", event_no=" + patient.getEventNo());
                        return false;
@ -253,7 +254,7 @@ public class EsbHttp {
                    Map<String, String> paramMap = new HashMap<>();
                    paramMap.put("demographic_id", idCord);
                    paramMap.put("json", data);
                    paramMap.put("token", token);
//                    paramMap.put("token", token);
                    HTTPResponse response = EHRHttpHelper.post(registerMethod, paramMap, header);
                    if (response != null && response.getStatusCode() == HttpStatus.SC_OK) {
@ -275,6 +276,7 @@ public class EsbHttp {
            }
        } catch (Exception e) {
            logger.info("注册病人信息请求失败." + e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
@ -290,7 +292,7 @@ public class EsbHttp {
            formParams.put("md5", fileMd5);
            formParams.put("package_crypto", encryptPwd);
            formParams.put("org_code", patient.getOrgCode());
            formParams.put("token", token);
//            formParams.put("token", token);
            Map<String, String> header = new HashMap<>();
            header.put("Authorization", "Basic " + EHRHttpHelper.clientKey);
            header.put("User-Agent", "client " + EHRHttpHelper.clientId);
@ -311,6 +313,7 @@ public class EsbHttp {
        } catch (Exception e) {
            logger.info("上传病人档案异常,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
            logger.error(e.getCause().toString());
            e.printStackTrace();
            return false;
        }
    }

+ 1 - 1
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/PatientCDAUpload.java

@ -93,7 +93,7 @@ public class PatientCDAUpload {
            return zipFile;
        } catch (Exception e) {
            logger.error("从data目录生成zip数据时,压缩文件异常");
            logger.error(e.getCause().toString());
            e.printStackTrace();
        }
        return null;

+ 27 - 1
hos-rest/src/main/java/com/yihu/hos/rest/services/standard/standard/StdMetadataService.java

@ -8,10 +8,12 @@ import com.yihu.hos.rest.models.standard.bo.StandardVersion;
import com.yihu.hos.rest.models.standard.standard.StdDictionaryEntryModel;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import com.yihu.hos.web.framework.constant.ErrorCode;
import com.yihu.hos.web.framework.constant.SqlConstants;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.web.framework.exception.ApiException;
import com.yihu.hos.web.framework.model.DetailModelResult;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.sql.BeanTransformer;
import com.yihu.hos.web.framework.util.sql.RequestParamTransformer;
import com.yihu.hos.web.framework.util.sql.SqlCreator;
import org.hibernate.Query;
@ -21,7 +23,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * 数据元管理接口实现。
@ -296,4 +301,25 @@ public class StdMetadataService extends SQLGeneralDAO {
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List getStdMetadataNotNullList(StandardVersion stdVersion, Integer stdDatasetId, String condition) {
        try {
            StringBuffer sql = new StringBuffer();
            sql.append("SELECT * FROM ").append(stdVersion.getMetaDataTableName());
            ObjectMapper objectMapper = new ObjectMapper();
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String column = jsonNode.get("column").asText();
                sql.append(" WHERE dataset_id = " + stdDatasetId + SqlConstants.AND);
                sql.append(column).append(" IS NOT NULL");
            }
            Query query = getCurrentSession().createSQLQuery(sql.toString());
            query.setResultTransformer(new BeanTransformer(StdMetaDataModel.class));
            return query.list();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

+ 2 - 1
hos-rest/src/main/resources/config/http.properties

@ -1,5 +1,6 @@
httpUrl = https://172.19.103.221:10140/api/v1.0
httpUrl = http://192.168.1.221:10140/api/v1.0
httpCouldUrl = http://192.168.1.221:10400/api/v1.0
#  http://172.19.103.73:1443/api/v1.0
#\uFFFD\uFFFDhttps://192.168.131.15:4432/api/v1.0
  #https://172.19.103.73:443/api/v1.0

+ 1 - 1
src/main/resources/application.yml

@ -63,7 +63,7 @@ hos:
service-gateway:
  portalUrl: http://192.168.1.221:10280/api/v1.0/portal
  adminUrl: http://192.168.1.221:10000/api/v1.0/admin
  url: http://localhost:9999/api
  url: http://172.19.103.70:9999/api
---
spring:
  profiles: test