陈昶聿
2026-08-27 9b1f0d5ff6e503060797083aa6693cc3fb6c35eb
【丽水】门诊完成接诊-生成随访任务逻辑
已修改6个文件
193 ■■■■■ 文件已修改
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -1766,4 +1766,55 @@
        // 出院(发送)时间 + 本步补偿时间 小于当前时间 -> 超时
        return deadline.getTime() < new Date().getTime();
    }
    /**
     * 处理超时随访任务
     * @return
     */
    public void dealSubtaskDeadline(Integer deadlineDay){
        Date deadline = DateUtils.addDays(new Date(), deadlineDay);
        //通过任务ID拿到患者信息,并且随访时间得是今天之前的
        ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
        serviceSubtaskVO.setSendstate(7L);
        serviceSubtaskVO.setVisitCount(1);
        serviceSubtaskVO.setEndOutHospTime(deadline);
        List<ServiceSubtask> serviceSubtaskList
                = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
        log.info("【dealSubtaskDeadline】获取到{}个超时任务", serviceSubtaskList.size());
        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
            PatMedInhosp patMedInhosp = new PatMedInhosp();
            patMedInhosp.setInhospid(serviceSubtask.getInhospid());
            List<PatMedInhosp> patMedInhospList = iPatMedInhospService.selectPatMedInhospList(patMedInhosp);
            if (patMedInhospList.size() > 0) {
                serviceSubtask.setIsVisitAgain(2);
                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";患者再入院了" : "患者再入院了");
                serviceSubtask.setSendstate(4L);
                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                //return "无需再次随访,患者再入院了";
            }else {
                continue;
            }
            //新增再次随访任务
            ServiceSubtask serviceSubtaskAgain = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtask.class);
            serviceSubtaskAgain.setId(null);
            serviceSubtaskAgain.setUpid(serviceSubtask.getId().intValue());
            serviceSubtaskAgain.setVisitCount(serviceSubtask.getVisitCount() + 1);
            serviceSubtaskAgain.setSendstate(2L);
            serviceSubtaskAgain.setCreateTime(new Date());
            serviceSubtaskAgain.setUpdateTime(new Date());
            serviceSubtaskAgain.setVisitType(serviceSubtask.getVisitType());
            serviceSubtaskAgain.setVisitDeptCode(serviceSubtask.getVisitDeptCode());
            serviceSubtaskAgain.setVisitDeptName(serviceSubtask.getVisitDeptName());
            int i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtaskAgain);
            if (i == 1) {
                //再次随访任务创建成功后,原任务改为失败状态
                serviceSubtask.setIsVisitAgain(2);
                serviceSubtask.setSendstate(5L);
                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
            }
        }
    }
}
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -58,6 +58,8 @@
    public List<ServiceSubtask> selectServiceSubtaskListAgain(ServiceSubtaskEntity serviceSubtaskVO);
    public List<ServiceSubtask> selectServiceSubtaskListDeadLine(ServiceSubtaskEntity serviceSubtaskVO);
    public List<Integer> selectSendstateByCondition(ServiceSubtask serviceSubtask);
    /**
smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java
@@ -71,6 +71,25 @@
    public ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedOuthosp patMedOuthosp, PatArchive patArchive);
    //门诊记录再次随访
    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Date adminDate, Integer visitTimeNum);
    /**
     * 门诊记录首次随访
     * @param patMedOuthosp
     * @return
     */
    public Integer followUpByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum);
    /**
     * 门诊记录再次随访
     * @param patMedOuthosp
     * @return
     */
    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum);
    /**
     * 门诊记录处理
     * @param patMedOuthosp
     * @return
     */
    public Integer dealPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum);
}
smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
@@ -512,6 +512,7 @@
        serviceSubtask.setVisitDeptCode(patMedOuthosp.getDeptcode());
        serviceSubtask.setVisitDeptName(patMedOuthosp.getDeptname());
        serviceSubtask.setUpdateTime(new Date());
        serviceSubtask.setAdmindate(patMedOuthosp.getAdmitdate());
        //设置发送时间
        if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L);
        Date newDate = addDays(patMedOuthosp.getAdmitdate(), serviceTask.getSendDay().intValue());
