瀏覽代碼

Merge branch 'master' of chenyj/cyj into master

esb 8 年之前
父節點
當前提交
f89d9bb477

+ 104 - 93
Hos-resource/src/main/java/com/yihu/ehr/crawler/service/CrawlerFlowManager.java

@ -11,6 +11,7 @@ import com.yihu.ehr.crawler.model.flow.CrawlerDataSetModel;
import com.yihu.ehr.crawler.model.flow.CrawlerFlowHeadModel;
import com.yihu.ehr.crawler.model.flow.CrawlerFlowModel;
import com.yihu.ehr.crawler.model.patient.Patient;
import com.yihu.ehr.framework.model.DictItem;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.springutil.SpringBeanUtil;
@ -29,38 +30,26 @@ public class CrawlerFlowManager {
    private static Logger logger = LogManager.getLogger(CrawlerFlowManager.class);
    private static volatile CrawlerFlowManager instance;
    private static DataCollectDispatcher dispatch = DataCollectDispatcher.getInstance();
    private static SysConfig sysConfig = SysConfig.getInstance();
    private Map<String, AdapterDataSet> adapterDataSetMap;
    private List<CrawlerFlowHeadModel> crawlerFlowHeadModelList;
    private Map<String, List<CrawlerFlowModel>> crawlerFlowDatasetMap;
    private Map<String, List<CrawlerFlowModel>> crawlerFlowMetadataMap;
    private Boolean adapterFlg;
    private List<Patient> patientList;
    public CrawlerFlowManager() {
        adapterFlg = false;
        dispatch = DataCollectDispatcher.getInstance();
    }
    public void finalize() throws Throwable {
    private Boolean adapterFlg = false;
    private List<DictItem> datasetList;
    private String schemeVersion;
    public CrawlerFlowManager(List datasetList, String schemeVersion) {
        this.datasetList = datasetList;
        this.schemeVersion = schemeVersion;
    }
    public static CrawlerFlowManager getInstance() {
        if (instance == null) {
            synchronized (CrawlerFlowManager.class) {
                if (instance == null) {
                    try {
                        instance = new CrawlerFlowManager();
                    } catch (Exception e) {
                        e.printStackTrace();
    public CrawlerFlowManager() {
    }
                    }
                }
            }
        }
    public void finalize() throws Throwable {
        return instance;
    }
    public String dataCrawler(Map<String, Object> condition) {
@ -75,7 +64,7 @@ public class CrawlerFlowManager {
            logger.error(message);
            return message;
        }
        patientList = dispatch.getPatientList(condition, adapterDataSetMap);
        List<Patient> patientList = dispatch.getPatientList(condition, adapterDataSetMap);
        if (!CollectionUtil.isEmpty(patientList)) {
            totalCount = patientList.size();
            for (Patient patient : patientList) {
@ -85,11 +74,15 @@ public class CrawlerFlowManager {
                }
            }
        }
        message = "本次采集病人共" + totalCount + "条,成功采集信息"+ count + "条";
        message = "本次采集病人共" + totalCount + "条,成功采集信息" + count + "条";
        return message;
    }
    public boolean collectProcess(Patient patient) {
        if (!getDataForPrepare()) {
            logger.error("适配数据尚未准备完毕");
            return false;
        }
        patient.setReUploadFlg(StringUtil.toString(false));
        logger.trace("采集->注册->打包上传,任务ID:,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
        try {
@ -111,7 +104,7 @@ public class CrawlerFlowManager {
            /**
             * 获取版本
             */
            if (StringUtil.isEmpty(SysConfig.getInstance().getVersionMap().get(patient.getOrgCode()))) {
            if (StringUtil.isEmpty(sysConfig.getVersionMap().get(patient.getOrgCode()))) {
                logger.error("版本获取失败");
                return false;
            }
@ -132,10 +125,10 @@ public class CrawlerFlowManager {
                 */
                getDataByCrawlerFlow(datasetCode, patient, dataMap);
                if (SysConfig.getInstance().getRegisterDataSet().equals(adapterDataSet.getAdapterDataSetT().getStdDatasetCode())) {
                if (sysConfig.getRegisterDataSet().equals(adapterDataSet.getAdapterDataSetT().getStdDatasetCode())) {
                    if (!StringUtil.isEmpty(data.get("data")) && !StringUtil.isEmpty(data.get("data").get(0))) {
                        if (!StringUtil.isEmpty(data.get("data").get(0).get(SysConfig.getInstance().getRegisterIdCardNo()))) {
                            //register
                            logger.info("注册病人");
                            dispatch.register(patient, data.toString());
                        }
                    }
@ -172,9 +165,9 @@ public class CrawlerFlowManager {
                List<CrawlerFlowModel> crawlerFlowMetadataList = crawlerFlowMetadataMap.get(crawlerFlowDataset.getDatasetCode());
                for (CrawlerFlowModel crawlerFlowMetadata : crawlerFlowMetadataList) {
                    String metadataCode = crawlerFlowMetadata.getMetadataCode();
                    metadataCode = StringUtil.substring(metadataCode, metadataCode.indexOf("-")+1, metadataCode.length());
                    metadataCode = StringUtil.substring(metadataCode, metadataCode.indexOf("-") + 1, metadataCode.length());
                    String inputMetadataCode = crawlerFlowMetadata.getInputMetadataCode();
                    inputMetadataCode = StringUtil.substring(inputMetadataCode, inputMetadataCode.indexOf("-")+1, inputMetadataCode.length());
                    inputMetadataCode = StringUtil.substring(inputMetadataCode, inputMetadataCode.indexOf("-") + 1, inputMetadataCode.length());
                    Iterator<JsonNode> array = preData.get("data").iterator();
                    while (array.hasNext()) {
                        JsonNode dataNode = array.next();
@ -200,16 +193,27 @@ public class CrawlerFlowManager {
    }
    public Boolean getDataForPrepare() {
        if (!adapterFlg) {
            try {
                /**
                 * 获取EHR最新发布版本
                 */
                adapterDataSetMap = new HashMap<>();
                AdapterSchemeVersionService adapterSchemeVersionService = SpringBeanUtil.getService(AdapterSchemeVersionService.BEAN_ID);
                AdapterSchemeVersionModel adapterSchemeVersionModel = adapterSchemeVersionService.getEhrAdapterVersionLasted();
        if (adapterFlg) {
            return true;
        }
        logger.info("适配基本相关数据准备");
        try {
            adapterDataSetMap = new HashMap<>();
            AdapterVersion adapterVersion;
            List<Integer> datasetIdList = new ArrayList<>();
            /**
             * 推模式接口调用,默认只使用最新版本的适配
             */
            AdapterSchemeVersionService adapterSchemeVersionService = SpringBeanUtil.getService(AdapterSchemeVersionService.BEAN_ID);
            AdapterSchemeVersionModel adapterSchemeVersionModel;
            if (datasetList.isEmpty()) {
                adapterSchemeVersionModel = adapterSchemeVersionService.getEhrAdapterVersionLasted();
                if (adapterSchemeVersionModel == null) {
                    logger.error("获取最新ehr适配版本错误");
                    return false;
                } else {
                    this.schemeVersion = adapterSchemeVersionModel.getVersion();
                    adapterVersion = new AdapterVersion(schemeVersion);
                }
                /**
                 * 获取该版本下数据集
@ -219,74 +223,81 @@ public class CrawlerFlowManager {
                if (CollectionUtil.isEmpty(crawlerDataSetModelList)) {
                    return false;
                }
                List<Integer> datasetIdList = new ArrayList<>();
                for (CrawlerDataSetModel crawlerDataSetModel : crawlerDataSetModelList) {
                    datasetIdList.add(crawlerDataSetModel.getDatasetId());
                }
                String version = adapterSchemeVersionModel.getVersion();
                AdapterVersion adapterVersion = new AdapterVersion(version);
                AdapterDatasetService adapterDatasetService = SpringBeanUtil.getService(AdapterDatasetService.BEAN_ID);
            } else {
                /**
                 * 字典项初始化
                 * 拉模式接口调用,由任务配置决定适配版本
                 */
                List<AdapterDictEntryModel> adapterDictEntryModelList = adapterDatasetService.getList(AdapterDictEntryModel.class, adapterVersion.getDictEntryTableName(), null, null, null, null);
                Map<Integer, List<AdapterDictEntryModel>> adapterDictEntryModelMap = new HashMap<>();
                for (AdapterDictEntryModel adapterDictEntryModel : adapterDictEntryModelList) {
                    List<AdapterDictEntryModel> entryModelList = adapterDictEntryModelMap.get(adapterDictEntryModel.getStdDictId());
                    if (CollectionUtil.isEmpty(entryModelList)) {
                        entryModelList = new ArrayList<>();
                    }
                    entryModelList.add(adapterDictEntryModel);
                    adapterDictEntryModelMap.put(adapterDictEntryModel.getStdDictId(), entryModelList);
                adapterSchemeVersionModel = adapterSchemeVersionService.getByVersion(schemeVersion);
                adapterVersion = new AdapterVersion(schemeVersion);
                for (DictItem dictItem : datasetList) {
                    datasetIdList.add(Integer.valueOf(dictItem.getCode()));
                }
                /**
                 * 数据集初始化
                 */
                List<AdapterDatasetModel> adapterDataSetModelList = adapterDatasetService.getListByAdapterDatasetIdList(adapterVersion, datasetIdList);
                for (AdapterDatasetModel adapterDatasetModel : adapterDataSetModelList) {
                    adapterDataSetMap.put(adapterDatasetModel.getStdDatasetCode(), new AdapterDataSet(adapterDatasetModel, adapterVersion, adapterDictEntryModelMap));
            }
            AdapterDatasetService adapterDatasetService = SpringBeanUtil.getService(AdapterDatasetService.BEAN_ID);
            /**
             * 字典项初始化
             */
            List<AdapterDictEntryModel> adapterDictEntryModelList = adapterDatasetService.getList(AdapterDictEntryModel.class, adapterVersion.getDictEntryTableName(), null, null, null, null);
            Map<Integer, List<AdapterDictEntryModel>> adapterDictEntryModelMap = new HashMap<>();
            for (AdapterDictEntryModel adapterDictEntryModel : adapterDictEntryModelList) {
                List<AdapterDictEntryModel> entryModelList = adapterDictEntryModelMap.get(adapterDictEntryModel.getStdDictId());
                if (CollectionUtil.isEmpty(entryModelList)) {
                    entryModelList = new ArrayList<>();
                }
                entryModelList.add(adapterDictEntryModel);
                adapterDictEntryModelMap.put(adapterDictEntryModel.getStdDictId(), entryModelList);
            }
            /**
             * 数据集初始化
             */
                /**
                 * 获取采集流程表头
                 */
                CrawlerFlowHeadDao crawlerFlowHeadDao = SpringBeanUtil.getService(CrawlerFlowHeadDao.BEAN_ID);
                CrawlerFlowDao crawlerFlowDao = SpringBeanUtil.getService(CrawlerFlowDao.BEAN_ID);
                crawlerFlowHeadModelList = crawlerFlowHeadDao.getCrawlerFlowHeadList(adapterSchemeVersionModel.getId());
                List<CrawlerFlowModel> crawlerFlowModelList = crawlerFlowDao.getCrawlerFlowList(adapterSchemeVersionModel.getId());
                crawlerFlowDatasetMap = new HashMap<>();
                crawlerFlowMetadataMap = new HashMap<>();
                /**
                 * 获取关联表
                 */
                for (CrawlerFlowModel crawlerFlowModel : crawlerFlowModelList) {
                    List<CrawlerFlowModel> datasetList = new ArrayList<>();
                    List<CrawlerFlowModel> metadataList = new ArrayList<>();
                    String inputDatasetCode = crawlerFlowModel.getInputDatasetCode();
                    String datasetCode = crawlerFlowModel.getDatasetCode();
                    if (StringUtil.isEmpty(inputDatasetCode)) {
                        continue;
                    }
                    if (crawlerFlowDatasetMap.containsKey(inputDatasetCode)) {
                        datasetList = crawlerFlowDatasetMap.get(inputDatasetCode);
                    }
                    datasetList.add(crawlerFlowModel);
                    crawlerFlowDatasetMap.put(inputDatasetCode, datasetList);
            List<AdapterDatasetModel> adapterDataSetModelList = adapterDatasetService.getListByAdapterDatasetIdList(adapterVersion, datasetIdList);
            for (AdapterDatasetModel adapterDatasetModel : adapterDataSetModelList) {
                adapterDataSetMap.put(adapterDatasetModel.getStdDatasetCode(), new AdapterDataSet(adapterDatasetModel, adapterVersion, adapterDictEntryModelMap));
            }
                    if (crawlerFlowMetadataMap.containsKey(datasetCode)) {
                        metadataList = crawlerFlowMetadataMap.get(datasetCode);
                    }
                    metadataList.add(crawlerFlowModel);
                    crawlerFlowMetadataMap.put(datasetCode, metadataList);
            /**
             * 获取采集流程表头
             */
            CrawlerFlowHeadDao crawlerFlowHeadDao = SpringBeanUtil.getService(CrawlerFlowHeadDao.BEAN_ID);
            CrawlerFlowDao crawlerFlowDao = SpringBeanUtil.getService(CrawlerFlowDao.BEAN_ID);
            crawlerFlowHeadModelList = crawlerFlowHeadDao.getCrawlerFlowHeadList(adapterSchemeVersionModel.getId());
            List<CrawlerFlowModel> crawlerFlowModelList = crawlerFlowDao.getCrawlerFlowList(adapterSchemeVersionModel.getId());
            crawlerFlowDatasetMap = new HashMap<>();
            crawlerFlowMetadataMap = new HashMap<>();
            /**
             * 获取关联表
             */
            for (CrawlerFlowModel crawlerFlowModel : crawlerFlowModelList) {
                List<CrawlerFlowModel> datasetList = new ArrayList<>();
                List<CrawlerFlowModel> metadataList = new ArrayList<>();
                String inputDatasetCode = crawlerFlowModel.getInputDatasetCode();
                String datasetCode = crawlerFlowModel.getDatasetCode();
                if (StringUtil.isEmpty(inputDatasetCode)) {
                    continue;
                }
                SysConfig.getInstance().setVersionMap(new HashMap<>());
                adapterFlg = true;
            } catch (Exception e) {
                adapterFlg = false;
                if (crawlerFlowDatasetMap.containsKey(inputDatasetCode)) {
                    datasetList = crawlerFlowDatasetMap.get(inputDatasetCode);
                }
                datasetList.add(crawlerFlowModel);
                crawlerFlowDatasetMap.put(inputDatasetCode, datasetList);
                if (crawlerFlowMetadataMap.containsKey(datasetCode)) {
                    metadataList = crawlerFlowMetadataMap.get(datasetCode);
                }
                metadataList.add(crawlerFlowModel);
                crawlerFlowMetadataMap.put(datasetCode, metadataList);
            }
//            SysConfig.getInstance().setVersionMap(new HashMap<>());
            adapterFlg = true;
            return true;
        } catch (Exception e) {
            adapterFlg = false;
            return false;
        }
        return adapterFlg;
    }
    /**

+ 9 - 1
Hos-resource/src/main/java/com/yihu/ehr/crawler/service/CrawlerService.java

@ -127,13 +127,21 @@ public class CrawlerService {
            condition = net.sf.json.JSONObject.fromObject(map).toString();
        }
        List<AdapterDatasetModel> adapterDatasetModelList = adapterDatasetService.getDatasetList(AdapterDatasetModel.class, versionModel.getVersion(), condition, null, null, null);
        // 筛选掉 未适配数据
        List<AdapterDatasetModel> nAdapterDataSetModelList = new ArrayList<>();
        for (AdapterDatasetModel datasetModel : adapterDatasetModelList) {
            if (datasetModel.getAdapterDatasetId() != null && datasetModel.getAdapterDatasetName() != null && datasetModel.getAdapterDatasetCode() != null) {
                nAdapterDataSetModelList.add(datasetModel);
            }
        }
        //获取编排数据集
        List<CrawlerDataSetModel> crawlerDataset = crawlerDatasetDao.getCrawlerDatasetList(versionModel.getId());
        DetailModelResult re = new DetailModelResult();
        List<CrawlerDatasetResultDetailModel> list = new ArrayList<>();
        for (AdapterDatasetModel datasetModel : adapterDatasetModelList) {
        for (AdapterDatasetModel datasetModel : nAdapterDataSetModelList) {
            if (!StringUtil.isStrEmpty(datasetModel.getAdapterDatasetCode())) {
                List<AdapterMetadataModel> metadatas = adapterMetadataService.getAdapterMetadataByDataset(versionModel.getVersion(), datasetModel.getStdDatasetId());
                if (metadatas != null && metadatas.size() > 0) {
                    CrawlerDatasetResultDetailModel obj = new CrawlerDatasetResultDetailModel();
                    obj.setSchemeVersionId(schemeVersionId);

+ 3 - 1
Hos-resource/src/main/java/com/yihu/ehr/job/service/CrawlerFlowUploadJob.java

@ -4,6 +4,7 @@ import com.yihu.ehr.common.Services;
import com.yihu.ehr.crawler.service.CrawlerFlowManager;
import com.yihu.ehr.datacollect.model.RsJobConfig;
import com.yihu.ehr.datacollect.service.intf.IDatacollectManager;
import com.yihu.ehr.framework.model.DataGridResult;
import com.yihu.ehr.framework.util.DateUtil;
import com.yihu.ehr.framework.util.springutil.SpringBeanUtil;
import org.apache.logging.log4j.LogManager;
@ -41,7 +42,8 @@ public class CrawlerFlowUploadJob implements IBaseJob {
        condition.put("beginDate", begin);
        condition.put("endDate", end);
        CrawlerFlowManager crawlerFlowManager = new CrawlerFlowManager();
        DataGridResult result = datacollect.getJobDatasetByJobId(jobId);
        CrawlerFlowManager crawlerFlowManager = new CrawlerFlowManager(result.getDetailModelList(), job.getSchemeVersion());
        String message = crawlerFlowManager.dataCrawler(condition);
        if (!job.getJobType().equals("0")) {
            job.setRepeatStartTime(end);

+ 2 - 1
Hos-resource/src/main/resources/config/http.properties

@ -1,5 +1,6 @@
httpUrl = http://172.19.103.73:1443/api/v1.0
httpUrl = https://172.19.103.73:443/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

+ 5 - 22
Hos-resource/src/main/webapp/WEB-INF/ehr/jsp/datacollect/editorJobJs.jsp

@ -35,18 +35,16 @@
                },
                onStepChanged:function(b,to,from){
                    if(to==1){
                        
                        if($('#jobContentClass').ligerComboBox("getValue")==me.crawlerFlowUpload){//类名为任务编排上传类
                            me.needReloadCrawlerDst = true;
                            me.$listPlan.setOptions({ url: '${contextRoot}/crawler/savedSchemeList'});
                            me.$listPlan.reload(true);
                            me.$listPlan.loadData(true);
                        }else{
                            me.$listPlan._setData($.parseJSON('${schemeList}'));
                            me.$listPlan.reRender();
                        }
                    }
                    else if(to==2){
                        
                        //接口为档案上传时,数据集不可编辑
                        if($('#jobContentClass').ligerComboBox("getValue")==me.archiveUpload)
                        {
@ -59,11 +57,7 @@
                            $("#crawlerListDataset").show();
                            var selected = me.$listPlan.getSelectedRow();
                            if(selected!=null && me.needReloadCrawlerDst) {
                                me.$crawlerFlowDataset.setOptions({url: '${contextRoot}/crawler/savedJobData', parms: [{ name: 'version', value:selected.id}],checkbox:false});
                                me.$crawlerFlowDataset.set("columns", [
                                    { display: '数据集代码', name: 'jobDatasetCode' },
                                    { display: '数据集名称', name: 'jobDatasetName' }
                                ]);
                                me.$crawlerFlowDataset.setOptions({parms: [{ name: 'version', value:selected.id}],checkbox:false});
                                me.$crawlerFlowDataset.loadData(true);
                            }
                            return false;
@ -167,11 +161,7 @@
                    if($("#txtSchemeVersion").val()==row.version)
                    {
                        if(me.needReloadCrawlerDst && $('#jobContentClass').ligerComboBox("getValue")==me.crawlerFlowUpload){//类名为任务编排上传类
                            me.$crawlerFlowDataset.setOptions({url: '${contextRoot}/crawler/savedJobData', parms: [{ name: 'version', value:row.id}],checkbox:false});
                            me.$crawlerFlowDataset.set("columns", [
                                { display: '数据集代码', name: 'jobDatasetCode' },
                                { display: '数据集名称', name: 'jobDatasetName' }
                            ]);
                            me.$crawlerFlowDataset.setOptions({parms: [{ name: 'version', value:row.id}],checkbox:false});
                            me.$crawlerFlowDataset.loadData(true);
                            me.needReloadCrawlerDst = false;
                        }
@ -264,18 +254,12 @@
            //任务编排上传类的数据集列表
            me.$crawlerFlowDataset = $("#crawlerListDataset").ligerGrid({
                url: '${contextRoot}/crawler/getSchemeDataSets',
                url: '${contextRoot}/crawler/savedJobData',
                dataType : "json",
                cache:false,
                columns: [
                    { display: '数据集代码', name: 'jobDatasetCode' },
                    { display: '数据集名称', name: 'jobDatasetName' },
                    { display: '执行条件', name: 'jobDatasetCondition', render: function (row,rowIndex) {
                        var html = '<div class="m-inline-buttons" style="width:55px;">';
                        html += "<a href=\"javascript:void(0)\" onclick=\"javascript:editorJob.setCondition("+rowIndex+");\">设置筛选</a>";
                        return html;
                    } }
                    { display: '数据集名称', name: 'jobDatasetName' }
                ],
                delayLoad:true,//初始化不加载
                alternatingRow:true,
@ -363,7 +347,6 @@
            if(modelString!=undefined && modelString!=null && modelString.length>0)
            {
                me.actionUrl = "${contextRoot}/datacollect/updateJob";
                var model ={
                    id:'${model.id}',
                    jobName: '${model.jobName}',