添加根据出院日期的接口同步

collector-patient-scan
wyb 2 years ago
parent 4f33626843
commit e09cbf2d75

@ -4,13 +4,12 @@ import com.docus.core.util.Func;
import com.docus.infrastructure.web.api.CommonResult;
import com.docus.server.collect.dto.PatientScanConditionDTO;
import com.docus.server.collect.entity.PatientScan;
import com.docus.server.collect.service.PatientScanSynchronizer;
import com.docus.server.collect.service.PatientScanService;
import com.docus.server.collect.service.dto.PatScanSyncResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@ -26,14 +25,27 @@ import java.util.List;
public class PatientScanController {
@Resource
private PatientScanService patientScanService;
@Resource
private PatientScanSynchronizer synchronizer;
@PostMapping("/get/byInpatientNoAndTimes")
@ApiOperation("根据住院号和住院次数,进行患者电子病历扫描数据采集,返回采集数据!")
@ApiOperation("根据住院号和住院次数,进行患者电子病历扫描数据查询,返回需要同步的数据!")
public CommonResult<List<PatientScan>> collectByInpatientNoAndTimes(@RequestBody List<PatientScanConditionDTO> patientScanConditionDTOList) {
if (Func.isEmpty(patientScanConditionDTOList)) {
return CommonResult.failed("请输入正确的请求参数!");
}
return CommonResult.success(patientScanService.getScanDataByInpatientNoAndTimes(patientScanConditionDTOList));
}
@PostMapping("/collect/collectByDisDate")
@ApiOperation("根据出院日期区间同步扫描患者数据 yyyy-MM-dd")
public CommonResult<PatScanSyncResult> collectByInpatientNoAndTimes(@RequestParam String disDateStart, @RequestParam String disDateEnd) {
List<PatientScanConditionDTO> patientScanConditionDTOList = patientScanService.getInpatientNoAndTimesByDisDate(disDateStart + " 00:00:00", disDateEnd + " 23:59:59");
if (Func.isEmpty(patientScanConditionDTOList)) {
return CommonResult.failed(disDateStart + " —— " + disDateEnd + " 没有可采集的视图数据!");
}
return CommonResult.success(synchronizer.sync("根据出院日期区间同步扫描患者数据接口",patientScanConditionDTOList));
}
}

