From cfdbdff8f37f994a7bfbfd61561f8ea7f0b5931f Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Thu, 23 Jan 2025 15:08:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=8B=B1=E5=BE=B7=E4=B8=AD=E5=8C=BB?= =?UTF-8?q?=E9=99=A2his=E4=BB=BB=E5=8A=A1=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive/mapper/AfCollectTaskMapper.java | 4 +- .../synchis/controller/HisTaskController.java | 44 +++++++++ .../server/synchis/entity/InLocEmrView.java | 27 ++++++ .../server/synchis/job/CheckHisTaskJob.java | 45 +++++++++ .../synchis/mapper/YdZyyHisDbMapper.java | 20 ++++ .../server/synchis/service/HisService.java | 11 +++ .../synchis/service/impl/HisServiceImpl.java | 91 +++++++++++++++++++ .../server/synclis/job/LisTaskSyncJob.java | 4 +- .../synclis/service/impl/LisServiceImpl.java | 2 +- .../resources/mapper/AfCollectTaskMapper.xml | 10 +- .../resources/mapper/YdZyyHisDbMapper.xml | 19 ++++ 11 files changed, 273 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/docus/server/synchis/controller/HisTaskController.java create mode 100644 src/main/java/com/docus/server/synchis/entity/InLocEmrView.java create mode 100644 src/main/java/com/docus/server/synchis/job/CheckHisTaskJob.java create mode 100644 src/main/java/com/docus/server/synchis/mapper/YdZyyHisDbMapper.java create mode 100644 src/main/java/com/docus/server/synchis/service/HisService.java create mode 100644 src/main/java/com/docus/server/synchis/service/impl/HisServiceImpl.java create mode 100644 src/main/resources/mapper/YdZyyHisDbMapper.xml diff --git a/src/main/java/com/docus/server/archive/mapper/AfCollectTaskMapper.java b/src/main/java/com/docus/server/archive/mapper/AfCollectTaskMapper.java index c40b0a7..a9c88c2 100644 --- a/src/main/java/com/docus/server/archive/mapper/AfCollectTaskMapper.java +++ b/src/main/java/com/docus/server/archive/mapper/AfCollectTaskMapper.java @@ -22,5 +22,7 @@ public interface AfCollectTaskMapper { int cancelTask(@Param("taskIds") List taskIds); - int cancelFile(@Param("taskIds") List taskIds); + int cancelFileByTaskId(@Param("taskIds") List taskIds); + + int cancelFileById(@Param("fileIds") List fileIds); } diff --git a/src/main/java/com/docus/server/synchis/controller/HisTaskController.java b/src/main/java/com/docus/server/synchis/controller/HisTaskController.java new file mode 100644 index 0000000..6d0b88f --- /dev/null +++ b/src/main/java/com/docus/server/synchis/controller/HisTaskController.java @@ -0,0 +1,44 @@ +package com.docus.server.synchis.controller; + +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.archive.entity.TBasic; +import com.docus.server.archive.mapper.TBasicMapper; +import com.docus.server.synchis.service.HisService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author YongBin Wen + * @date 2025/1/16 17:10 + */ +@RestController +@Api(tags = "HIS报告视图任务") +@RequestMapping("/ydzyyhistask") +@Slf4j +public class HisTaskController { + @Resource + private HisService hisService; + @Resource + private TBasicMapper basicMapper; + + + @ApiOperation(value = "根据出院日期(yyyy-MM-dd)范围进行his任务检查") + @GetMapping("/check") + public CommonResult revisionMzTaskAndFile(String startDate, String endDate) { + String start = startDate + " 00:00:00"; + String end = endDate + " 23:59:59"; + List tbasics = basicMapper.getByDisDate(start, end); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 检查HIS任务和文件。出院时间:{} 至 {} 共 {} 条数据!", start, end, tbasics.size()); + for (TBasic tbasic : tbasics) { + hisService.checkTask(tbasic); + } + return CommonResult.success("检查完成!"); + } +} diff --git a/src/main/java/com/docus/server/synchis/entity/InLocEmrView.java b/src/main/java/com/docus/server/synchis/entity/InLocEmrView.java new file mode 100644 index 0000000..fc131a5 --- /dev/null +++ b/src/main/java/com/docus/server/synchis/entity/InLocEmrView.java @@ -0,0 +1,27 @@ +package com.docus.server.synchis.entity; + +import lombok.Data; + +import java.util.Date; + +/** + * @author YongBin Wen + * @date 2025/1/23 13:00 + */ +@Data +public class InLocEmrView { + private Integer patid; + private Integer ntime; + private String inpatno; + private String name; + private Integer catalogid; + private String catalogname; + private Integer id; + private String templatetitle; + private String recodingname; + private Date recordingtime; + private Date modifyopertime; +// private String content; + private String sort; + private Date outtime; +} diff --git a/src/main/java/com/docus/server/synchis/job/CheckHisTaskJob.java b/src/main/java/com/docus/server/synchis/job/CheckHisTaskJob.java new file mode 100644 index 0000000..12e5fc9 --- /dev/null +++ b/src/main/java/com/docus/server/synchis/job/CheckHisTaskJob.java @@ -0,0 +1,45 @@ +package com.docus.server.synchis.job; + +import com.docus.core.util.Func; +import com.docus.server.archive.entity.TBasic; +import com.docus.server.archive.mapper.TBasicMapper; +import com.docus.server.synchis.service.HisService; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + +/** + * @author YongBin Wen + * @date 2025/1/23 13:21 + */ +@Slf4j +@Component +public class CheckHisTaskJob { + + @Resource + private HisService hisService; + @Resource + private TBasicMapper tBasicMapper; + + @XxlJob("hisTaskCheckJob") + private void hisTaskCheckJob() { + LocalDate startLocalDate = LocalDate.now().plusMonths(-6); + String start = startLocalDate + " 00:00:00"; + String end = Func.formatDateTime(new Date()); + try { + List tbasics = tBasicMapper.getByDisDate(start, end); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HIS视图任务检查开始。出院时间:{} 至 {} 共 {} 条数据!", start, end, tbasics.size()); + for (TBasic tbasic : tbasics) { + hisService.checkTask(tbasic); + } + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HIS视图任务检查结束。"); + } catch (Exception ex) { + log.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HIS视图任务检查出错了," + ex.getMessage(), ex); + } + } +} diff --git a/src/main/java/com/docus/server/synchis/mapper/YdZyyHisDbMapper.java b/src/main/java/com/docus/server/synchis/mapper/YdZyyHisDbMapper.java new file mode 100644 index 0000000..44d3692 --- /dev/null +++ b/src/main/java/com/docus/server/synchis/mapper/YdZyyHisDbMapper.java @@ -0,0 +1,20 @@ +package com.docus.server.synchis.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.docus.server.synchis.entity.InLocEmrView; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * V_JSWZH_WZX_PACS pacs视图 + * @author YongBin Wen + * @date 2024/1/8 8:31 + */ +@DS("ydzyy-hisdb-oracle") +public interface YdZyyHisDbMapper { + + int countPatFile(@Param("patId") String patId,@Param("catalogName") String catalogName); + + List queryByPatId(@Param("patId") String patId); +} diff --git a/src/main/java/com/docus/server/synchis/service/HisService.java b/src/main/java/com/docus/server/synchis/service/HisService.java new file mode 100644 index 0000000..2caf94e --- /dev/null +++ b/src/main/java/com/docus/server/synchis/service/HisService.java @@ -0,0 +1,11 @@ +package com.docus.server.synchis.service; + +import com.docus.server.archive.entity.TBasic; + +/** + * @author YongBin Wen + * @date 2025/1/23 13:22 + */ +public interface HisService { + void checkTask(TBasic tbasic); +} diff --git a/src/main/java/com/docus/server/synchis/service/impl/HisServiceImpl.java b/src/main/java/com/docus/server/synchis/service/impl/HisServiceImpl.java new file mode 100644 index 0000000..f2eb395 --- /dev/null +++ b/src/main/java/com/docus/server/synchis/service/impl/HisServiceImpl.java @@ -0,0 +1,91 @@ +package com.docus.server.synchis.service.impl; + +import com.docus.core.util.Func; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.archive.entity.AfCollectTask; +import com.docus.server.archive.entity.TBasic; +import com.docus.server.archive.mapper.AfCollectTaskMapper; +import com.docus.server.synchis.entity.InLocEmrView; +import com.docus.server.synchis.mapper.YdZyyHisDbMapper; +import com.docus.server.synchis.service.HisService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author YongBin Wen + * @date 2025/1/23 13:22 + */ +@Service +@Slf4j +public class HisServiceImpl implements HisService { + @Resource + private YdZyyHisDbMapper ydZyyHisDbMapper; + @Resource + private AfCollectTaskMapper afCollectTaskMapper; + @Resource + private IdService idService; + + @Override + public void checkTask(TBasic tbasic) { + String hisSource="2"; + String jzh = tbasic.getJzh(); + String patientId = tbasic.getPatientId(); + List collectTasks = afCollectTaskMapper.findByPatientIds(Collections.singletonList(patientId)); + List emrViews = ydZyyHisDbMapper.queryByPatId(jzh); + + List hisCollectTasks = collectTasks.stream() + .filter(tsk->hisSource.equals(tsk.getSysflag())) + .collect(Collectors.toList()); + + Map emrViewMap = emrViews.stream() + .collect(Collectors.toMap(v->v.getId().toString(), Function.identity())); + + List cancelTasks=new ArrayList<>(); + List updateTasks=new ArrayList<>(); + for (AfCollectTask task : hisCollectTasks) { + String fileId = task.getC7(); + // 病程记录不检查 + if (fileId.contains("bcjl")) { + continue; + } + // 视图没有作废 + InLocEmrView emrView =emrViewMap.get(fileId); + if(Objects.isNull(emrView)){ + cancelTasks.add(task); + continue; + } + // 如果更新修改状态 + Date modifytime = task.getT2(); + Date viewModifyopertime = emrView.getModifyopertime(); + if(viewModifyopertime.after(modifytime)) { + task.setSyncTime(new Date()); + task.setState("0"); + task.setC9("1"); + task.setPresult(""); + task.setT1(emrView.getRecordingtime()); + task.setT2(viewModifyopertime); + updateTasks.add(task); + } + } + if (Func.isNotEmpty(cancelTasks)) { + List fileIds = cancelTasks.stream().map(AfCollectTask::getAfArchiveDetailId).collect(Collectors.toList()); + List taskIds = cancelTasks.stream().map(AfCollectTask::getId).collect(Collectors.toList()); + afCollectTaskMapper.cancelTask(taskIds); + afCollectTaskMapper.cancelFileById(fileIds); + } + if (Func.isNotEmpty(updateTasks)) { + afCollectTaskMapper.update(updateTasks); + } + + } +} diff --git a/src/main/java/com/docus/server/synclis/job/LisTaskSyncJob.java b/src/main/java/com/docus/server/synclis/job/LisTaskSyncJob.java index b15ceb6..8844e81 100644 --- a/src/main/java/com/docus/server/synclis/job/LisTaskSyncJob.java +++ b/src/main/java/com/docus/server/synclis/job/LisTaskSyncJob.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.time.LocalDate; import java.util.Date; import java.util.List; @@ -26,7 +27,8 @@ public class LisTaskSyncJob { @XxlJob("lisTaskSyncJob") private void lisTaskSyncJob() { - String start = "2022-10-01 00:00:00"; + LocalDate startLocalDate = LocalDate.now().plusMonths(-6); + String start = startLocalDate + " 00:00:00"; String end = Func.formatDateTime(new Date()); try { diff --git a/src/main/java/com/docus/server/synclis/service/impl/LisServiceImpl.java b/src/main/java/com/docus/server/synclis/service/impl/LisServiceImpl.java index c6e45b9..17b40ad 100644 --- a/src/main/java/com/docus/server/synclis/service/impl/LisServiceImpl.java +++ b/src/main/java/com/docus/server/synclis/service/impl/LisServiceImpl.java @@ -85,7 +85,7 @@ public class LisServiceImpl implements LisService { } List cancelTaskIds = cancelTasks.stream().map(AfCollectTask::getId).collect(Collectors.toList()); afCollectTaskMapper.cancelTask(cancelTaskIds); - afCollectTaskMapper.cancelFile(cancelTaskIds); + afCollectTaskMapper.cancelFileByTaskId(cancelTaskIds); } diff --git a/src/main/resources/mapper/AfCollectTaskMapper.xml b/src/main/resources/mapper/AfCollectTaskMapper.xml index bbcc135..bc594b8 100644 --- a/src/main/resources/mapper/AfCollectTaskMapper.xml +++ b/src/main/resources/mapper/AfCollectTaskMapper.xml @@ -33,7 +33,7 @@ #{taskId} - + UPDATE `docus_archivefile`.`t_scan_assort` SET is_del = '1' WHERE taskid IN @@ -41,6 +41,14 @@ + + UPDATE `docus_archivefile`.`t_scan_assort` SET is_del = '1' + WHERE id IN + + #{fileId} + + + + SELECT COUNT(1) + FROM his_user.PL_INLOCEMR + WHERE PATID = #{patId} + AND CATALOGNAME = #{catalogName} + + +