From ace67cb33e2d6209e08b28f419ba4d23e7d62c23 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Tue, 11 Jul 2023 17:06:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=9F=A5=E8=AF=A2=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=BE=AA=E7=8E=AF=E7=BB=93=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docus/server/report/job/ReportJob.java | 121 +++++++++++------- .../service/impl/ReportServiceImpl.java | 2 +- 2 files changed, 75 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/docus/server/report/job/ReportJob.java b/src/main/java/com/docus/server/report/job/ReportJob.java index 1883de3..1c968c3 100644 --- a/src/main/java/com/docus/server/report/job/ReportJob.java +++ b/src/main/java/com/docus/server/report/job/ReportJob.java @@ -35,6 +35,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -159,14 +160,14 @@ public class ReportJob { if (Func.isNotEmpty(nurseInsertSugarReportList)) { Integer filesNumber = nurseInsertSugarReportList.get(0).getFILES_NUMBER(); Integer nurseFileCount = tBasicMapper.getNurseFileCount(patientId); - if (filesNumber == null || nurseFileCount==null) { - log.warn("{} , {},未保存护理提交的文件数量或者未获取到接口返回的文件数量!",inpatientNo,admissTimes); - nurseFileCountError(inpatientNo,admissTimes); + if (filesNumber == null || nurseFileCount == null) { + log.warn("{} , {},未保存护理提交的文件数量或者未获取到接口返回的文件数量!", inpatientNo, admissTimes); + nurseFileCountError(inpatientNo, admissTimes); return; } if (!filesNumber.equals(nurseFileCount)) { - log.warn("{} , {},护理提交的文件数量与接口返回的文件数量不匹配!",inpatientNo,admissTimes); - nurseFileCountError(inpatientNo,admissTimes); + log.warn("{} , {},护理提交的文件数量与接口返回的文件数量不匹配!", inpatientNo, admissTimes); + nurseFileCountError(inpatientNo, admissTimes); return; } ReportDto reportDto; @@ -220,10 +221,10 @@ public class ReportJob { TaskValidateConfig.ValidateConfig dischargeDepartmenConfig = cancelCollectTaskConfig.getDischargeDepartment(); CollectTaskValidation validation; // 是否验证了,每个验证不通过都会返回,记录是否进入了验证,进入了且验证未返回,代表全部通过了,改变标记为true返回。 - boolean validated=false; + boolean validated = false; // 验证入院时间 if (admissionDateConfig != null && admissionDateConfig.isEffective()) { - validated=true; + validated = true; validation = new CollectTaskValidation.CollectTaskAdmissionDateValidation(); CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getAdmissDate(), admissionDateConfig); if (validationResult.getCode() == ResultCode.FAILED) { @@ -232,7 +233,7 @@ public class ReportJob { } // 验证出院时间 if (dischargeDateConfig != null && dischargeDateConfig.isEffective()) { - validated=true; + validated = true; validation = new CollectTaskValidation.CollectTaskDischargeDateValidation(); CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getDisDate(), dischargeDateConfig); if (validationResult.getCode() == ResultCode.FAILED) { @@ -241,7 +242,7 @@ public class ReportJob { } // 验证入院科室 if (amissionDepartmentConfig != null && amissionDepartmentConfig.isEffective()) { - validated=true; + validated = true; validation = new CollectTaskValidation.CollectTaskAdmissionDepartmentValidation(); CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getAdmissDeptName(), amissionDepartmentConfig); if (validationResult.getCode() == ResultCode.FAILED) { @@ -250,7 +251,7 @@ public class ReportJob { } // 验证出院科室 if (dischargeDepartmenConfig != null && dischargeDepartmenConfig.isEffective()) { - validated=true; + validated = true; validation = new CollectTaskValidation.CollectTaskDischargeDepartmentValidation(); CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getDisDeptName(), dischargeDepartmenConfig); if (validationResult.getCode() == ResultCode.FAILED) { @@ -258,7 +259,7 @@ public class ReportJob { } } - return validated; + return validated; } private void validateAdmissionDate(String admissDate, String collectorId) { @@ -356,7 +357,10 @@ public class ReportJob { List reportDtos = new ArrayList<>(); int pageNum = 1; final int pageSize = 5; - boolean loopCondition = true; + // 报告接口返回的总数 + AtomicInteger reportTotalCount = new AtomicInteger(0); + // 已经查询的条数 + int alreadyQrCount = 0; do { Date admissDate = tBasic.getAdmissDate(); Date disDate = tBasic.getDisDate(); @@ -383,17 +387,15 @@ public class ReportJob { sdJxReportDto.setPatentTypeCode("1"); sdJxReportDto.setOrgCode("4560886379"); String respBody = shunDePeopleService.getInspectReportByJxId(sdJxReportDto); - - List reportDtoList = parseQuerySdRyInspectReport(respBody, tBasic); - if (reportDtoList.isEmpty()) { + alreadyQrCount += pageSize; + List reportDtoList = parseQuerySdRyInspectReport(respBody, tBasic, reportTotalCount); + reportDtos.addAll(reportDtoList); + // 解析之后,总数已经赋值了,判断已经查询的数量是否已经满足总数 + if (reportTotalCount.get() == 0 || alreadyQrCount >= reportTotalCount.get()) { break; } - if (reportDtoList.size() < pageSize) { - loopCondition = false; - } - reportDtos.addAll(reportDtoList); pageNum++; - } while (loopCondition); + } while (true); return reportDtos; } catch (Exception ex) { log.error("查询门诊检查报告出错啦!", ex); @@ -406,7 +408,10 @@ public class ReportJob { List reportDtos = new ArrayList<>(); int pageNum = 1; final int pageSize = 5; - boolean loopCondition = true; + // 报告接口返回的总数 + AtomicInteger reportTotalCount = new AtomicInteger(0); + // 已经查询的条数 + int alreadyQrCount = 0; do { Date admissDate = tBasic.getAdmissDate(); Date disDate = tBasic.getDisDate(); @@ -433,16 +438,15 @@ public class ReportJob { sdJxReportDto.setPatentTypeCode("3"); sdJxReportDto.setOrgCode("4560886379"); String respBody = shunDePeopleService.getInspectReportByJxId(sdJxReportDto); - List reportDtoList = parseQuerySdRyInspectReport(respBody, tBasic); - if (reportDtoList.isEmpty()) { + alreadyQrCount += pageSize; + List reportDtoList = parseQuerySdRyInspectReport(respBody, tBasic, reportTotalCount); + reportDtos.addAll(reportDtoList); + // 解析之后,总数已经赋值了,判断已经查询的数量是否已经满足总数 + if (reportTotalCount.get() == 0 || alreadyQrCount >= reportTotalCount.get()) { break; } - if (reportDtoList.size() < pageSize) { - loopCondition = false; - } - reportDtos.addAll(reportDtoList); pageNum++; - } while (loopCondition); + } while (true); return reportDtos; } catch (Exception ex) { log.error("查询住院检查报告出错啦!", ex); @@ -454,13 +458,22 @@ public class ReportJob { System.out.println(createBase64SaveDir()); } - private List parseQuerySdRyInspectReport(String respBody, TBasic tBasic) { + private List parseQuerySdRyInspectReport(String respBody, TBasic tBasic, AtomicInteger reportTotalCount) { JSONObject jsonObject = Func.readJson(respBody, JSONObject.class); Object resultCode = jsonObject.get("ResultCode"); String successCode = "0"; if (!successCode.equals(String.valueOf(resultCode))) { return new ArrayList<>(); } + try { + Object countObj = jsonObject.get("count"); + if (countObj != null) { + int count = Integer.parseInt(countObj.toString()); + reportTotalCount.set(count); + } + } catch (Exception ex) { + log.error("解析count出错了!", ex); + } TableJsonRead jsonRead = new TableJsonRead(); SdPacsServerConfig config = jsonRead.Read("data-config", "sdry-pacs-server.json", SdPacsServerConfig.class); try { @@ -614,7 +627,11 @@ public class ReportJob { List reportDtos = new ArrayList<>(); int pageNum = 1; final int pageSize = 5; - boolean loopCondition = true; + + // 报告接口返回的总数 + AtomicInteger reportTotalCount = new AtomicInteger(0); + // 已经查询的条数 + int alreadyQrCount = 0; do { Date admissDate = tBasic.getAdmissDate(); Date disDate = tBasic.getDisDate(); @@ -640,18 +657,17 @@ public class ReportJob { sdJxReportDto.setEndTime(endTime); sdJxReportDto.setPatentTypeCode("3"); sdJxReportDto.setOrgCode("4560886379"); - String respBody = shunDePeopleService.getLisReportByJxId(sdJxReportDto); - List reportDtoList = parseQuerySdRyLisReport(respBody, tBasic); - if (reportDtoList.isEmpty()) { + alreadyQrCount += pageSize; + List reportDtoList = parseQuerySdRyLisReport(respBody, tBasic, reportTotalCount); + reportDtos.addAll(reportDtoList); + // 解析之后,总数已经赋值了,判断已经查询的数量是否已经满足总数 + if (reportTotalCount.get() == 0 || alreadyQrCount >= reportTotalCount.get()) { break; } - if (reportDtoList.size() < pageSize) { - loopCondition = false; - } - reportDtos.addAll(reportDtoList); + pageNum++; - } while (loopCondition); + } while (true); return reportDtos; } catch (Exception ex) { log.error("查询Lis报告出错啦!", ex); @@ -667,7 +683,10 @@ public class ReportJob { List reportDtos = new ArrayList<>(); int pageNum = 1; final int pageSize = 5; - boolean loopCondition = true; + // 报告接口返回的总数 + AtomicInteger reportTotalCount = new AtomicInteger(0); + // 已经查询的条数 + int alreadyQrCount = 0; do { Date admissDate = tBasic.getAdmissDate(); Date disDate = tBasic.getDisDate(); @@ -695,16 +714,15 @@ public class ReportJob { sdJxReportDto.setOrgCode("4560886379"); String respBody = shunDePeopleService.getLisReportByJxId(sdJxReportDto); - List reportDtoList = parseQuerySdRyLisReport(respBody, tBasic); - if (reportDtoList.isEmpty()) { + alreadyQrCount = +pageSize; + List reportDtoList = parseQuerySdRyLisReport(respBody, tBasic, reportTotalCount); + reportDtos.addAll(reportDtoList); + // 解析之后,总数已经赋值了,判断已经查询的数量是否已经满足总数 + if (reportTotalCount.get() == 0 || alreadyQrCount >= reportTotalCount.get()) { break; } - if (reportDtoList.size() < pageSize) { - loopCondition = false; - } - reportDtos.addAll(reportDtoList); pageNum++; - } while (loopCondition); + } while (true); return reportDtos; } catch (Exception ex) { log.error("查询Lis报告出错啦!", ex); @@ -712,13 +730,22 @@ public class ReportJob { } } - private List parseQuerySdRyLisReport(String respBody, TBasic tBasic) { + private List parseQuerySdRyLisReport(String respBody, TBasic tBasic, AtomicInteger reportTotalCount) { JSONObject jsonObject = Func.readJson(respBody, JSONObject.class); Object resultCode = jsonObject.get("ResultCode"); String successCode = "0"; if (!successCode.equals(String.valueOf(resultCode))) { return new ArrayList<>(); } + try { + Object countObj = jsonObject.get("count"); + if (countObj != null) { + int count = Integer.parseInt(countObj.toString()); + reportTotalCount.set(count); + } + } catch (Exception ex) { + log.error("解析count出错了!", ex); + } try { Object data = jsonObject.get("data"); String dataJsonStr = Func.toJson(data); diff --git a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java index 30bccc2..cab6934 100644 --- a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java @@ -113,7 +113,7 @@ public class ReportServiceImpl implements ReportService { // 如果出现多条出错的情况,还是得保存收到的信息,人工干预处理 patientId = tBasicMapper.getPatientIdByInpatientNoAndAdminssTimes(reportDto.getInpatientNo(), reportDto.getAdmisstimes()); } catch (Exception ex) { - log.error("查询病案主键出错了", ex); + log.error("查询病案主键出错了,病案号:"+reportDto.getInpatientNo()+" ,住院次数:"+reportDto.getAdmisstimes(), ex); } // 不验证数据,始终保存收到的信息 AfReportRecord afReportRecord = afReportRecordMapper.getRecordBySerialnumAndInpatientNoAndSysFlag(reportDto.getSerialnum(), reportDto.getInpatientNo(), reportDto.getAdmisstimes(), reportDto.getSysFlag());