| | |
| | | private IServiceSubtaskDetailTraceService traceService; |
| | | |
| | | @Autowired |
| | | private IServiceTaskScheduleService serviceTaskScheduleService; |
| | | |
| | | @Autowired |
| | | private com.smartor.common.ScheduleSubtaskBuilder scheduleSubtaskBuilder; |
| | | |
| | | @Autowired |
| | | private FtpService ftpService; |
| | | |
| | | @Autowired |
| | |
| | | serviceTaskoperService.insertServiceTaskoper(serviceTaskoper); |
| | | } |
| | | |
| | | } else if (serviceTaskVO.getAppltype().equals("5")) { |
| | | // 任务组:必须为长期任务(否则 findMatchingTaskIds 扫不到,无法自动纳入新出院患者) |
| | | if (serviceTaskVO.getLongTask() == null || serviceTaskVO.getLongTask() != 1) { |
| | | throw new BaseException("appltype=5 任务组必须为长期任务(longTask=1)"); |
| | | } |
| | | // 保存计划 + 明细 |
| | | ServiceTaskScheduleVO scheduleVO = serviceTaskVO.getServiceTaskScheduleVO(); |
| | | if (scheduleVO == null) { |
| | | throw new BaseException("appltype=5 任务组:serviceTaskScheduleVO 不能为空"); |
| | | } |
| | | scheduleVO.setTaskid(serviceTask.getTaskid()); |
| | | scheduleVO.setOrgid(serviceTask.getOrgid()); |
| | | scheduleVO.setCampusid(serviceTask.getCampusid()); |
| | | scheduleVO.setCreateBy(serviceTask.getCreateBy()); |
| | | log.info("----serviceTaskSchedule的值为:{}", scheduleVO); |
| | | serviceTaskScheduleService.saveScheduleWithDetail(scheduleVO); |
| | | // 绑定维度写条件表(供 HIS 自动纳入匹配,longtask 恒=1) |
| | | bindDimensionCondition(serviceTask, serviceTaskVO); |
| | | } else { |
| | | ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); |
| | | serviceTaskdept.setTaskId(serviceTask.getTaskid()); |
| | |
| | | serviceSubtask.setLongSendTime(patTaskRelevance.getLongSendTime()); |
| | | serviceSubtask.setVisitTime(patTaskRelevance.getVisittime()); |
| | | } |
| | | |
| | | // ===== appltype=5 任务组:按 schedule 的 detailList 派生多条 subtask ===== |
| | | if ("5".equals(serviceTaskVO.getAppltype())) { |
| | | ServiceTaskSchedule schedule = serviceTaskScheduleService.selectByTaskid(serviceTask.getTaskid()); |
| | | if (schedule == null) { |
| | | throw new BaseException("appltype=5 任务组:未找到 taskid=" + serviceTask.getTaskid() + " 的计划"); |
| | | } |
| | | List<ServiceTaskScheduleDetail> detailList = |
| | | serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId()); |
| | | scheduleSubtaskBuilder.buildSubtasksForPatient( |
| | | serviceTask, serviceTaskVO, schedule, detailList, patTaskRelevance, serviceSubtask); |
| | | continue; |
| | | } |
| | | |
| | | serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | serviceSubtask.getId().intValue(); |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | } else if (serviceTaskVO.getAppltype().equals("5")) { |
| | | // 任务组修改:删旧 schedule + 明细,重建。subtask 上面已批量清理。 |
| | | if (serviceTaskVO.getLongTask() == null || serviceTaskVO.getLongTask() != 1) { |
| | | throw new BaseException("appltype=5 任务组必须为长期任务(longTask=1)"); |
| | | } |
| | | ServiceTaskScheduleVO scheduleVO = serviceTaskVO.getServiceTaskScheduleVO(); |
| | | if (scheduleVO == null) { |
| | | throw new BaseException("appltype=5 任务组:serviceTaskScheduleVO 不能为空"); |
| | | } |
| | | scheduleVO.setTaskid(serviceTask.getTaskid()); |
| | | scheduleVO.setOrgid(serviceTask.getOrgid()); |
| | | scheduleVO.setCampusid(serviceTask.getCampusid()); |
| | | scheduleVO.setCreateBy(serviceTask.getUpdateBy()); |
| | | serviceTaskScheduleService.saveScheduleWithDetail(scheduleVO); |
| | | // 先清旧维度条件表,再按最新入参重写(防过期维度残留导致误纳入) |
| | | clearDimensionCondition(serviceTask.getTaskid()); |
| | | bindDimensionCondition(serviceTask, serviceTaskVO); |
| | | } |
| | | } |
| | | if (ObjectUtils.isNotEmpty(serviceTaskVO.getIvrTaskTemplateVO())) { |
| | |
| | | serviceSubtask.setVisitTime(patTaskRelevance.getVisittime()); |
| | | serviceSubtask.setTextParam(new Gson().toJson(serviceTaskVO.getTextParam())); |
| | | if (patTaskRelevance.getIsoperation() != null) { |
| | | // appltype=5 任务组:追加患者(isoperation=1)走计划派生;修改(2)/删除(3)仍走原逻辑 |
| | | if ("5".equals(serviceTaskVO.getAppltype()) && patTaskRelevance.getIsoperation() == 1) { |
| | | ServiceTaskSchedule schedule = serviceTaskScheduleService.selectByTaskid(serviceTask.getTaskid()); |
| | | if (schedule == null) { |
| | | throw new BaseException("appltype=5 任务组:未找到 taskid=" + serviceTask.getTaskid() + " 的计划"); |
| | | } |
| | | List<ServiceTaskScheduleDetail> detailList = |
| | | serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId()); |
| | | serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); |
| | | serviceSubtask.setCreateBy(serviceTask.getUpdateBy()); |
| | | scheduleSubtaskBuilder.buildSubtasksForPatient( |
| | | serviceTask, serviceTaskVO, schedule, detailList, patTaskRelevance, serviceSubtask); |
| | | continue; |
| | | } |
| | | if (patTaskRelevance.getIsoperation() == 2) { |
| | | serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); |
| | | serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask); |
| | |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 任务组(appltype=5)绑定维度写条件表,供 HIS 自动纳入匹配。 |
| | | * longtask 恒=1(否则独立扫描/主扫描按 longtask=1 查不到)。 |
| | | * 复用现有 service_taskdept(科室deptType=1/病区deptType=2)、service_taskdiag(疾病)。 |
| | | * 手术维度本期不写(暂不支持自动纳入)。 |
| | | */ |
| | | private void bindDimensionCondition(ServiceTask serviceTask, ServiceTaskVO vo) { |
| | | // 科室 |
| | | if (StringUtils.isNotEmpty(vo.getDeptcode())) { |
| | | for (String deptCode : vo.getDeptcode().split(",")) { |
| | | if (StringUtils.isEmpty(deptCode)) continue; |
| | | ServiceTaskdept d = new ServiceTaskdept(); |
| | | d.setTaskId(serviceTask.getTaskid()); |
| | | d.setTaskName(serviceTask.getTaskName()); |
| | | d.setOrgid(serviceTask.getOrgid()); |
| | | d.setLongtask(1L); |
| | | d.setDeptCode(deptCode); |
| | | d.setDeptType("1"); |
| | | d.setServiceType(vo.getServiceType()); |
| | | serviceTaskdeptService.insertServiceTaskdept(d); |
| | | } |
| | | } |
| | | // 病区 |
| | | if (StringUtils.isNotEmpty(vo.getLeavehospitaldistrictcode())) { |
| | | for (String wardCode : vo.getLeavehospitaldistrictcode().split(",")) { |
| | | if (StringUtils.isEmpty(wardCode)) continue; |
| | | ServiceTaskdept d = new ServiceTaskdept(); |
| | | d.setTaskId(serviceTask.getTaskid()); |
| | | d.setTaskName(serviceTask.getTaskName()); |
| | | d.setOrgid(serviceTask.getOrgid()); |
| | | d.setLongtask(1L); |
| | | d.setDeptCode(wardCode); |
| | | d.setDeptType("2"); |
| | | d.setServiceType(vo.getServiceType()); |
| | | serviceTaskdeptService.insertServiceTaskdept(d); |
| | | } |
| | | } |
| | | // 疾病(用 split(","),勿照抄 appltype=3 现网的 split("$") bug) |
| | | if (StringUtils.isNotEmpty(vo.getIcd10code())) { |
| | | String[] codes = vo.getIcd10code().split(","); |
| | | String[] names = StringUtils.isNotEmpty(vo.getIcd10name()) ? vo.getIcd10name().split(",") : new String[0]; |
| | | for (int i = 0; i < codes.length; i++) { |
| | | if (StringUtils.isEmpty(codes[i])) continue; |
| | | ServiceTaskdiag dg = new ServiceTaskdiag(); |
| | | dg.setTaskId(serviceTask.getTaskid()); |
| | | dg.setTaskName(serviceTask.getTaskName()); |
| | | dg.setOrgid(serviceTask.getOrgid()); |
| | | dg.setLongtask(1L); |
| | | dg.setServiceType(vo.getServiceType()); |
| | | dg.setIcd10code(codes[i]); |
| | | dg.setIcd10name(i < names.length ? names[i] : null); |
| | | dg.setGuid(serviceTask.getGuid()); |
| | | dg.setCreateTime(new Date()); |
| | | serviceTaskdiagService.insertServiceTaskdiag(dg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 任务组修改时,先软删该 task 旧的维度条件表记录(防过期维度残留导致误纳入)。 |
| | | */ |
| | | private void clearDimensionCondition(Long taskId) { |
| | | ServiceTaskdept dq = new ServiceTaskdept(); |
| | | dq.setTaskId(taskId); |
| | | List<ServiceTaskdept> depts = serviceTaskdeptService.selectServiceTaskdeptList(dq); |
| | | if (CollectionUtils.isNotEmpty(depts)) { |
| | | for (ServiceTaskdept d : depts) { |
| | | serviceTaskdeptService.deleteServiceTaskdeptById(d.getId()); |
| | | } |
| | | } |
| | | ServiceTaskdiag gq = new ServiceTaskdiag(); |
| | | gq.setTaskId(taskId); |
| | | List<ServiceTaskdiag> diags = serviceTaskdiagService.selectServiceTaskdiagList(gq); |
| | | if (CollectionUtils.isNotEmpty(diags)) { |
| | | for (ServiceTaskdiag g : diags) { |
| | | serviceTaskdiagService.deleteServiceTaskdiagById(g.getId()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) { |