From e09cbf2d75960d581e3d0798823a50d88e334082 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Wed, 15 Nov 2023 14:34:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=A0=B9=E6=8D=AE=E5=87=BA?= =?UTF-8?q?=E9=99=A2=E6=97=A5=E6=9C=9F=E7=9A=84=E6=8E=A5=E5=8F=A3=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PatientScanController.java | 22 ++++- .../server/collect/entity/DownloadTask.java | 2 +- .../dao/impl/DownloadTaskDaoImpl.java | 2 + .../collect/job/PatScanFileSyncJob.java | 57 ++---------- .../service/PatientScanSynchronizer.java | 93 +++++++++++++++++++ .../service/dto/PatScanSyncResult.java | 14 +++ .../service/impl/PatientScanServiceImpl.java | 2 +- 7 files changed, 136 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java create mode 100644 src/main/java/com/docus/server/collect/service/dto/PatScanSyncResult.java diff --git a/src/main/java/com/docus/server/collect/controller/PatientScanController.java b/src/main/java/com/docus/server/collect/controller/PatientScanController.java index de11c1b..5bd7c66 100644 --- a/src/main/java/com/docus/server/collect/controller/PatientScanController.java +++ b/src/main/java/com/docus/server/collect/controller/PatientScanController.java @@ -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> collectByInpatientNoAndTimes(@RequestBody List patientScanConditionDTOList) { if (Func.isEmpty(patientScanConditionDTOList)) { return CommonResult.failed("请输入正确的请求参数!"); } return CommonResult.success(patientScanService.getScanDataByInpatientNoAndTimes(patientScanConditionDTOList)); } + + + @PostMapping("/collect/collectByDisDate") + @ApiOperation("根据出院日期区间同步扫描患者数据 yyyy-MM-dd") + public CommonResult collectByInpatientNoAndTimes(@RequestParam String disDateStart, @RequestParam String disDateEnd) { + List 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)); + } } diff --git a/src/main/java/com/docus/server/collect/entity/DownloadTask.java b/src/main/java/com/docus/server/collect/entity/DownloadTask.java index 067a3f0..ff4c526 100644 --- a/src/main/java/com/docus/server/collect/entity/DownloadTask.java +++ b/src/main/java/com/docus/server/collect/entity/DownloadTask.java @@ -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") diff --git a/src/main/java/com/docus/server/collect/infrastructure/dao/impl/DownloadTaskDaoImpl.java b/src/main/java/com/docus/server/collect/infrastructure/dao/impl/DownloadTaskDaoImpl.java index 931c5b1..af042e7 100644 --- a/src/main/java/com/docus/server/collect/infrastructure/dao/impl/DownloadTaskDaoImpl.java +++ b/src/main/java/com/docus/server/collect/infrastructure/dao/impl/DownloadTaskDaoImpl.java @@ -26,6 +26,8 @@ public class DownloadTaskDaoImpl extends BaseDaoImpl downloadTasks = baseMapper.selectList(wrapper); if (Func.isNotEmpty(downloadTasks) && downloadTasks.size() == 1) { return downloadTasks.get(0).getId(); diff --git a/src/main/java/com/docus/server/collect/job/PatScanFileSyncJob.java b/src/main/java/com/docus/server/collect/job/PatScanFileSyncJob.java index 6229c86..99d72a4 100644 --- a/src/main/java/com/docus/server/collect/job/PatScanFileSyncJob.java +++ b/src/main/java/com/docus/server/collect/job/PatScanFileSyncJob.java @@ -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 inpatientNoAndTimesByScanDate = patientScanService.getInpatientNoAndTimesByScanDate(startTime, endTime); inpatientNoAndTimesByScanDate = Optional.ofNullable(inpatientNoAndTimesByScanDate).orElse(new ArrayList<>()); - for (PatientScanConditionDTO patientScanConditionDTO : inpatientNoAndTimesByScanDate) { - List basicList = getBasicInfo(patientScanConditionDTO); - if (Objects.isNull(basicList) || basicList.size() != 1) { - log.warn("{},住院号:{},住院次数:{} 查询基础数据没有数据或者有多条数据,请检查!", "电子病历扫描视图同步,根据扫描时间同步Job", patientScanConditionDTO.getInpatientNo(), patientScanConditionDTO.getAdmissTimes()); - continue; - } - List 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 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 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(); diff --git a/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java b/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java new file mode 100644 index 0000000..383e6ca --- /dev/null +++ b/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java @@ -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 patientScanConditionDTOList) { + StringBuilder syncMsgStringBuilder = new StringBuilder(); + int patientTotalCount = patientScanConditionDTOList.size(); + int successPatientCount = 0; + int fileCount = 0; + for (PatientScanConditionDTO condition : patientScanConditionDTOList) { + List 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 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 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 getBasicInfo(PatientScanConditionDTO patientScanConditionDTO) { + TBasicQrDto basicQrDto = new TBasicQrDto(); + basicQrDto.setInpatientNo(patientScanConditionDTO.getInpatientNo()); + basicQrDto.setAdmissTimes(Integer.parseInt(patientScanConditionDTO.getAdmissTimes())); + basicQrDto.setIgnorePh(1); + return patientBasicMapper.getBasicInfo(basicQrDto); + } +} diff --git a/src/main/java/com/docus/server/collect/service/dto/PatScanSyncResult.java b/src/main/java/com/docus/server/collect/service/dto/PatScanSyncResult.java new file mode 100644 index 0000000..4d116e0 --- /dev/null +++ b/src/main/java/com/docus/server/collect/service/dto/PatScanSyncResult.java @@ -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; +} diff --git a/src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java b/src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java index 10fee6b..252cc88 100644 --- a/src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java +++ b/src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java @@ -46,7 +46,7 @@ public class PatientScanServiceImpl implements PatientScanService { @Override public List getInpatientNoAndTimesByDisDate(String startTime, String endTime) { - return patientScanMapper.getScanPatientConditionByScanDate(startTime,endTime); + return patientScanMapper.getScanPatientConditionByDisDate(startTime,endTime); } /**