PostDischargePatientManage/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/UploadRobotPublishTask.java
2024-08-30 17:11:55 +08:00

162 lines
8.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.xinelu.quartz.task;
import com.alibaba.fastjson2.JSONObject;
import com.xinelu.common.enums.NodeExecuteStatusEnum;
import com.xinelu.common.enums.PhoneDialMethodEnum;
import com.xinelu.common.enums.TaskNodeTypeEnum;
import com.xinelu.common.utils.StringUtils;
import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord;
import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
import com.xinelu.manage.domain.scriptinfotaskinfo.ScriptInfoTaskInfo;
import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute;
import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode;
import com.xinelu.manage.domain.signpatientrecord.SignPatientRecord;
import com.xinelu.manage.dto.aibo.CreateTaskDto;
import com.xinelu.manage.dto.aibo.CustomerInfoDto;
import com.xinelu.manage.dto.aibo.ImportTaskDto;
import com.xinelu.manage.dto.signpatientmanageroutenode.SignPatientManageRouteNodeDto;
import com.xinelu.manage.mapper.labelfieldcontent.LabelFieldContentMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper;
import com.xinelu.manage.mapper.scriptInfo.ScriptInfoMapper;
import com.xinelu.manage.mapper.scriptinfotaskinfo.ScriptInfoTaskInfoMapper;
import com.xinelu.manage.mapper.signpatientmanageroute.SignPatientManageRouteMapper;
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
import com.xinelu.manage.mapper.signpatientrecord.SignPatientRecordMapper;
import com.xinelu.manage.service.aibo.IAIOBService;
import com.xinelu.manage.service.signpatientmanageroutenode.ISignPatientManageRouteNodeService;
import com.xinelu.manage.vo.labelfieldcontent.LabelFieldInfoContentVo;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
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
private ScriptInfoTaskInfoMapper scriptInfoTaskInfoMapper;
@Resource
private IAIOBService aiobService;
@Resource
private ScriptInfoMapper scriptInfoMapper;
@Resource
private PatientInfoMapper patientInfoMapper;
@Resource
private LabelFieldContentMapper labelFieldContentMapper;
public void uploadRobotPublishTask() {
log.info("开始执行百度智能外呼创建任务定时任务......");
// 查找需要当天执行的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)) {
// 按照话术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);
}
}
}
}