|
|
|
@ -6,6 +6,7 @@ import com.docus.server.collect.dto.PatientScanConditionDTO;
|
|
|
|
|
import com.docus.server.collect.dto.TBasicQrDto;
|
|
|
|
|
import com.docus.server.collect.entity.PatientScan;
|
|
|
|
|
import com.docus.server.collect.entity.TBasic;
|
|
|
|
|
import com.docus.server.collect.entity.TSeal;
|
|
|
|
|
import com.docus.server.collect.infrastructure.dao.CollectTaskDao;
|
|
|
|
|
import com.docus.server.collect.infrastructure.mapper.PatientBasicMapper;
|
|
|
|
|
import com.docus.server.collect.service.dto.PatScanSyncResult;
|
|
|
|
@ -15,7 +16,9 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 患者扫描数据采集者
|
|
|
|
@ -39,10 +42,10 @@ public class PatientScanSynchronizer {
|
|
|
|
|
private String patmGSys;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据病案号和住院次数进行扫描文件同步
|
|
|
|
|
* 根据条件进行扫描文件同步
|
|
|
|
|
*
|
|
|
|
|
* @param source 来源
|
|
|
|
|
* @param patientScanConditionDTOList 病案号和住院次数集合
|
|
|
|
|
* @param patientScanConditionDTOList 条件
|
|
|
|
|
* @return 同步结果
|
|
|
|
|
*/
|
|
|
|
|
public PatScanSyncResult sync(String source, List<PatientScanConditionDTO> patientScanConditionDTOList) {
|
|
|
|
@ -53,7 +56,7 @@ public class PatientScanSynchronizer {
|
|
|
|
|
for (PatientScanConditionDTO condition : patientScanConditionDTOList) {
|
|
|
|
|
List<TBasic> basicList = getBasicInfo(condition);
|
|
|
|
|
if (Func.isEmpty(basicList)) {
|
|
|
|
|
log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据没有数据,请检查!", source, condition.getInpatientNo(),condition.getDisDate(),condition.getName());
|
|
|
|
|
log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据没有数据,请检查!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName());
|
|
|
|
|
syncMsgStringBuilder.append(source)
|
|
|
|
|
.append(",住院号:").append(condition.getInpatientNo())
|
|
|
|
|
.append(",出院日期:").append(condition.getDisDate())
|
|
|
|
@ -62,7 +65,7 @@ public class PatientScanSynchronizer {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (basicList.size() > 1) {
|
|
|
|
|
log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据有多条数据,请检查!", source,condition.getInpatientNo(), condition.getDisDate(),condition.getName());
|
|
|
|
|
log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据有多条数据,请检查!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName());
|
|
|
|
|
syncMsgStringBuilder.append(source)
|
|
|
|
|
.append(",住院号:").append(condition.getInpatientNo())
|
|
|
|
|
.append(",出院日期:").append(condition.getDisDate())
|
|
|
|
@ -71,9 +74,9 @@ public class PatientScanSynchronizer {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
List<PatientScan> patientScanList = patientScanService.getScanDataByConditions(condition);
|
|
|
|
|
log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条!", source, condition.getInpatientNo(), condition.getDisDate(),condition.getName(), patientScanList.size());
|
|
|
|
|
log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName(), patientScanList.size());
|
|
|
|
|
saveCollectTaskAndReport(basicList.get(0), patientScanList);
|
|
|
|
|
log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getDisDate(),condition.getName(), patientScanList.size());
|
|
|
|
|
log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName(), patientScanList.size());
|
|
|
|
|
fileCount += patientScanList.size();
|
|
|
|
|
successPatientCount++;
|
|
|
|
|
}
|
|
|
|
@ -85,6 +88,75 @@ public class PatientScanSynchronizer {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 封存病案-根据条件进行扫描文件同步
|
|
|
|
|
*
|
|
|
|
|
* @param source 来源/用途
|
|
|
|
|
* @param sealId 封存id
|
|
|
|
|
* @return 同步结果
|
|
|
|
|
*/
|
|
|
|
|
public PatScanSyncResult syncSeal(String source, String sealId) {
|
|
|
|
|
PatScanSyncResult result = new PatScanSyncResult();
|
|
|
|
|
result.setPatientTotalCount(1);
|
|
|
|
|
result.setSuccessPatientCount(0);
|
|
|
|
|
result.setFileCount(0);
|
|
|
|
|
|
|
|
|
|
TSeal seal = patientBasicMapper.getBySealId(sealId);
|
|
|
|
|
if (Objects.isNull(seal)) {
|
|
|
|
|
String resultMsg = source + ",封存id:" + sealId + " 没有找到封存病案信息,请检查!";
|
|
|
|
|
result.setMsg(resultMsg);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
String jzh = seal.getJzh();
|
|
|
|
|
TBasicQrDto basicQrDto = new TBasicQrDto();
|
|
|
|
|
basicQrDto.setJzh(jzh);
|
|
|
|
|
List<TBasic> tBasicList = patientBasicMapper.getBasicInfo(basicQrDto);
|
|
|
|
|
if (Func.isEmpty(tBasicList)) {
|
|
|
|
|
String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 没有找到基础病案信息,无法获取出院时间,请检查!";
|
|
|
|
|
result.setMsg(resultMsg);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tBasicList.size() > 1) {
|
|
|
|
|
String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 找到多条基础病案信息,无法获取出院时间,请检查!";
|
|
|
|
|
result.setMsg(resultMsg);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
TBasic tBasic = tBasicList.get(0);
|
|
|
|
|
String basicDisDate = tBasic.getDisDate();
|
|
|
|
|
if (Func.isBlank(basicDisDate)) {
|
|
|
|
|
String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 获取基础病案信息,无法获取出院时间,请检查!";
|
|
|
|
|
result.setMsg(resultMsg);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String disDate;
|
|
|
|
|
String dateTimePattern = "yyyy-MM-dd HH:mm:ss";
|
|
|
|
|
try {
|
|
|
|
|
Date parse = Func.parseDate(basicDisDate, dateTimePattern);
|
|
|
|
|
disDate = Func.formatDate(parse);
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 出院时间:" + basicDisDate + "解析失败,请检查!";
|
|
|
|
|
result.setMsg(resultMsg);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PatientScanConditionDTO condition = new PatientScanConditionDTO();
|
|
|
|
|
condition.setDisDate(disDate);
|
|
|
|
|
condition.setDisDateTime(disDate + " 00:00:00");
|
|
|
|
|
condition.setName(seal.getName());
|
|
|
|
|
condition.setInpatientNo(seal.getInpatientNo());
|
|
|
|
|
List<PatientScan> patientScanList = patientScanService.getScanDataByConditions(condition);
|
|
|
|
|
|
|
|
|
|
log.info("{},封存id:{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条!", source, sealId, condition.getInpatientNo(), condition.getDisDateTime(), condition.getName(), patientScanList.size());
|
|
|
|
|
saveCollectTaskAndSealReport(seal, patientScanList);
|
|
|
|
|
log.info("{},封存id:{},住院号:{},出院日期:{},患者姓名:{} , 采集视图数据:{} 条,执行成功!", source, sealId, condition.getInpatientNo(), condition.getDisDateTime(), condition.getName(), patientScanList.size());
|
|
|
|
|
result.setFileCount(patientScanList.size());
|
|
|
|
|
result.setSuccessPatientCount(1);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveCollectTaskAndReport(TBasic tBasic, List<PatientScan> patientScanList) {
|
|
|
|
|
for (PatientScan patientScan : patientScanList) {
|
|
|
|
|
// 转换后的对象缺失的补充
|
|
|
|
@ -96,14 +168,25 @@ public class PatientScanSynchronizer {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveCollectTaskAndSealReport(TSeal tSeal, List<PatientScan> patientScanList) {
|
|
|
|
|
for (PatientScan patientScan : patientScanList) {
|
|
|
|
|
// 转换后的对象缺失的补充
|
|
|
|
|
ReportFileInfoDTO reportFileInfoDTO = fileReportConverter.convertReportFileInfoDTO(tSeal, patientScan);
|
|
|
|
|
reportFileInfoDTO.setSysFlag(patmGSys);
|
|
|
|
|
Long taskId = collectTaskDao.saveTask(reportFileInfoDTO);
|
|
|
|
|
reportFileInfoDTO.setTaskId(taskId);
|
|
|
|
|
fileReportService.saveDownloadTaskAndSealReport(reportFileInfoDTO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<TBasic> getBasicInfo(PatientScanConditionDTO patientScanConditionDTO) {
|
|
|
|
|
String disDate = patientScanConditionDTO.getDisDate();
|
|
|
|
|
|
|
|
|
|
TBasicQrDto basicQrDto = new TBasicQrDto();
|
|
|
|
|
basicQrDto.setInpatientNo(patientScanConditionDTO.getInpatientNo());
|
|
|
|
|
basicQrDto.setName(patientScanConditionDTO.getName());
|
|
|
|
|
basicQrDto.setDisDateStart(disDate+" 00:00:00");
|
|
|
|
|
basicQrDto.setDisDateEnd(disDate+" 23:59:59");
|
|
|
|
|
basicQrDto.setDisDateStart(disDate + " 00:00:00");
|
|
|
|
|
basicQrDto.setDisDateEnd(disDate + " 23:59:59");
|
|
|
|
|
basicQrDto.setIgnorePh(1);
|
|
|
|
|
return patientBasicMapper.getBasicInfo(basicQrDto);
|
|
|
|
|
}
|
|
|
|
|