ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatMedInhospController.java
@@ -13,9 +13,11 @@ import com.smartor.domain.PatMedInhospVO; import com.smartor.domain.PatMedReq; import com.smartor.service.IPatMedInhospService; import com.smartor.service.IPatMedOuthospService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -34,6 +36,13 @@ public class PatMedInhospController extends BaseController { @Autowired private IPatMedInhospService patMedInhospService; @Autowired private IPatMedOuthospService iPatMedOuthospService; @Value("${visitHosp}") private Integer visitHosp; /** * 查询患者住院记录列表 @@ -177,6 +186,11 @@ // @GetMapping("/test") // public void test() { // patMedInhospService.dealOutHospInfo(); // // //门诊表 // if (visitHosp != 1) { // iPatMedOuthospService.dealOutpatientInfo(); // } // } } ruoyi-admin/src/main/resources/application-druid.yml
@@ -13,10 +13,10 @@ # 公司 # url: jdbc:mysql://192.168.2.9:3308/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # 丽水 # url: jdbc:mysql://127.0.0.1:3308/smartor-lisui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # username: smartor # password: Smartor.2023 # driverClassName: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://127.0.0.1:3308/smartor-lisui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # username: smartor # password: Smartor.2023 # driverClassName: com.mysql.cj.jdbc.Driver # # 新华 # url: jdbc:mysql://192.168.191.181:3308/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # username: smartor @@ -205,9 +205,6 @@ #语音地址访问前缀(公司) #voicePathPrefix: http://192.168.2.13:8095/profile/upload/vadio/ #允许自动生成任务 createTaskServiceType: 2 #第个小时电话拨打的上限 phoneUpEveryHour: 12 #电话每天结束时间 @@ -221,3 +218,6 @@ #admin管理员userId isAdmin: 1,2,3,4,5,6,7,8,9,10,11,12,13 #随访医院:1新华 2丽水 visitHosp: 2 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -72,6 +72,9 @@ private IPatMedInhospService iPatMedInhospService; @Autowired private IPatMedOuthospService iPatMedOuthospService; @Autowired private IPatMedOperationService iPatMedOperationService; @Autowired @@ -100,6 +103,9 @@ @Value("${req_path}") private String req_path; @Value("${visitHosp}") private Integer visitHosp; @Autowired private ServiceTaskMapper serviceTaskMapper; @@ -239,7 +245,12 @@ * 处理患者信息,进入子任务表 */ public void dealOutHospInfo() { //出院表 iPatMedInhospService.dealOutHospInfo(); //门诊表 if(visitHosp!=1) { iPatMedOuthospService.dealOutpatientInfo(); } } smartor/src/main/java/com/smartor/domain/ExternalInHospPatientDiagnoseInfo.java
@@ -26,4 +26,7 @@ @ApiModelProperty(value = "疾病编码") private String Icd10; @ApiModelProperty(value = "疾病") private String Icd10; } smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -282,10 +282,20 @@ private String inhospstate; /** * 长期任务,是否处理:0未处理 1处理 * 科室长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "长期任务,是否处理:0未处理 1处理成功 2处理科室失败 3处理疾病失败") private String checkFlag; @ApiModelProperty(value = "长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String deptcheckFlag; /** * 病区长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "病区长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String wardcheckFlag; /** * 疾病长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "疾病长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String diagcheckFlag; /** * 年龄 smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
@@ -1,15 +1,13 @@ package com.smartor.domain; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; import java.util.Date; /** * 患者门诊记录对象 pat_med_outhosp @@ -197,6 +195,11 @@ @ApiModelProperty(value = "手机号") private String telcode; /** * 疾病长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "疾病长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String diagcheckFlag; @JsonFormat(pattern = "yyyy-MM-dd") smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java
@@ -67,4 +67,6 @@ //通过患者ID获取到最新的deptcode public PatMedOuthosp getDeptCodeByPatId(PatMedOuthosp patMedOuthosp); public Integer dealOutpatientInfo(); } smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -28,8 +28,6 @@ public class PatMedInhospServiceImpl implements IPatMedInhospService { @Autowired private PatMedInhospMapper patMedInhospMapper; @Autowired private ServiceCheckMapper serviceCheckMapper; @Autowired private ServiceTaskdeptMapper serviceTaskdeptMapper; @@ -40,15 +38,7 @@ @Autowired private PatArchiveMapper patArchiveMapper; @Autowired private TemplateDeptMapper templateDeptMapper; @Autowired private PatArchiveImportMapper patArchiveImportMapper; @Autowired private Icd10AssociationMapper icd10AssociationMapper; @Autowired private SvyTaskTemplateMapper svyTaskTemplateMapper; @Autowired private IvrTaskTemplateMapper ivrTaskTemplateMappte; @Autowired private ServiceTaskMapper serviceTaskMapper; @Autowired @@ -56,13 +46,8 @@ @Autowired private SysUserDeptMapper sysUserDeptMapper; @Value("${createTaskServiceType}") private List<String> createTaskServiceType; //记录长期任务基础信息 List<IvrLibaTemplate> libaTemplates = new ArrayList<>(); List<IvrTaskTemplate> ivrTaskTemplates = new ArrayList<>(); List<ServiceTask> serviceTaskList = new ArrayList<>(); @Value("${visitHosp}") private Integer visitHosp; /** * 查询患者住院记录 @@ -202,12 +187,16 @@ return patMedInhospMapper.deletePatMedInhospByInhospno(inhospno); } @Override public int dealOutHospInfo() { //定义三个变量用来记录,这个患者是不是三个随访都是为空 Boolean deptIsNull = false; Boolean wardIsNull = false; Boolean diagIsNull = false; PatMedInhosp patMedInhosp = new PatMedInhosp(); //获取需要出院随访,未处理的数据 patMedInhosp.setCheckFlag("0"); //获取需要出院部门随访,未处理的数据 patMedInhosp.setDeptcheckFlag("0"); patMedInhosp.setInhospstate("1"); patMedInhosp.setFuflag("1"); List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); @@ -218,70 +207,76 @@ } for (PatMedInhosp patMedInhosp1 : patMedInhosps) { //先根据科室去service_check查询check_visit_flag是根据“科室”随访,还是根据“第一诊断”随访 ServiceCheck serviceCheck = new ServiceCheck(); serviceCheck.setDeptCode(patMedInhosp1.getDeptcode()); serviceCheck.setOrgid(patMedInhosp1.getOrgid()); List<ServiceCheck> serviceChecks = serviceCheckMapper.selectServiceCheckList(serviceCheck); //获取患者信息 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); if (Objects.isNull(patArchive)) { patMedInhosp1.setCheckFlag("2"); patMedInhosp1.setDeptcheckFlag("2"); patMedInhosp1.setWardcheckFlag("2"); patMedInhosp1.setDiagcheckFlag("2"); patMedInhosp1.setLongTaskReason("患者基本信息为空"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); continue; } try { if (CollectionUtils.isEmpty(serviceChecks) || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 1 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { //根据患者所在科室,获取该科室的长期任务 ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); //根据患者所在科室,获取该科室的长期任务 ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); serviceTaskdept.setLongtask(1L); serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); serviceTaskdept.setDeptType("1"); List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); //如果部门模板为空(将deptIsNull设置为true) if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { deptIsNull = true; } else { for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1); } patMedInhosp1.setDeptcheckFlag("1"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); } //根据患者所在病区,获取该病区的长期任务,新华医院可以先不用根据病区和疾病来做 if (visitHosp != 1) { serviceTaskdept.setLongtask(1L); serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); serviceTaskdept.setServiceType("2"); List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); //如果部门模板为空(暂定,将出入院表的check_flag设置为2 ,long_task_reason 记录原因) if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { patMedInhosp1.setCheckFlag("2"); patMedInhosp1.setLongTaskReason("该患者所在科室,未配置长期任务;"); serviceTaskdept.setDeptCode(patMedInhosp1.getLeavehospitaldistrictcode()); serviceTaskdept.setDeptType("2"); List<ServiceTaskdept> serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); //如果部门模板为空(将deptIsNull设置为true) if (CollectionUtils.isEmpty(serviceTaskdeptList) || serviceTaskdeptList.size() == 0) { wardIsNull = true; } else { for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 2); } patMedInhosp1.setWardcheckFlag("1"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); continue; } else if (serviceTaskdepts.size() > 1) { //如果查询出多个任务,那就取第一个,并在患者备注一下 List<Long> tempList = serviceTaskdepts.stream().map(ServiceTaskdept::getTaskId).collect(Collectors.toList()); patMedInhosp1.setLongTaskReason("该患者所在科室,有多个出院随访长期任务:" + tempList); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); ServiceTaskdept serviceTaskdept1 = serviceTaskdepts.get(0); serviceTaskdepts = new ArrayList<>(); serviceTaskdepts.add(serviceTaskdept1); } writeInSubTask(serviceTaskdepts.get(0).getTaskId(), true, patMedInhosp1, patArchive); } if (serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 2 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { //丽水需要根据离院疾病对该病人生成一次随访 String[] split = patMedInhosp1.getIcd10code().split(","); // 根据患者的疾病,获取该疾病的长期任务 ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); serviceTaskdiag.setLongtask(1L); serviceTaskdiag.setIcd10code(split[0]); serviceTaskdiag.setServiceType("2"); serviceTaskdiag.setIcd10code(patMedInhosp1.getLeaveldeptcode()); List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); PatMedInhosp patMedInhosp2 = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); //如果疾病编码为空(暂定,将出入院表的check_flag设置为3 ,long_task_reason 记录原因) //如果部门模板为空(将deptIsNull设置为true) if (CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { patMedInhosp1.setCheckFlag("3"); patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,未配置长期任务;"); diagIsNull = true; } else { for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 3); } patMedInhosp1.setDiagcheckFlag("1"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); continue; } else if (serviceTaskdiags.size() > 1) { //如果查询出多个任务,那就取第一个,并在患者备注一下 List<Long> tempList = serviceTaskdiags.stream().map(ServiceTaskdiag::getTaskId).collect(Collectors.toList()); patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,有多个出院随访长期任务:" + tempList); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); ServiceTaskdiag serviceTaskdiag1 = serviceTaskdiags.get(0); serviceTaskdiags = new ArrayList<>(); serviceTaskdiags.add(serviceTaskdiag1); } writeInSubTask(serviceTaskdiags.get(0).getTaskId(), false, patMedInhosp1, patArchive); } //三个都为空,没法随访了 if (diagIsNull == true && deptIsNull == true && wardIsNull == true) { patMedInhosp1.setDeptcheckFlag("2"); patMedInhosp1.setWardcheckFlag("2"); patMedInhosp1.setDiagcheckFlag("2"); patMedInhosp1.setLongTaskReason("该患者所在科室、病区 或所患的疾病,未配置长期任务;"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); } } catch (Exception e) { @@ -291,7 +286,7 @@ } //获取未处理在院的数据(如果刚刚出院的患者数据的出院时间,在下面查询出的入院时间之前,那之前的出院患者的数据,也得停掉,因为又入院了) patMedInhosp.setCheckFlag("0"); patMedInhosp.setDeptcheckFlag("0"); patMedInhosp.setInhospstate("0"); List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); for (PatMedInhosp patMedInhosp1 : patMedInhosps) { @@ -303,6 +298,108 @@ } return 1; } // // @Override // public int dealOutHospInfo() { // PatMedInhosp patMedInhosp = new PatMedInhosp(); // //获取需要出院部门随访,未处理的数据 // patMedInhosp.setDeptcheckFlag("0"); // patMedInhosp.setInhospstate("1"); // patMedInhosp.setFuflag("1"); // List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); // log.error("dealOutHospInfo需要处理的出院患者信息:{}", patMedInhosps); // for (PatMedInhosp patMedInhosp1 : patMedInhosps) { // String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); // patMedInhosp1.setTagname(tagname); // } // // for (PatMedInhosp patMedInhosp1 : patMedInhosps) { // //先根据科室去service_check查询check_visit_flag是根据“科室”随访,还是根据“第一诊断”随访 // ServiceCheck serviceCheck = new ServiceCheck(); // serviceCheck.setDeptCode(patMedInhosp1.getDeptcode()); // serviceCheck.setOrgid(patMedInhosp1.getOrgid()); // List<ServiceCheck> serviceChecks = serviceCheckMapper.selectServiceCheckList(serviceCheck); // //获取患者信息 // PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); // if (Objects.isNull(patArchive)) { // patMedInhosp1.setDeptcheckFlag("2"); // patMedInhosp1.setLongTaskReason("患者基本信息为空"); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // continue; // } // try { // if (CollectionUtils.isEmpty(serviceChecks) || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 1 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { // //根据患者所在科室,获取该科室的长期任务 // ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); // serviceTaskdept.setLongtask(1L); // serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); // serviceTaskdept.setServiceType("2"); // List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); // //如果部门模板为空(暂定,将出入院表的check_flag设置为2 ,long_task_reason 记录原因) // if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { // patMedInhosp1.setDeptcheckFlag("2"); // patMedInhosp1.setLongTaskReason("该患者所在科室,未配置长期任务;"); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // continue; // } else if (serviceTaskdepts.size() > 1) { // //如果查询出多个任务,那就取第一个,并在患者备注一下 // List<Long> tempList = serviceTaskdepts.stream().map(ServiceTaskdept::getTaskId).collect(Collectors.toList()); // patMedInhosp1.setLongTaskReason("该患者所在科室,有多个出院随访长期任务:" + tempList); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // ServiceTaskdept serviceTaskdept1 = serviceTaskdepts.get(0); // serviceTaskdepts = new ArrayList<>(); // serviceTaskdepts.add(serviceTaskdept1); // } // // writeInSubTask(serviceTaskdepts.get(0).getTaskId(), true, patMedInhosp1, patArchive); // } // if (serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 2 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { // //丽水需要根据离院疾病对该病人生成一次随访 // String[] split = patMedInhosp1.getIcd10code().split(","); // ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); // serviceTaskdiag.setLongtask(1L); // serviceTaskdiag.setIcd10code(split[0]); // serviceTaskdiag.setServiceType("2"); // List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); // PatMedInhosp patMedInhosp2 = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); // //如果疾病编码为空(暂定,将出入院表的check_flag设置为3 ,long_task_reason 记录原因) // if (CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { // patMedInhosp1.setDeptcheckFlag("3"); // patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,未配置长期任务;"); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // continue; // } else if (serviceTaskdiags.size() > 1) { // //如果查询出多个任务,那就取第一个,并在患者备注一下 // List<Long> tempList = serviceTaskdiags.stream().map(ServiceTaskdiag::getTaskId).collect(Collectors.toList()); // patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,有多个出院随访长期任务:" + tempList); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // ServiceTaskdiag serviceTaskdiag1 = serviceTaskdiags.get(0); // serviceTaskdiags = new ArrayList<>(); // serviceTaskdiags.add(serviceTaskdiag1); // } // writeInSubTask(serviceTaskdiags.get(0).getTaskId(), false, patMedInhosp1, patArchive); // } // // } catch (Exception e) { // e.printStackTrace(); // log.error("人员处理出异常了:{}", e.getMessage()); // } // } // // //获取未处理在院的数据(如果刚刚出院的患者数据的出院时间,在下面查询出的入院时间之前,那之前的出院患者的数据,也得停掉,因为又入院了) // patMedInhosp.setDeptcheckFlag("0"); // patMedInhosp.setInhospstate("0"); // List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); // for (PatMedInhosp patMedInhosp1 : patMedInhosps) { // String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); // patMedInhosp1.setTagname(tagname); // } // if (CollectionUtils.isNotEmpty(patMedInhospList) && patMedInhospList.size() > 0) { // dealInHospInfo(patMedInhospList); // } // return 1; // } /** * 获取出院,住院,门诊服务人次 @@ -361,30 +458,21 @@ } //将患者放到subtask中 private void writeInSubTask(Long taskid, Boolean check, PatMedInhosp patMedInhosp1, PatArchive patArchive) { private void writeInSubTask(Long taskid, Boolean check, PatMedInhosp patMedInhosp1, PatArchive patArchive, Integer type) { String longTaskReason = patMedInhosp1.getLongTaskReason(); if (StringUtils.isEmpty(longTaskReason)) longTaskReason = ""; // Long taskid = std.getTaskId(); ServiceTask st = new ServiceTask(); st.setTaskid(taskid); st.setSendState(2L); List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); if (CollectionUtils.isEmpty(serviceTasks)) { log.error("该患者出院随访长期任务不存在,任务ID为:{}", taskid); patMedInhosp1.setCheckFlag("2"); patMedInhosp1.setDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者出院随访长期任务不存在,任务ID为:" + taskid); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); return; } ServiceTask serviceTask = serviceTasks.get(0); if (!createTaskServiceType.contains(serviceTask.getServiceType())) { //不是允许的服务类型,则continue log.error("该患者出院随访长期任务的服务类型不在自动生成的服务类型列表中,任务ID为:{}", taskid); patMedInhosp1.setCheckFlag("2"); patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者出院随访长期任务的服务类型不在自动生成的服务类型列表中,任务ID为:" + taskid); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); return; } //封装serviceSubtask ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp1, patArchive); Integer i = 0; @@ -394,6 +482,7 @@ ServiceSubtaskVO subtask = new ServiceSubtaskVO(); subtask.setPatid(patArchive.getId()); subtask.setSendstate(2L); subtask.setTaskid(taskid); List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); log.error("该患者待执行的任务:{}", selectServiceSubtaskList); if (CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { @@ -402,25 +491,40 @@ //不是长期任务,不处理 continue; } if (serviceSubtask1.getEndtime().before(serviceSubtask.getEndtime())) { //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉 //type = 1或2 表示 ”科室、病区“ if (type == 1 || type == 2) { if (serviceSubtask1.getEndtime().before(serviceSubtask.getEndtime()) && serviceSubtask1.getServiceType().equals("2")) { //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉 serviceSubtask1.setSendstate(4L); serviceSubtask1.setRemark("患者再入院"); serviceSubtask1.setResult("error"); serviceSubtask1.setFinishtime(new Date()); serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy()); serviceSubtask1.setUpdateTime(new Date()); Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); if (aBoolean) i = 1; } else { //相反,则将当有的数据停掉 serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); serviceSubtask.setSendstate(4L); serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务"); serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } } else if (type == 3) { //type=3 表示疾病 //将之前的停掉 serviceSubtask1.setSendstate(4L); serviceSubtask1.setRemark("患者再入院"); serviceSubtask1.setRemark("疾病患者再入院"); serviceSubtask1.setResult("error"); serviceSubtask1.setFinishtime(new Date()); serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy()); serviceSubtask1.setUpdateTime(new Date()); Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); if (aBoolean) i = 1; } else { //相反,则将当有的数据停掉 serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); serviceSubtask.setSendstate(4L); serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务"); serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); //重新新增子任务 i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } } } else { @@ -450,17 +554,22 @@ //将check_flag改成1(已处理) PatMedInhosp patMedInhosp2 = new PatMedInhosp(); patMedInhosp2.setInhospid(patMedInhosp1.getInhospid()); patMedInhosp2.setCheckFlag("1"); if (type == 1) patMedInhosp2.setDeptcheckFlag("1"); if (type == 2) patMedInhosp2.setWardcheckFlag("1"); if (type == 3) patMedInhosp2.setDiagcheckFlag("1"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp2); } else { //生成子任务失败, log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask); PatMedInhosp patMedInhosp2 = new PatMedInhosp(); patMedInhosp2.setInhospid(patMedInhosp1.getInhospid()); patMedInhosp2.setRemark("生成子任务失败"); if (type == 1) patMedInhosp2.setDeptcheckFlag("2"); if (type == 2) patMedInhosp2.setWardcheckFlag("2"); if (type == 3) patMedInhosp2.setDiagcheckFlag("2"); patMedInhosp2.setRemark("生成子任务失败 " + type); patMedInhospMapper.updatePatMedInhosp(patMedInhosp2); } } //封装serviceSubtask @@ -538,7 +647,6 @@ serviceSubtask1.setResult("error"); serviceSubtask1.setFinishtime(new Date()); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); // patMedInhosp1.setCheckFlag("1"); } } } smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
@@ -1,21 +1,18 @@ package com.smartor.service.impl; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.*; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUserDept; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DtoConversionUtils; import com.ruoyi.common.utils.SecurityUtils; import com.smartor.domain.PatMedReq; import com.smartor.domain.PatMedRes; import com.smartor.mapper.SysUserDeptMapper; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.*; import com.smartor.mapper.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.smartor.mapper.PatMedOuthospMapper; import com.smartor.domain.PatMedOuthosp; import com.smartor.service.IPatMedOuthospService; import org.springframework.util.CollectionUtils; @@ -25,6 +22,7 @@ * @author smartor * @date 2023-03-04 */ @Slf4j @Service public class PatMedOuthospServiceImpl implements IPatMedOuthospService { @Autowired @@ -32,6 +30,18 @@ @Autowired private SysUserDeptMapper sysUserDeptMapper; @Autowired private ServiceSubtaskMapper serviceSubtaskMapper; @Autowired private ServiceTaskMapper serviceTaskMapper; @Autowired private ServiceTaskdiagMapper serviceTaskdiagMapper; @Autowired private PatArchiveMapper patArchiveMapper; /** @@ -127,4 +137,173 @@ } return patMedOuthosps.get(0); } /** * 门诊病人信息处理 * * @return */ @Override public Integer dealOutpatientInfo() { PatMedOuthosp patMedOuthosp = new PatMedOuthosp(); patMedOuthosp.setDiagcheckFlag("0"); List<PatMedOuthosp> patMedOuthosps = selectPatMedOuthospList(patMedOuthosp); for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) { // 根据患者的疾病,获取该疾病的长期任务 ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); serviceTaskdiag.setLongtask(1L); serviceTaskdiag.setIcd10code(patMedOuthosp1.getIcd10code()); List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid()); //如果部门模板为空(将deptIsNull设置为true) if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { patMedOuthosp1.setDiagcheckFlag("2"); patMedOuthosp1.setRemark("通过icd10,没有找到随访任务ID"); patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1); } else { for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp1, patArchive); } } } return 1; } private void writeInSubTask(Long taskid, Boolean check, PatMedOuthosp patMedOuthosp, PatArchive patArchive) { ServiceTask st = new ServiceTask(); st.setTaskid(taskid); st.setSendState(2L); List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTasks)) { log.error("该患者疾病随访长期任务不存在,任务ID为:{}", taskid); patMedOuthosp.setDiagcheckFlag("2"); patMedOuthosp.setRemark("该患者疾病随访长期任务不存在,任务ID为:" + taskid); patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp); return; } ServiceTask serviceTask = serviceTasks.get(0); //封装serviceSubtask ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedOuthosp, patArchive); Integer i = 0; //先判断一下,是否需要校验 if (check) { //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院) ServiceSubtaskVO subtask = new ServiceSubtaskVO(); subtask.setPatid(patArchive.getId()); subtask.setSendstate(2L); subtask.setTaskid(taskid); List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); log.error("该患者待执行的任务:{}", selectServiceSubtaskList); if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) { if (Objects.isNull(serviceSubtask1.getLongSendTime())) { //不是长期任务,不处理 continue; } //将之前的停掉 serviceSubtask1.setSendstate(4L); serviceSubtask1.setRemark("疾病患者再入院"); serviceSubtask1.setResult("error"); serviceSubtask1.setFinishtime(new Date()); serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy()); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); //重新新增子任务 i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } } else { if (StringUtils.isEmpty(serviceSubtask.getPhone())) { serviceSubtask.setRemark("手机号为空"); serviceSubtask.setSendstate(4L); serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); } serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } } else { if (StringUtils.isEmpty(serviceSubtask.getPhone())) { serviceSubtask.setRemark("手机号为空"); serviceSubtask.setSendstate(4L); serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); } serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } if (i == 1) { //将check_flag改成1(已处理) PatMedOuthosp patMedOuthosp1 = new PatMedOuthosp(); patMedOuthosp1.setId(patMedOuthosp.getId()); patMedOuthosp1.setDiagcheckFlag("1"); patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1); } else { //生成子任务失败, log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask); PatMedOuthosp pmo = new PatMedOuthosp(); pmo.setId(patMedOuthosp.getId()); pmo.setDiagcheckFlag("2"); pmo.setRemark("生成子任务失败"); patMedOuthospMapper.updatePatMedOuthosp(pmo); } } //封装serviceSubtask private ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedOuthosp patMedOuthosp, PatArchive patArchive) { ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class); serviceSubtask.setTaskid(serviceTask.getTaskid()); if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid())) serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid())); serviceSubtask.setDrcode(patMedOuthosp.getDrcode()); serviceSubtask.setDrname(patMedOuthosp.getDrname()); serviceSubtask.setDeptcode(patMedOuthosp.getDeptcode()); serviceSubtask.setDeptname(patMedOuthosp.getDeptname()); serviceSubtask.setTemplateid(serviceTask.getTemplateid()); serviceSubtask.setTemplatename(serviceTask.getTemplatename()); serviceSubtask.setPatid(patArchive.getId()); serviceSubtask.setSendname(patArchive.getName()); serviceSubtask.setSfzh(patArchive.getIdcardno()); serviceSubtask.setPhone(patArchive.getTelcode()); if (StringUtils.isBlank(patArchive.getTelcode())) serviceSubtask.setPhone(patArchive.getRelativetelcode()); serviceSubtask.setSex(patArchive.getSex()); serviceSubtask.setAge(patArchive.getAge()); serviceSubtask.setSendstate(2L); serviceSubtask.setServiceType("3"); serviceSubtask.setPreachform(serviceTask.getPreachform()); serviceSubtask.setHospType("1"); serviceSubtask.setCreateTime(new Date()); serviceSubtask.setUpdateTime(new Date()); serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); serviceSubtask.setUpdateTime(new Date()); //设置发送时间 if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L); Date newDate = addDays(patMedOuthosp.getAdmitdate(), serviceTask.getSendDay().intValue()); serviceSubtask.setLongSendTime(newDate); //患者发送时间 if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) { String remark = patArchive.getNotrequiredreason(); serviceSubtask.setRemark(remark); serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); //不执行 serviceSubtask.setSendstate(4L); } return serviceSubtask; } private Date addDays(Date date, Integer days) { if (days == null) { days = 1; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, days); return calendar.getTime(); } } smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -47,7 +47,9 @@ <result property="patname" column="patname"/> <result property="patno" column="patno"/> <result property="inhospstate" column="inhospstate"/> <result property="checkFlag" column="check_flag"/> <result property="deptcheckFlag" column="deptcheck_flag"/> <result property="wardcheckFlag" column="wardcheck_flag"/> <result property="diagcheckFlag" column="diagcheck_flag"/> <result property="age" column="age"/> <result property="sex" column="sex"/> <result property="telcode" column="telcode"/> @@ -88,7 +90,9 @@ out_way_name, nurse_id, nurse_name, check_flag, deptcheck_flag, wardcheck_flag, diagcheck_flag, inhospstate, patno, long_task_reason, @@ -143,7 +147,9 @@ b.patname, b.out_way_id, b.out_way_name, b.check_flag, b.deptcheck_flag, b.wardcheck_flag, b.diagcheck_flag, b.inhospstate, b.patno, b.inhospno, @@ -243,7 +249,9 @@ <if test="patno != null ">and b.patno = #{patno}</if> <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if> <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if> <if test="checkFlag != null ">and b.check_flag = #{checkFlag}</if> <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if> <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if> <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if> <if test="cry != null and cry == 0 ">and b.endtime is null</if> <if test="cry != null and cry == 1 ">and b.endtime is not null</if> <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if> @@ -300,7 +308,9 @@ b.out_way_name, b.nurse_id, b.nurse_name, b.check_flag, b.deptcheckFlag, b.diagcheckFlag, b.wardcheckFlag, b.inhospstate, b.patno, b.inhospno, @@ -369,7 +379,9 @@ <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if> <if test="nurseName != null ">and b.nurse_name = #{nurseName}</if> <if test="patno != null ">and b.patno = #{patno}</if> <if test="checkFlag != null ">and b.check_flag = #{checkFlag}</if> <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if> <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if> <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if> <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if> <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if> <if test="leavediagname != null and leavediagname != ''">and b.leavediagname like concat('%', @@ -451,7 +463,9 @@ <if test="patname!= null">patname,</if> <if test="patno != null">patno,</if> <if test="inhospstate != null">inhospstate,</if> <if test="checkFlag != null">check_flag,</if> <if test="deptcheckFlag != null">deptcheck_flag,</if> <if test="wardcheckFlag != null">wardcheck_flag,</if> <if test="diagcheckFlag != null">diagcheck_flag,</if> <if test="longTaskReason != null">long_task_reason,</if> <if test="nurseId != null ">nurse_id,</if> <if test="nurseName != null ">nurse_name,</if> @@ -511,7 +525,9 @@ <if test="patname!= null">#{patname},</if> <if test="patno != null">#{patno},</if> <if test="inhospstate != null">#{inhospstate},</if> <if test="checkFlag != null">#{checkFlag},</if> <if test="deptcheckFlag != null">#{deptcheckFlag},</if> <if test="wardcheckFlag != null">#{wardcheckFlag},</if> <if test="diagcheckFlag != null">#{diagcheckFlag},</if> <if test="longTaskReason != null">#{longTaskReason},</if> <if test="nurseId != null ">#{nurseId},</if> <if test="nurseName != null ">#{nurseName},</if> @@ -575,7 +591,9 @@ <if test="patname!= null">patname = #{patname},</if> <if test="patno != null">patno = #{patno},</if> <if test="inhospstate != null">inhospstate = #{inhospstate},</if> <if test="checkFlag != null">check_flag = #{checkFlag},</if> <if test="deptcheckFlag != null">deptcheck_flag = #{deptcheckFlag},</if> <if test="wardcheckFlag != null">wardcheck_flag = #{wardcheckFlag},</if> <if test="diagcheckFlag != null">diagcheck_flag = #{diagcheckFlag},</if> <if test="longTaskReason != null">long_task_reason = #{longTaskReason},</if> <if test="nurseId != null ">nurse_id = #{nurseId},</if> <if test="nurseName != null ">nurse_name = #{nurseName},</if> smartor/src/main/resources/mapper/smartor/PatMedOuthospMapper.xml
@@ -34,12 +34,16 @@ <result property="patname" column="patname"/> <result property="guid" column="guid"/> <result property="patno" column="patno"/> <result property="diagcheckFlag" column="diagcheck_flag"/> <result property="remark" column="remark"/> </resultMap> <sql id="selectPatMedOuthospVo"> select id, outhospno, diagcheck_flag, patno, remark, serialnum, patid, hospitalname, @@ -73,7 +77,9 @@ resultMap="PatMedOuthospResult"> select pmo.id, pmo.remark, pmo.outhospno, pmo.diagcheck_flag, pmo.patno, pmo.serialnum, pmo.patid, @@ -106,7 +112,7 @@ from pat_med_outhosp pmo left join pat_archive pa on pmo.patid = pa.id <where> pmo.del_flag=0 and pmo.orgid =#{orgid} <if test="orgid != null ">and pmo.orgid = #{orgid}</if> <if test="hospitalname != null and hospitalname != ''">and pmo.hospitalname like concat('%', #{hospitalname}, '%') @@ -131,6 +137,7 @@ <if test="patno != null ">and pmo.patno = #{patno}</if> <if test="orgid != null and orgid != ''">and pmo.orgid = #{orgid}</if> <if test="outhospno != null and outhospno != ''">and pmo.outhospno = #{outhospno}</if> <if test="diagcheckFlag != null and diagcheckFlag != ''">and pmo.diagcheck_flag = #{diagcheckFlag}</if> </where> order by pmo.update_time desc </select> @@ -172,6 +179,8 @@ <if test="patname != null">patname,</if> <if test="guid != null">guid,</if> <if test="patno != null">patno,</if> <if test="diagcheckFlag != null">diagcheck_flag,</if> <if test="remark != null">remark,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="serialnum != null">#{serialnum},</if> @@ -202,6 +211,8 @@ <if test="patname != null">#{patname},</if> <if test="guid != null">#{guid},</if> <if test="patno != null">#{patno},</if> <if test="diagcheckFlag != null">#{diagcheckFlag},</if> <if test="remark != null">#{remark},</if> </trim> </insert> @@ -236,6 +247,8 @@ <if test="patname != null">patname = #{patname},</if> <if test="guid != null">guid = #{guid},</if> <if test="patno != null">patno = #{patno},</if> <if test="diagcheckFlag != null">diagcheck_flag = #{diagcheckFlag},</if> <if test="remark != null">remark = #{remark},</if> </trim> where id = #{id} </update>