diff --git a/src/main/java/com/docus/server/collect/collector/LisSystemCollector.java b/src/main/java/com/docus/server/collect/collector/LisSystemCollector.java index d0ae50e..b409e7c 100644 --- a/src/main/java/com/docus/server/collect/collector/LisSystemCollector.java +++ b/src/main/java/com/docus/server/collect/collector/LisSystemCollector.java @@ -3,6 +3,7 @@ package com.docus.server.collect.collector; import com.docus.core.util.Func; import com.docus.server.collect.entity.Jzh; 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.service.FileReportService; import com.docus.server.collect.service.dto.ReportFileInfoDTO; @@ -17,7 +18,9 @@ import org.w3c.dom.NodeList; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Objects; /** * 检验报告采集 @@ -75,9 +78,43 @@ public class LisSystemCollector { } } + /** + * 根据封存病案信息和与之对应的归档基础信息,进行Lis报告的 封存病案采集 + * + * @param tSeal 封存病案信息 + * @param tBasic 归档基础信息 + * @date 2024/1/10 17:04 + * @author YongBin Wen + */ + public void sealCollect(TSeal tSeal, TBasic tBasic) { + Date admissDate = tSeal.getAdmissDate(); + String disDateStr = Objects.isNull(tBasic)?null:tBasic.getDisDate(); + String jzh = tSeal.getJzh(); + if(Objects.isNull(admissDate)){ + log.error("封存病案采集失败,patientId:{} 患者住院时间为空!", tSeal.getPatientId()); + return; + } + // 报告的开始和结束时间就是入院时间 和 出院时间+15天(没有就取现在时间) + String beginDateTime = Func.formatDateTime(admissDate); + String endDateTime = Func.formatDateTime(new Date()); + if(Func.isNotBlank(tBasic.getDisDate())){ + LocalDateTime endLocalDateTime = Func.parseDateTime(disDateStr).plusDays(15L); + endDateTime = Func.formatDateTime(endLocalDateTime); + } + // 普通的检验报告和 微生物检验报告 + String collectDataNormal = collectData(new Jzh(jzh), beginDateTime, endDateTime, 0); + String collectDataMtf = collectData(new Jzh(jzh), beginDateTime, endDateTime, 1); + List reportFileInfoDTOList = LisSystemCollectConverter.convert(collectDataNormal); + List reportFileInfoDtoList2 = LisSystemCollectConverter.convert(collectDataMtf); + reportFileInfoDTOList.addAll(reportFileInfoDtoList2); + for (ReportFileInfoDTO reportFileInfoDTO : reportFileInfoDTOList) { + reportFileInfoDTO.setPatientId(tSeal.getPatientId()); + reportFileInfoDTO.setAssortId(assortId); + reportFileInfoDTO.setSysFlag(sysFlag); + fileReportService.saveDownloadTaskAndSealReport(reportFileInfoDTO); + } - - + } private boolean isBelongToPatient(ReportFileInfoDTO reportFileInfoDTO, TBasic basic) { diff --git a/src/main/java/com/docus/server/collect/controller/CollectController.java b/src/main/java/com/docus/server/collect/controller/CollectController.java index 2160613..6f20fd1 100644 --- a/src/main/java/com/docus/server/collect/controller/CollectController.java +++ b/src/main/java/com/docus/server/collect/controller/CollectController.java @@ -7,6 +7,7 @@ import com.docus.infrastructure.web.api.CommonResult; import com.docus.server.collect.collector.LisSystemCollector; import com.docus.server.collect.dto.TBasicQrDto; import com.docus.server.collect.entity.TBasic; +import com.docus.server.collect.entity.TSeal; import com.docus.server.collect.feign.api.GdSzyCollectServiceApi; import com.docus.server.collect.infrastructure.dao.DownloadTaskDao; import lombok.extern.slf4j.Slf4j; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Objects; /** * @author WYBDEV @@ -62,11 +64,11 @@ public class CollectController implements GdSzyCollectServiceApi { if (count <= 0) { return CommonResult.success("本次采集0个患者"); } - final int size=200; + final int size = 200; int page = PageUtil.totalPage(count, size); for (int i = 1; i <= page; i++) { List tBasics = downloadTaskDao.pageBasicInfo(qrDto, (i - 1) * size, size); - if(Func.isNotEmpty(tBasics)){ + if (Func.isNotEmpty(tBasics)) { for (TBasic basic : tBasics) { if (Func.isBlank(basic.getAdmissDate()) || Func.isBlank(basic.getDisDate())) { log.error("采集失败,jzh:{} 患者住院或者出院时间为空!", basic.getJzh()); @@ -79,6 +81,29 @@ public class CollectController implements GdSzyCollectServiceApi { return CommonResult.success("本次采集" + count + "个患者"); } + @Override + public CommonResult lisSystemCollectBySealId(String sealId) { + log.info("根据 封存id 进行封存病案lis采集,sealId为:{}", sealId); + TSeal sealCondition = new TSeal(); + sealCondition.setSealId(sealId); + TSeal tSeal = downloadTaskDao.findSealByCondition(sealCondition); + if (Objects.isNull(tSeal)) { + log.error("采集失败,封存id:{} 没有找到封存病案信息!", sealId); + return CommonResult.failed("封存id:" + sealId + " 没有找到封存病案信息!"); + } + String jzh = tSeal.getJzh(); + if (Func.isBlank(jzh)) { + log.error("采集失败,封存id:{} 没有找到封存病案记帐号信息!", sealId); + return CommonResult.failed("封存id:" + sealId + " 没有找到封存病案记帐号信息!"); + } + TBasic basic = new TBasic(); + basic.setJzh(jzh); + List basicInfo = downloadTaskDao.getBasicInfo(basic); + TBasic tBasic = Func.isEmpty(basicInfo) ? null : basicInfo.get(0); + lisSystemCollector.sealCollect(tSeal, tBasic); + return CommonResult.success("采集完成!"); + } + private void validateDateStr(String dateStr) { try { Func.parseDate(dateStr); diff --git a/src/main/java/com/docus/server/collect/entity/TSeal.java b/src/main/java/com/docus/server/collect/entity/TSeal.java new file mode 100644 index 0000000..9a9b50b --- /dev/null +++ b/src/main/java/com/docus/server/collect/entity/TSeal.java @@ -0,0 +1,66 @@ +package com.docus.server.collect.entity; + +import com.docus.server.collect.service.dto.ReportFileInfoDTO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 在院封存 + *

+ * + * @author jiashi + * @since 2023-05-16 + */ +@Data +@ApiModel(value="TSeal对象", description="在院封存") +public class TSeal implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "在院封存病案主键") + private String patientId; + + @ApiModelProperty(value = "封存id") + private String sealId; + + @ApiModelProperty(value = "住院号") + private String inpatientNo; + + @ApiModelProperty(value = "住院就诊号") + private String jzh; + + @ApiModelProperty(value = "患者姓名") + private String name; + + @ApiModelProperty(value = "住院时间") + private Date admissDate; + + @ApiModelProperty(value = "封存时间") + private Date sealDate; + + @ApiModelProperty(value = "文件来源") + private Integer fileSource; + + @ApiModelProperty(value = "就诊次数") + private Integer admissTimes; + + @ApiModelProperty(value = "纸质是否签名 0:否 1:是") + private Integer signinfo; + + @ApiModelProperty(value = "备注") + private String remark; + + public TSeal() { + } + public TSeal(ReportFileInfoDTO dto) { + this.patientId=dto.getPatientId(); + this.jzh = dto.getJzh(); + this.inpatientNo = dto.getInpatientNo(); + this.admissTimes = dto.getAdmisstimes(); + } +} diff --git a/src/main/java/com/docus/server/collect/feign/api/GdSzyCollectServiceApi.java b/src/main/java/com/docus/server/collect/feign/api/GdSzyCollectServiceApi.java index d54c785..c48a04a 100644 --- a/src/main/java/com/docus/server/collect/feign/api/GdSzyCollectServiceApi.java +++ b/src/main/java/com/docus/server/collect/feign/api/GdSzyCollectServiceApi.java @@ -28,6 +28,13 @@ public interface GdSzyCollectServiceApi { CommonResult lisSystemCollectByJzh(@RequestParam("empId") String empId); + @ApiOperation("LIS 检验报告采集,根据封存id进行封存病案的采集") + @ApiImplicitParams({ + @ApiImplicitParam(name ="sealId",value = "封存id",required = true,paramType = "query",dataTypeClass = String.class) + }) + @GetMapping(PREFIX + "/lisBySealId") + CommonResult lisSystemCollectBySealId(@RequestParam("sealId") String sealId); + @ApiOperation("LIS 检验报告采集,根据出院区间") @ApiImplicitParams({ @ApiImplicitParam(name ="disDateStart",value = "出院时间 开始区间 yyyy-MM-dd",required = true,paramType = "query",dataTypeClass = String.class), diff --git a/src/main/java/com/docus/server/collect/infrastructure/client/DownloadPlatformService.java b/src/main/java/com/docus/server/collect/infrastructure/client/DownloadPlatformService.java index a42fc4c..f2309c1 100644 --- a/src/main/java/com/docus/server/collect/infrastructure/client/DownloadPlatformService.java +++ b/src/main/java/com/docus/server/collect/infrastructure/client/DownloadPlatformService.java @@ -18,4 +18,8 @@ public interface DownloadPlatformService { @ApiOperation("病案上报文件(通用)") @RequestMapping(value = "/api/downplatform/report",method = RequestMethod.POST) public CommonResult report(@RequestBody ReportDownDto resources); + + @ApiOperation("封存病历上报文件(省中医使用)") + @RequestMapping(value = "/api/downplatform/sealReport",method = RequestMethod.POST) + public CommonResult sealReport(@RequestBody ReportDownDto resources); } diff --git a/src/main/java/com/docus/server/collect/infrastructure/dao/DownloadTaskDao.java b/src/main/java/com/docus/server/collect/infrastructure/dao/DownloadTaskDao.java index e9218fb..3982827 100644 --- a/src/main/java/com/docus/server/collect/infrastructure/dao/DownloadTaskDao.java +++ b/src/main/java/com/docus/server/collect/infrastructure/dao/DownloadTaskDao.java @@ -4,6 +4,7 @@ import com.docus.infrastructure.core.db.dao.IBaseDao; import com.docus.server.collect.dto.TBasicQrDto; import com.docus.server.collect.entity.DownloadTask; import com.docus.server.collect.entity.TBasic; +import com.docus.server.collect.entity.TSeal; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -66,4 +67,13 @@ public interface DownloadTaskDao extends IBaseDao { * @return 下载任务id(也是文件id) */ Long getDownloadTaskIdFromDownFile(String patientId, String source, String serialNum); + + /** + * 根据封存条件查询封存信息 + * @date 2024/1/10 16:52 + * @author YongBin Wen + * @param seal 封存条件 + * @return com.docus.server.collect.entity.TSeal + */ + TSeal findSealByCondition(TSeal seal); } 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 a398ff7..006f784 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 @@ -6,6 +6,7 @@ import com.docus.infrastructure.core.db.dao.impl.BaseDaoImpl; import com.docus.server.collect.dto.TBasicQrDto; import com.docus.server.collect.entity.DownloadTask; import com.docus.server.collect.entity.TBasic; +import com.docus.server.collect.entity.TSeal; import com.docus.server.collect.infrastructure.dao.DownloadTaskDao; import com.docus.server.collect.infrastructure.mapper.DownloadTaskMapper; import org.springframework.stereotype.Repository; @@ -60,4 +61,9 @@ public class DownloadTaskDaoImpl extends BaseDaoImpl { /** * 根据病案查询条件,查询病案数量 + * * @param qrDto 查询条件 * @return 病案数量 */ @@ -28,27 +30,41 @@ public interface DownloadTaskMapper extends BaseMapper { /** * 根据条件,分页查询病案 - * @param qrDto 查询条件 + * + * @param qrDto 查询条件 * @param offset 分页参数从第几条开始 - * @param size 每页显示条数 + * @param size 每页显示条数 * @return 病案基础信息 */ - List pageBasicInfo(@Param("dto") TBasicQrDto qrDto,@Param("offset") long offset,@Param("size") long size); + List pageBasicInfo(@Param("dto") TBasicQrDto qrDto, @Param("offset") long offset, @Param("size") long size); /** * 根据病案的来源,病案文件的唯一标识,从文件表得到文件下载任务id(也是文件id) + * * @param patientId 病案主键 - * @param source 来源 + * @param source 来源 * @param serialNum 文件唯一标识 * @return 下载任务id(也是文件id) */ Long getDownloadTaskIdFromSanAssort(@Param("patientId") String patientId, @Param("source") String source, @Param("serialNum") String serialNum); + /** * 根据病案的来源,病案文件的唯一标识,从下载记录表得到文件下载任务id(也是文件id) + * * @param patientId 病案主键 - * @param source 来源 + * @param source 来源 * @param serialNum 文件唯一标识 * @return 下载任务id(也是文件id) */ Long getDownloadTaskIdFromDownFile(@Param("patientId") String patientId, @Param("source") String source, @Param("serialNum") String serialNum); + + /** + * 根据封存条件查询封存信息 + * + * @param seal 封存条件 + * @return com.docus.server.collect.entity.TSeal + * @date 2024/1/10 16:52 + * @author YongBin Wen + */ + TSeal findSealByCondition(@Param("seal") TSeal seal); } diff --git a/src/main/java/com/docus/server/collect/service/FileReportService.java b/src/main/java/com/docus/server/collect/service/FileReportService.java index 698e4c4..a3aad90 100644 --- a/src/main/java/com/docus/server/collect/service/FileReportService.java +++ b/src/main/java/com/docus/server/collect/service/FileReportService.java @@ -15,6 +15,13 @@ public interface FileReportService { */ void saveDownloadTaskAndReport(ReportFileInfoDTO fileInfoDTO); + /** + * + * 上报封存病案文件信息,生成|更新下载任务,并下发下载平台,此方法用于封存病案 t_seal + * @param fileInfoDTO 上报文件信息 + */ + void saveDownloadTaskAndSealReport(ReportFileInfoDTO fileInfoDTO); + /** * 根据下载文件任务信息,查询下载任务id(用作文件id) * 查询有三个地方,文件表(需要有patientId),文件下载记录表(需要有patientId),文件下载任务表 @@ -22,4 +29,5 @@ public interface FileReportService { * @return 下载任务id */ Long getDownloadTaskId(DownloadTask downloadTask); + } 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 d7cd289..f48851e 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 @@ -4,10 +4,13 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.docus.core.util.Func; import com.docus.infrastructure.redis.service.IdService; +import com.docus.infrastructure.web.api.CommonResult; import com.docus.server.collect.converter.FileReportConverter; import com.docus.server.collect.entity.DownloadTask; import com.docus.server.collect.entity.TBasic; +import com.docus.server.collect.entity.TSeal; import com.docus.server.collect.infrastructure.client.DownloadPlatformService; +import com.docus.server.collect.infrastructure.client.dto.ReportDownDto; import com.docus.server.collect.infrastructure.dao.DownloadTaskDao; import com.docus.server.collect.service.FileReportService; import com.docus.server.collect.service.dto.ReportFileInfoDTO; @@ -62,19 +65,39 @@ public class FileReportServiceImpl implements FileReportService { report(downloadTask); } + @Override + public void saveDownloadTaskAndSealReport(ReportFileInfoDTO fileInfoDTO) { + // TODO 封存病案 + TSeal sealCondition = new TSeal(fileInfoDTO); + // 查询基础数据,更新新的病案信息 + TSeal seal = downloadTaskDao.findSealByCondition(sealCondition); + // 如果找到患者基础数据,并且刚好为1条 + fileInfoDTO.setPatientId(seal.getPatientId()); + fileInfoDTO.setInpatientNo(seal.getInpatientNo()); + fileInfoDTO.setAdmisstimes(seal.getAdmissTimes()); + fileInfoDTO.setJzh(seal.getJzh()); + // 转换下载任务对象 + DownloadTask downloadTask = fileReportConverter.convertDownloadTask(fileInfoDTO, 2); + // 查询旧的下载任务id,更新/保存任务信息 + Long downloadTaskId = Optional.ofNullable(getDownloadTaskId(downloadTask)).orElse(idService.getDateSeq()); + downloadTask.setId(downloadTaskId); + downloadTaskDao.saveOrUpdate(downloadTask); + reportSeal(downloadTask); + } + @Override public Long getDownloadTaskId(DownloadTask downloadTask) { String patientId = downloadTask.getPatientId(); - if(StrUtil.isNotBlank(patientId)){ + if (StrUtil.isNotBlank(patientId)) { String serialNum = downloadTask.getFileSerialNum(); String source = downloadTask.getSource(); // 从文件表获取 - Long downloadTaskId = downloadTaskDao.getDownloadTaskIdFromSanAssort(patientId,source,serialNum); + Long downloadTaskId = downloadTaskDao.getDownloadTaskIdFromSanAssort(patientId, source, serialNum); if (Func.isNotEmpty(downloadTaskId)) { return downloadTaskId; } // 从下载记录表获取 - downloadTaskId = downloadTaskDao.getDownloadTaskIdFromDownFile(patientId,source,serialNum); + downloadTaskId = downloadTaskDao.getDownloadTaskIdFromDownFile(patientId, source, serialNum); if (Func.isNotEmpty(downloadTaskId)) { return downloadTaskId; } @@ -91,7 +114,36 @@ public class FileReportServiceImpl implements FileReportService { private void report(DownloadTask downloadTask) { threadPoolExecutor.execute(() -> { if (downloadTask.getBasicDataType().equals(0)) { - downloadPlatformService.report(fileReportConverter.convertDownloadPlatformParam(downloadTask)); + ReportDownDto reportDownDto = fileReportConverter.convertDownloadPlatformParam(downloadTask); + String paramJson = Func.toJson(reportDownDto); + try { + log.info("基础病案上报文件,参数:{}", paramJson); + CommonResult result = downloadPlatformService.report(reportDownDto); + log.info("基础病案上报文件,返回结果:{}", Func.toJson(result)); + } catch (Exception ex) { + log.error("基础病案上报文件发生未知错误,参数:" + paramJson, ex); + } + } + }); + } + + /** + * 根据下载任务,上报到下载平台服务 + * + * @param downloadTask 下载任务 + */ + private void reportSeal(DownloadTask downloadTask) { + threadPoolExecutor.execute(() -> { + if (downloadTask.getBasicDataType().equals(2)) { + ReportDownDto reportDownDto = fileReportConverter.convertDownloadPlatformParam(downloadTask); + String paramJson = Func.toJson(reportDownDto); + try { + log.info("封存病案上报文件,参数:{}", paramJson); + CommonResult result = downloadPlatformService.sealReport(reportDownDto); + log.info("封存病案上报文件,返回结果:{}", Func.toJson(result)); + } catch (Exception ex) { + log.error("封存病案上报文件发生未知错误,参数:" + paramJson, ex); + } } }); } diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml index 55cfa5d..2804424 100644 --- a/src/main/resources/mapper/TBasicMapper.xml +++ b/src/main/resources/mapper/TBasicMapper.xml @@ -117,4 +117,18 @@ order by `create_time` desc limit 1 + +