|
|
|
|
@ -25,11 +25,13 @@ import java.io.IOException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
|
|
import java.util.concurrent.Executors;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
|
@ -100,88 +102,93 @@ public class WebServiceImpl implements IWebService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void syncInspection(Tbasic tbasic, String startDate, String endDate) {
|
|
|
|
|
log.info("正在同步" + tbasic.getInpatientNo() + " " + tbasic.getAdmissTimes());
|
|
|
|
|
List<ScanAssort> oldScanAssortList = scanAssortMapper.getListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", tbasic.getPatientId());
|
|
|
|
|
log.info("旧数据" + oldScanAssortList.size());
|
|
|
|
|
if (oldScanAssortList.size() > 0) {
|
|
|
|
|
log.info("跳过同步" + tbasic.getInpatientNo() + " " + tbasic.getAdmissTimes());
|
|
|
|
|
return;
|
|
|
|
|
Date admissDate = tbasic.getAdmissDate();
|
|
|
|
|
// 如果报告的开始时间大于入院时间,则开始时间取入院时间
|
|
|
|
|
if (admissDate != null) {
|
|
|
|
|
try {
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
Date startDateParse = sdf.parse(startDate);
|
|
|
|
|
if (startDateParse.getTime() > admissDate.getTime()) {
|
|
|
|
|
startDate = sdf.format(admissDate);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception ignored) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String pNo = tbasic.getInpatientNo();
|
|
|
|
|
String inpatientNo = tbasic.getInpatientNo();
|
|
|
|
|
String times = tbasic.getAdmissTimes().toString();
|
|
|
|
|
// String StartDate = sdf.format(tbasic.getAdmissDate());
|
|
|
|
|
// String EndDate = sdf.format(tbasic.getDisDate());
|
|
|
|
|
|
|
|
|
|
String patientId = tbasic.getPatientId();
|
|
|
|
|
|
|
|
|
|
log.info("同步检验报告,病案号:{},住院次数:{}", inpatientNo, times);
|
|
|
|
|
List<ScanAssort> oldScanAssortList = scanAssortMapper.getListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", patientId);
|
|
|
|
|
int size = oldScanAssortList.size();
|
|
|
|
|
if (size > 0) {
|
|
|
|
|
log.info("同步检验报告跳过同步,病案号:{},住院次数:{} 已经存在 {} 份检验报告", inpatientNo, times, size);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
basicMapper.addLabSync(patientId,0);
|
|
|
|
|
//获取所有的报告列表
|
|
|
|
|
PatientListResult patientListResult = getCommonResult(pNo, times, startDate, endDate);
|
|
|
|
|
|
|
|
|
|
// log.info("返回结果"+patientListResult);
|
|
|
|
|
PatientListResult patientListResult = getCommonResult(inpatientNo, times, startDate, endDate);
|
|
|
|
|
if (patientListResult == null) {
|
|
|
|
|
log.error(pNo + " " + times + "调用失败");
|
|
|
|
|
log.warn("同步检验报告,病案号:{},住院次数:{},开始时间:{},结束时间:{} 未查到报告!", inpatientNo, times, startDate, endDate);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 匹配患者的报告列表
|
|
|
|
|
List<PatientListResult.Result.ReportInfo> reportInfoList = patientListResult.getResult().getPidReportMain();
|
|
|
|
|
reportInfoList = reportInfoList.stream()
|
|
|
|
|
.filter(reportInfo -> reportInfo.getPidAddmissTimes().equals(times) && reportInfo.getPidInNo().equalsIgnoreCase(inpatientNo))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
if (reportInfoList.isEmpty()) {
|
|
|
|
|
log.warn("同步检验报告,病案号:{},住院次数:{},开始时间:{},结束时间:{} 未查到报告!", inpatientNo, times, startDate, endDate);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<ScanAssort> scanAssortList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < patientListResult.getResult().getPidReportMain().size(); i++) {
|
|
|
|
|
for (int sortIndex = 0; sortIndex < reportInfoList.size(); sortIndex++) {
|
|
|
|
|
//根据旧数据判断是否需要做同步
|
|
|
|
|
PatientListResult.Result.ReportInfo item = patientListResult.getResult().getPidReportMain().get(i);
|
|
|
|
|
// ScanAssort oldAssort = oldScanAssortList.stream()
|
|
|
|
|
// .filter(f -> f.getFileTitle().equals(item.getPidComName())).findAny().orElse(null);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PatientListResult.Result.ReportInfo item = reportInfoList.get(sortIndex);
|
|
|
|
|
String root = "F:\\jianyan" + File.separator
|
|
|
|
|
+ tbasic.getInpatientNo() + File.separator
|
|
|
|
|
+ tbasic.getAdmissTimes();
|
|
|
|
|
|
|
|
|
|
// log.info("开始转换"+root);
|
|
|
|
|
//时间段内如果查询到住院次数相同的数据 则数据入库
|
|
|
|
|
if (item.getPidAddmissTimes().equals(times) && item.getPidInNo().equalsIgnoreCase(pNo)) {
|
|
|
|
|
log.info("正在同步" + item.getPidComName() + i);
|
|
|
|
|
// log.info("进入条件");
|
|
|
|
|
+ inpatientNo + File.separator
|
|
|
|
|
+ times;
|
|
|
|
|
|
|
|
|
|
log.info("同步检验报告,病案号:{},住院次数:{},同步:{} - {}", inpatientNo, times, item.getRepId(), item.getPidComName());
|
|
|
|
|
List<ScanAssort> addScanList = new ArrayList<>();
|
|
|
|
|
String base64Result;
|
|
|
|
|
try {
|
|
|
|
|
PatientReportResult patientReportResult = this.getReportResult(item.getRepId());
|
|
|
|
|
base64Result = patientReportResult.getResult().getPatient().getPatientReport();
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
log.error("同步检验报告,病案号:{},住院次数:{},检验报告id:{} 获取报告出错了!", inpatientNo, times, item.getRepId());
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
log.info("同步检验报告,病案号:{},住院次数:{},开始转换:{} - {}", inpatientNo, times, item.getRepId(), item.getPidComName());
|
|
|
|
|
addScanList = PDFFileUtils.base64StringToPDF(base64Result, root, item.getRepId(), item.getPidComName(), sortIndex);
|
|
|
|
|
log.info("同步检验报告,病案号:{},住院次数:{},{} - {} 转换结束", inpatientNo, times, item.getRepId(), item.getPidComName());
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
String msg = "同步检验报告,病案号:" + inpatientNo + ",住院次数:" + times + "," + item.getRepId() + " - " + item.getPidComName() + " 转换出错了!";
|
|
|
|
|
log.error(msg, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<ScanAssort> addScanList = new ArrayList<>();
|
|
|
|
|
String base64Result;
|
|
|
|
|
try {
|
|
|
|
|
PatientReportResult patientReportResult = this.getReportResult(item.getRepId());
|
|
|
|
|
base64Result = patientReportResult.getResult().getPatient().getPatientReport();
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
log.error("检验报告id:{} 获取报告出错了!", item.getRepId());
|
|
|
|
|
continue;
|
|
|
|
|
for (ScanAssort scanAssort : addScanList) {
|
|
|
|
|
ScanAssort oldAssort = oldScanAssortList.stream()
|
|
|
|
|
.filter(f -> f.getScanPage().equals(scanAssort.getScanPage()))
|
|
|
|
|
.findAny().orElse(null);
|
|
|
|
|
if (oldAssort != null) {
|
|
|
|
|
scanAssort.setId(oldAssort.getId());
|
|
|
|
|
} else {
|
|
|
|
|
scanAssort.setId(snowflakeIdWorker.nextId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
log.info("开始转换");
|
|
|
|
|
addScanList = PDFFileUtils.base64StringToPDF(base64Result, root, item.getRepId(), item.getPidComName(), i);
|
|
|
|
|
log.info("转换结束");
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
log.error("检验pdf转化出错" + e.getMessage(), e);
|
|
|
|
|
}
|
|
|
|
|
addScanList.forEach(scanAssort -> {
|
|
|
|
|
ScanAssort oldAssort = oldScanAssortList.stream()
|
|
|
|
|
.filter(f -> f.getScanPage().equals(scanAssort.getScanPage())).findAny().orElse(null);
|
|
|
|
|
if (oldAssort != null) {
|
|
|
|
|
scanAssort.setId(oldAssort.getId());
|
|
|
|
|
} else {
|
|
|
|
|
scanAssort.setId(snowflakeIdWorker.nextId());
|
|
|
|
|
}
|
|
|
|
|
scanAssort.setPatientId(patientId);
|
|
|
|
|
scanAssortList.add(scanAssort);
|
|
|
|
|
log.info("结果" + scanAssort);
|
|
|
|
|
});
|
|
|
|
|
scanAssort.setPatientId(patientId);
|
|
|
|
|
scanAssortList.add(scanAssort);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//数据写入到3.0
|
|
|
|
|
if (ObjectUtil.isNotEmpty(scanAssortList)) {
|
|
|
|
|
log.info("开始写入" + scanAssortList.size());
|
|
|
|
|
log.info("同步检验报告,病案号:{},住院次数:{},同步 {} 份文件。", inpatientNo, times,scanAssortList.size() );
|
|
|
|
|
scanAssortMapper.insertOrUpdateBatch(scanAssortList);
|
|
|
|
|
log.info("写入结束" + scanAssortList.size());
|
|
|
|
|
basicMapper.addLabSync(patientId,1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|