|
@ -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;
|
|
|
}
|
|
|
|
|
|
/**
|