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,