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 5bd7c66..33910a4 100644 --- a/src/main/java/com/docus/server/collect/controller/PatientScanController.java +++ b/src/main/java/com/docus/server/collect/controller/PatientScanController.java @@ -4,14 +4,16 @@ 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.PatientScanSynchronizer; import com.docus.server.collect.service.dto.PatScanSyncResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.time.LocalDate; import java.util.List; /** @@ -22,6 +24,7 @@ import java.util.List; @Api("患者扫描控制") @RestController @RequestMapping("/gdszy/patscan") +@Slf4j public class PatientScanController { @Resource private PatientScanService patientScanService; @@ -42,10 +45,36 @@ public class PatientScanController { @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 + " 没有可采集的视图数据!"); + log.info("根据出院日期区间 {} —— {} 同步扫描患者数据接口。", disDateStart, disDateEnd); + LocalDate disDateStartDate = LocalDate.parse(disDateStart); + LocalDate disDateEndDate = LocalDate.parse(disDateEnd); + + StringBuilder syncMsgStringBuilder = new StringBuilder(); + int patientTotalCount = 0; + int successPatientCount = 0; + int fileCount = 0; + + // 从开始时间一天一天的查询,直到超过了结束时间停止 + while (!disDateStartDate.isAfter(disDateEndDate)) { + List patientScanConditionDTOList = patientScanService.getInpatientNoAndTimesByDisDate(disDateStartDate + " 00:00:00", disDateStartDate + " 23:59:59"); + if (Func.isEmpty(patientScanConditionDTOList)) { + log.warn("出院时间:{} —— {} 没有可同步的扫描数据!", disDateStartDate + " 00:00:00", disDateStartDate + " 23:59:59"); + disDateStartDate = disDateStartDate.plusDays(1); + continue; + } + PatScanSyncResult scanSyncResult = synchronizer.sync("根据出院日期区间同步扫描患者数据接口", patientScanConditionDTOList); + patientTotalCount += scanSyncResult.getPatientTotalCount(); + successPatientCount += scanSyncResult.getSuccessPatientCount(); + fileCount += scanSyncResult.getFileCount(); + syncMsgStringBuilder.append(scanSyncResult.getMsg()); + disDateStartDate = disDateStartDate.plusDays(1); } - return CommonResult.success(synchronizer.sync("根据出院日期区间同步扫描患者数据接口",patientScanConditionDTOList)); + + PatScanSyncResult result = new PatScanSyncResult(); + result.setPatientTotalCount(patientTotalCount); + result.setSuccessPatientCount(successPatientCount); + result.setFileCount(fileCount); + result.setMsg(syncMsgStringBuilder.toString()); + return CommonResult.success(result); } } diff --git a/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java b/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java index 383e6ca..b6f5979 100644 --- a/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java +++ b/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java @@ -1,5 +1,6 @@ package com.docus.server.collect.service; +import com.docus.core.util.Func; import com.docus.server.collect.converter.FileReportConverter; import com.docus.server.collect.dto.PatientScanConditionDTO; import com.docus.server.collect.dto.TBasicQrDto; @@ -15,7 +16,6 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; -import java.util.Objects; /** * 患者扫描数据采集者 @@ -52,13 +52,18 @@ public class PatientScanSynchronizer { 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(" 查询基础数据没有数据或者有多条数据,请检查!"); + if (Func.isEmpty(basicList)) { + log.warn("{},住院号:{},住院次数:{} 查询基础数据没有数据,请检查!", source, condition.getInpatientNo(), condition.getAdmissTimes()); + syncMsgStringBuilder.append(source).append(",住院号:").append(condition.getInpatientNo()).append("住院次数:").append(condition.getAdmissTimes()).append(" 查询基础数据没有数据,请检查!"); + continue; + } + if (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); + log.info("{},住院号:{},住院次数:{} 采集视图数据:{} 条!", source, condition.getInpatientNo(), condition.getAdmissTimes(), patientScanList.size()); saveCollectTaskAndReport(basicList.get(0), patientScanList); log.info("{},住院号:{},住院次数:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getAdmissTimes(), patientScanList); fileCount += patientScanList.size();