From 8417760a5ecce6d3db28c55f86ec92ae14baf0d0 Mon Sep 17 00:00:00 2001 From: zhuangyuanke Date: Fri, 13 Dec 2024 16:52:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=B9=E9=87=8F=E5=A4=96?= =?UTF-8?q?=E5=91=BC=E6=97=B6=E7=9B=B8=E5=85=B3bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ScriptInfoTaskInfo.java | 5 + .../SignPatientManageRouteNode.java | 3 + .../SignPatientManageRouteNodeMapper.java | 2 +- .../SignPatientManageRouteServiceImpl.java | 175 +++++++++--------- .../ScriptInfoTaskInfoMapper.xml | 8 + .../SignPatientManageRouteNodeMapper.xml | 13 +- .../quartz/task/UploadRobotPublishTask.java | 77 ++++---- 7 files changed, 157 insertions(+), 126 deletions(-) diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfotaskinfo/ScriptInfoTaskInfo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfotaskinfo/ScriptInfoTaskInfo.java index 558442d0..e4447a6b 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfotaskinfo/ScriptInfoTaskInfo.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfotaskinfo/ScriptInfoTaskInfo.java @@ -69,4 +69,9 @@ public class ScriptInfoTaskInfo { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; + /** + * 导入流水号 + */ + @ApiModelProperty(value = "导入流水号") + private String sn; } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/signpatientmanageroutenode/SignPatientManageRouteNode.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/signpatientmanageroutenode/SignPatientManageRouteNode.java index b96bd2a8..5232afab 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/signpatientmanageroutenode/SignPatientManageRouteNode.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/signpatientmanageroutenode/SignPatientManageRouteNode.java @@ -425,4 +425,7 @@ public class SignPatientManageRouteNode extends BaseEntity { @ApiModelProperty(value = "拨打状态:DIALED,已拨打:NODIALED:未拨打;默认NULL表示未拨打") private String dialStatus; + + @ApiModelProperty(value = "导入流水号") + private String sn; } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java index 5f0c2928..37c08060 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java @@ -93,7 +93,7 @@ public interface SignPatientManageRouteNodeMapper { * @param signPatientManageRouteNode * @return */ - int updateDialStatusByManageRouteId(SignPatientManageRouteNode signPatientManageRouteNode); + int updateDialStatus(SignPatientManageRouteNode signPatientManageRouteNode); /** * 修改 拔打状态 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java index d265a314..14341f31 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java @@ -147,20 +147,19 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout private PhoneDialRecordMapper phoneDialRecordMapper; @Resource private ShortMessageSendRecordMapper shortMessageSendRecordMapper; - @Resource - private IPatientTaskStatisticsService patientTaskStatisticsService; + @Resource + private IPatientTaskStatisticsService patientTaskStatisticsService; @Resource private ILabelFieldContentService labelFieldContentService; - @Resource - private PatientInfoMapper patientInfoMapper; - @Resource - private IAIOBService aiobService; - @Value("${aiob.callBackUrl}") - private String callBackUrl; + private PatientInfoMapper patientInfoMapper; + @Resource + private IAIOBService aiobService; + @Value("${aiob.callBackUrl}") + private String callBackUrl; private static final String SUCCESS = "OK"; @@ -196,47 +195,44 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout @Override public AjaxResult insertSignPatientManageRoute(SignPatientManageRouteVO signPatientManageRoute) { //如果是批量 创建 - if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) - { + if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) { //获取患者信息 List listPatient = new ArrayList<>(); PatientInfoDto patientInfo = new PatientInfoDto(); patientInfo.setSn(signPatientManageRoute.getSn()); - listPatient = patientInfoMapper.getPatientList(patientInfo); - for(PatientInfoVo patientInfoVo : listPatient) - { + listPatient = patientInfoMapper.getPatientList(patientInfo); + for (PatientInfoVo patientInfoVo : listPatient) { signPatientManageRoute.setPatientId(patientInfoVo.getId()); signPatientManageRoute.setPatientName(patientInfoVo.getPatientName()); signPatientManageRoute.setDepartmentId(patientInfoVo.getDepartmentId()); signPatientManageRoute.setDepartmentName(patientInfoVo.getDepartmentName()); AjaxResult ar = insertSignPatientManageRouteForPatient(signPatientManageRoute); //如果有错误码,直接返回; - if(ar.containsValue(901)) + if (ar.containsValue(901)) return ar; } return AjaxResult.success(); - } - else - { - return insertSignPatientManageRouteForPatient(signPatientManageRoute); + } else { + return insertSignPatientManageRouteForPatient(signPatientManageRoute); } } - public AjaxResult insertSignPatientManageRouteForPatient(SignPatientManageRouteVO signPatientManageRoute) - { + + public AjaxResult insertSignPatientManageRouteForPatient(SignPatientManageRouteVO signPatientManageRoute) { // 新增主表 signPatientManageRoute.setTaskCreateType(TaskCreateTypeEnum.MANUAL_CREATE.getInfo()); signPatientManageRoute.setCreateBy(SecurityUtils.getUsername()); signPatientManageRoute.setCreateTime(LocalDateTime.now()); //任务执行类型,批量执行 - if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) - { signPatientManageRoute.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo());} + if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) { + signPatientManageRoute.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo()); + } //任务路由主表 新增 int insertRoute = signPatientManageRouteMapper.insertSignPatientManageRoute(signPatientManageRoute); if (insertRoute < 0) { - return AjaxResult.error(901,"患者管理任务路径失败!请联系管理员!");//新增签约 + return AjaxResult.error(901, "患者管理任务路径失败!请联系管理员!");//新增签约 } // 新增节点表 List signPatientManageRouteNodes = new ArrayList<>(); @@ -247,21 +243,23 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout continue; } //任务执行类型,批量执行 - if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) - { routeNode.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo());} - if(Objects.isNull(signPatientManageRoute.getSignPatientRecordId())) { + if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) { + routeNode.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo()); + routeNode.setSn(signPatientManageRoute.getSn()); + } + if (Objects.isNull(signPatientManageRoute.getSignPatientRecordId())) { //更新 审核状态为 已审核,适用场景:对未签约患者 手动创建任务 zyk 20241204 routeNode.setRouteCheckStatus(RouteCheckStatusEnum.AGREE.getInfo()); } extracted(signPatientManageRoute, signPatientManageRouteNodes, routeNode); } if (CollectionUtils.isEmpty(signPatientManageRouteNodes)) { - return AjaxResult.error(901,"创建任务中至少有一个管理任务节点!可能是因为时间或其它属性信息不全导致,请完善后重试。"); + return AjaxResult.error(901, "创建任务中至少有一个管理任务节点!可能是因为时间或其它属性信息不全导致,请完善后重试。"); } //批量插入任务 int insertBatchCount = signPatientManageRouteNodeMapper.insertBatch(signPatientManageRouteNodes); if (insertBatchCount < 0) { - return AjaxResult.error(901,"新增签约患者管理任务路径失败!请联系管理员!"); + return AjaxResult.error(901, "新增签约患者管理任务路径失败!请联系管理员!"); } @@ -274,20 +272,18 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout // else //×××××更新 签约记录的 审核状态为 未审核,适用场景:对已签约患者 手动创建任务 zyk 20241204 - if(Objects.nonNull(signPatientManageRoute.getSignPatientRecordId())) - { + if (Objects.nonNull(signPatientManageRoute.getSignPatientRecordId())) { signPatientRecord.setRouteCheckStatus(RouteCheckStatusEnum.UNAUDITED.getInfo()); signPatientRecord.setId(signPatientManageRoute.getSignPatientRecordId()); int updateRecord = signPatientRecordMapper.updateByPrimaryKeySelective(signPatientRecord); if (updateRecord < 0) { - return AjaxResult.error(901,"修改签约患者管理任务路径失败!请联系管理员!"); + return AjaxResult.error(901, "修改签约患者管理任务路径失败!请联系管理员!"); } } //适用场景:对未签约患者 手动创建任务 - else - { + else { //获取画像信息 - List labelFieldAndPartitionDictList = labelFieldContentService.groupingValue(0L,signPatientManageRoute.getPatientId()); + List labelFieldAndPartitionDictList = labelFieldContentService.groupingValue(0L, signPatientManageRoute.getPatientId()); // 画像信息保存 LabelField labelField = new LabelField(); labelField.setLabelFieldAndPartitionDictList(labelFieldAndPartitionDictList); @@ -403,10 +399,9 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout //3.1判断路径节点,组装数据 //任务执行时间, LocalDate localDate = null; - if(Objects.nonNull( manualFollowUpVO.getNodePlanTime()) && StringUtils.isNotBlank( manualFollowUpVO.getNodePlanTime().toString())) { + if (Objects.nonNull(manualFollowUpVO.getNodePlanTime()) && StringUtils.isNotBlank(manualFollowUpVO.getNodePlanTime().toString())) { localDate = manualFollowUpVO.getNodePlanTime().toLocalDate(); - } - else { + } else { //3.2根据出院时间 和 第几天 计算 if (Objects.nonNull(manualFollowUpVO.getDischargeTime())) { localDate = manualFollowUpVO.getDischargeTime().plusDays(manualFollowUpVO.getRouteNodeDay()).toLocalDate(); @@ -435,44 +430,45 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout return manualFollowUps; } - /** - * @description 随访待办列表-创建实时呼叫任务 - * @Param createAiboActualTimeTaskDto 创建百度外呼实时任务传输对象 - * @return 结果 - * @Author haown - * @Date 2024-11-4 16:06 - */ - @Override public Long createActualTimeTask(CreateAiobActualTimeTaskDto createAiboActualTimeTaskDto) { - ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(createAiboActualTimeTaskDto.getScriptInfoId()); - SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(createAiboActualTimeTaskDto.getManageRouteId()); - PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(signPatientManageRoute.getPatientId()); - // 没有任务则创建任务 - if (ObjectUtils.isNotEmpty(scriptInfo)) { - ActualTimeTaskDto actualTimeTaskDto = new ActualTimeTaskDto(); - actualTimeTaskDto.setRobotId(scriptInfo.getRobotPublishId()); - actualTimeTaskDto.setMobile(patientInfo.getPatientPhone()); - actualTimeTaskDto.setSecretType(2); - actualTimeTaskDto.setStopDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " 20:00:00"); - // 查询患者画像信息 - List labelFieldContentList = labelFieldContentMapper.selectByPatientId(patientInfo.getId()); - // 处理变量 - JSONObject jsonObject = new JSONObject(); - if (com.xinelu.common.utils.StringUtils.isNotBlank(scriptInfo.getVariables())) { - List variables = Arrays.asList(scriptInfo.getVariables().split("\\|")); - variables.forEach(variable -> { - LabelFieldInfoContentVo labelFieldContent = labelFieldContentList.stream().filter(s -> Objects.equals(s.getFieldCode(), variable.replaceAll("_", "").toUpperCase())).findFirst().orElse(null); - jsonObject.fluentPut(variable, ObjectUtils.isEmpty(labelFieldContent) ? "" : labelFieldContent.getFieldValue()); - }); - } - actualTimeTaskDto.setDialogVar(jsonObject); - actualTimeTaskDto.setCallBackUrl(callBackUrl); - actualTimeTaskDto.setExtJson(createAiboActualTimeTaskDto.getSignPatientManageRouteNodeId()+ ""); - return aiobService.createActualTimeTask(actualTimeTaskDto); - } - return 0L; - } + /** + * @return 结果 + * @description 随访待办列表-创建实时呼叫任务 + * @Param createAiboActualTimeTaskDto 创建百度外呼实时任务传输对象 + * @Author haown + * @Date 2024-11-4 16:06 + */ + @Override + public Long createActualTimeTask(CreateAiobActualTimeTaskDto createAiboActualTimeTaskDto) { + ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(createAiboActualTimeTaskDto.getScriptInfoId()); + SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(createAiboActualTimeTaskDto.getManageRouteId()); + PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(signPatientManageRoute.getPatientId()); + // 没有任务则创建任务 + if (ObjectUtils.isNotEmpty(scriptInfo)) { + ActualTimeTaskDto actualTimeTaskDto = new ActualTimeTaskDto(); + actualTimeTaskDto.setRobotId(scriptInfo.getRobotPublishId()); + actualTimeTaskDto.setMobile(patientInfo.getPatientPhone()); + actualTimeTaskDto.setSecretType(2); + actualTimeTaskDto.setStopDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " 20:00:00"); + // 查询患者画像信息 + List labelFieldContentList = labelFieldContentMapper.selectByPatientId(patientInfo.getId()); + // 处理变量 + JSONObject jsonObject = new JSONObject(); + if (com.xinelu.common.utils.StringUtils.isNotBlank(scriptInfo.getVariables())) { + List variables = Arrays.asList(scriptInfo.getVariables().split("\\|")); + variables.forEach(variable -> { + LabelFieldInfoContentVo labelFieldContent = labelFieldContentList.stream().filter(s -> Objects.equals(s.getFieldCode(), variable.replaceAll("_", "").toUpperCase())).findFirst().orElse(null); + jsonObject.fluentPut(variable, ObjectUtils.isEmpty(labelFieldContent) ? "" : labelFieldContent.getFieldValue()); + }); + } + actualTimeTaskDto.setDialogVar(jsonObject); + actualTimeTaskDto.setCallBackUrl(callBackUrl); + actualTimeTaskDto.setExtJson(createAiboActualTimeTaskDto.getSignPatientManageRouteNodeId() + ""); + return aiobService.createActualTimeTask(actualTimeTaskDto); + } + return 0L; + } - /** + /** * 查询人工随访患者基本信息 * * @param id 签约患者管理任务表id @@ -850,9 +846,9 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout manageRouteNode.setTemplateType(TemplateTypeConstants.SCRIPT); manageRouteNode.setTemplateDetail(templateDetail); - if (StringUtils.equals(PhoneDialMethodEnum.AI.getInfo(), manageRouteNode.getPhoneDialMethod()) && StringUtils.isBlank(scriptInfo.getRobotPublishId())) { - throw new ServiceException("第三方机器人id为空"); - } + if (StringUtils.equals(PhoneDialMethodEnum.AI.getInfo(), manageRouteNode.getPhoneDialMethod()) && StringUtils.isBlank(scriptInfo.getRobotPublishId())) { + throw new ServiceException("第三方机器人id为空"); + } } // 电话短信内容 if (node.getPhoneMessageTemplateId() != null) { @@ -899,9 +895,9 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout manageNode.setTemplateType(TemplateTypeConstants.SCRIPT); manageNode.setTemplateDetail(templateDetail); - if (StringUtils.equals(PhoneDialMethodEnum.AI.getInfo(), manageNode.getPhoneDialMethod()) && StringUtils.isBlank(scriptInfo.getRobotPublishId())) { - throw new ServiceException("第三方机器人id为空"); - } + if (StringUtils.equals(PhoneDialMethodEnum.AI.getInfo(), manageNode.getPhoneDialMethod()) && StringUtils.isBlank(scriptInfo.getRobotPublishId())) { + throw new ServiceException("第三方机器人id为空"); + } } } else if (manageNode.getQuestionInfoId() != null) { // 问卷 // 查询问卷详情 @@ -1024,8 +1020,8 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout patientTaskExecuteRecord.setCreateBy(routeHandlePerson); patientTaskExecuteRecord.setCreateTime(time); if (patientTaskExecuteRecordMapper.insertPatientTaskExecuteRecord(patientTaskExecuteRecord) > 0) { - // 任务统计表修改 - patientTaskStatisticsService.updateNum(dto.getPatientId(), TaskStatisticsTypeConstants.TASK_EXECUTE_NUM, 1); + // 任务统计表修改 + patientTaskStatisticsService.updateNum(dto.getPatientId(), TaskStatisticsTypeConstants.TASK_EXECUTE_NUM, 1); return patientTaskExecuteRecord.getId(); } else { throw new ServiceException("新增患者管理任务记录失败"); @@ -1082,10 +1078,10 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout if (signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode) <= 0) { throw new ServiceException("更新节点任务表失败"); } else { - if (dto.getTaskNodeType().equals(TaskContentEnum.QUESTIONNAIRE_SCALE.getInfo())) { - // 修改任务统计表任务完成数量 - patientTaskStatisticsService.updateNum(dto.getPatientId(), TaskStatisticsTypeConstants.TASK_FINISH_NUM, 1); - } + if (dto.getTaskNodeType().equals(TaskContentEnum.QUESTIONNAIRE_SCALE.getInfo())) { + // 修改任务统计表任务完成数量 + patientTaskStatisticsService.updateNum(dto.getPatientId(), TaskStatisticsTypeConstants.TASK_FINISH_NUM, 1); + } } } @@ -1095,8 +1091,11 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout private void extracted(SignPatientManageRouteVO signPatientManageRoute, List signPatientManageRouteNodes, SignPatientManageRouteNode routeNode) { SignPatientManageRouteNode signPatientManageRouteNode = new SignPatientManageRouteNode(); //如果 导入患者主表id不为空,则认为此任务是批量执行类型 - if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) + if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) { signPatientManageRouteNode.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo()); + signPatientManageRouteNode.setSn(signPatientManageRoute.getSn()); + + } else signPatientManageRouteNode.setTaskExcuteType(TaskExcuteTypeEnum.ACTUAL_TIME_TASK.getInfo()); signPatientManageRouteNode.setNodePlanTime(routeNode.getNodePlanTime()); @@ -1185,7 +1184,7 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout /** * 发送短信 */ - @Override + @Override public Boolean sendSms(SmsInfoDTO smsInfoDTO) throws ClientException, ServiceException { try { // 短信发送参数非空性判断 diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.xml index b0243a48..851e0a85 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.xml @@ -11,6 +11,7 @@ + @@ -37,6 +38,9 @@ AND sign_patient_manage_route_node_id = #{signPatientManageRouteNodeId} + + AND sn = #{sn} + AND sign_patient_manage_route_id = #{signPatientManageRouteId} @@ -74,6 +78,8 @@ sign_patient_manage_route_id, + sn, + execute_time, aiob_task_type, @@ -93,6 +99,8 @@ #{signPatientManageRouteNodeId}, #{signPatientManageRouteId}, + + #{sn}, #{executeTime}, diff --git a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml index 2adab169..b9cc1976 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml @@ -84,10 +84,11 @@ + - select id, manage_route_id, manage_route_name, route_node_id, route_node_name, route_node_day, task_excute_type,node_plan_time,task_type, task_status, task_subdivision, task_node_type, second_classify_describe, execute_time, phone_push_sign, script_info_id, robot_publish_id, phone_template_id, phone_template_name, phone_node_content,phone_result_json, phone_redial_times, phone_time_interval, phone_message_remind, phone_message_template_id, phone_message_template_name,phone_message_template_content,question_info_id, questionnaire_name, questionnaire_content, question_expiration_date, propaganda_info_id, propaganda_title, propaganda_content, message_push_sign, message_template_id, message_template_code, message_template_name, message_preview, message_node_content, official_push_sign, official_template_id, official_template_code, official_template_name, official_remind_content, official_node_content, follow_template_id, follow_template_name, applet_push_sign, applet_template_id, applet_template_code, applet_template_name, applet_remind_content, applet_prompt_description, applet_node_content, route_check_status, route_check_person, route_check_date, route_check_remark, route_node_remark, node_execute_status, route_handle_remark, route_handle_id, route_handle_person, route_link,text_remind_content, node_content,message_status, del_flag, create_by, create_time, update_by, update_time, phone_dial_method, phone_node_execute_result_status, message_node_execute_result_status, official_node_execute_result_status, applet_node_execute_result_status, node_finish_date, task_id_ext,dial_status from sign_patient_manage_route_node + select id, manage_route_id, manage_route_name, route_node_id, route_node_name, route_node_day, task_excute_type,node_plan_time,task_type, task_status, task_subdivision, task_node_type, second_classify_describe, execute_time, phone_push_sign, script_info_id, robot_publish_id, phone_template_id, phone_template_name, phone_node_content,phone_result_json, phone_redial_times, phone_time_interval, phone_message_remind, phone_message_template_id, phone_message_template_name,phone_message_template_content,question_info_id, questionnaire_name, questionnaire_content, question_expiration_date, propaganda_info_id, propaganda_title, propaganda_content, message_push_sign, message_template_id, message_template_code, message_template_name, message_preview, message_node_content, official_push_sign, official_template_id, official_template_code, official_template_name, official_remind_content, official_node_content, follow_template_id, follow_template_name, applet_push_sign, applet_template_id, applet_template_code, applet_template_name, applet_remind_content, applet_prompt_description, applet_node_content, route_check_status, route_check_person, route_check_date, route_check_remark, route_node_remark, node_execute_status, route_handle_remark, route_handle_id, route_handle_person, route_link,text_remind_content, node_content,message_status, del_flag, create_by, create_time, update_by, update_time, phone_dial_method, phone_node_execute_result_status, message_node_execute_result_status, official_node_execute_result_status, applet_node_execute_result_status, node_finish_date, task_id_ext,dial_status,sn from sign_patient_manage_route_node