已修改7个文件
93 ■■■■ 文件已修改
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedOperationItemMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -1502,6 +1502,27 @@
    }
    /**
     * 任务组(appltype=5)首轮纳入:扫描新出院患者,按 schedule 绑定的维度匹配任务组,
     * 为命中的患者按计划明细一次性生成第 0 轮 N 条 subtask,并置 schedulecheck_flag=1。
     * 后续轮次由 {@link #rollTaskGroupCycle()} 负责。
     * <p>
     * 与主扫描 dealOutHospInfo 分离,互不干扰。建议每 30 分钟执行一次。
     */
    public void dealTaskGroupOutHosp() {
        log.info("【dealTaskGroupOutHosp】开始扫描任务组新出院患者");
        if (!port.equals("8095")) {
            return;
        }
        try {
            String config = configService.selectConfigByKey("visit.early.day");
            iPatMedInhospService.dealOutHospInfoBySchedule(config);
            log.info("【dealTaskGroupOutHosp】任务组首轮纳入扫描完成");
        } catch (Exception e) {
            log.error("【dealTaskGroupOutHosp】任务组扫描异常", e);
        }
    }
    /**
     * 任务组(appltype=5)循环任务滚动调度。
     * <p>
     * 扫描所有 schedule_style=1 的计划,若本轮 subtask 全部 finalize(sendstate ∉ 1/2/3),
smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java
@@ -223,5 +223,8 @@
    @ApiModelProperty(value = "部门编码集合")
    private List<String> deptCodes;
    @ApiModelProperty(value = "手术等级集合")
    private List<String> opLevelCodes;
}
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -349,7 +349,7 @@
        serviceTaskVo.setAppltype("5");
        List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(serviceTaskVo);
        if (CollectionUtils.isEmpty(serviceTasks)) {
        if (CollectionUtils.isNotEmpty(serviceTasks)) {
            for (ServiceTask serviceTask : serviceTasks) {
                if(!ObjectUtils.isEmpty(serviceTask.getTaskid())){
                    ServiceTaskSchedule serviceTaskSchedule = new ServiceTaskSchedule();
@@ -394,7 +394,8 @@
                            patMedInhospVo.setScheduleCheckFlag("0");
                            patMedInhospVo.setInhospstate("1");
                            patMedInhospVo.setFuflag("1");
                            patMedInhospVo.setDeptcodeList(deptCodeList);
//                            patMedInhospVo.setDeptcodeList(deptCodeList);
                            patMedInhospVo.setLeaveldeptcodes(deptCodeList);
                            patMedInhospVo.setLeavehospitaldistrictcodes(wardCodeList);
                            patMedInhospVo.setIcd10codeList(icd10CodeList);
                            List<PatMedInhosp> patList = patMedInhospMapper.selectPatMedInhospList(patMedInhospVo);
@@ -408,9 +409,10 @@
                                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid());
                                if (Objects.isNull(patArchive)) {
                                    break;
                                    continue;
                                }
                                //封装serviceSubtask
                                ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp, patArchive, config, type);
                                List<Map<String, Object>> preachformList = new ArrayList<>();
                                if(StringUtils.isNotEmpty(serviceTask.getPreachformDesc())){
@@ -418,28 +420,31 @@
                                        ObjectMapper objectMapper = new ObjectMapper();
                                        preachformList = objectMapper.readValue(serviceTask.getPreachformDesc(), List.class);
                                    }catch (Exception e){
                                        break;
                                        log.error("任务组preachformDesc解析失败,taskid={},inhospid={}", serviceTask.getTaskid(), patMedInhosp.getInhospid());
                                    }
                                }
                                scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskSchedule, serviceTaskScheduleDetails, serviceSubtask, preachformList);
                                //置首轮纳入标记,避免下次扫描重复生成(后续轮次由 rollTaskGroupCycle 负责)
                                PatMedInhosp flagUpd = new PatMedInhosp();
                                flagUpd.setInhospid(patMedInhosp.getInhospid());
                                flagUpd.setScheduleCheckFlag("1");
                                patMedInhospMapper.updatePatMedInhosp(flagUpd);
                            }
                        }else {
                            //任务组 - 手术随访
                            if(CollectionUtils.isNotEmpty(opLevelCodeList)){
                                //目前仅限单一手术等级
                                String opLevelCode = opLevelCodeList.get(0);
                                PatMedOperationItem pmoi = new PatMedOperationItem();
                                //获取需要出院疾病随访,未处理的数据
                                pmoi.setOpercheckFlag("0");
                                pmoi.setMainFlag("1");
                                pmoi.setOplevelcode(opLevelCode);
                                pmoi.setDeptCodes(deptCodeList);
                                pmoi.setWardCodes(wardCodeList);
                                pmoi.setOpLevelCodes(opLevelCodeList);
                                List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi);
                                for(PatMedOperationItem patMedOperationItem : patMedOperationItems){
                                    PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperationItem.getPatid());
                                    if (Objects.isNull(patArchive)) {
                                        break;
                                        continue;
                                    }
                                    PatMedInhosp patMedInhospVo = new PatMedInhosp();
                                    patMedInhospVo.setPatid((patMedOperationItem.getPatid()));
@@ -460,10 +465,15 @@
                                                ObjectMapper objectMapper = new ObjectMapper();
                                                preachformList = objectMapper.readValue(serviceTask.getPreachformDesc(), List.class);
                                            }catch (Exception e){
                                                break;
                                                log.error("任务组(手术)preachformDesc解析失败,taskid={}", serviceTask.getTaskid());
                                            }
                                        }
                                        scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskSchedule, serviceTaskScheduleDetails, serviceSubtask, preachformList);
                                        //置首轮纳入标记,避免重复生成
                                        PatMedInhosp flagUpd = new PatMedInhosp();
                                        flagUpd.setInhospid(patMedInhospList.get(0).getInhospid());
                                        flagUpd.setScheduleCheckFlag("1");
                                        patMedInhospMapper.updatePatMedInhosp(flagUpd);
                                    }
                                }
                            }
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -722,16 +722,27 @@
                    ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
                    serviceTaskoper.setOpcode(serviceTaskVO.getOpcode());
                    serviceTaskoper.setOpdesc(serviceTaskVO.getOpdesc());
                    serviceTaskoper.setOplevelcode(serviceTaskVO.getOplevelcode());
//                    serviceTaskoper.setOplevelcode(serviceTaskVO.getOplevelcode());
                    serviceTaskoper.setTaskId(serviceTask.getTaskid());
                    serviceTaskoper.setTaskName(serviceTask.getTaskName());
                    serviceTaskoper.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                    serviceTaskoper.setGuid(serviceTask.getGuid());
                    serviceTaskoper.setOrgid(serviceTask.getOrgid());
                    serviceTaskoper.setCreateTime(new Date());
                    //配置科室、病区
                    serviceTaskoper.setDeptCode(serviceTaskVO.getDeptcode());
                    serviceTaskoper.setDeptName(serviceTaskVO.getDeptname());
                    serviceTaskoper.setWardCode(serviceTaskVO.getLeavehospitaldistrictcode());
                    serviceTaskoper.setWardName(serviceTaskVO.getLeavehospitaldistrictname());
                    //多选手术等级
                    if (StringUtils.isNotEmpty(serviceTaskVO.getOplevelcode())) {
                        log.info("----serviceTaskoper的值为:{}", serviceTaskoper);
                        serviceTaskoperService.insertServiceTaskoper(serviceTaskoper);
                        String[] opLevelcodes = serviceTaskVO.getOplevelcode().split(",");
                        for (String opLevelcode : opLevelcodes) {
                            //先查询一下是否存在
                            log.info("----serviceTaskoper的值为:{}", serviceTaskoper);
                            serviceTaskoper.setOplevelcode(opLevelcode);
                            serviceTaskoperService.insertServiceTaskoper(serviceTaskoper);
                        }
                    }
                } else if (serviceTaskVO.getAppltype().equals("5")) {
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -314,6 +314,13 @@
                #{deptcode}
            </foreach>
        </if>
        <if test="icd10codeList != null and icd10codeList.size()>0">
            AND b.leaveicd10code IN
            <foreach collection="icd10codeList" item="icd10code" open="(" separator=","
                     close=")">
                #{icd10code}
            </foreach>
        </if>
        GROUP BY
        b.inhospid,
        a.age,
smartor/src/main/resources/mapper/smartor/PatMedOperationItemMapper.xml
@@ -500,6 +500,13 @@
                #{wardCode}
            </foreach>
        </if>
        <if test="opLevelCodes != null and opLevelCodes.size()>0">
            AND pmoi.oplevelcode IN
            <foreach collection="opLevelCodes" item="levelCode" open="(" separator=","
                     close=")">
                #{levelCode}
            </foreach>
        </if>
    </select>
</mapper>
smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleMapper.xml
@@ -20,7 +20,7 @@
        <result property="deptCodes" column="dept_codes"/>
        <result property="wardCodes" column="ward_codes"/>
        <result property="icd10Codes" column="icd10_codes"/>
        <result property="oplevelCodes" column="remark"/>
        <result property="oplevelCodes" column="oplevel_codes"/>
        <result property="remark" column="remark"/>
        <result property="delFlag" column="del_flag"/>
        <result property="createBy" column="create_by"/>
@@ -44,10 +44,10 @@
               next_execute_time,
               schedule_benchmark,
               schedule_benchmark_custom_time,
               deptCodes,
               wardCodes,
               icd10Codes,
               oplevelCodes,
               dept_codes,
               ward_codes,
               icd10_codes,
               oplevel_codes,
               remark,
               del_flag,
               create_by,