@ -91,7 +91,7 @@ public class DownloadTask implements Serializable {
private String source;
@TableField("file_serial_num")
@ApiModelProperty(value = "来源或者采集器id")
@ApiModelProperty(value = "文件唯一流水号")
private String fileSerialNum;
@TableField("latest_report_user_name")

@ -26,6 +26,8 @@ public class DownloadTaskDaoImpl extends BaseDaoImpl<DownloadTaskMapper, Downloa
wrapper.eq(Func.isNotBlank(downloadTask.getJzh()), DownloadTask::getJzh, downloadTask.getJzh());
wrapper.eq(Func.isNotBlank(downloadTask.getInpatientNo()), DownloadTask::getInpatientNo, downloadTask.getInpatientNo());
wrapper.eq(Func.isNotEmpty(downloadTask.getAdmissions()), DownloadTask::getAdmissions, downloadTask.getAdmissions());
wrapper.eq(DownloadTask::getSource,downloadTask.getSource());
wrapper.eq(DownloadTask::getFileSerialNum,downloadTask.getFileSerialNum());
List<DownloadTask> downloadTasks = baseMapper.selectList(wrapper);
if (Func.isNotEmpty(downloadTasks) && downloadTasks.size() == 1) {
return downloadTasks.get(0).getId();

@ -2,27 +2,19 @@ package com.docus.server.collect.job;
import com.docus.core.util.Func;
import com.docus.infrastructure.core.utils.TableJsonRead;
import com.docus.server.collect.converter.FileReportConverter;
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.infrastructure.dao.CollectTaskDao;
import com.docus.server.collect.infrastructure.mapper.PatientBasicMapper;
import com.docus.server.collect.service.FileReportService;
import com.docus.server.collect.service.PatientScanSynchronizer;
import com.docus.server.collect.service.PatientScanService;
import com.docus.server.collect.service.dto.ReportFileInfoDTO;
import com.docus.server.collect.service.dto.PatScanSyncResult;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
@ -35,17 +27,10 @@ import java.util.Optional;
public class PatScanFileSyncJob {
@Resource
private PatientScanService patientScanService;
@Resource
private PatientBasicMapper patientBasicMapper;
@Resource
private FileReportService fileReportService;
@Resource
private CollectTaskDao collectTaskDao;
@Resource
private FileReportConverter fileReportConverter;
private PatientScanSynchronizer patientScanSynchronizer;
@Value("${docus.sync.patsmGSys}")
private String patmGSys;
@XxlJob("PatScanFileSyncByScanDateJob")
public void patScanFileSyncByScanDateJob() {
@ -94,42 +79,16 @@ public class PatScanFileSyncJob {
String endTime = lastExecuteDate + " 23:59:59";
List<PatientScanConditionDTO> inpatientNoAndTimesByScanDate = patientScanService.getInpatientNoAndTimesByScanDate(startTime, endTime);
inpatientNoAndTimesByScanDate = Optional.ofNullable(inpatientNoAndTimesByScanDate).orElse(new ArrayList<>());
for (PatientScanConditionDTO patientScanConditionDTO : inpatientNoAndTimesByScanDate) {
List<TBasic> basicList = getBasicInfo(patientScanConditionDTO);
if (Objects.isNull(basicList) || basicList.size() != 1) {
log.warn("{},住院号:{},住院次数:{} 查询基础数据没有数据或者有多条数据,请检查!", "电子病历扫描视图同步,根据扫描时间同步Job", patientScanConditionDTO.getInpatientNo(), patientScanConditionDTO.getAdmissTimes());
continue;
}
List<PatientScan> patientScanList = patientScanService.getScanDataByInpatientNoAndTimes(patientScanConditionDTO);
log.warn("{},住院号:{},住院次数:{} 采集视图数据:{} 条!,数据为:{}", "电子病历扫描视图同步,根据扫描时间同步Job", patientScanConditionDTO.getInpatientNo(), patientScanConditionDTO.getAdmissTimes(), patientScanList.size(), patientScanList);
saveCollectTaskAndReport(basicList.get(0), patientScanList);
log.warn("{},住院号:{},住院次数:{} 采集视图数据:{} 条,执行成功!", "电子病历扫描视图同步,根据扫描时间同步Job", patientScanConditionDTO.getInpatientNo(), patientScanConditionDTO.getAdmissTimes(), patientScanList);
}
PatScanSyncResult patScanSyncResult = patientScanSynchronizer.sync("电子病历扫描视图同步,根据扫描时间同步Job", inpatientNoAndTimesByScanDate);
log.info("电子病历扫描视图同步,根据扫描时间同步Job,{} —— {},同步结果为:{}",startTime,endTime,Func.toJson(patScanSyncResult));
lastExecuteDate = lastExecuteDate.plusDays(1);
config.setLastExecuteDate(lastExecuteDate.toString());
config.refresh();
} while (!lastExecuteDate.isAfter(jobStartDate));
config.setLastExecuteDate(jobStartDate.toString());
config.refresh();
}
private void saveCollectTaskAndReport(TBasic tBasic, List<PatientScan> patientScanList) {
for (PatientScan patientScan : patientScanList) {
// 转换后的对象缺失的补充
ReportFileInfoDTO reportFileInfoDTO = fileReportConverter.convertReportFileInfoDTO(tBasic, patientScan);
reportFileInfoDTO.setSysFlag(patmGSys);
Long taskId = collectTaskDao.saveTask(reportFileInfoDTO);
reportFileInfoDTO.setTaskId(taskId);
fileReportService.saveDownloadTaskAndReport(reportFileInfoDTO);
}
}
private List<TBasic> getBasicInfo(PatientScanConditionDTO patientScanConditionDTO) {
TBasicQrDto basicQrDto = new TBasicQrDto();
basicQrDto.setInpatientNo(patientScanConditionDTO.getInpatientNo());
basicQrDto.setAdmissTimes(Integer.parseInt(patientScanConditionDTO.getAdmissTimes()));
basicQrDto.setIgnorePh(1);
return patientBasicMapper.getBasicInfo(basicQrDto);
}
public static void main(String[] args) {
QueryConfig config = QueryConfig.getQueryConfig();

@ -0,0 +1,93 @@
package com.docus.server.collect.service;
import com.docus.server.collect.converter.FileReportConverter;
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.infrastructure.dao.CollectTaskDao;
import com.docus.server.collect.infrastructure.mapper.PatientBasicMapper;
import com.docus.server.collect.service.dto.PatScanSyncResult;
import com.docus.server.collect.service.dto.ReportFileInfoDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
*
*
* @author wyb
*/
@Component
@Slf4j
public class PatientScanSynchronizer {
@Resource
private PatientBasicMapper patientBasicMapper;
@Resource
private FileReportService fileReportService;
@Resource
private CollectTaskDao collectTaskDao;
@Resource
private FileReportConverter fileReportConverter;
@Resource
private PatientScanService patientScanService;
@Value("${docus.sync.patsmGSys}")
private String patmGSys;
/**
*
*
* @param source
* @param patientScanConditionDTOList
* @return
*/
public PatScanSyncResult sync(String source, List<PatientScanConditionDTO> patientScanConditionDTOList) {
StringBuilder syncMsgStringBuilder = new StringBuilder();
int patientTotalCount = patientScanConditionDTOList.size();
int successPatientCount = 0;
int fileCount = 0;
for (PatientScanConditionDTO condition : patientScanConditionDTOList) {
List<TBasic> basicList = getBasicInfo(condition);
if (Objects.isNull(basicList) || basicList.size() != 1) {
log.warn("{},住院号:{},住院次数:{} 查询基础数据没有数据或者有多条数据,请检查!", source, condition.getInpatientNo(), condition.getAdmissTimes());
syncMsgStringBuilder.append(source).append(",住院号:").append(condition.getInpatientNo()).append("住院次数:").append(condition.getAdmissTimes()).append(" 查询基础数据没有数据或者有多条数据,请检查!");
continue;
}
List<PatientScan> patientScanList = patientScanService.getScanDataByInpatientNoAndTimes(condition);
log.info("{},住院号:{},住院次数:{} 采集视图数据:{} 条!,数据为:{}", source, condition.getInpatientNo(), condition.getAdmissTimes(), patientScanList.size(), patientScanList);
saveCollectTaskAndReport(basicList.get(0), patientScanList);
log.info("{},住院号:{},住院次数:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getAdmissTimes(), patientScanList);
fileCount += patientScanList.size();
successPatientCount++;
}
PatScanSyncResult result = new PatScanSyncResult();
result.setPatientTotalCount(patientTotalCount);
result.setSuccessPatientCount(successPatientCount);
result.setFileCount(fileCount);
result.setMsg(syncMsgStringBuilder.toString());
return result;
}
private void saveCollectTaskAndReport(TBasic tBasic, List<PatientScan> patientScanList) {
for (PatientScan patientScan : patientScanList) {
// 转换后的对象缺失的补充
ReportFileInfoDTO reportFileInfoDTO = fileReportConverter.convertReportFileInfoDTO(tBasic, patientScan);
reportFileInfoDTO.setSysFlag(patmGSys);
Long taskId = collectTaskDao.saveTask(reportFileInfoDTO);
reportFileInfoDTO.setTaskId(taskId);
fileReportService.saveDownloadTaskAndReport(reportFileInfoDTO);
}
}
private List<TBasic> getBasicInfo(PatientScanConditionDTO patientScanConditionDTO) {
TBasicQrDto basicQrDto = new TBasicQrDto();
basicQrDto.setInpatientNo(patientScanConditionDTO.getInpatientNo());
basicQrDto.setAdmissTimes(Integer.parseInt(patientScanConditionDTO.getAdmissTimes()));
basicQrDto.setIgnorePh(1);
return patientBasicMapper.getBasicInfo(basicQrDto);
}
}

@ -0,0 +1,14 @@
package com.docus.server.collect.service.dto;
import lombok.Data;
/**
* @author wyb
*/
@Data
public class PatScanSyncResult {
private int patientTotalCount;
private int successPatientCount;
private int fileCount;
private String msg;
}

@ -46,7 +46,7 @@ public class PatientScanServiceImpl implements PatientScanService {
@Override
public List<PatientScanConditionDTO> getInpatientNoAndTimesByDisDate(String startTime, String endTime) {
return patientScanMapper.getScanPatientConditionByScanDate(startTime,endTime);
return patientScanMapper.getScanPatientConditionByDisDate(startTime,endTime);
}
/**

Loading…
Cancel
Save