You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docus-active-query-service/src/main/java/com/docus/bgts/service/BgtsServiceImpl.java

1401 lines
64 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.docus.bgts.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.docus.bgts.entity.AfCollectAdd;
import com.docus.bgts.entity.AfCollectTask;
import com.docus.bgts.entity.MrReportError;
import com.docus.bgts.entity.TBasic;
import com.docus.bgts.entity.TSeal;
import com.docus.bgts.enums.Codes;
import com.docus.bgts.facade.IAfCollectTaskService;
import com.docus.bgts.facade.IBgtsService;
import com.docus.bgts.mapper.dbmysql.AfCollectAddMapper;
import com.docus.bgts.mapper.dbmysql.AfCollectTaskMapper;
import com.docus.bgts.mapper.dbmysql.AfInterfaceCollectSubMapper;
import com.docus.bgts.mapper.dbmysql.MrReportErrorMapper;
import com.docus.bgts.mapper.dboracle.VDocumentPdfMapper;
import com.docus.bgts.rpc.DownloadPlatformRpc;
import com.docus.bgts.rpc.dto.ReportDownDto;
import com.docus.bgts.rpc.dto.ReportDownPatientDto;
import com.docus.bgts.rpc.dto.ReportDownScanFileDto;
import com.docus.bgts.utils.FileUtils;
import com.docus.bgts.utils.HttpUtils;
import com.docus.bgts.utils.SnowflakeIdWorker;
import com.docus.bgts.utils.XmlUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
@Service
public class BgtsServiceImpl implements IBgtsService {
@Value("${ws.url}")
private String wsUrl;
@Value("${ws.localMethod}")
private String wsLocalMethod;
@Value("${ws.LocalMethodNj:null}")
private String wsLocalMethodNj;
private Logger logger = LogManager.getLogger(BgtsServiceImpl.class);
@Autowired
IAfCollectTaskService afCollectTaskService;
@Autowired
VDocumentPdfMapper vDocumentPdfMapper;
@Autowired
AfInterfaceCollectSubMapper afInterfaceCollectSubMapper;
@Autowired
MrReportErrorMapper mrReportErrorMapper;
@Autowired
AfCollectAddMapper afCollectAddMapper;
@Autowired
AfCollectTaskMapper afCollectTaskMapper;
@Autowired
private ThreadPoolExecutor threadPoolExecutor;
@Autowired
private DownloadPlatformRpc downloadPlatformRpc;
@Override
public void collectSealIcu(String sealId) throws Exception {
TSeal seal = getSealAndCheckBySealId(sealId);
String jzh = seal.getJzh();
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
int filesource = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource")));
int filestoragetype = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype")));
SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
String indexFlagField = String.valueOf(FileUtils.getJsonByName("indexFlag"));
String serialnumField = String.valueOf(FileUtils.getJsonByName("serialnum"));
//String filetitle = String.valueOf(FileUtils.getJsonByName("filetitle"));
String downurlField = String.valueOf(FileUtils.getJsonByName("downurl"));
String inPatientNoField = String.valueOf(FileUtils.getJsonByName("inPatientNo"));
String visitIdField = String.valueOf(FileUtils.getJsonByName("visitId"));
String inJzhField = String.valueOf(FileUtils.getJsonByName("jzh"));
List<String> fieldArr = new ArrayList<>();
fieldArr.add(indexFlagField);
fieldArr.add(serialnumField);
fieldArr.add(inPatientNoField);
fieldArr.add(visitIdField);
fieldArr.add(inJzhField);
// if(StringUtils.isNotBlank(filetitle)){
// fieldArr.add(filetitle);
// }
fieldArr.add(downurlField);
String namespace = String.valueOf(FileUtils.getJsonByName("namespace"));
String tableName = String.valueOf(FileUtils.getJsonByName("tableName"));
// String collectTimeName = String.valueOf(FileUtils.getJsonByName("collectTimeName"));
List<Map> viewDataList = vDocumentPdfMapper.collectByJzh(inJzhField, jzh, namespace, tableName, fieldArr);
if (CollUtil.isEmpty(viewDataList)) {
logger.info("封存id{} ,根据记账号:{},采集重症视图:{},没有采集到数据!", sealId, jzh, namespace + "." + tableName);
return;
}
logger.info("封存id{} ,根据记账号:{},采集重症视图:{},数据为:{}", sealId, jzh, namespace + "." + tableName, JSON.toJSON(viewDataList));
for (Map vieData : viewDataList) {
ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
reportDownPatientDto.setPatientid(seal.getPatientId());
ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto();
reportDownScanFileDto.setDownurl(String.valueOf(vieData.get(downurlField)));
reportDownScanFileDto.setFilestoragetype(filestoragetype);
reportDownScanFileDto.setFilesource(filesource);
//reportDownScanFileDto.setFiletitle(map.get(filetitle)==null?"重症"+(System.currentTimeMillis()):String.valueOf(map.get(filetitle)));
reportDownScanFileDto.setFiletitle(StringUtils.isNotBlank(String.valueOf(vieData.get(serialnumField))) ? String.valueOf(vieData.get(serialnumField)) : String.valueOf(idWorker.nextId()));
reportDownScanFileDto.setSerialnum(StringUtils.isNotBlank(String.valueOf(vieData.get(serialnumField))) ? String.valueOf(vieData.get(serialnumField)) : String.valueOf(idWorker.nextId()));
List<ReportDownScanFileDto> reportDownScanFileDtos = Collections.singletonList(reportDownScanFileDto);
ReportDownDto reportDownDto = new ReportDownDto();
reportDownDto.setCollectorid(collectorid);
reportDownDto.setAssortid(assortid);
reportDownDto.setPatient(reportDownPatientDto);
reportDownDto.setScanfiles(reportDownScanFileDtos);
// 保存任务,上报封存病案报告
afCollectTaskService.insertServer(reportDownDto);
downloadPlatformRpc.sealReport(reportDownDto);
}
}
@Override
public void collectSealSurgicalAnesthesia(String sealId) throws Exception {
TSeal seal = getSealAndCheckBySealId(sealId);
String jzh = seal.getJzh();
String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
int filesource = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource")));
int filestoragetype = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype")));
SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
String indexFlag = String.valueOf(FileUtils.getJsonByName("indexFlag"));
String serialnum = String.valueOf(FileUtils.getJsonByName("serialnum"));
String filetitle = String.valueOf(FileUtils.getJsonByName("filetitle"));
String downurl = String.valueOf(FileUtils.getJsonByName("downurl"));
List<String> fieldArr = new ArrayList<>();
fieldArr.add(indexFlag);
fieldArr.add(serialnum);
if (StringUtils.isNotBlank(filetitle)) {
fieldArr.add(filetitle);
}
fieldArr.add(downurl);
String namespace = String.valueOf(FileUtils.getJsonByName("namespace"));
String tableName = String.valueOf(FileUtils.getJsonByName("tableName"));
// String collectTimeName = String.valueOf(FileUtils.getJsonByName("collectTimeName"));
// 获取过滤报告单
String[] filterReports = String.valueOf(FileUtils.getJsonByName("filterReport")).split(",");
HashSet<String> filterReportSet = new HashSet<>();
Collections.addAll(filterReportSet, filterReports);
List<Map> viewDataList = vDocumentPdfMapper.collectByJzh(indexFlag, jzh, namespace, tableName, fieldArr);
if (CollUtil.isEmpty(viewDataList)) {
logger.info("封存id{} ,根据记账号:{},采集手麻视图:{},没有采集到数据!", sealId, jzh, namespace + "." + tableName);
return;
}
logger.info("封存id{} ,根据记账号:{},采集手麻视图:{},数据为:{}", sealId, jzh, namespace + "." + tableName, JSON.toJSON(viewDataList));
for (Map map : viewDataList) {
String reportFileTitle = String.valueOf(map.get(filetitle));
// 如果存在过滤报告单名单,不采集;
if (filterReportSet.contains(reportFileTitle)) {
continue;
}
ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
reportDownPatientDto.setPatientid(seal.getPatientId());
ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto();
reportDownScanFileDto.setDownurl(String.valueOf(map.get(downurl)));
reportDownScanFileDto.setFilestoragetype(filestoragetype);
reportDownScanFileDto.setFilesource(filesource);
reportDownScanFileDto.setFiletitle(map.get(filetitle) == null ? "重症" + (System.currentTimeMillis()) : reportFileTitle);
reportDownScanFileDto.setSerialnum(StringUtils.isNotBlank(String.valueOf(map.get(serialnum))) ? String.valueOf(map.get(serialnum)) : String.valueOf(idWorker.nextId()));
List<ReportDownScanFileDto> reportDownScanFileDtos = Collections.singletonList(reportDownScanFileDto);
ReportDownDto reportDownDto = new ReportDownDto();
reportDownDto.setCollectorid(collectorid);
reportDownDto.setAssortid(assortid);
reportDownDto.setPatient(reportDownPatientDto);
reportDownDto.setScanfiles(reportDownScanFileDtos);
afCollectTaskService.insert(reportDownDto);
//String uploadConnector = String.valueOf(FileUtils.getJsonByName("uploadConnector"));
// 调用封存病案上报接口
downloadPlatformRpc.sealReport(reportDownDto);
}
}
@Override
public void collect(String empId) throws Exception {
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
List<String[]> exams = new ArrayList<>();
Map<String, Date> map = afCollectAddMapper.selectDate(empId);
SimpleDateFormat sdf = new SimpleDateFormat(FileUtils.getJsonByName("dateFormat").toString());
String beginDate = sdf.format(map.get("admiss_date"));
String endDate = sdf.format(map.get("dis_date"));
//通过empId获取报告单号集合
if (collectorid.equals("14")){
exams = getExamNoNj(empId,beginDate,endDate);
}else {
exams = getExamNo(empId,beginDate,endDate);
}
//获取插入表数据
ReportDownDto reportDownDto = getUrlCreateReportDto(exams, empId);
//插入文件af_collect_task表数据
afCollectTaskService.insert(reportDownDto);
//通过报告单号集合采集
collectExams(exams, empId, reportDownDto);
}
@Override
public void collectSealEndoscopy(String sealId) throws Exception {
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
TSeal seal = getSealAndCheckBySealId(sealId);
String jzh = seal.getJzh();
Date admissDate = seal.getAdmissDate();
Date disDate = getDisDateByJzh(jzh);
disDate = Objects.isNull(disDate) ? new Date() : disDate;
SimpleDateFormat sdf = new SimpleDateFormat(FileUtils.getJsonByName("dateFormat").toString());
String beginDate = sdf.format(admissDate);
String endDate = sdf.format(disDate);
List<String[]> exams;
//通过empId获取报告单号集合
if (collectorid.equals("14")) {
exams = getExamNoNj(jzh, beginDate, endDate);
} else {
exams = getExamNo(jzh, beginDate, endDate);
}
//获取插入表数据
ReportDownDto reportDownDto = sealGetUrlCreateReportDto(exams, seal.getPatientId());
//插入文件af_collect_task表数据
afCollectTaskService.insert(reportDownDto);
//文件上报
downloadPlatformRpc.sealReport(reportDownDto);
}
@Override
public void collectPacs(String empId, String admissDate, String disDate, String times) {
try {
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
Date ad = sim.parse(admissDate);
Date di = sim.parse(disDate);
String admiss = sim.format(ad);
String dis = sim.format(di);
//通过empId获取报告单号集合
List<String[]> exams = getExamNoByInpNo(empId, admiss, dis);
String jzh = afCollectTaskService.getJzhByInpatientNo(empId, times);
if (null == jzh) {
logger.info("通过住院号与住院次数未匹配到患者");
return;
}
//获取插入表数据
ReportDownDto reportDownDto = getUrlCreateReportDto(exams, jzh);
//插入文件af_collect_task表数据
afCollectTaskService.insert(reportDownDto);
//通过报告单号集合采集
collectExams(exams, empId, reportDownDto);
}catch (Exception e) {
logger.info(empId,":采集出错!",e.getMessage());
}
}
@Override
public void collectSealPacs(String sealId) throws Exception{
TSeal seal = getSealAndCheckBySealId(sealId);
String inpatientNo = seal.getInpatientNo();
if (StrUtil.isBlank(inpatientNo)) {
throw new RuntimeException("sealId:" + sealId + " 封存病案信息 病案号 为空!");
}
String jzh = seal.getJzh();
Date admissDate = seal.getAdmissDate();
// 如果是在院的,默认出院时间为现在
Date disDate = getDisDateByJzh(jzh);
disDate = Objects.isNull(disDate) ? new Date() : disDate;
String pattern = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
List<String[]> exams = getExamNoByInpNo(inpatientNo, sdf.format(admissDate), sdf.format(disDate));
//获取插入表数据
ReportDownDto reportDownDto = sealGetUrlCreateReportDto(exams, seal.getPatientId());
//插入文件af_collect_task表数据
afCollectTaskService.insert(reportDownDto);
//文件上报
downloadPlatformRpc.sealReport(reportDownDto);
}
@Override
public void collectEcg(String empId, String admissDate, String disDate, String times) throws Exception {
Map<String, String> smCollectionTime = getSmCollectionTimeEcg(admissDate, disDate);
//通过empId获取报告单号集合
List<String[]> exams = getExamNoEcg(empId, smCollectionTime.get("admissDate"), smCollectionTime.get("disDate"));
String jzh = afCollectTaskService.getpatientIdByEmpId(empId);
if (null == jzh) {
logger.info(empId+" 通过jzh未匹配到患者");
return;
}
//获取插入表数据
ReportDownDto reportDownDto = getUrlCreateReportDto(exams, empId);
//插入文件af_collect_task表数据
afCollectTaskService.insert(reportDownDto);
//通过报告单号集合采集
collectExams(exams, empId, reportDownDto);
}
@Override
public void collectSealEcg(String sealId) throws Exception{
TSeal seal = getSealAndCheckBySealId(sealId);
String jzh = seal.getJzh();
Date admissDate = seal.getAdmissDate();
// 如果是在院的,默认出院时间为现在
Date disDate = getDisDateByJzh(jzh);
disDate = disDate == null ? new Date() : disDate;
String pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Map<String, String> smCollectionTime = getSmCollectionTimeEcg(sdf.format(admissDate), sdf.format(disDate));
//通过jzh获取报告单号集合
List<String[]> exams = getExamNoEcg(jzh, smCollectionTime.get("admissDate"), smCollectionTime.get("disDate"));
//获取插入表数据
ReportDownDto reportDownDto = sealGetUrlCreateReportDto(exams, seal.getPatientId());
//插入文件af_collect_task表数据
afCollectTaskService.insert(reportDownDto);
//文件上报
downloadPlatformRpc.sealReport(reportDownDto);
}
/**
* 根据记账号获得病案的出院时间
*
* @param jzh 记账号
* @return java.util.Date
* @date 2024/1/11 15:19
* @author YongBin Wen
*/
private Date getDisDateByJzh(String jzh) {
TBasic basicCondition = new TBasic();
basicCondition.setJzh(jzh);
List<TBasic> basicInfo = afCollectTaskService.getBasicInfo(basicCondition);
if (CollUtil.isEmpty(basicInfo)) {
return null;
}
TBasic basic = basicInfo.get(0);
return basic.getDisDate();
}
@Override
public void collectByExamNo(String emamNo, String empId) throws Exception {
String[] strings = new String[2];
//通过报告单号和系统id查询任务表
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
AfCollectTask afCollectTask = afCollectTaskService.getOne(new QueryWrapper<AfCollectTask>().eq("C1", emamNo).eq("sysflag", collectorid));
strings[0] = emamNo;
strings[1] = afCollectTask.getC2();
List<String[]> exams = new ArrayList<>();
exams.add(strings);
//获取插入表数据
ReportDownDto reportDownDto = getUrlCreateReportDto(exams, empId);
collectExams(exams, empId, reportDownDto);
}
@Override
public void collectAll() {
logger.info("----------全量采集开始-----------");
//1.获取最早采集日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startCollectTime = null;
startCollectTime = String.valueOf(FileUtils.getJsonByName("startCollectTime"));
logger.info("----------采集初始时间:" + startCollectTime + " -------------------");
//当前日期
Date date = new Date();
String dateStr = simpleDateFormat.format(date);
collectByDates(startCollectTime, dateStr);
//更新采集时间
addAfCollectAdd(date);
logger.info("--------------全量采集结束------------------");
}
@Override
public void collectSmByDate(String startDate, String endDate) {
logger.info("----------手麻采集开始时间:"+startDate+" 结束时间:"+endDate+"------");
collectByDates(startDate, endDate);
logger.info("----------手麻采集结束-");
}
@Override
public void collectPacss(){
logger.info("按需采集任务执行----");
// if (CollUtil.isEmpty(date)) {
// try {
// initDate();
// } catch (Exception e) {
// logger.error(e.getMessage());
// return;
// }
// }
// if (currentIndex >= date.size()) {
// currentIndex = 0;
// }
logger.info("index:{},Thread {}", currentIndex, Thread.currentThread().getName());
// String collectStartDate = date.get(currentIndex);
// String collectEndDate = collectStartDate + "\t23:59:59";
String collectStartDate = String.valueOf(FileUtils.getJsonByName("collectStartDate"))+"\t00:00:00";
String collectEndDate = String.valueOf(FileUtils.getJsonByName("collectEndDate"))+"\t23:59:59";
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String isDead = String.valueOf(FileUtils.getJsonByName("isDead"));
CountDownLatch countDownLatch = new CountDownLatch(1);
threadPoolExecutor.execute(() -> {
try {
collectByDate(collectStartDate, collectEndDate, collectorid,isDead);
}catch (Exception e) {
logger.info("按需采集出错{}",e.getMessage());
}
countDownLatch.countDown();
});
try {
countDownLatch.await();
} catch (Exception e) {
logger.error("JUC countDownLatch error {}", e.getMessage());
}
logger.info("{},采集结束----", collectStartDate);
// currentIndex++;
System.gc();
}
@Override
public void collectPacsByDate(String startDate, String endDate) {
logger.info("按需采集任务执行----");
// if (CollUtil.isEmpty(date)) {
// try {
// initDate();
// } catch (Exception e) {
// logger.error(e.getMessage());
// return;
// }
// }
// if (currentIndex >= date.size()) {
// currentIndex = 0;
// }
// logger.info("index:{},Thread {}", currentIndex, Thread.currentThread().getName());
// String collectStartDate = date.get(currentIndex);
// String collectEndDate = collectStartDate + "\t23:59:59";
String collectStartDate = String.valueOf(startDate)+"\t00:00:00";
String collectEndDate = String.valueOf(endDate)+"\t23:59:59";
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String isDead = String.valueOf(FileUtils.getJsonByName("isDead"));
CountDownLatch countDownLatch = new CountDownLatch(1);
threadPoolExecutor.execute(() -> {
try {
collectByDate(collectStartDate, collectEndDate, collectorid,isDead);
}catch (Exception e) {
logger.info("按需采集出错{}",e.getMessage());
}
countDownLatch.countDown();
});
try {
countDownLatch.await();
} catch (Exception e) {
logger.error("JUC countDownLatch error {}", e.getMessage());
}
logger.info("{},采集结束----", collectStartDate);
// currentIndex++;
System.gc();
}
@Override
public void timerCollect() {
logger.info("------采集器开始采集---------");
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
//1.获取上次采集时间
Date time;
if (collectorid.equals("5")) {
time = afCollectAddMapper.getTimeByAdd(5);
} else {
time = afCollectAddMapper.getTimeByAdd(15);
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startDate = simpleDateFormat.format(time);
//当前日期
Date date = new Date();
String endDate = simpleDateFormat.format(date);
collectByDates(startDate, endDate);
//更新采集时间
addAfCollectAdd(date);
logger.info("--------采集器结束采集------");
}
@Override
public void collectByDate(String startDate, String endDate, String collectorId,String isDead) {
logger.info("按需采集开始----------开始时间---" + startDate + "------结束时间---" + endDate);
//页码
// int startrow;
// //每页10条数据
// int endrow = 10;
// //2.获取第一页10条数据开始采集
try{
// List<Map> patientIds;
// for (startrow = 0; ; startrow += 10) {
// if (("1").equals(isDead)){
// patientIds=afCollectTaskService.getjzhByDateAndIsDead(startDate, endDate, startrow, endrow);
// logger.info("按需采集死亡患者----");
// }else {
// patientIds = afCollectTaskService.getjzhByDate(startDate, endDate, startrow, endrow);
// }
//
// if (null == patientIds || patientIds.size() <= 0) {
// logger.info("未查询到按需采集患者!");
// break;
// }
// for (Map patientId : patientIds) {
// if (patientId != null) {
// try {
// logger.info("按需采集------患者" + patientId.get("inpatient_no"));
// logger.info("处理按需采集第" + startrow + "条数据----");
// if (collectorId.equals("3")) {
// collectPacs(String.valueOf(patientId.get("inpatient_no")), String.valueOf(patientId.get("admiss_date"))
// , String.valueOf(patientId.get("dis_date")), String.valueOf(patientId.get("admiss_times")));
// } else if (collectorId.equals("4") || collectorId.equals("23")) {
// collectEcg(String.valueOf(patientId.get("jzh")), String.valueOf(patientId.get("admiss_date"))
// , String.valueOf(patientId.get("dis_date")), String.valueOf(patientId.get("admiss_times")));
// } else {
// collect(String.valueOf(patientId.get("jzh")));
// }
//
// } catch (Exception e) {
// logger.error("按需采集-患者inpatient_no{},collectPacs() Error:{}", patientId.get("inpatient_no"), e.getMessage());
// }
// }
// }
// patientIds.clear();
// }
int startrow = 0;
int endrow = 10;
boolean hasMoreData = true;
while (hasMoreData) {
List<Map> patientIds;
if ("1".equals(isDead)) {
patientIds = afCollectTaskService.getjzhByDateAndIsDead(startDate, endDate, startrow, endrow);
logger.info("按需采集死亡患者----");
} else {
patientIds = afCollectTaskService.getjzhByDate(startDate, endDate, startrow, endrow);
}
if (patientIds == null || patientIds.isEmpty()) {
logger.info("未查询到按需采集患者!");
hasMoreData = false;
} else {
for (Map patientId : patientIds) {
if (patientId != null) {
try {
logger.info("按需采集------患者" + patientId.get("inpatient_no"));
logger.info("处理按需采集第" + startrow + "条数据----");
if (collectorId.equals("3")) {
collectPacs(String.valueOf(patientId.get("inpatient_no")), String.valueOf(patientId.get("admiss_date")), String.valueOf(patientId.get("dis_date")), String.valueOf(patientId.get("admiss_times")));
} else if (collectorId.equals("4") || collectorId.equals("23")) {
collectEcg(String.valueOf(patientId.get("jzh")), String.valueOf(patientId.get("admiss_date")), String.valueOf(patientId.get("dis_date")), String.valueOf(patientId.get("admiss_times")));
} else {
collect(String.valueOf(patientId.get("jzh")));
}
} catch (Exception e) {
logger.error("按需采集-患者inpatient_no{},collectPacs() Error:{}", patientId.get("inpatient_no"), e.getMessage());
}
}
}
startrow += 10;
}
}
}catch (Exception e){
logger.error(e.getMessage());
}catch (Throwable t) {
t.printStackTrace();
logger.error("throwable{}", t.getMessage());
}
}
/**
* 根据封存id获取封存病案信息并且校验
*
* @param sealId 封存id
* @return com.docus.bgts.entity.TSeal
* @date 2024/1/11 10:47
* @author YongBin Wen
*/
private TSeal getSealAndCheckBySealId(String sealId) {
TSeal condition = new TSeal();
condition.setSealId(sealId);
TSeal seal = afCollectTaskService.findSealByCondition(condition);
if (Objects.isNull(seal)) {
throw new RuntimeException("sealId:" + sealId + " 未找到封存病案信息!");
}
if (Objects.isNull(seal.getAdmissDate())) {
throw new RuntimeException("sealId:" + sealId + " 封存病案信息 入院日期 为空!");
}
if (StrUtil.isBlank(seal.getJzh())) {
throw new RuntimeException("sealId:" + sealId + " 封存病案信息 记账号 为空!");
}
return seal;
}
/**
* 根据时间到采集任务 手麻
*
* @param startDate
* @param endDate
*/
private void collectByDates(String startDate, String endDate) {
//页码
int current;
//每页10条数据
int size;
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
int filesource = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource")));
int filestoragetype = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype")));
Map<String, Object> headMap = new HashMap<>();
headMap.put("Content-Type", "application/json");
SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
String indexFlag = String.valueOf(FileUtils.getJsonByName("indexFlag"));
String serialnum = String.valueOf(FileUtils.getJsonByName("serialnum"));
String filetitle = String.valueOf(FileUtils.getJsonByName("filetitle"));
String downurl = String.valueOf(FileUtils.getJsonByName("downurl"));
List<String> fieldArr = new ArrayList<>();
fieldArr.add(indexFlag);
fieldArr.add(serialnum);
if (StringUtils.isNotBlank(filetitle)) {
fieldArr.add(filetitle);
}
fieldArr.add(downurl);
String namespace = String.valueOf(FileUtils.getJsonByName("namespace"));
String tableName = String.valueOf(FileUtils.getJsonByName("tableName"));
String collectTimeName = String.valueOf(FileUtils.getJsonByName("collectTimeName"));
List<Map> maps;
//2.获取第一页10条数据开始采集
try{
for (current = 1; ; current++) {
size = 10 * current;
maps = vDocumentPdfMapper.listCollectPage(size - 10, size, startDate, endDate, namespace, tableName, fieldArr, collectTimeName);
logger.info("处理采集数据:" + maps);
if (null == maps || maps.size() <= 0) {
break;
}
maps:
for (Map map : maps) {
//获取过滤报告单
String[] filterReports = String.valueOf(FileUtils.getJsonByName("filterReport")).split(",");
if (filterReports.length > 0) {
for (String filterReport : filterReports) {
//需要过滤的报告单存在则不采集
if (String.valueOf(map.get(filetitle)).equals(filterReport)) {
continue maps;
}
}
}
ReportDownDto reportDownDto = new ReportDownDto();
reportDownDto.setCollectorid(collectorid);
reportDownDto.setAssortid(assortid);
ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
reportDownPatientDto.setJzh(String.valueOf(map.get(indexFlag)));
reportDownDto.setPatient(reportDownPatientDto);
List<ReportDownScanFileDto> reportDownScanFileDtos = new ArrayList<>();
ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto();
reportDownScanFileDto.setDownurl(String.valueOf(map.get(downurl)));
reportDownScanFileDto.setFilestoragetype(filestoragetype);
reportDownScanFileDto.setFilesource(filesource);
reportDownScanFileDto.setFiletitle(map.get(filetitle) == null ? "重症" + (System.currentTimeMillis()) : String.valueOf(map.get(filetitle)));
reportDownScanFileDto.setSerialnum(StringUtils.isNotBlank(String.valueOf(map.get(serialnum))) ? String.valueOf(map.get(serialnum)) : String.valueOf(idWorker.nextId()));
reportDownScanFileDtos.add(reportDownScanFileDto);
reportDownDto.setScanfiles(reportDownScanFileDtos);
String post;
try {
afCollectTaskService.insert(reportDownDto);
//String uploadConnector = String.valueOf(FileUtils.getJsonByName("uploadConnector"));
//调用下载接口
post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), headMap, JSON.parseObject(JSON.toJSONString(reportDownDto), Map.class));
Map resMap = JSON.parseObject(post, Map.class);
logger.info(reportDownDto);
if (String.valueOf(resMap.get("code")).equals("500")) {
throw new RuntimeException(String.valueOf(resMap.get("msg")));
}
} catch (Exception e) {
//打印错误日志
logger.info("采集出错:" + reportDownDto);
logger.info(e.getMessage());
addMrReportErrorLog(reportDownDto);
}
}
}
}catch (Exception e){
logger.info(e.getMessage());
}
}
// 时间
private static List<String> date = new ArrayList<>();
// 上次任务执行时间
private static int currentIndex = 0;
private static void initDate() throws Exception {
String configStart = String.valueOf(FileUtils.getJsonByName("collectStartDate"));
String configEnd = String.valueOf(FileUtils.getJsonByName("collectEndDate"));
if (StrUtil.isBlank(configStart) || StrUtil.isBlank(configEnd)) {
throw new RuntimeException("check homeQualitySet.json collectStartDate AND collectEndDate confg");
}
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(configStart, dtf);
LocalDate end = LocalDate.parse(configEnd);
while (!localDate.isAfter(end)) {
date.add(localDate.toString());
localDate = localDate.plusDays(1);
}
}
/**
* 根据时间到采集任务 重症
*
* @param startDate
* @param endDate
*/
// private void collectByDates(String startDate, String endDate) {
// //页码
// int current;
// //每页10条数据
// int size;
// String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
// String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
// int filesource = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource")));
// int filestoragetype = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype")));
// Map<String, Object> headMap = new HashMap<>();
// headMap.put("Content-Type", "application/json");
// SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
// String indexFlag = String.valueOf(FileUtils.getJsonByName("indexFlag"));
// String serialnum = String.valueOf(FileUtils.getJsonByName("serialnum"));
// //String filetitle = String.valueOf(FileUtils.getJsonByName("filetitle"));
// String downurl = String.valueOf(FileUtils.getJsonByName("downurl"));
// String inPatientNo = String.valueOf(FileUtils.getJsonByName("inPatientNo"));
// String visitId = String.valueOf(FileUtils.getJsonByName("visitId"));
// String inJzh = String.valueOf(FileUtils.getJsonByName("jzh"));
//
// List<String> fieldArr = new ArrayList<>();
// fieldArr.add(indexFlag);
// fieldArr.add(serialnum);
// fieldArr.add(inPatientNo);
// fieldArr.add(visitId);
// fieldArr.add(inJzh);
//// if(StringUtils.isNotBlank(filetitle)){
//// fieldArr.add(filetitle);
//// }
// fieldArr.add(downurl);
// String namespace = String.valueOf(FileUtils.getJsonByName("namespace"));
// String tableName = String.valueOf(FileUtils.getJsonByName("tableName"));
// String collectTimeName = String.valueOf(FileUtils.getJsonByName("collectTimeName"));
// List<Map> maps;
// //2.获取第一页10条数据开始采集
// logger.info("开始时间-----" + startDate + "结束时间-----" + "\n" + endDate);
// for (current = 1; ; current++) {
// size = 10 * current;
// maps = vDocumentPdfMapper.listCollectPage(size - 10, size, startDate, endDate, namespace, tableName, fieldArr, collectTimeName);
// logger.info("处理采集数据:" + maps);
// if (null == maps || maps.size() <= 0) {
// break;
// }
// maps.stream().forEach(map -> {
// ReportDownDto reportDownDto = new ReportDownDto();
// reportDownDto.setCollectorid(collectorid);
// reportDownDto.setAssortid(assortid);
// ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
// if (collectorid.equals("15")){
// reportDownPatientDto.setJzh(String.valueOf(map.get(inJzh)));
// }else {
// reportDownPatientDto.setInPatientNo(String.valueOf(map.get(inPatientNo)));
// reportDownPatientDto.setVisitId(String.valueOf(map.get(visitId)));
// }
// reportDownDto.setPatient(reportDownPatientDto);
// // reportDownPatientDto.setJzh(String.valueOf(map.get(indexFlag)));
// List<ReportDownScanFileDto> reportDownScanFileDtos = new ArrayList<>();
// ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto();
// reportDownScanFileDto.setDownurl(String.valueOf(map.get(downurl)));
// reportDownScanFileDto.setFilestoragetype(filestoragetype);
// reportDownScanFileDto.setFilesource(filesource);
// //reportDownScanFileDto.setFiletitle(map.get(filetitle)==null?"重症"+(System.currentTimeMillis()):String.valueOf(map.get(filetitle)));
// reportDownScanFileDto.setFiletitle(StringUtils.isNotBlank(String.valueOf(map.get(serialnum))) ? String.valueOf(map.get(serialnum)) : String.valueOf(idWorker.nextId()));
// reportDownScanFileDto.setSerialnum(StringUtils.isNotBlank(String.valueOf(map.get(serialnum))) ? String.valueOf(map.get(serialnum)) : String.valueOf(idWorker.nextId()));
// reportDownScanFileDtos.add(reportDownScanFileDto);
// reportDownDto.setScanfiles(reportDownScanFileDtos);
// String post;
// try {
// afCollectTaskService.insertServer(reportDownDto);
// //String uploadConnector = String.valueOf(FileUtils.getJsonByName("uploadConnector"));
// String jzh = afCollectTaskService.getJzhByJzh(reportDownDto.getPatient().getJzh());
// if (null != jzh && !("").equals(jzh)) {
// reportDownPatientDto.setJzh(jzh);
// reportDownDto.setPatient(reportDownPatientDto);
// post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), headMap, JSON.parseObject(JSON.toJSONString(reportDownDto), Map.class));
// Map resMap = JSON.parseObject(post, Map.class);
// logger.info(reportDownDto.getPatient().getJzh()+" 调用下载参数:--\n"+JSON.parseObject(JSON.toJSONString(reportDownDto)));
// if (String.valueOf(resMap.get("code")).equals("500")) {
// logger.info(reportDownDto.getPatient().getJzh()+" 下载失败!");
// throw new RuntimeException(String.valueOf(resMap.get("msg")));
// }else {
// logger.info(reportDownDto.getPatient().getJzh()+" 下载成功!");
// }
// }
//
// } catch (Exception e) {
// //打印错误日志
// logger.info(reportDownDto.getPatient().getJzh()+" 采集出错:" + reportDownDto +e.getMessage());
// // String stackTrace = ExceptionUtils.getStackTrace(e);
// // logger.info("错误信息----------"+stackTrace);
// addMrReportErrorLog(reportDownDto);
// e.printStackTrace();
// }
// });
// }
// }
/**
* 更新采集时间
*/
private void addAfCollectAdd(Date date) {
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
AfCollectAdd afCollectAdd = new AfCollectAdd();
afCollectAdd.setBeginStageDate(date);
afCollectAddMapper.update(afCollectAdd, new QueryWrapper<AfCollectAdd>().eq("classify", collectorid));
}
/**
* 全量采集错误记录日志
*
* @param reportDownDto
*/
private void addMrReportErrorLog(ReportDownDto reportDownDto) {
MrReportError mrReportError = new MrReportError();
mrReportError.setCreateTime(new Date());
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
mrReportError.setReportType(Integer.parseInt(collectorid));
mrReportError.setXml(JSON.toJSONString(reportDownDto));
mrReportErrorMapper.insert(mrReportError);
}
/**
* 通过报告单号集合采集数据
*
* @param exams
* @param empId
*/
private void collectExams(List<String[]> exams, String empId, ReportDownDto reportDownDto) throws Exception {
//调用上传接口
Map<String, Object> headMap = new HashMap<>();
headMap.put("Content-Type", "application/json");
String post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), headMap, JSON.parseObject(JSON.toJSONString(reportDownDto), Map.class));
Map resMap = JSON.parseObject(post, Map.class);
logger.info(empId+" 调用下载Map参数{}",JSON.toJSONString(reportDownDto));
if (String.valueOf(resMap.get("code")).equals("500")) {
logger.info(empId+"调用下载服务错误: "+(resMap.get("msg")));
throw new RuntimeException(String.valueOf(resMap.get("msg")));
}
}
/**
* 封存病案获取图片url并返回插入表对象
*
* @param exams
* @param patientId 封存病案主键
* @return
*/
private ReportDownDto sealGetUrlCreateReportDto(List<String[]> exams, String patientId) throws Exception {
ReportDownDto reportDownDto = new ReportDownDto();
ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
reportDownPatientDto.setPatientid(patientId);
reportDownDto.setPatient(reportDownPatientDto);
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
reportDownDto.setAssortid(assortid);
reportDownDto.setCollectorid(collectorid);
List<ReportDownScanFileDto> reportDownScanFileDtos = new ArrayList<>();
ReportDownScanFileDto reportDownScanFileDto;
int filesource = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource")));
int filestoragetype = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype")));
for (String[] exam : exams) {
try {
reportDownScanFileDto = getScanByExam(exam);
reportDownScanFileDto.setFilesource(filesource);
reportDownScanFileDto.setFilestoragetype(filestoragetype);
//过滤pacs中病理报告
if (collectorid.equals("3")) {
if (!reportDownScanFileDto.getDownurl().contains("病理")
&& !reportDownScanFileDto.getDownurl().contains("胃肠镜")
&& !reportDownScanFileDto.getDownurl().contains("心电")) {
reportDownScanFileDtos.add(reportDownScanFileDto);
}
}else {
reportDownScanFileDtos.add(reportDownScanFileDto);
}
}catch (Exception e){
logger.error(exam[0]+"调用明细错误信息-----"+e.getMessage());
}
}
reportDownDto.setScanfiles(reportDownScanFileDtos);
return reportDownDto;
}
/**
* 获取图片url病返回插入表对象
*
* @param exams
* @param empId
* @return
*/
private ReportDownDto getUrlCreateReportDto(List<String[]> exams, String empId) throws Exception {
ReportDownDto reportDownDto = new ReportDownDto();
ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
reportDownPatientDto.setJzh(empId);
reportDownDto.setPatient(reportDownPatientDto);
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
reportDownDto.setAssortid(assortid);
reportDownDto.setCollectorid(collectorid);
List<ReportDownScanFileDto> reportDownScanFileDtos = new ArrayList<>();
ReportDownScanFileDto reportDownScanFileDto;
int filesource = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource")));
int filestoragetype = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype")));
for (String[] exam : exams) {
try {
reportDownScanFileDto = getScanByExam(exam);
reportDownScanFileDto.setFilesource(filesource);
reportDownScanFileDto.setFilestoragetype(filestoragetype);
//过滤pacs中病理报告
if (collectorid.equals("3")) {
if (!reportDownScanFileDto.getDownurl().contains("病理")
&& !reportDownScanFileDto.getDownurl().contains("胃肠镜")
&& !reportDownScanFileDto.getDownurl().contains("心电")) {
reportDownScanFileDtos.add(reportDownScanFileDto);
}
}else {
reportDownScanFileDtos.add(reportDownScanFileDto);
}
}catch (Exception e){
logger.error(exam[0]+"调用明细错误信息-----"+e.getMessage());
}
}
reportDownDto.setScanfiles(reportDownScanFileDtos);
return reportDownDto;
}
/**
* 创建ReportDownScanFileDto对象 通过报告单号
*
* @param exam
* @return
*/
private ReportDownScanFileDto getScanByExam(String[] exam) throws Exception {
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto();
reportDownScanFileDto.setSerialnum(exam[0]);
reportDownScanFileDto.setFiletitle(exam[1]);
XmlUtils reqXmlUtils = new XmlUtils(FileUtils.getXmlDetailsPath());
Element esbEntry = reqXmlUtils.getMsgElement();
esbEntry.element("EXAM_NO").setText(exam[0]);
String resXml;
logger.info("明细入参------------" + reqXmlUtils.getDocument().asXML());
if (collectorid.equals("14")) {
resXml = invokeWsNj(reqXmlUtils.getDocument().asXML());
} else {
resXml = invokeWs(reqXmlUtils.getDocument().asXML());
}
//解析XML
XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(resXml.getBytes("UTF-8")));
String success = xmlUtils.isSuccess();
if (!success.equals("ok")) {
logger.info("发送错误:" + success);
throw new RuntimeException("发送错误:" + success);
}
List<String> dis = (List<String>) FileUtils.getJsonByName("bgtsDetailRespon");
//数据所在节点
Element element = xmlUtils.getElement(dis);
reportDownScanFileDto.setDownurl(element.element(String.valueOf(FileUtils.getJsonByName("pdfUrl"))) == null ? "" : element.element(String.valueOf(FileUtils.getJsonByName("pdfUrl"))).getText());
return reportDownScanFileDto;
}
/**
* 通过empId获取报告单号集合
*
* @param jzh
* @return
*/
private List<String[]> getExamNo(String jzh,String beginDate,String endDate) throws Exception {
List<String[]> exams = new ArrayList<>();
XmlUtils reqXmlUtils = new XmlUtils(FileUtils.getXmlPath());
Element reqElement = reqXmlUtils.getMsgElement();
reqElement.element("INHOSP_NO").setText(jzh);
reqElement.element("BEGIN_DATE").setText(beginDate);
reqElement.element("END_DATE").setText(endDate);
logger.info("-------根据患者主索引号查询多个报告单号,地址:" + wsUrl + ",方法:" + wsLocalMethod + "---------");
String xml = reqXmlUtils.getDocument().asXML();
logger.info("---------------------------");
logger.info(xml);
logger.info("----------------------------");
String resXml = invokeWs(xml);
logger.info("---------返回值-------------");
logger.info(resXml);
logger.info("-----------------------------");
//解析XML
XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(resXml.getBytes("UTF-8")));
String success = xmlUtils.isSuccess();
if (!success.equals("ok")) {
logger.info("发送错误:" + success);
throw new RuntimeException(success);
}
List<String> dis = (List<String>) FileUtils.getJsonByName("bgtsRespon");
//数据所在节点
Element element = xmlUtils.getElement(dis);
List<Element> examInfos = element.elements("ExamInfo");
Element examNo;
String[] key;
for (Element examInfo : examInfos) {
key = new String[2];
examNo = examInfo.element(String.valueOf(FileUtils.getJsonByName("examNo")));
if (examNo != null) {
key[0] = examNo.getText();
}
Element examItemInfo = examInfo.element("ExamItemInfo");
if (examItemInfo != null) {
key[1] = examItemInfo.element(String.valueOf(FileUtils.getJsonByName("examItemName"))).getText();
}
exams.add(key);
}
return exams;
}
/**
* 通过empId获取报告单号集合
*
* @param jzh
* @return
*/
private List<String[]> getExamNoNj(String jzh,String beginDate,String endDate) throws Exception {
List<String[]> exams = new ArrayList<>();
XmlUtils reqXmlUtils = new XmlUtils(FileUtils.getXmlPath());
Element reqElement = reqXmlUtils.getMsgElement();
reqElement.element("INHOSP_NO").setText(jzh);
reqElement.element("BEGIN_DATE").setText(beginDate);
reqElement.element("END_DATE").setText(endDate);
logger.info("-------根据患者主索引号查询多个报告单号,地址:" + wsUrl + ",方法:" + wsLocalMethod + "---------");
String xml = reqXmlUtils.getDocument().asXML();
logger.info("---------------------------");
logger.info(xml);
logger.info("----------------------------");
String resXml = invokeWs(xml);
logger.info("---------返回值-------------");
logger.info(resXml);
logger.info("-----------------------------");
//解析XML
XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(resXml.getBytes("UTF-8")));
String success = xmlUtils.isSuccess();
if (!success.equals("ok")) {
logger.info("发送错误:" + success);
throw new RuntimeException(success);
}
String examNo;
String[] key;
String examName;
List<String> dis = (List<String>) FileUtils.getJsonByName("bgtsRespon");
//数据所在节点
Element element = xmlUtils.getElement(dis);
List<Element> elements = element.elements("Msg");
for (int i = 0; i < elements.size(); i++) {
List<Element> examInfo = elements.get(i).elements("ExamInfo");
for (int j = 0; j < examInfo.size(); j++) {
examNo = examInfo.get(j).element(String.valueOf(FileUtils.getJsonByName("examNo"))).getText();
key = new String[2];
if (examNo != null) {
key[0] = examNo;
}
Element examItemInfo = examInfo.get(j).element("ExamItemInfo");
if (examItemInfo != null) {
key[1] = examItemInfo.element(String.valueOf(FileUtils.getJsonByName("examItemName"))).getText();
}
exams.add(key);
logger.info("报告单号---{}",examNo);
}
}
return exams;
}
public static Map<String, String> getSmCollectionTime(String admissDate, String disDate) {
Date dBefore;
Calendar calendar = Calendar.getInstance(); //得到日历
Map<String, String> map = new HashMap<>();
try {
calendar.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(admissDate));//把当前时间赋给日历
calendar.add(Calendar.HOUR, -6); //设置为前6小时
dBefore = calendar.getTime(); //得到前一天的时间
Calendar calendar1 = Calendar.getInstance(); //得到日历
calendar1.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(disDate));//把当前时间赋给日历
calendar1.add(Calendar.HOUR, 6); //设置为后6小时
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置时间格式
String defaultStartDate = sdf.format(dBefore); //格式化前6小时
String defaultEndDate = sdf.format(calendar1.getTime()); //格式化前6小时
map.put("admissDate", defaultStartDate);
map.put("disDate", defaultEndDate);
} catch (ParseException e) {
e.printStackTrace();
}
return map;
}
public static Map<String, String> getSmCollectionTimeEcg(String admissDate, String disDate) {
Date dBefore;
Calendar calendar = Calendar.getInstance(); //得到日历
Map<String, String> map = new HashMap<>();
try {
calendar.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(admissDate));//把当前时间赋给日历
calendar.add(Calendar.HOUR, -6); //设置为前6小时
dBefore = calendar.getTime(); //得到前一天的时间
Calendar calendar1 = Calendar.getInstance(); //得到日历
calendar1.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(disDate));//把当前时间赋给日历
calendar1.add(Calendar.HOUR, 30); //设置为后30小时
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置时间格式
String defaultStartDate = sdf.format(dBefore); //格式化前6小时
String defaultEndDate = sdf.format(calendar1.getTime()); //格式化前6小时
map.put("admissDate", defaultStartDate);
map.put("disDate", defaultEndDate);
} catch (ParseException e) {
e.printStackTrace();
}
return map;
}
/**
* 通过住院号获取报告单号集合 pacs
*
* @param inpatientNo 住院号
* @return
*/
private List<String[]> getExamNoByInpNo(String inpatientNo, String admissDate, String disDate) throws Exception {
List<String[]> exams = new ArrayList<>();
// Map<String, String> Time = getSmCollectionTime(admissDate, disDate);
XmlUtils reqXmlUtils = new XmlUtils(FileUtils.getXmlPath());
Element reqElement = reqXmlUtils.getMsgElement();
reqElement.element("INHOSP_INDEX_NO").setText(inpatientNo);
reqElement.element("BEGIN_DATE").setText(String.valueOf(admissDate));
reqElement.element("END_DATE").setText(String.valueOf(disDate));
logger.info("-------根据患者主索引号查询多个报告单号,地址:" + wsUrl + ",方法:" + wsLocalMethod + "---------");
String xml = reqXmlUtils.getDocument().asXML();
logger.info("---------------------------");
logger.info(xml);
logger.info("----------------------------");
String resXml = invokeWs(xml);
logger.info("---------返回值-------------");
logger.info(resXml);
logger.info("-----------------------------");
//解析XML
XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(resXml.getBytes("UTF-8")));
String success = xmlUtils.isSuccess();
if (!success.equals("ok")) {
logger.info("发送错误:" + success);
throw new RuntimeException(success);
}
List<String> dis = (List<String>) FileUtils.getJsonByName("bgtsRespon");
//数据所在节点
Element element = xmlUtils.getElement(dis);
List<Element> examInfos = element.elements("ExamInfo");
Element examNo;
String[] key;
for (Element examInfo : examInfos) {
key = new String[2];
examNo = examInfo.element(String.valueOf(FileUtils.getJsonByName("examNo")));
List<Element> examItemInfo = examInfo.elements("ExamItemInfo");
if (examItemInfo.size()>1){
for (Element element1 : examItemInfo) {
if (examNo != null) {
key[0] = examNo.getText();
}
key[1] = element1.element(String.valueOf(FileUtils.getJsonByName("examItemName"))).getText();
}
}else {
for (Element element1 : examItemInfo) {
if (examNo != null) {
key[0] = examNo.getText();
}
key[1] = element1.element(String.valueOf(FileUtils.getJsonByName("examItemName"))).getText();
}
}
exams.add(key);
}
return exams;
}
/**
* 通过empId获取报告单号集合 动态心电
*
* @param jzh
* @return
*/
private List<String[]> getExamNoEcg(String jzh, String admissDate, String disDate) throws Exception {
List<String[]> exams = new ArrayList<>();
XmlUtils reqXmlUtils = new XmlUtils(FileUtils.getXmlPath());
Element reqElement = reqXmlUtils.getMsgElement();
reqElement.element("INHOSP_NO").setText(jzh);
reqElement.element("BEGIN_DATE").setText(String.valueOf(admissDate));
reqElement.element("END_DATE").setText(String.valueOf(disDate));
logger.info("-------根据患者主索引号查询多个报告单号,地址:" + wsUrl + ",方法:" + wsLocalMethod + "---------");
String xml = reqXmlUtils.getDocument().asXML();
logger.info("---------------------------");
logger.info(xml);
logger.info("----------------------------");
String resXml = invokeWs(xml);
logger.info("---------返回值-------------");
logger.info(resXml);
logger.info("-----------------------------");
//解析XML
XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(resXml.getBytes("UTF-8")));
String success = xmlUtils.isSuccess();
if (!success.equals("ok")) {
logger.info("发送错误:" + success);
throw new RuntimeException(success);
}
List<String> dis = (List<String>) FileUtils.getJsonByName("bgtsRespon");
//数据所在节点
Element element = xmlUtils.getElement(dis);
List<Element> examInfos = element.elements("ExamInfo");
Element examNo;
String[] key;
for (Element examInfo : examInfos) {
key = new String[2];
examNo = examInfo.element(String.valueOf(FileUtils.getJsonByName("examNo")));
if (examNo != null) {
key[0] = examNo.getText();
}
Element examItemInfo = examInfo.element("ExamItemInfo");
if (examItemInfo != null) {
key[1] = examItemInfo.element(String.valueOf(FileUtils.getJsonByName("examItemName"))).getText();
}
exams.add(key);
}
return exams;
}
private static JaxWsDynamicClientFactory wsDynamicClientFactory = JaxWsDynamicClientFactory.newInstance();
private static volatile Client client = null;
private Client getClient() {
if (client == null) {
synchronized (this.getClass()) {
client = wsDynamicClientFactory.createClient(wsUrl);
}
}
return client;
}
/**
* 调用web service
*
* @param xml
* @return
* @throws Exception
*/
public String invokeWs(String xml) throws Exception {
logger.info("-----\n客户端调用服务端" + wsUrl + "方法:" + wsLocalMethod + "\n------------");
// JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance();
// Client client = dcf.createClient(wsUrl);
// LocalBusFactory.printTHREAD_BUSSES();
// JaxWsDynamicClientFactory wsDynamicClientFactory = JaxWsDynamicClientFactory.newInstance();
// logger.info("JaxWsDynamicClientFactory object created!");
// Client client = wsDynamicClientFactory.createClient(wsUrl);
Client client = this.getClient();
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(10000);
policy.setReceiveTimeout(10000);
conduit.setClient(policy);
logger.info("Client started!");
Object[] objects = client.invoke(wsLocalMethod, xml);
logger.info("Client invoke after!");
String str = objects[0].toString();
// client.destroy();
logger.info("----------结果---------\n{}", str);
// logger.info(str);
return str;
}
/**
* 调用web service
*
* @param xml
* @return
* @throws Exception
*/
public String invokeWsNj(String xml) throws Exception {
logger.info("-----\n客户端调用服务端" + wsUrl + "方法:" + wsLocalMethodNj + "\n------------");
// JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance();
// Client client = dcf.createClient(wsUrl);
// LocalBusFactory.printTHREAD_BUSSES();
// JaxWsDynamicClientFactory wsDynamicClientFactory = JaxWsDynamicClientFactory.newInstance();
// logger.info("JaxWsDynamicClientFactory object created!");
// Client client = wsDynamicClientFactory.createClient(wsUrl);
Client client = this.getClient();
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(10000);
policy.setReceiveTimeout(10000);
conduit.setClient(policy);
logger.info("Client started!");
Object[] objects = client.invoke(wsLocalMethodNj, xml);
logger.info("Client invoke after!");
String str = objects[0].toString();
// client.destroy();
logger.info("----------结果---------\n{}", str);
// logger.info(str);
return str;
}
}