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 de86616..6fcb2b3 100644 --- a/src/main/java/com/docus/server/collect/controller/PatientScanController.java +++ b/src/main/java/com/docus/server/collect/controller/PatientScanController.java @@ -9,6 +9,8 @@ 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.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -44,7 +46,7 @@ public class PatientScanController { } checkCondition(patientScanConditionDTOList); for (PatientScanConditionDTO patientScanConditionDTO : patientScanConditionDTOList) { - patientScanConditionDTO.setDisDateTime(patientScanConditionDTO.getDisDate()+" 00:00:00"); + patientScanConditionDTO.setDisDateTime(patientScanConditionDTO.getDisDate() + " 00:00:00"); } return CommonResult.success(patientScanService.getScanDataByConditions(patientScanConditionDTOList)); } @@ -57,7 +59,7 @@ public class PatientScanController { Objects.requireNonNull(date); } } catch (Exception ex) { - log.error(ex.getMessage(),ex); + log.error(ex.getMessage(), ex); throw new BaseException("请正确填入出院日期,格式为 " + pattern); } @@ -92,9 +94,9 @@ public class PatientScanController { continue; } for (PatientScanConditionDTO dto : patientScanConditionDTOList) { - String pattern="yyyy-MM-dd"; + String pattern = "yyyy-MM-dd"; String disDateTime = dto.getDisDateTime(); - dto.setDisDate(disDateTime.substring(0,pattern.length())); + dto.setDisDate(disDateTime.substring(0, pattern.length())); } PatScanSyncResult scanSyncResult = synchronizer.sync("根据出院日期区间同步扫描患者数据接口", patientScanConditionDTOList); patientTotalCount += scanSyncResult.getPatientTotalCount(); @@ -113,4 +115,17 @@ public class PatientScanController { } + @GetMapping("/collect/seal/collectBySealId") + @ApiOperation("根据封存id进行封存病案扫描视图采集") + @ApiImplicitParams({ + @ApiImplicitParam(name = "sealId", value = "t_seal 的seal_id,封存id", required = true, dataTypeClass = String.class) + }) + public CommonResult collectByDisDate(@RequestParam("sealId") String sealId) { + String source = "根据封存id进行封存病案扫描视图采集"; + log.info("{},封存id为:{}", source, sealId); + PatScanSyncResult result = synchronizer.syncSeal("source", sealId); + return CommonResult.success(result); + } + + } diff --git a/src/main/java/com/docus/server/collect/converter/FileReportConverter.java b/src/main/java/com/docus/server/collect/converter/FileReportConverter.java index 5df9625..d00776b 100644 --- a/src/main/java/com/docus/server/collect/converter/FileReportConverter.java +++ b/src/main/java/com/docus/server/collect/converter/FileReportConverter.java @@ -3,6 +3,7 @@ package com.docus.server.collect.converter; import com.docus.server.collect.entity.DownloadTask; import com.docus.server.collect.entity.PatientScan; import com.docus.server.collect.entity.TBasic; +import com.docus.server.collect.entity.TSeal; import com.docus.server.collect.enums.DownWayEnum; import com.docus.server.collect.enums.DownloadStateEnum; import com.docus.server.collect.infrastructure.client.dto.ReportDownDto; @@ -46,6 +47,30 @@ public class FileReportConverter { return fileInfoDTO; } + + /** + * 封存病案-电子病历扫描视图对象,转换为上报文件信息对象,没有任务id和采集来源 + * @param tSeal 封存患者信息 + * @param patientScan 患者扫描文件信息 + * @return + */ + public ReportFileInfoDTO convertReportFileInfoDTO(TSeal tSeal, PatientScan patientScan) { + ReportFileInfoDTO fileInfoDTO = new ReportFileInfoDTO(); + fileInfoDTO.setPatientId(tSeal.getPatientId()); + fileInfoDTO.setInpatientNo(tSeal.getInpatientNo()); + fileInfoDTO.setAdmisstimes(tSeal.getAdmissTimes()); + fileInfoDTO.setJzh(tSeal.getJzh()); + fileInfoDTO.setIp("gdszy-patsm-sync"); + fileInfoDTO.setUserName("admin"); + fileInfoDTO.setReportUserFullName("pat-sm"); + fileInfoDTO.setSerialNum(patientScan.getId()+patientScan.getZdAssortName()+patientScan.getFileName()); + fileInfoDTO.setAssortId(patientScan.getZdAssortId()); + fileInfoDTO.setFileTitle(patientScan.getFileName().substring(0,patientScan.getFileName().indexOf("."))); + fileInfoDTO.setDownUrl(patientScan.getImagePath()+"/"+patientScan.getFileName()); + fileInfoDTO.setDownWayEnum(DownWayEnum.SMB); + return fileInfoDTO; + } + /** * 转换病案文件上报信息,得到下载任务对象 * diff --git a/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java b/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java index de1f98c..6da5393 100644 --- a/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java +++ b/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java @@ -3,6 +3,7 @@ package com.docus.server.collect.infrastructure.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.docus.server.collect.dto.TBasicQrDto; import com.docus.server.collect.entity.TBasic; +import com.docus.server.collect.entity.TSeal; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -21,4 +22,13 @@ public interface PatientBasicMapper { * @return 病案基础信息 */ List getBasicInfo(@Param("dto") TBasicQrDto dto); + + /** + * 根据封存id查询封存病案id + * @date 2024/1/15 10:41 + * @author YongBin Wen + * @param sealId 封存id + * @return 封存病案信息 + */ + TSeal getBySealId(@Param("sealId") String sealId); } 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 e35db13..d63a10f 100644 --- a/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java +++ b/src/main/java/com/docus/server/collect/service/PatientScanSynchronizer.java @@ -6,6 +6,7 @@ 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.entity.TSeal; import com.docus.server.collect.infrastructure.dao.CollectTaskDao; import com.docus.server.collect.infrastructure.mapper.PatientBasicMapper; import com.docus.server.collect.service.dto.PatScanSyncResult; @@ -15,7 +16,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Date; import java.util.List; +import java.util.Objects; /** * 患者扫描数据采集者 @@ -39,10 +42,10 @@ public class PatientScanSynchronizer { private String patmGSys; /** - * 根据病案号和住院次数进行扫描文件同步 + * 根据条件进行扫描文件同步 * * @param source 来源 - * @param patientScanConditionDTOList 病案号和住院次数集合 + * @param patientScanConditionDTOList 条件 * @return 同步结果 */ public PatScanSyncResult sync(String source, List patientScanConditionDTOList) { @@ -53,7 +56,7 @@ public class PatientScanSynchronizer { for (PatientScanConditionDTO condition : patientScanConditionDTOList) { List basicList = getBasicInfo(condition); if (Func.isEmpty(basicList)) { - log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据没有数据,请检查!", source, condition.getInpatientNo(),condition.getDisDate(),condition.getName()); + log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据没有数据,请检查!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName()); syncMsgStringBuilder.append(source) .append(",住院号:").append(condition.getInpatientNo()) .append(",出院日期:").append(condition.getDisDate()) @@ -62,7 +65,7 @@ public class PatientScanSynchronizer { continue; } if (basicList.size() > 1) { - log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据有多条数据,请检查!", source,condition.getInpatientNo(), condition.getDisDate(),condition.getName()); + log.warn("{},住院号:{},出院日期:{},患者姓名:{} 查询基础数据有多条数据,请检查!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName()); syncMsgStringBuilder.append(source) .append(",住院号:").append(condition.getInpatientNo()) .append(",出院日期:").append(condition.getDisDate()) @@ -71,9 +74,9 @@ public class PatientScanSynchronizer { continue; } List patientScanList = patientScanService.getScanDataByConditions(condition); - log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条!", source, condition.getInpatientNo(), condition.getDisDate(),condition.getName(), patientScanList.size()); + log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName(), patientScanList.size()); saveCollectTaskAndReport(basicList.get(0), patientScanList); - log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getDisDate(),condition.getName(), patientScanList.size()); + log.info("{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条,执行成功!", source, condition.getInpatientNo(), condition.getDisDate(), condition.getName(), patientScanList.size()); fileCount += patientScanList.size(); successPatientCount++; } @@ -85,6 +88,75 @@ public class PatientScanSynchronizer { return result; } + + /** + * 封存病案-根据条件进行扫描文件同步 + * + * @param source 来源/用途 + * @param sealId 封存id + * @return 同步结果 + */ + public PatScanSyncResult syncSeal(String source, String sealId) { + PatScanSyncResult result = new PatScanSyncResult(); + result.setPatientTotalCount(1); + result.setSuccessPatientCount(0); + result.setFileCount(0); + + TSeal seal = patientBasicMapper.getBySealId(sealId); + if (Objects.isNull(seal)) { + String resultMsg = source + ",封存id:" + sealId + " 没有找到封存病案信息,请检查!"; + result.setMsg(resultMsg); + return result; + } + String jzh = seal.getJzh(); + TBasicQrDto basicQrDto = new TBasicQrDto(); + basicQrDto.setJzh(jzh); + List tBasicList = patientBasicMapper.getBasicInfo(basicQrDto); + if (Func.isEmpty(tBasicList)) { + String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 没有找到基础病案信息,无法获取出院时间,请检查!"; + result.setMsg(resultMsg); + return result; + } + + if (tBasicList.size() > 1) { + String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 找到多条基础病案信息,无法获取出院时间,请检查!"; + result.setMsg(resultMsg); + return result; + } + TBasic tBasic = tBasicList.get(0); + String basicDisDate = tBasic.getDisDate(); + if (Func.isBlank(basicDisDate)) { + String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 获取基础病案信息,无法获取出院时间,请检查!"; + result.setMsg(resultMsg); + return result; + } + + String disDate; + String dateTimePattern = "yyyy-MM-dd HH:mm:ss"; + try { + Date parse = Func.parseDate(basicDisDate, dateTimePattern); + disDate = Func.formatDate(parse); + } catch (Exception ex) { + String resultMsg = source + ",封存id:" + sealId + ",jzh:" + jzh + " 出院时间:" + basicDisDate + "解析失败,请检查!"; + result.setMsg(resultMsg); + return result; + } + + PatientScanConditionDTO condition = new PatientScanConditionDTO(); + condition.setDisDate(disDate); + condition.setDisDateTime(disDate + " 00:00:00"); + condition.setName(seal.getName()); + condition.setInpatientNo(seal.getInpatientNo()); + List patientScanList = patientScanService.getScanDataByConditions(condition); + + log.info("{},封存id:{},住院号:{},出院日期:{},患者姓名:{} 采集视图数据:{} 条!", source, sealId, condition.getInpatientNo(), condition.getDisDateTime(), condition.getName(), patientScanList.size()); + saveCollectTaskAndSealReport(seal, patientScanList); + log.info("{},封存id:{},住院号:{},出院日期:{},患者姓名:{} , 采集视图数据:{} 条,执行成功!", source, sealId, condition.getInpatientNo(), condition.getDisDateTime(), condition.getName(), patientScanList.size()); + result.setFileCount(patientScanList.size()); + result.setSuccessPatientCount(1); + return result; + } + private void saveCollectTaskAndReport(TBasic tBasic, List patientScanList) { for (PatientScan patientScan : patientScanList) { // 转换后的对象缺失的补充 @@ -96,14 +168,25 @@ public class PatientScanSynchronizer { } } + private void saveCollectTaskAndSealReport(TSeal tSeal, List patientScanList) { + for (PatientScan patientScan : patientScanList) { + // 转换后的对象缺失的补充 + ReportFileInfoDTO reportFileInfoDTO = fileReportConverter.convertReportFileInfoDTO(tSeal, patientScan); + reportFileInfoDTO.setSysFlag(patmGSys); + Long taskId = collectTaskDao.saveTask(reportFileInfoDTO); + reportFileInfoDTO.setTaskId(taskId); + fileReportService.saveDownloadTaskAndSealReport(reportFileInfoDTO); + } + } + private List getBasicInfo(PatientScanConditionDTO patientScanConditionDTO) { String disDate = patientScanConditionDTO.getDisDate(); TBasicQrDto basicQrDto = new TBasicQrDto(); basicQrDto.setInpatientNo(patientScanConditionDTO.getInpatientNo()); basicQrDto.setName(patientScanConditionDTO.getName()); - basicQrDto.setDisDateStart(disDate+" 00:00:00"); - basicQrDto.setDisDateEnd(disDate+" 23:59:59"); + 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/FileReportServiceImpl.java b/src/main/java/com/docus/server/collect/service/impl/FileReportServiceImpl.java index 54735d0..dfe51bc 100644 --- a/src/main/java/com/docus/server/collect/service/impl/FileReportServiceImpl.java +++ b/src/main/java/com/docus/server/collect/service/impl/FileReportServiceImpl.java @@ -73,7 +73,6 @@ public class FileReportServiceImpl implements FileReportService { @Override public void saveDownloadTaskAndSealReport(ReportFileInfoDTO fileInfoDTO) { - // TODO 封存病案 TSeal sealCondition = new TSeal(fileInfoDTO); // 查询基础数据,更新新的病案信息 TSeal seal = downloadTaskDao.findSealByCondition(sealCondition); diff --git a/src/main/resources/mapper/PatientBasicMapper.xml b/src/main/resources/mapper/PatientBasicMapper.xml index ea99f6f..94716cc 100644 --- a/src/main/resources/mapper/PatientBasicMapper.xml +++ b/src/main/resources/mapper/PatientBasicMapper.xml @@ -51,6 +51,13 @@ limit 2 +