修复批量外呼时相关bug

This commit is contained in:
zhuangyuanke 2024-12-13 16:52:36 +08:00
parent 368978460b
commit 8417760a5e
7 changed files with 157 additions and 126 deletions

View File

@ -69,4 +69,9 @@ public class ScriptInfoTaskInfo {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime; private LocalDateTime createTime;
/**
* 导入流水号
*/
@ApiModelProperty(value = "导入流水号")
private String sn;
} }

View File

@ -425,4 +425,7 @@ public class SignPatientManageRouteNode extends BaseEntity {
@ApiModelProperty(value = "拨打状态DIALED,已拨打NODIALED:未拨打默认NULL表示未拨打") @ApiModelProperty(value = "拨打状态DIALED,已拨打NODIALED:未拨打默认NULL表示未拨打")
private String dialStatus; private String dialStatus;
@ApiModelProperty(value = "导入流水号")
private String sn;
} }

View File

@ -93,7 +93,7 @@ public interface SignPatientManageRouteNodeMapper {
* @param signPatientManageRouteNode * @param signPatientManageRouteNode
* @return * @return
*/ */
int updateDialStatusByManageRouteId(SignPatientManageRouteNode signPatientManageRouteNode); int updateDialStatus(SignPatientManageRouteNode signPatientManageRouteNode);
/** /**
* 修改 拔打状态 * 修改 拔打状态

View File

@ -154,7 +154,6 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
private ILabelFieldContentService labelFieldContentService; private ILabelFieldContentService labelFieldContentService;
@Resource @Resource
private PatientInfoMapper patientInfoMapper; private PatientInfoMapper patientInfoMapper;
@Resource @Resource
@ -196,47 +195,44 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
@Override @Override
public AjaxResult insertSignPatientManageRoute(SignPatientManageRouteVO signPatientManageRoute) { public AjaxResult insertSignPatientManageRoute(SignPatientManageRouteVO signPatientManageRoute) {
//如果是批量 创建 //如果是批量 创建
if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) {
{
//获取患者信息 //获取患者信息
List<PatientInfoVo> listPatient = new ArrayList<>(); List<PatientInfoVo> listPatient = new ArrayList<>();
PatientInfoDto patientInfo = new PatientInfoDto(); PatientInfoDto patientInfo = new PatientInfoDto();
patientInfo.setSn(signPatientManageRoute.getSn()); patientInfo.setSn(signPatientManageRoute.getSn());
listPatient = patientInfoMapper.getPatientList(patientInfo); listPatient = patientInfoMapper.getPatientList(patientInfo);
for(PatientInfoVo patientInfoVo : listPatient) for (PatientInfoVo patientInfoVo : listPatient) {
{
signPatientManageRoute.setPatientId(patientInfoVo.getId()); signPatientManageRoute.setPatientId(patientInfoVo.getId());
signPatientManageRoute.setPatientName(patientInfoVo.getPatientName()); signPatientManageRoute.setPatientName(patientInfoVo.getPatientName());
signPatientManageRoute.setDepartmentId(patientInfoVo.getDepartmentId()); signPatientManageRoute.setDepartmentId(patientInfoVo.getDepartmentId());
signPatientManageRoute.setDepartmentName(patientInfoVo.getDepartmentName()); signPatientManageRoute.setDepartmentName(patientInfoVo.getDepartmentName());
AjaxResult ar = insertSignPatientManageRouteForPatient(signPatientManageRoute); AjaxResult ar = insertSignPatientManageRouteForPatient(signPatientManageRoute);
//如果有错误码直接返回 //如果有错误码直接返回
if(ar.containsValue(901)) if (ar.containsValue(901))
return ar; return ar;
} }
return AjaxResult.success(); return AjaxResult.success();
} } else {
else
{
return insertSignPatientManageRouteForPatient(signPatientManageRoute); return insertSignPatientManageRouteForPatient(signPatientManageRoute);
} }
} }
public AjaxResult insertSignPatientManageRouteForPatient(SignPatientManageRouteVO signPatientManageRoute)
{ public AjaxResult insertSignPatientManageRouteForPatient(SignPatientManageRouteVO signPatientManageRoute) {
// 新增主表 // 新增主表
signPatientManageRoute.setTaskCreateType(TaskCreateTypeEnum.MANUAL_CREATE.getInfo()); signPatientManageRoute.setTaskCreateType(TaskCreateTypeEnum.MANUAL_CREATE.getInfo());
signPatientManageRoute.setCreateBy(SecurityUtils.getUsername()); signPatientManageRoute.setCreateBy(SecurityUtils.getUsername());
signPatientManageRoute.setCreateTime(LocalDateTime.now()); signPatientManageRoute.setCreateTime(LocalDateTime.now());
//任务执行类型批量执行 //任务执行类型批量执行
if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) {
{ signPatientManageRoute.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo());} signPatientManageRoute.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo());
}
//任务路由主表 新增 //任务路由主表 新增
int insertRoute = signPatientManageRouteMapper.insertSignPatientManageRoute(signPatientManageRoute); int insertRoute = signPatientManageRouteMapper.insertSignPatientManageRoute(signPatientManageRoute);
if (insertRoute < 0) { if (insertRoute < 0) {
return AjaxResult.error(901,"患者管理任务路径失败!请联系管理员!");//新增签约 return AjaxResult.error(901, "患者管理任务路径失败!请联系管理员!");//新增签约
} }
// 新增节点表 // 新增节点表
List<SignPatientManageRouteNode> signPatientManageRouteNodes = new ArrayList<>(); List<SignPatientManageRouteNode> signPatientManageRouteNodes = new ArrayList<>();
@ -247,21 +243,23 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
continue; continue;
} }
//任务执行类型批量执行 //任务执行类型批量执行
if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) {
{ routeNode.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo());} routeNode.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo());
if(Objects.isNull(signPatientManageRoute.getSignPatientRecordId())) { routeNode.setSn(signPatientManageRoute.getSn());
}
if (Objects.isNull(signPatientManageRoute.getSignPatientRecordId())) {
//更新 审核状态为 已审核适用场景对未签约患者 手动创建任务 zyk 20241204 //更新 审核状态为 已审核适用场景对未签约患者 手动创建任务 zyk 20241204
routeNode.setRouteCheckStatus(RouteCheckStatusEnum.AGREE.getInfo()); routeNode.setRouteCheckStatus(RouteCheckStatusEnum.AGREE.getInfo());
} }
extracted(signPatientManageRoute, signPatientManageRouteNodes, routeNode); extracted(signPatientManageRoute, signPatientManageRouteNodes, routeNode);
} }
if (CollectionUtils.isEmpty(signPatientManageRouteNodes)) { if (CollectionUtils.isEmpty(signPatientManageRouteNodes)) {
return AjaxResult.error(901,"创建任务中至少有一个管理任务节点!可能是因为时间或其它属性信息不全导致,请完善后重试。"); return AjaxResult.error(901, "创建任务中至少有一个管理任务节点!可能是因为时间或其它属性信息不全导致,请完善后重试。");
} }
//批量插入任务 //批量插入任务
int insertBatchCount = signPatientManageRouteNodeMapper.insertBatch(signPatientManageRouteNodes); int insertBatchCount = signPatientManageRouteNodeMapper.insertBatch(signPatientManageRouteNodes);
if (insertBatchCount < 0) { if (insertBatchCount < 0) {
return AjaxResult.error(901,"新增签约患者管理任务路径失败!请联系管理员!"); return AjaxResult.error(901, "新增签约患者管理任务路径失败!请联系管理员!");
} }
@ -274,20 +272,18 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
// else // else
//×××××更新 签约记录的 审核状态为 未审核适用场景对已签约患者 手动创建任务 zyk 20241204 //×××××更新 签约记录的 审核状态为 未审核适用场景对已签约患者 手动创建任务 zyk 20241204
if(Objects.nonNull(signPatientManageRoute.getSignPatientRecordId())) if (Objects.nonNull(signPatientManageRoute.getSignPatientRecordId())) {
{
signPatientRecord.setRouteCheckStatus(RouteCheckStatusEnum.UNAUDITED.getInfo()); signPatientRecord.setRouteCheckStatus(RouteCheckStatusEnum.UNAUDITED.getInfo());
signPatientRecord.setId(signPatientManageRoute.getSignPatientRecordId()); signPatientRecord.setId(signPatientManageRoute.getSignPatientRecordId());
int updateRecord = signPatientRecordMapper.updateByPrimaryKeySelective(signPatientRecord); int updateRecord = signPatientRecordMapper.updateByPrimaryKeySelective(signPatientRecord);
if (updateRecord < 0) { if (updateRecord < 0) {
return AjaxResult.error(901,"修改签约患者管理任务路径失败!请联系管理员!"); return AjaxResult.error(901, "修改签约患者管理任务路径失败!请联系管理员!");
} }
} }
//适用场景对未签约患者 手动创建任务 //适用场景对未签约患者 手动创建任务
else else {
{
//获取画像信息 //获取画像信息
List<LabelFieldAndPartitionDict> labelFieldAndPartitionDictList = labelFieldContentService.groupingValue(0L,signPatientManageRoute.getPatientId()); List<LabelFieldAndPartitionDict> labelFieldAndPartitionDictList = labelFieldContentService.groupingValue(0L, signPatientManageRoute.getPatientId());
// 画像信息保存 // 画像信息保存
LabelField labelField = new LabelField(); LabelField labelField = new LabelField();
labelField.setLabelFieldAndPartitionDictList(labelFieldAndPartitionDictList); labelField.setLabelFieldAndPartitionDictList(labelFieldAndPartitionDictList);
@ -403,10 +399,9 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
//3.1判断路径节点组装数据 //3.1判断路径节点组装数据
//任务执行时间 //任务执行时间
LocalDate localDate = null; 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(); localDate = manualFollowUpVO.getNodePlanTime().toLocalDate();
} } else {
else {
//3.2根据出院时间 第几天 计算 //3.2根据出院时间 第几天 计算
if (Objects.nonNull(manualFollowUpVO.getDischargeTime())) { if (Objects.nonNull(manualFollowUpVO.getDischargeTime())) {
localDate = manualFollowUpVO.getDischargeTime().plusDays(manualFollowUpVO.getRouteNodeDay()).toLocalDate(); localDate = manualFollowUpVO.getDischargeTime().plusDays(manualFollowUpVO.getRouteNodeDay()).toLocalDate();
@ -436,13 +431,14 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
} }
/** /**
* @return 结果
* @description 随访待办列表-创建实时呼叫任务 * @description 随访待办列表-创建实时呼叫任务
* @Param createAiboActualTimeTaskDto 创建百度外呼实时任务传输对象 * @Param createAiboActualTimeTaskDto 创建百度外呼实时任务传输对象
* @return 结果
* @Author haown * @Author haown
* @Date 2024-11-4 16:06 * @Date 2024-11-4 16:06
*/ */
@Override public Long createActualTimeTask(CreateAiobActualTimeTaskDto createAiboActualTimeTaskDto) { @Override
public Long createActualTimeTask(CreateAiobActualTimeTaskDto createAiboActualTimeTaskDto) {
ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(createAiboActualTimeTaskDto.getScriptInfoId()); ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(createAiboActualTimeTaskDto.getScriptInfoId());
SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(createAiboActualTimeTaskDto.getManageRouteId()); SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(createAiboActualTimeTaskDto.getManageRouteId());
PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(signPatientManageRoute.getPatientId()); PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(signPatientManageRoute.getPatientId());
@ -466,7 +462,7 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
} }
actualTimeTaskDto.setDialogVar(jsonObject); actualTimeTaskDto.setDialogVar(jsonObject);
actualTimeTaskDto.setCallBackUrl(callBackUrl); actualTimeTaskDto.setCallBackUrl(callBackUrl);
actualTimeTaskDto.setExtJson(createAiboActualTimeTaskDto.getSignPatientManageRouteNodeId()+ ""); actualTimeTaskDto.setExtJson(createAiboActualTimeTaskDto.getSignPatientManageRouteNodeId() + "");
return aiobService.createActualTimeTask(actualTimeTaskDto); return aiobService.createActualTimeTask(actualTimeTaskDto);
} }
return 0L; return 0L;
@ -1095,8 +1091,11 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
private void extracted(SignPatientManageRouteVO signPatientManageRoute, List<SignPatientManageRouteNode> signPatientManageRouteNodes, SignPatientManageRouteNode routeNode) { private void extracted(SignPatientManageRouteVO signPatientManageRoute, List<SignPatientManageRouteNode> signPatientManageRouteNodes, SignPatientManageRouteNode routeNode) {
SignPatientManageRouteNode signPatientManageRouteNode = new SignPatientManageRouteNode(); SignPatientManageRouteNode signPatientManageRouteNode = new SignPatientManageRouteNode();
//如果 导入患者主表id不为空则认为此任务是批量执行类型 //如果 导入患者主表id不为空则认为此任务是批量执行类型
if(StringUtils.isNotBlank(signPatientManageRoute.getSn())) if (StringUtils.isNotBlank(signPatientManageRoute.getSn())) {
signPatientManageRouteNode.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo()); signPatientManageRouteNode.setTaskExcuteType(TaskExcuteTypeEnum.BATCH_TASK.getInfo());
signPatientManageRouteNode.setSn(signPatientManageRoute.getSn());
}
else else
signPatientManageRouteNode.setTaskExcuteType(TaskExcuteTypeEnum.ACTUAL_TIME_TASK.getInfo()); signPatientManageRouteNode.setTaskExcuteType(TaskExcuteTypeEnum.ACTUAL_TIME_TASK.getInfo());
signPatientManageRouteNode.setNodePlanTime(routeNode.getNodePlanTime()); signPatientManageRouteNode.setNodePlanTime(routeNode.getNodePlanTime());

View File

@ -11,6 +11,7 @@
<result property="taskId" column="task_id"/> <result property="taskId" column="task_id"/>
<result property="signPatientManageRouteNodeId" column="sign_patient_manage_route_node_id"/> <result property="signPatientManageRouteNodeId" column="sign_patient_manage_route_node_id"/>
<result property="signPatientManageRouteId" column="sign_patient_manage_route_id"/> <result property="signPatientManageRouteId" column="sign_patient_manage_route_id"/>
<result property="sn" column="sn"/>
<result property="executeTime" column="execute_time"/> <result property="executeTime" column="execute_time"/>
<result property="aiobTaskType" column="aiob_task_type"/> <result property="aiobTaskType" column="aiob_task_type"/>
<result property="executeStatus" column="execute_status"/> <result property="executeStatus" column="execute_status"/>
@ -37,6 +38,9 @@
<if test="signPatientManageRouteNodeId!=null"> <if test="signPatientManageRouteNodeId!=null">
AND sign_patient_manage_route_node_id = #{signPatientManageRouteNodeId} AND sign_patient_manage_route_node_id = #{signPatientManageRouteNodeId}
</if> </if>
<if test="sn!=null">
AND sn = #{sn}
</if>
<if test="signPatientManageRouteId!=null"> <if test="signPatientManageRouteId!=null">
AND sign_patient_manage_route_id = #{signPatientManageRouteId} AND sign_patient_manage_route_id = #{signPatientManageRouteId}
</if> </if>
@ -74,6 +78,8 @@
</if> </if>
<if test="signPatientManageRouteId != null">sign_patient_manage_route_id, <if test="signPatientManageRouteId != null">sign_patient_manage_route_id,
</if> </if>
<if test="sn != null">sn,
</if>
<if test="executeTime != null">execute_time, <if test="executeTime != null">execute_time,
</if> </if>
<if test="aiobTaskType != null">aiob_task_type, <if test="aiobTaskType != null">aiob_task_type,
@ -93,6 +99,8 @@
<if test="signPatientManageRouteNodeId != null">#{signPatientManageRouteNodeId}, <if test="signPatientManageRouteNodeId != null">#{signPatientManageRouteNodeId},
</if> </if>
<if test="signPatientManageRouteId != null">#{signPatientManageRouteId}, <if test="signPatientManageRouteId != null">#{signPatientManageRouteId},
</if>
<if test="sn != null">#{sn},
</if> </if>
<if test="executeTime != null">#{executeTime}, <if test="executeTime != null">#{executeTime},
</if> </if>

View File

@ -84,10 +84,11 @@
<result property="nodeFinishDate" column="node_finish_date"/> <result property="nodeFinishDate" column="node_finish_date"/>
<result property="taskIdExt" column="task_id_ext"/> <result property="taskIdExt" column="task_id_ext"/>
<result property="dialStatus" column="dial_status"/> <result property="dialStatus" column="dial_status"/>
<result property="sn" column="sn"/>
</resultMap> </resultMap>
<sql id="selectSignPatientManageRouteNodeVo"> <sql id="selectSignPatientManageRouteNodeVo">
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
</sql> </sql>
<select id="selectSignPatientManageRouteNodeList" parameterType="com.xinelu.manage.dto.signpatientmanageroutenode.SignPatientManageRouteNodeDto" resultMap="SignPatientManageRouteNodeResult"> <select id="selectSignPatientManageRouteNodeList" parameterType="com.xinelu.manage.dto.signpatientmanageroutenode.SignPatientManageRouteNodeDto" resultMap="SignPatientManageRouteNodeResult">
@ -536,7 +537,7 @@
</trim> </trim>
</insert> </insert>
<insert id="insertBatch"> <insert id="insertBatch">
insert into sign_patient_manage_route_node(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, insert into sign_patient_manage_route_node(manage_route_id, manage_route_name, route_node_id, route_node_name, route_node_day,sn,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, 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, 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, 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,
@ -545,7 +546,7 @@
route_handle_id, route_handle_person, route_link, text_remind_content,node_content, del_flag, create_by, create_time, update_by, update_time,phone_dial_method,follow_template_id, follow_template_name, task_id_ext) route_handle_id, route_handle_person, route_link, text_remind_content,node_content, del_flag, create_by, create_time, update_by, update_time,phone_dial_method,follow_template_id, follow_template_name, task_id_ext)
values values
<foreach collection="nodeList" item="item" separator=","> <foreach collection="nodeList" item="item" separator=",">
(#{item.manageRouteId},#{item.manageRouteName},#{item.routeNodeId},#{item.routeNodeName},#{item.routeNodeDay},#{item.taskExcuteType},#{item.nodePlanTime},#{item.taskType},#{item.taskStatus},#{item.taskSubdivision},#{item.taskNodeType},#{item.secondClassifyDescribe}, (#{item.manageRouteId},#{item.manageRouteName},#{item.routeNodeId},#{item.routeNodeName},#{item.routeNodeDay},#{item.sn},#{item.taskExcuteType},#{item.nodePlanTime},#{item.taskType},#{item.taskStatus},#{item.taskSubdivision},#{item.taskNodeType},#{item.secondClassifyDescribe},
#{item.executeTime},#{item.phonePushSign},#{item.scriptInfoId},#{item.robotPublishId},#{item.phoneTemplateId},#{item.phoneTemplateName},#{item.phoneNodeContent},#{item.phoneResultJson},#{item.phoneRedialTimes},#{item.phoneTimeInterval},#{item.phoneMessageRemind},#{item.phoneMessageTemplateId}, #{item.executeTime},#{item.phonePushSign},#{item.scriptInfoId},#{item.robotPublishId},#{item.phoneTemplateId},#{item.phoneTemplateName},#{item.phoneNodeContent},#{item.phoneResultJson},#{item.phoneRedialTimes},#{item.phoneTimeInterval},#{item.phoneMessageRemind},#{item.phoneMessageTemplateId},
#{item.phoneMessageTemplateName},#{item.phoneMessageTemplateContent}, #{item.phoneMessageTemplateName},#{item.phoneMessageTemplateContent},
#{item.questionInfoId},#{item.questionnaireName},#{item.questionnaireContent},#{item.questionExpirationDate},#{item.propagandaInfoId},#{item.propagandaTitle},#{item.propagandaContent},#{item.messagePushSign}, #{item.questionInfoId},#{item.questionnaireName},#{item.questionnaireContent},#{item.questionExpirationDate},#{item.propagandaInfoId},#{item.propagandaTitle},#{item.propagandaContent},#{item.messagePushSign},
@ -819,9 +820,11 @@
where manage_route_id = #{manageRouteId} where manage_route_id = #{manageRouteId}
</update> </update>
<update id="updateDialStatusByManageRouteId" parameterType="SignPatientManageRouteNode"> <update id="updateDialStatus" parameterType="SignPatientManageRouteNode">
update sign_patient_manage_route_node set dial_status = #{dialStatus} update sign_patient_manage_route_node set dial_status = #{dialStatus}
where manage_route_id = #{manageRouteId} where
sn = #{sn}
and script_info_id = #{scriptInfoId}
</update> </update>
<update id="updateDialStatusByNodeId" parameterType="SignPatientManageRouteNode"> <update id="updateDialStatusByNodeId" parameterType="SignPatientManageRouteNode">

View File

@ -38,7 +38,6 @@ import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -97,6 +96,7 @@ public class UploadRobotPublishTask {
List<SignPatientManageRouteNode> executeNodeList = new ArrayList<>(); List<SignPatientManageRouteNode> executeNodeList = new ArrayList<>();
nodeList.forEach(node -> { nodeList.forEach(node -> {
LocalDateTime executeTime; LocalDateTime executeTime;
if (Objects.nonNull(node.getNodePlanTime()) && org.apache.commons.lang3.StringUtils.isNotBlank(node.getNodePlanTime().toString())) { if (Objects.nonNull(node.getNodePlanTime()) && org.apache.commons.lang3.StringUtils.isNotBlank(node.getNodePlanTime().toString())) {
executeTime = node.getNodePlanTime(); executeTime = node.getNodePlanTime();
@ -106,51 +106,58 @@ public class UploadRobotPublishTask {
PatientVisitRecord patientVisitRecord = patientVisitRecordMapper.selectPatientVisitRecordById(signPatientRecord.getPatientVisitRecordId()); PatientVisitRecord patientVisitRecord = patientVisitRecordMapper.selectPatientVisitRecordById(signPatientRecord.getPatientVisitRecordId());
executeTime = signPatientManageRouteNodeService.getExecuteTime(node.getExecuteTime(), node.getRouteNodeName(), node.getRouteNodeDay(), patientVisitRecord); executeTime = signPatientManageRouteNodeService.getExecuteTime(node.getExecuteTime(), node.getRouteNodeName(), node.getRouteNodeDay(), patientVisitRecord);
} }
if (node.getScriptInfoId() != null && (executeTime.toLocalDate().isBefore(LocalDate.now()) || executeTime.toLocalDate().isEqual(LocalDate.now()))) { //只处理 流水号不为空的
if (node.getSn() != null &&
node.getScriptInfoId() != null && (executeTime.toLocalDate().isBefore(LocalDate.now()) || executeTime.toLocalDate().isEqual(LocalDate.now()))) {
executeNodeList.add(node); executeNodeList.add(node);
} }
}); });
if (executeNodeList.isEmpty()) return; if (executeNodeList.isEmpty()) return;
//1最外层按照路径ID分组 //1最外层按照导入流水号分组
Map<Long, List<SignPatientManageRouteNode>> routeNodeGroupListByRouteId = Map<String, List<SignPatientManageRouteNode>> routeNodeGroupListBySn =
executeNodeList.stream().collect(Collectors.groupingBy(SignPatientManageRouteNode::getManageRouteId)); executeNodeList.stream().collect(Collectors.groupingBy(SignPatientManageRouteNode::getSn));
//开始遍历 // 开始遍历
routeNodeGroupListByRouteId.keySet().forEach(routeId -> { routeNodeGroupListBySn.keySet().forEach(sn -> {
//2次外层按照话术ID分组 //2次外层按照话术ID分组
Map<Long, List<SignPatientManageRouteNode>> routeNodeGroupListByScriptInfoId = Map<Long, List<SignPatientManageRouteNode>> routeNodeGroupListByScriptInfoId =
executeNodeList.stream().collect(Collectors.groupingBy(SignPatientManageRouteNode::getScriptInfoId)); routeNodeGroupListBySn.get(sn).stream().collect(Collectors.groupingBy(SignPatientManageRouteNode::getScriptInfoId));
//开始遍历生成任务 //开始遍历生成任务
routeNodeGroupListByScriptInfoId.keySet().forEach(scriptInfoId -> { routeNodeGroupListByScriptInfoId.keySet().forEach(scriptInfoId -> {
// 同一分组下的任务节点配置属性 应该是 是相同的所以取第0项节点 来使用 // 同一分组下的任务节点配置属性 应该是 是相同的所以取第0项节点 来使用
SignPatientManageRouteNode nodeTemp = routeNodeGroupListByScriptInfoId.get(scriptInfoId).get(0); SignPatientManageRouteNode nodeFirstTemp = routeNodeGroupListByScriptInfoId.get(scriptInfoId).get(0);
//话术 //话术
ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(scriptInfoId); ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(scriptInfoId);
//拼接一个taskId(格式:NodeId_ScriptInfoId_ManageRouteId不用了 //拼接一个taskId(格式:NodeId_ScriptInfoId_ManageRouteId不用了
// String taskId = scriptInfoTaskInfoMapper.getByNodeId(Long.toString(nodeTemp.getId()).concat("_") // String taskId = scriptInfoTaskInfoMapper.getByNodeId(Long.toString(nodeFirstTemp.getId()).concat("_")
// .concat(Long.toString(nodeTemp.getManageRouteId())).concat("_") // .concat(Long.toString(nodeFirstTemp.getManageRouteId())).concat("_")
// .concat(String.valueOf(nodeTemp.getScriptInfoId())) // .concat(String.valueOf(nodeFirstTemp.getScriptInfoId()))
// , AiobTaskTypeContant.BATCHTASK); // , AiobTaskTypeContant.BATCHTASK);
ScriptInfoTaskInfo scriptInfoTaskInfoQuery = new ScriptInfoTaskInfo(); ScriptInfoTaskInfo scriptInfoTaskInfoQuery = new ScriptInfoTaskInfo();
scriptInfoTaskInfoQuery.setSignPatientManageRouteId(nodeTemp.getManageRouteId()); //同一流水号sn下所有任务id相同所以以第一个节点的属性作为查询条件即可
scriptInfoTaskInfoQuery.setScriptInfoId(nodeTemp.getScriptInfoId()); // scriptInfoTaskInfoQuery.setSignPatientManageRouteId(nodeFirstTemp.getManageRouteId());
scriptInfoTaskInfoQuery.setAiobTaskType(AiobTaskTypeContant.BATCHTASK); // scriptInfoTaskInfoQuery.setScriptInfoId(nodeFirstTemp.getScriptInfoId());
// scriptInfoTaskInfoQuery.setAiobTaskType(AiobTaskTypeContant.BATCHTASK);
scriptInfoTaskInfoQuery.setSn(sn);
String taskId = scriptInfoTaskInfoMapper.getByNodeId(scriptInfoTaskInfoQuery); String taskId = scriptInfoTaskInfoMapper.getByNodeId(scriptInfoTaskInfoQuery);
if (StringUtils.isBlank(taskId)) { if (StringUtils.isBlank(taskId)) {
// 没有任务则创建任务 // 没有任务则创建任务
if (ObjectUtils.isNotEmpty(scriptInfo)) { if (ObjectUtils.isNotEmpty(scriptInfo)) {
log.info("创建任务......"); log.info("创建任务......");
CreateTaskDto createTaskDto = new CreateTaskDto(); CreateTaskDto createTaskDto = new CreateTaskDto();
//临时重复测试用 //临时重复测试用
createTaskDto.setTaskName(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + scriptInfo.getScriptName() + "(" + nodeTemp.getManageRouteId() + ")"); String taskName = "T_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + scriptInfo.getScriptName() + "(" + sn + ")";
// createTaskDto.setTaskName(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + scriptInfo.getScriptName() + "(" + nodeTemp.getManageRouteId() + ")"); log.info("任务名称:" + taskName);
createTaskDto.setTaskName(taskName);
// createTaskDto.setTaskName(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + scriptInfo.getScriptName() + "(" + nodeFirstTemp.getManageRouteId() + ")");
createTaskDto.setRobotId(scriptInfo.getRobotPublishId()); createTaskDto.setRobotId(scriptInfo.getRobotPublishId());
createTaskDto.setDialStartDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); createTaskDto.setDialStartDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
createTaskDto.setDialEndDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); createTaskDto.setDialEndDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
createTaskDto.setForbidDialDate(Arrays.asList(99)); createTaskDto.setForbidDialDate(Arrays.asList(99));
createTaskDto.setRetryTimes(StringUtils.isBlank(nodeTemp.getPhoneRedialTimes()) ? 0 : PhoneRedialTimesEnum.getValueByInfo(nodeTemp.getPhoneRedialTimes()).getValue()); createTaskDto.setRetryTimes(StringUtils.isBlank(nodeFirstTemp.getPhoneRedialTimes()) ? 0 : PhoneRedialTimesEnum.getValueByInfo(nodeFirstTemp.getPhoneRedialTimes()).getValue());
createTaskDto.setRetryInterval(nodeTemp.getPhoneTimeInterval()); createTaskDto.setRetryInterval(nodeFirstTemp.getPhoneTimeInterval());
createTaskDto.setNumTypeFilterList(Arrays.asList(1, 2)); createTaskDto.setNumTypeFilterList(Arrays.asList(1, 2));
createTaskDto.setTaskDataCallback(true); createTaskDto.setTaskDataCallback(true);
createTaskDto.setCallBackUrl(callBackUrl); createTaskDto.setCallBackUrl(callBackUrl);
@ -159,18 +166,23 @@ public class UploadRobotPublishTask {
log.info("开启任务......"); log.info("开启任务......");
aiobService.updateTaskStatus(taskId, 2); aiobService.updateTaskStatus(taskId, 2);
String finalTaskId1 = taskId;
routeNodeGroupListByScriptInfoId.get(scriptInfoId).forEach(nodeForTask -> {
ScriptInfoTaskInfo scriptInfoTaskInfo = new ScriptInfoTaskInfo(); ScriptInfoTaskInfo scriptInfoTaskInfo = new ScriptInfoTaskInfo();
scriptInfoTaskInfo.setScriptInfoId(nodeTemp.getScriptInfoId()); scriptInfoTaskInfo.setScriptInfoId(scriptInfoId);
scriptInfoTaskInfo.setTaskId(taskId); scriptInfoTaskInfo.setTaskId(finalTaskId1);
scriptInfoTaskInfo.setRobotId(scriptInfo.getRobotPublishId()); scriptInfoTaskInfo.setRobotId(scriptInfo.getRobotPublishId());
scriptInfoTaskInfo.setCreateTime(LocalDateTime.now()); scriptInfoTaskInfo.setCreateTime(LocalDateTime.now());
// scriptInfoTaskInfo.setSignPatientManageRouteNodeId(nodeTemp.getId()); scriptInfoTaskInfo.setSn(sn);
scriptInfoTaskInfo.setSignPatientManageRouteId(nodeTemp.getManageRouteId()); scriptInfoTaskInfo.setSignPatientManageRouteNodeId(nodeForTask.getId());
scriptInfoTaskInfo.setSignPatientManageRouteId(nodeForTask.getManageRouteId());
scriptInfoTaskInfo.setAiobTaskType(AiobTaskTypeContant.BATCHTASK); scriptInfoTaskInfo.setAiobTaskType(AiobTaskTypeContant.BATCHTASK);
//进入拔打记录表用于后续重拨处理等判断) //进入拔打记录表用于后续重拨处理等判断)----有时间再优化为批量插入
scriptInfoTaskInfoMapper.insertScriptInfoTaskInfo(scriptInfoTaskInfo); scriptInfoTaskInfoMapper.insertScriptInfoTaskInfo(scriptInfoTaskInfo);
});
//3开始组装本任务下的客户变量 //3开始组装本任务下的客户变量
// 客户名单list // 客户名单list
List<CustomerInfoDto> customerInfoList = new ArrayList<>(); List<CustomerInfoDto> customerInfoList = new ArrayList<>();
@ -206,9 +218,11 @@ public class UploadRobotPublishTask {
//设置拨打状态 //设置拨打状态
SignPatientManageRouteNode signPatientManageRouteNode_DialStatus = new SignPatientManageRouteNode(); SignPatientManageRouteNode signPatientManageRouteNode_DialStatus = new SignPatientManageRouteNode();
signPatientManageRouteNode_DialStatus.setManageRouteId(routeId); // signPatientManageRouteNode_DialStatus.setManageRouteId(routeId);
signPatientManageRouteNode_DialStatus.setSn(sn);
signPatientManageRouteNode_DialStatus.setScriptInfoId(scriptInfoId);
signPatientManageRouteNode_DialStatus.setDialStatus(DialStatusEnum.DIALED.getInfo()); signPatientManageRouteNode_DialStatus.setDialStatus(DialStatusEnum.DIALED.getInfo());
signPatientManageRouteNodeMapper.updateDialStatusByManageRouteId(signPatientManageRouteNode_DialStatus); signPatientManageRouteNodeMapper.updateDialStatus(signPatientManageRouteNode_DialStatus);
String finalTaskId = taskId; String finalTaskId = taskId;
importTaskList.forEach(importTaskVo -> { importTaskList.forEach(importTaskVo -> {
@ -326,7 +340,6 @@ public class UploadRobotPublishTask {
signPatientManageRouteNodeMapper.updateDialStatusByNodeId(signPatientManageRouteNode_DialStatus); signPatientManageRouteNodeMapper.updateDialStatusByNodeId(signPatientManageRouteNode_DialStatus);
} }
} }