@@ -536,15 +537,82 @@
    /**
     *
     * @param patMedOuthosp
     * @param visitTimeNum
     * @return
     */
    @Override
    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Date adminDate, Integer visitTimeNum) {
        int hoursToAdd = visitTimeNum * 24;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(adminDate);
        calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
        Date newDate = calendar.getTime();
    public Integer dealPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum){
        Integer num = 0;
        ServiceSubtaskEntity serviceSubtask = new ServiceSubtaskEntity();
        serviceSubtask.setInhospid(patMedOuthosp.getId());
        serviceSubtask.setServiceType("3");
        serviceSubtask.setVisitCount(1);
        List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtask);
        if(CollectionUtils.isEmpty(serviceSubtasks)){
            num = followUpByPatMedOuthosp(patMedOuthosp, visitTimeNum);
        }else {
            num = followUpAgainByPatMedOuthosp(patMedOuthosp, visitTimeNum);
        }
        return num;
    }
    /**
     * 门诊首次随访
     * @param patMedOuthosp
     * @return
     */
    @Override
    public Integer followUpByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum) {
//        if(ObjectUtils.isEmpty(patMedOuthosp.getFudate())){
            Date adminDate = patMedOuthosp.getAdmitdate();
            Date fuDate = addDays(adminDate, visitTimeNum);
            patMedOuthosp.setFudate(fuDate);
//        }
        PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp.getPatid());
        //根据患者科室,获取该疾病的长期任务
        ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
        serviceTaskdept.setLongtask(1L);
        serviceTaskdept.setDeptCode(patMedOuthosp.getDeptcode());
        serviceTaskdept.setServiceType("3");
        List<ServiceTaskdept> serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
        if (CollectionUtils.isEmpty(serviceTaskdeptList) || serviceTaskdeptList.size() == 0) {
            patMedOuthosp.setDeptcheckFlag("2");
            patMedOuthosp.setRemark("通过部门,没有找到门诊随访任务ID");
            updatePatMedOuthosp(patMedOuthosp);
        } else {
            for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
                writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp, patArchive, 1);
            }
        }
        // 根据患者的疾病,获取该疾病的长期任务
//        ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
//        serviceTaskdiag.setLongtask(1L);
//        serviceTaskdiag.setIcd10code(patMedOuthosp.getIcd10code());
//        List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag);
//        //如果部门模板为空(将deptIsNull设置为true)
//        if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) {
//            patMedOuthosp.setDiagcheckFlag("2");
//            patMedOuthosp.setRemark("通过icd10,没有找到门诊随访任务ID");
//            updatePatMedOuthosp(patMedOuthosp);
//        } else {
//            for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) {
//                writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp, patArchive, 2);
//            }
//        }
        return 1;
    }
    /**
     * 门诊再次随访
     * @param patMedOuthosp
     * @return
     */
    @Override
    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum) {
        Date adminDate = patMedOuthosp.getAdmitdate();
        Date newDate = addDays(adminDate, visitTimeNum);
        Integer i = 0;
        String deptcode = patMedOuthosp.getDeptcode();
@@ -564,10 +632,18 @@
            serviceSubtask0.setFinishtime(adminDate);
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask0);
            ServiceSubtask serviceSubtask1 = serviceSubtaskList0.get(0);
            ServiceSubtask serviceSubtask1 = DtoConversionUtils.sourceToTarget(serviceSubtask0, ServiceSubtask.class);
            serviceSubtask1.setId(null);
            serviceSubtask1.setSendstate(2L);
            serviceSubtask1.setUpid(serviceSubtask0.getId().intValue());
            serviceSubtask1.setVisitCount(serviceSubtask0.getVisitCount() + 1);
            serviceSubtask1.setVisitType(serviceSubtask0.getVisitType());
            serviceSubtask1.setVisitDeptCode(serviceSubtask0.getVisitDeptCode());
            serviceSubtask1.setVisitDeptName(serviceSubtask0.getVisitDeptName());
            serviceSubtask1.setCreateTime(new Date());
            serviceSubtask1.setUpdateTime(new Date());
            serviceSubtask1.setFinishtime(null);
            serviceSubtask1.setAdmindate(adminDate);
            serviceSubtask1.setVisitTime(newDate);
            serviceSubtask1.setLongSendTime(newDate);
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1243,10 +1243,22 @@
            i = patMedOuthospService.insertPatMedOuthosp(patMedOuthosp);
        }
        Date adminDate = externalJZInfo.getJiuZhenRQ();
        Date adminDate = patMedOuthosp.getAdmitdate();
        //完成接诊 已经完成任务再次随访
        if(ObjectUtils.isNotEmpty(visitTimeNum) && ObjectUtils.isNotEmpty(adminDate)){
            patMedOuthospService.followUpAgainByPatMedOuthosp(patMedOuthosp, adminDate, visitTimeNum);
        if(ObjectUtils.isNotEmpty(visitTimeNum)
                && ObjectUtils.isNotEmpty(adminDate)
                && StringUtils.isNotEmpty(patMedOuthosp.getFuflag())
                && patMedOuthosp.getFuflag().equals("1")){
            if(visitTimeUnit.equals("天")){
                visitTimeNum = visitTimeNum;
            }else if(visitTimeUnit.equals("周")){
                visitTimeNum = visitTimeNum * 7;
            }else if(visitTimeUnit.equals("月")){
                visitTimeNum = visitTimeNum * 30;
            }else if(visitTimeUnit.equals("年")){
                visitTimeNum = visitTimeNum * 365;
            }
            patMedOuthospService.dealPatMedOuthosp(patMedOuthosp, visitTimeNum);
        }
        if (i > 0) {
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -3089,5 +3089,14 @@
        t.taskid
    </select>
    <select id="selectServiceSubtaskListDeadLine" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
            resultMap="ServiceSubtaskResult">
        <include refid="selectServiceSubtaskVo"/>
        where 1=1
        and del_flag = 0
        and visit_count = 1
        and endtime
    </select>
</mapper>