PostDischargePatientManage/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/UploadRobotPublishTask.java

162 lines
8.1 KiB
Java
Raw Normal View History

2024-08-21 17:58:34 +08:00
package com.xinelu.quartz.task;
2024-08-30 17:11:03 +08:00
import com.alibaba.fastjson2.JSONObject;
2024-08-21 17:58:34 +08:00
import com.xinelu.common.enums.NodeExecuteStatusEnum;
import com.xinelu.common.enums.PhoneDialMethodEnum;
import com.xinelu.common.enums.TaskNodeTypeEnum;
2024-08-30 17:11:03 +08:00
import com.xinelu.common.utils.StringUtils;
import com.xinelu.manage.domain.patientinfo.PatientInfo;
2024-08-21 17:58:34 +08:00
import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord;
2024-08-30 17:11:03 +08:00
import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
import com.xinelu.manage.domain.scriptinfotaskinfo.ScriptInfoTaskInfo;
2024-08-21 17:58:34 +08:00
import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute;
import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode;
import com.xinelu.manage.domain.signpatientrecord.SignPatientRecord;
2024-08-30 17:11:03 +08:00
import com.xinelu.manage.dto.aibo.CreateTaskDto;
import com.xinelu.manage.dto.aibo.CustomerInfoDto;
import com.xinelu.manage.dto.aibo.ImportTaskDto;
2024-08-21 17:58:34 +08:00
import com.xinelu.manage.dto.signpatientmanageroutenode.SignPatientManageRouteNodeDto;
2024-08-30 17:11:03 +08:00
import com.xinelu.manage.mapper.labelfieldcontent.LabelFieldContentMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
2024-08-21 17:58:34 +08:00
import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper;
2024-08-30 17:11:03 +08:00
import com.xinelu.manage.mapper.scriptInfo.ScriptInfoMapper;
import com.xinelu.manage.mapper.scriptinfotaskinfo.ScriptInfoTaskInfoMapper;
2024-08-21 17:58:34 +08:00
import com.xinelu.manage.mapper.signpatientmanageroute.SignPatientManageRouteMapper;
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
import com.xinelu.manage.mapper.signpatientrecord.SignPatientRecordMapper;
2024-08-30 17:11:03 +08:00
import com.xinelu.manage.service.aibo.IAIOBService;
2024-08-21 17:58:34 +08:00
import com.xinelu.manage.service.signpatientmanageroutenode.ISignPatientManageRouteNodeService;
2024-08-30 17:11:03 +08:00
import com.xinelu.manage.vo.labelfieldcontent.LabelFieldInfoContentVo;
2024-08-21 17:58:34 +08:00
import java.time.LocalDate;
import java.time.LocalDateTime;
2024-08-30 17:11:03 +08:00
import java.time.format.DateTimeFormatter;
2024-08-21 17:58:34 +08:00
import java.util.ArrayList;
2024-08-30 17:11:03 +08:00
import java.util.Arrays;
2024-08-21 17:58:34 +08:00
import java.util.List;
2024-08-30 17:11:03 +08:00
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
2024-08-21 17:58:34 +08:00
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
2024-08-30 17:11:03 +08:00
import org.apache.commons.lang3.ObjectUtils;
2024-08-21 17:58:34 +08:00
import org.springframework.stereotype.Component;
/**
* @description: 爱医声上传任务定时任务
* @author: haown
* @create: 2024-08-19 13:58
**/
@Slf4j
@Component("UploadRobotPublishTask")
public class UploadRobotPublishTask {
@Resource
private SignPatientManageRouteNodeMapper signPatientManageRouteNodeMapper;
@Resource
private ISignPatientManageRouteNodeService signPatientManageRouteNodeService;
@Resource
private SignPatientManageRouteMapper signPatientManageRouteMapper;
@Resource
private SignPatientRecordMapper signPatientRecordMapper;
@Resource
private PatientVisitRecordMapper patientVisitRecordMapper;
@Resource
2024-08-30 17:11:03 +08:00
private ScriptInfoTaskInfoMapper scriptInfoTaskInfoMapper;
@Resource
private IAIOBService aiobService;
@Resource
private ScriptInfoMapper scriptInfoMapper;
@Resource
private PatientInfoMapper patientInfoMapper;
@Resource
private LabelFieldContentMapper labelFieldContentMapper;
2024-08-21 17:58:34 +08:00
public void uploadRobotPublishTask() {
2024-08-30 17:11:03 +08:00
log.info("开始执行百度智能外呼创建任务定时任务......");
2024-08-21 17:58:34 +08:00
// 查找需要当天执行的AI打电话任务
SignPatientManageRouteNodeDto signPatientManageRouteNodeDto = new SignPatientManageRouteNodeDto();
signPatientManageRouteNodeDto.setTaskNodeType(TaskNodeTypeEnum.PHONE_OUTBOUND.getInfo());
signPatientManageRouteNodeDto.setNodeExecuteStatus(NodeExecuteStatusEnum.UNEXECUTED.getInfo());
signPatientManageRouteNodeDto.setPhoneDialMethod(PhoneDialMethodEnum.AI.getInfo());
List<SignPatientManageRouteNode> nodeList = signPatientManageRouteNodeMapper.selectSignPatientManageRouteNodeList(signPatientManageRouteNodeDto);
List<SignPatientManageRouteNode> executeNodeList = new ArrayList<>();
nodeList.forEach(node -> {
SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(node.getManageRouteId());
SignPatientRecord signPatientRecord = signPatientRecordMapper.selectByPrimaryKey(signPatientManageRoute.getSignPatientRecordId());
PatientVisitRecord patientVisitRecord = patientVisitRecordMapper.selectPatientVisitRecordById(signPatientRecord.getPatientVisitRecordId());
LocalDateTime executeTime = signPatientManageRouteNodeService.getExecuteTime(node.getExecuteTime(), node.getRouteNodeName(), node.getRouteNodeDay(), patientVisitRecord);
if (executeTime.toLocalDate().isBefore(LocalDate.now())) {
executeNodeList.add(node);
}
});
if (CollectionUtils.isNotEmpty(executeNodeList)) {
2024-08-30 17:11:03 +08:00
// 按照话术id分组每个话术id对应不同的机器人id, 每个机器人每天创建一条任务
Map<Long, List<SignPatientManageRouteNode>> groupByScriptInfo = executeNodeList.stream().collect(Collectors.groupingBy(SignPatientManageRouteNode::getScriptInfoId));
// 根据机器人id查询智能外呼系统的任务id
for (Long scriptInfoId : groupByScriptInfo.keySet()) {
ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(scriptInfoId);
String taskId = scriptInfoTaskInfoMapper.getByScriptInfoId(scriptInfoId);
if (StringUtils.isBlank(taskId)) {
// 没有任务则创建任务
if (ObjectUtils.isNotEmpty(scriptInfo)) {
CreateTaskDto createTaskDto = new CreateTaskDto();
createTaskDto.setTaskName(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + scriptInfo.getScriptName());
createTaskDto.setRobotId(scriptInfo.getRobotPublishId());
createTaskDto.setDialStartDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
createTaskDto.setDialEndDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
createTaskDto.setForbidDialDate(Arrays.asList(99));
createTaskDto.setNumTypeFilterList(Arrays.asList(1,2));
taskId = aiobService.createTask(createTaskDto);
ScriptInfoTaskInfo scriptInfoTaskInfo = new ScriptInfoTaskInfo();
scriptInfoTaskInfo.setScriptInfoId(scriptInfoId);
scriptInfoTaskInfo.setTaskId(taskId);
scriptInfoTaskInfo.setRobotId(scriptInfo.getRobotPublishId());
scriptInfoTaskInfo.setCreateTime(LocalDateTime.now());
scriptInfoTaskInfoMapper.insertScriptInfoTaskInfo(scriptInfoTaskInfo);
}
}
// 客户名单list
List<SignPatientManageRouteNode> scriptNodeList = groupByScriptInfo.get(scriptInfoId);
List<CustomerInfoDto> customerInfoList = new ArrayList<>();
scriptNodeList.forEach(node -> {
CustomerInfoDto customerInfoDto = new CustomerInfoDto();
customerInfoDto.setExtJson(node.getId() + "");
SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(node.getManageRouteId());
PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(signPatientManageRoute.getPatientId());
customerInfoDto.setMobile(patientInfo.getPatientPhone());
// 查询患者画像信息
List<LabelFieldInfoContentVo> labelFieldContentList = labelFieldContentMapper.selectByPatientId(patientInfo.getId());
// 处理变量
JSONObject jsonObject = new JSONObject();
if (StringUtils.isNotBlank(scriptInfo.getVariables())) {
List<String> 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());
});
}
customerInfoDto.setVar(jsonObject);
customerInfoList.add(customerInfoDto);
});
// 上传名单
ImportTaskDto importTaskDto = new ImportTaskDto();
importTaskDto.setTaskId(taskId);
importTaskDto.setSecretType(2);
importTaskDto.setCustomerInfoList(customerInfoList);
aiobService.importTask(importTaskDto);
// 开启任务
aiobService.updateTaskStatus(taskId, 2);
}
2024-08-21 17:58:34 +08:00
}
}
}