From 3c544dae7da883b020c3385630c3b070ecf59bd6 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Fri, 12 Jan 2024 15:30:24 +0800 Subject: [PATCH] =?UTF-8?q?improvement:=20=E6=89=AB=E6=8F=8F=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E5=8F=96=E6=B6=88=E4=BD=8F=E9=99=A2=E6=AC=A1=E6=95=B0?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=EF=BC=8C=E9=87=87=E7=94=A8=E7=97=85=E6=A1=88?= =?UTF-8?q?=E5=8F=B7=EF=BC=8C=E5=87=BA=E9=99=A2=E6=97=A5=E6=9C=9F=EF=BC=8C?= =?UTF-8?q?=E6=82=A3=E8=80=85=E5=A7=93=E5=90=8D=20=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PatientScanController.java | 38 ++++++++++++++++--- .../collect/dto/PatientScanConditionDTO.java | 15 ++++++-- .../docus/server/collect/dto/TBasicQrDto.java | 5 +++ .../collect/service/PatientScanService.java | 4 +- .../service/PatientScanSynchronizer.java | 28 ++++++++++---- .../service/impl/PatientScanServiceImpl.java | 13 ++++--- .../resources/mapper/PatientBasicMapper.xml | 3 ++ .../resources/mapper/PatientScanMapper.xml | 13 ++++--- 8 files changed, 90 insertions(+), 29 deletions(-) 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 33910a4..59eb2cd 100644 --- a/src/main/java/com/docus/server/collect/controller/PatientScanController.java +++ b/src/main/java/com/docus/server/collect/controller/PatientScanController.java @@ -1,6 +1,7 @@ package com.docus.server.collect.controller; import com.docus.core.util.Func; +import com.docus.infrastructure.core.exception.BaseException; import com.docus.infrastructure.web.api.CommonResult; import com.docus.server.collect.dto.PatientScanConditionDTO; import com.docus.server.collect.entity.PatientScan; @@ -14,7 +15,10 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDate; +import java.util.Collections; +import java.util.Date; import java.util.List; +import java.util.Objects; /** * 患者扫描控制层 @@ -32,19 +36,41 @@ public class PatientScanController { private PatientScanSynchronizer synchronizer; - @PostMapping("/get/byInpatientNoAndTimes") - @ApiOperation("根据住院号和住院次数,进行患者电子病历扫描数据查询,返回需要同步的数据!") - public CommonResult> collectByInpatientNoAndTimes(@RequestBody List patientScanConditionDTOList) { + @PostMapping("/get/byCondition") + @ApiOperation("根据条件,进行患者电子病历扫描数据查询,返回需要同步的数据!") + public CommonResult> collectBybyCondition(@RequestBody List patientScanConditionDTOList) { if (Func.isEmpty(patientScanConditionDTOList)) { return CommonResult.failed("请输入正确的请求参数!"); } - return CommonResult.success(patientScanService.getScanDataByInpatientNoAndTimes(patientScanConditionDTOList)); + checkCondition(patientScanConditionDTOList); + return CommonResult.success(patientScanService.getScanDataByConditions(patientScanConditionDTOList)); + } + + private static void checkCondition(List patientScanConditionDTOList) { + String pattern = "yyyy-MM-dd"; + try { + for (PatientScanConditionDTO dto : patientScanConditionDTOList) { + Date date = Func.parseDate(dto.getDisDate(), pattern); + Objects.requireNonNull(date); + } + } catch (Exception ex) { + log.error(ex.getMessage(),ex); + throw new BaseException("请正确填入出院日期,格式为 " + pattern); + } + + } + + public static void main(String[] args) { + PatientScanConditionDTO dto = new PatientScanConditionDTO(); + System.out.println(dto); + checkCondition(Collections.singletonList(dto)); + System.out.println(dto); } @PostMapping("/collect/collectByDisDate") @ApiOperation("根据出院日期区间同步扫描患者数据 yyyy-MM-dd") - public CommonResult collectByInpatientNoAndTimes(@RequestParam String disDateStart, @RequestParam String disDateEnd) { + public CommonResult collectByDisDate(@RequestParam String disDateStart, @RequestParam String disDateEnd) { log.info("根据出院日期区间 {} —— {} 同步扫描患者数据接口。", disDateStart, disDateEnd); LocalDate disDateStartDate = LocalDate.parse(disDateStart); LocalDate disDateEndDate = LocalDate.parse(disDateEnd); @@ -77,4 +103,6 @@ public class PatientScanController { result.setMsg(syncMsgStringBuilder.toString()); return CommonResult.success(result); } + + } diff --git a/src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java b/src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java index fbf8ac4..8974c0e 100644 --- a/src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java +++ b/src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java @@ -8,6 +8,7 @@ import javax.validation.constraints.NotBlank; /** * 患者扫描条件 + * * @author wyb */ @Data @@ -17,7 +18,15 @@ public class PatientScanConditionDTO { @NotBlank(message = "住院号不能为空!") private String inpatientNo; - @ApiModelProperty("住院次数") - @NotBlank(message = "住院次数不能为空!") - private String admissTimes; + @ApiModelProperty("出院日期 yyyy-MM-dd") + @NotBlank(message = "出院日期不能为空!") + private String disDate; + + @ApiModelProperty("病人姓名") + @NotBlank(message = "病人姓名不能为空!") + private String name; + + + @ApiModelProperty(value = "为出院日期的 00:00:00,只在后端查询中使用", hidden = true) + private String disDateTime; } diff --git a/src/main/java/com/docus/server/collect/dto/TBasicQrDto.java b/src/main/java/com/docus/server/collect/dto/TBasicQrDto.java index b31dd64..78407e9 100644 --- a/src/main/java/com/docus/server/collect/dto/TBasicQrDto.java +++ b/src/main/java/com/docus/server/collect/dto/TBasicQrDto.java @@ -28,9 +28,14 @@ public class TBasicQrDto { @ApiModelProperty(value = "记账号") private String jzh; + @ApiModelProperty(value = "患者姓名") + private String name; + + @ApiModelProperty(value = "省中医患者主索引号") private String empId; + @ApiModelProperty(value = "是否忽略ph字段,为1 则添加条件 ph is null") private int ignorePh; diff --git a/src/main/java/com/docus/server/collect/service/PatientScanService.java b/src/main/java/com/docus/server/collect/service/PatientScanService.java index 75f9bd2..5006e06 100644 --- a/src/main/java/com/docus/server/collect/service/PatientScanService.java +++ b/src/main/java/com/docus/server/collect/service/PatientScanService.java @@ -14,14 +14,14 @@ public interface PatientScanService { * @param patientScanConditionDTOList 患者扫描条件传输对象集合 * @return 采集数据 */ - List getScanDataByInpatientNoAndTimes(List patientScanConditionDTOList); + List getScanDataByConditions(List patientScanConditionDTOList); /** * 根据患者住院号和住院次数采集-单个,返回采集数据 * @param patientScanConditionDto 患者扫描条件传输对象 * @return 采集数据 */ - List getScanDataByInpatientNoAndTimes(PatientScanConditionDTO patientScanConditionDto); + List getScanDataByConditions(PatientScanConditionDTO patientScanConditionDto); /** 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 233ee17..e35db13 100644 --- a/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java +++ b/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java @@ -53,19 +53,27 @@ public class PatientScanSynchronizer { for (PatientScanConditionDTO condition : patientScanConditionDTOList) { List basicList = getBasicInfo(condition); if (Func.isEmpty(basicList)) { - log.warn("{},住院号:{},住院次数:{} 查询基础数据没有数据,请检查!", source, condition.getInpatientNo(), condition.getAdmissTimes()); - syncMsgStringBuilder.append(source).append(",住院号:").append(condition.getInpatientNo()).append("住院次数:").append(condition.getAdmissTimes()).append(" 查询基础数据没有数据,请检查!"); + log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据没有数据,请检查!", source, condition.getInpatientNo(),condition.getDisDate(),condition.getName()); + syncMsgStringBuilder.append(source) + .append(",住院号:").append(condition.getInpatientNo()) + .append(",出院日期:").append(condition.getDisDate()) + .append(",患者姓名:").append(condition.getName()) + .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(" 查询基础数据有多条数据,请检查!"); + log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据有多条数据,请检查!", source,condition.getInpatientNo(), condition.getDisDate(),condition.getName()); + syncMsgStringBuilder.append(source) + .append(",住院号:").append(condition.getInpatientNo()) + .append(",出院日期:").append(condition.getDisDate()) + .append(",患者姓名:").append(condition.getName()) + .append(" 查询基础数据有多条数据,请检查!"); continue; } - List patientScanList = patientScanService.getScanDataByInpatientNoAndTimes(condition); - log.info("{},住院号:{},住院次数:{} 采集视图数据:{} 条!", source, condition.getInpatientNo(), condition.getAdmissTimes(), patientScanList.size()); + List patientScanList = patientScanService.getScanDataByConditions(condition); + log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条!", source, condition.getInpatientNo(), condition.getDisDate(),condition.getName(), patientScanList.size()); saveCollectTaskAndReport(basicList.get(0), patientScanList); - log.info("{},住院号:{},住院次数:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getAdmissTimes(), patientScanList.size()); + log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getDisDate(),condition.getName(), patientScanList.size()); fileCount += patientScanList.size(); successPatientCount++; } @@ -89,9 +97,13 @@ public class PatientScanSynchronizer { } private List getBasicInfo(PatientScanConditionDTO patientScanConditionDTO) { + String disDate = patientScanConditionDTO.getDisDate(); + TBasicQrDto basicQrDto = new TBasicQrDto(); basicQrDto.setInpatientNo(patientScanConditionDTO.getInpatientNo()); - basicQrDto.setAdmissTimes(Integer.parseInt(patientScanConditionDTO.getAdmissTimes())); + basicQrDto.setName(patientScanConditionDTO.getName()); + basicQrDto.setDisDateStart(disDate+" 00:00:00"); + basicQrDto.setDisDateEnd(disDate+" 23:59:59"); basicQrDto.setIgnorePh(1); return patientBasicMapper.getBasicInfo(basicQrDto); } 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 252cc88..edde92d 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 @@ -23,11 +23,11 @@ public class PatientScanServiceImpl implements PatientScanService { private PatientScanMapper patientScanMapper; @Override - public List getScanDataByInpatientNoAndTimes(List patientScanConditionDTOList) { - List distinctPatientScanConditionDTOList = distinctForInpatientNoAndTimes(patientScanConditionDTOList); + public List getScanDataByConditions(List patientScanConditionDTOList) { + List distinctPatientScanConditionDTOList = distinctCondition(patientScanConditionDTOList); List list = new LinkedList<>(); for (PatientScanConditionDTO patientScanConditionDTO : distinctPatientScanConditionDTOList) { - List patientScanList = getScanDataByInpatientNoAndTimes(patientScanConditionDTO); + List patientScanList = getScanDataByConditions(patientScanConditionDTO); list.addAll(patientScanList); } return list; @@ -35,7 +35,8 @@ public class PatientScanServiceImpl implements PatientScanService { @Override - public List getScanDataByInpatientNoAndTimes(PatientScanConditionDTO patientScanConditionDto) { + public List getScanDataByConditions(PatientScanConditionDTO patientScanConditionDto) { + patientScanConditionDto.setDisDateTime(patientScanConditionDto.getDisDate()+" 00:00:00"); return patientScanMapper.getScanData(patientScanConditionDto); } @@ -55,11 +56,11 @@ public class PatientScanServiceImpl implements PatientScanService { * @param patientScanConditionDTOList 带患者住院号和住院次数条件 * @return 去重后的集合 */ - private List distinctForInpatientNoAndTimes(List patientScanConditionDTOList) { + private List distinctCondition(List patientScanConditionDTOList) { Map duplicateValidators = new HashMap<>(); LinkedList list = new LinkedList<>(); for (PatientScanConditionDTO dto : patientScanConditionDTOList) { - String key = dto.getInpatientNo() + "valid" + dto.getAdmissTimes(); + String key = dto.getInpatientNo() + "valid" + dto.getDisDate()+"valid"+dto.getName(); // 病案号和住院次数生成key,根据哈希map的特性,去重 if (duplicateValidators.containsKey(key)) { continue; diff --git a/src/main/resources/mapper/PatientBasicMapper.xml b/src/main/resources/mapper/PatientBasicMapper.xml index 5945a02..ea99f6f 100644 --- a/src/main/resources/mapper/PatientBasicMapper.xml +++ b/src/main/resources/mapper/PatientBasicMapper.xml @@ -43,6 +43,9 @@ and `dis_date` between #{dto.disDateStart} and #{dto.disDateEnd} + + and `name` = #{dto.name} + and ph is null diff --git a/src/main/resources/mapper/PatientScanMapper.xml b/src/main/resources/mapper/PatientScanMapper.xml index a584c07..541882c 100644 --- a/src/main/resources/mapper/PatientScanMapper.xml +++ b/src/main/resources/mapper/PatientScanMapper.xml @@ -23,24 +23,27 @@ from pat_sm where 住院号=#{dto.inpatientNo} - and 次数=#{dto.admissTimes} + and 病人姓名=#{dto.name} + and 出院日期=#{dto.disDateTime} and 扫描盘号 like 'G%'