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