diff --git a/postdischarge-admin/src/main/resources/application.yml b/postdischarge-admin/src/main/resources/application.yml
index 5406b468..f58c7cbd 100644
--- a/postdischarge-admin/src/main/resources/application.yml
+++ b/postdischarge-admin/src/main/resources/application.yml
@@ -288,4 +288,6 @@ aiob:
url: https://aiob-open.baidu.com/api
accessKey: b6d2d73cdf2d4d7ca2ccc84968accdb3
secretKey: 9262d2fe32544eaabce18331bd5ca2c5
+ # 任务执行回调地址--测试
+ callBackUrl: http://8.131.93.145:54011/api/taskCallBack
diff --git a/postdischarge-common/pom.xml b/postdischarge-common/pom.xml
index 73f446fc..0245b359 100644
--- a/postdischarge-common/pom.xml
+++ b/postdischarge-common/pom.xml
@@ -52,6 +52,11 @@
jackson-databind
+
+ com.alibaba
+ fastjson
+ 1.2.83
+
com.alibaba.fastjson2
fastjson2
diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/aibo/AIOBController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/aibo/AIOBController.java
index d23841b0..4676debf 100644
--- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/aibo/AIOBController.java
+++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/aibo/AIOBController.java
@@ -1,5 +1,7 @@
package com.xinelu.manage.controller.aibo;
+import com.alibaba.fastjson2.JSONObject;
+import com.aliyuncs.exceptions.ClientException;
import com.xinelu.common.core.controller.BaseController;
import com.xinelu.common.core.domain.R;
import com.xinelu.manage.dto.aibo.CreateTaskDto;
@@ -74,7 +76,7 @@ public class AIOBController extends BaseController {
*/
@ApiOperation("任务单通电话回调")
@PostMapping("/taskCallBack")
- public R taskCallBack(@RequestBody TaskCallbackDto taskCallbackDto) {
- return R.ok(aiobService.taskCallBack(taskCallbackDto.getCallbackType(), taskCallbackDto.getData()));
+ public JSONObject taskCallBack(@RequestBody TaskCallbackDto taskCallbackDto) throws ClientException {
+ return aiobService.taskCallBack(taskCallbackDto.getCallbackType(), taskCallbackDto.getData());
}
}
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 e9640dfc..10ce9270 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
@@ -106,6 +106,12 @@ public class SignPatientManageRouteNode extends BaseEntity {
@Excel(name = "电话内容", readConverterExp = "富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记")
private String phoneNodeContent;
+ /**
+ * 爱医声平台任务查询返回JSON
+ */
+ @ApiModelProperty(value = "爱医声平台任务查询返回JSON")
+ private String phoneResultJson;
+
/** 电话重拨次数,重拨一次:REDIAL_ONCE,重拨二次:REDIAL_TWICE,不重播:NOT_REPLAY */
@ApiModelProperty(value = "电话重拨次数,重拨一次:REDIAL_ONCE,重拨二次:REDIAL_TWICE,不重播:NOT_REPLAY")
@Excel(name = "电话重拨次数,重拨一次:REDIAL_ONCE,重拨二次:REDIAL_TWICE,不重播:NOT_REPLAY")
@@ -394,4 +400,7 @@ public class SignPatientManageRouteNode extends BaseEntity {
@ApiModelProperty(value = "患者宣教阅读或问卷提交的时间")
@Excel(name = "患者宣教阅读或问卷提交的时间")
private LocalDateTime nodeFinishDate;
+
+ @ApiModelProperty(value = "第三方返回的任务ID")
+ private String taskIdExt;
}
diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/dto/aibo/CreateTaskDto.java b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/aibo/CreateTaskDto.java
index 619bdf95..00ad9a62 100644
--- a/postdischarge-manage/src/main/java/com/xinelu/manage/dto/aibo/CreateTaskDto.java
+++ b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/aibo/CreateTaskDto.java
@@ -59,6 +59,12 @@ public class CreateTaskDto {
*/
private List numTypeFilterList;
+ private Boolean taskDataCallback;
+ /**
+ * 任务级回调地址设置
+ */
+ private String callBackUrl;
+
/**
* 任务拨号完成后是否进入完成状态, 0:拨号完成后任务不结束 1:拨号完成后任务结束 默认值为1
*/
diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.java
index 9ee9e6da..377a9eca 100644
--- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.java
+++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.java
@@ -20,4 +20,6 @@ public interface ScriptInfoTaskInfoMapper {
*/
int insertScriptInfoTaskInfo(ScriptInfoTaskInfo scriptInfoTaskInfo);
+ int deleteScriptInfoTaskInfo();
+
}
diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/IAIOBService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/IAIOBService.java
index c88f25bc..e1ca4789 100644
--- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/IAIOBService.java
+++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/IAIOBService.java
@@ -1,5 +1,7 @@
package com.xinelu.manage.service.aibo;
+import com.alibaba.fastjson2.JSONObject;
+import com.aliyuncs.exceptions.ClientException;
import com.xinelu.manage.dto.aibo.CreateTaskDto;
import com.xinelu.manage.dto.aibo.ImportTaskDto;
import com.xinelu.manage.dto.aibo.TaskCallbackDataDto;
@@ -50,5 +52,13 @@ public interface IAIOBService {
*/
List importTask(ImportTaskDto importTaskDto);
- String taskCallBack(Integer callbackType, TaskCallbackDataDto data);
+ /**
+ * @description 任务单执行回调方法
+ * @param callbackType 回调数据类型, 0-任务呼叫单通电话回调 1-号码组终态回调 2-任务状态变更回调 3-实时呼叫单通电话回调
+ * @param data 任务单通电话回调传输data
+ * @return null
+ * @Author haown
+ * @Date 2024-9-2 14:20
+ */
+ JSONObject taskCallBack(Integer callbackType, TaskCallbackDataDto data) throws ClientException;
}
diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/impl/AIOBServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/impl/AIOBServiceImpl.java
index 131cde9b..8adcab16 100644
--- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/impl/AIOBServiceImpl.java
+++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aibo/impl/AIOBServiceImpl.java
@@ -1,20 +1,60 @@
package com.xinelu.manage.service.aibo.impl;
+import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
+import com.aliyuncs.exceptions.ClientException;
+import com.xinelu.common.config.AliYunSmsTwoConfig;
+import com.xinelu.common.constant.PhoneMessageRemindConstants;
+import com.xinelu.common.constant.TaskCreateTypeConstant;
+import com.xinelu.common.constant.TaskStatisticsTypeConstants;
import com.xinelu.common.core.redis.RedisCache;
+import com.xinelu.common.enums.ErrorStatusEnum;
+import com.xinelu.common.enums.NodeExecuteResultStatusEnum;
+import com.xinelu.common.enums.NodeExecuteStatusEnum;
+import com.xinelu.common.enums.PhoneRedialTimesEnum;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.StringUtils;
+import com.xinelu.manage.domain.patientinfo.PatientInfo;
+import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecord;
+import com.xinelu.manage.domain.phonedialrecord.PhoneDialRecord;
+import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
+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.domain.textmessage.TextMessage;
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.aibo.TaskCallbackDataDto;
+import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO;
+import com.xinelu.manage.dto.smssend.SmsInfoDTO;
+import com.xinelu.manage.mapper.labelfieldcontent.LabelFieldContentMapper;
+import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
+import com.xinelu.manage.mapper.patienttaskexecuterecord.PatientTaskExecuteRecordMapper;
+import com.xinelu.manage.mapper.phonedialrecord.PhoneDialRecordMapper;
+import com.xinelu.manage.mapper.scriptInfo.ScriptInfoMapper;
+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.mapper.textmessage.TextMessageMapper;
import com.xinelu.manage.service.aibo.IAIOBService;
+import com.xinelu.manage.service.patienttaskstatistics.IPatientTaskStatisticsService;
+import com.xinelu.manage.service.signpatientmanageroute.ISignPatientManageRouteService;
import com.xinelu.manage.vo.aibo.ImportTaskVo;
+import com.xinelu.manage.vo.labelfieldcontent.LabelFieldInfoContentVo;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@@ -29,6 +69,7 @@ import org.springframework.web.client.RestTemplate;
* @author: haown
* @create: 2024-08-22 09:54
**/
+@Slf4j
@Service
public class AIOBServiceImpl implements IAIOBService {
@Value("${aiob.url}")
@@ -43,6 +84,31 @@ public class AIOBServiceImpl implements IAIOBService {
@Resource
private RedisCache redisCache;
+ @Resource
+ private SignPatientRecordMapper signPatientRecordMapper;
+ @Resource
+ private SignPatientManageRouteMapper signPatientManageRouteMapper;
+ @Resource
+ private SignPatientManageRouteNodeMapper signPatientManageRouteNodeMapper;
+ @Resource
+ private PhoneDialRecordMapper phoneDialRecordMapper;
+ @Resource
+ private AliYunSmsTwoConfig aliYunSmsTwoConfig;
+ @Resource
+ private ISignPatientManageRouteService signPatientManageRouteService;
+ @Resource
+ private TextMessageMapper textMessageMapper;
+ @Resource
+ private PatientTaskExecuteRecordMapper patientTaskExecuteRecordMapper;
+ @Resource
+ private IPatientTaskStatisticsService patientTaskStatisticsService;
+ @Resource
+ private PatientInfoMapper patientInfoMapper;
+ @Resource
+ private LabelFieldContentMapper labelFieldContentMapper;
+ @Resource
+ private ScriptInfoMapper scriptInfoMapper;
+
/**
* @description 获取外呼平台accessToken
* @return 智能外呼平台 accessToken
@@ -71,7 +137,7 @@ public class AIOBServiceImpl implements IAIOBService {
// accessToken放入redis缓存
accessToken = data.getString("accessToken");
// 有效期30天
- int expires_in = object.getInteger("expires_in");
+ int expires_in = data.getInteger("expiresTime");
redisCache.setCacheObject("AIOBAssessToken", accessToken, expires_in, TimeUnit.MINUTES);
}
return accessToken;
@@ -141,7 +207,7 @@ public class AIOBServiceImpl implements IAIOBService {
.fluentPut("taskStatus", taskStatus);
HttpEntity requestEntity = new HttpEntity<>(jsonObject, headers);
RestTemplate restTemplate = new RestTemplate();
- ResponseEntity responseEntity = restTemplate.exchange(url + "/v3/console/realtime/status/create", HttpMethod.POST, requestEntity, String.class);
+ ResponseEntity responseEntity = restTemplate.exchange(url + "/v3/console/apitask/task/status/update", HttpMethod.POST, requestEntity, String.class);
JSONObject object = JSON.parseObject(responseEntity.getBody());
if (object == null || object.getInteger("code") == null || object.getInteger("code") != 200) {
throw new ServiceException("修改任务状态失败," + object.getString("msg"));
@@ -179,7 +245,7 @@ public class AIOBServiceImpl implements IAIOBService {
}
JSONObject data = object.getJSONObject("data");
- JSONArray resList = data.getJSONArray("retList");
+ JSONArray resList = data.getJSONArray("resList");
List importTaskList = Arrays.asList(resList.toArray(ImportTaskVo.class));
return importTaskList;
// {
@@ -206,8 +272,17 @@ public class AIOBServiceImpl implements IAIOBService {
// }
}
+ /**
+ * @description 任务单执行回调方法
+ * @param callbackType 回调数据类型, 0-任务呼叫单通电话回调 1-号码组终态回调 2-任务状态变更回调 3-实时呼叫单通电话回调
+ * @param data 任务单通电话回调传输data
+ * @return null
+ * @Author haown
+ * @Date 2024-9-2 14:20
+ */
@Override
- public String taskCallBack(Integer callbackType, TaskCallbackDataDto data) {
+ public JSONObject taskCallBack(Integer callbackType, TaskCallbackDataDto data) throws ClientException {
+ //{"extJson":"623","taskId":"3892402966495232","tenantId":3849515568332800}
//TaskCallbackDataDto(sessionId=3874887150206976_2e1ae4e5ee0a4513b61d2411523f7b9b, tenantId=3849515568332800,
// taskId=3874887150206976, taskName=测试20240829, robotId=11a05202-12a4-437a-b989-43235b920a2f,
// robotName=慢病用药回访, memberId=3875110220070912, mobile=15166940975, callTimes=1,
@@ -222,6 +297,155 @@ public class AIOBServiceImpl implements IAIOBService {
// {"role":"speech","timestamp":1724917725993,"content":"是的","contextText":"祝您早日康复。","sn":"0e5c9c4e65db11ef_6_1","intent":"sys_yes","start":"00:27.505","stop":"00:29.637","timeLen":2132,"interrupted":false,"silent":false,"nodeInfo":"eyJwcm9jZXNzTmFtZSI6IuaFoueXheeUqOiNr+Wbnuiuv+ivneacryIsIm5vZGVOYW1lIjoi5oyJ5pe25pyN6I2v6IqC54K5X3Bxd2RkcDBpIiwiaW50ZW50Ijoi6IKv5a6a5oSP5Zu+IiwiZW50aXR5IjpbXSwic3lzdGVtRXZlbnQiOiIiLCJmYXEiOiIifQ=="}],
// durationTimeLen=42, ringingTimeLen=9, talkingTimeLen=29, startTime=1724917686000, ringStartTime=1724917688000, talkingStartTime=1724917698000, endTime=1724917728000, intent=null, action=[HANGUP], isRobotHangup=true,
// dialogVar={"departmentName":"山东省立医院","patientName":"李四"}, smsVar=null, extJson=测试2, transResult=0)
- return data.getTaskId();
+
+ JSONObject retObj = new JSONObject();
+ retObj.fluentPut("code", 200).fluentPut("msg", "success");
+ if (callbackType == 0) {
+ // 是否发送短信标识
+ boolean needSendSms = false;
+ // 根据id查询任务
+ SignPatientManageRouteNode signPatientManageRouteNode = signPatientManageRouteNodeMapper.selectSignPatientManageRouteNodeById(Long.valueOf(data.getExtJson()));
+ if (ObjectUtils.isNotEmpty(signPatientManageRouteNode)) {
+ // 标记任务执行状态
+ signPatientManageRouteNode.setNodeExecuteStatus(NodeExecuteStatusEnum.EXECUTED.getInfo());
+ // 获取电话已拨打次数
+ PhoneDialRecord phoneDialRecordQuery = new PhoneDialRecord();
+ phoneDialRecordQuery.setManageRouteNodeId(signPatientManageRouteNode.getId());
+ List phoneDialRecordList = phoneDialRecordMapper.selectPhoneDialRecordList(phoneDialRecordQuery);
+ // 电话拨打未成功,判断是否需要重拨;电话拨打成功,设置电话拨通情况为成功
+ if (data.getEndType() != null && data.getEndType() == 0) {//接通状态,1-已接通 0-未接通
+ // 已经拨打的次数
+ int dialCount = CollectionUtils.isEmpty(phoneDialRecordList) ? 0 : phoneDialRecordList.size() + 1;
+ if (PhoneRedialTimesEnum.getValueByInfo(signPatientManageRouteNode.getPhoneRedialTimes()).getValue() + 1 > dialCount) {
+ // 需要重拨-导入名单
+ uploadCustomerInfoList(signPatientManageRouteNode, data.getTaskId());
+ } else {
+ // 不需要重拨,设置电话拨通情况
+ signPatientManageRouteNode.setPhoneNodeExecuteResultStatus(NodeExecuteResultStatusEnum.FAILURE.getInfo());
+ }
+ //电话短信提醒
+ if (StringUtils.equals(PhoneMessageRemindConstants.NOT_CONNECTED_SEND_MESSAGE, signPatientManageRouteNode.getPhoneMessageRemind())) {
+ // 发送短信
+ needSendSms = true;
+ }
+ } else {
+ signPatientManageRouteNode.setPhoneNodeExecuteResultStatus(NodeExecuteResultStatusEnum.SUCCESS.getInfo());
+ if (StringUtils.equals(PhoneMessageRemindConstants.CONNECTED_SEND_MESSAGE, signPatientManageRouteNode.getPhoneMessageRemind())) {
+ // 发送短信
+ needSendSms = true;
+ }
+ // 记录通话详情
+ signPatientManageRouteNode.setPhoneResultJson(com.alibaba.fastjson.JSON.toJSONString(data, SerializerFeature.WriteMapNullValue));
+ }
+
+ signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode);
+
+ PatientTaskExecuteRecord patientTaskExecuteRecord = new PatientTaskExecuteRecord();
+ BeanUtils.copyProperties(signPatientManageRouteNode, patientTaskExecuteRecord);
+
+ SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(signPatientManageRouteNode.getManageRouteId());
+ if (ObjectUtils.isNotEmpty(signPatientManageRoute)) {
+ patientTaskExecuteRecord.setPatientId(signPatientManageRoute.getPatientId());
+ patientTaskExecuteRecord.setPatientName(signPatientManageRoute.getPatientName());
+ // 就诊记录
+ SignPatientRecord signPatientRecord = signPatientRecordMapper.selectByPrimaryKey(signPatientManageRoute.getSignPatientRecordId());
+ if (ObjectUtils.isNotEmpty(signPatientRecord)) {
+ patientTaskExecuteRecord.setVisitRecordId(signPatientRecord.getPatientVisitRecordId());
+ }
+
+ // 发送短信
+ if (needSendSms) {
+ sendSms(signPatientManageRoute.getPatientId(), signPatientManageRouteNode);
+ }
+ }
+ // 增加任务执行记录
+ patientTaskExecuteRecord.setManageRouteNodeId(signPatientManageRouteNode.getId());
+ patientTaskExecuteRecord.setManageRouteNodeName(signPatientManageRouteNode.getRouteNodeName());
+ patientTaskExecuteRecord.setExecuteResult(data.getEndTypeReason());
+ patientTaskExecuteRecord.setExecuteType(TaskCreateTypeConstant.MANUAL_MATCHE);
+ patientTaskExecuteRecord.setExecuteTime(LocalDateTime.now());
+ patientTaskExecuteRecord.setCreateTime(LocalDateTime.now());
+
+ // 增加电话拨打记录
+ PhoneDialRecord phoneDialRecord = new PhoneDialRecord();
+ phoneDialRecord.setPatientId(signPatientManageRoute.getPatientId());
+ phoneDialRecord.setManageRouteNodeId(signPatientManageRouteNode.getId());
+ phoneDialRecord.setPatientPhone(data.getMobile());
+ phoneDialRecord.setDialTime(LocalDateTime.now());
+ phoneDialRecord.setPhoneTemplateId(signPatientManageRouteNode.getScriptInfoId() + "");
+ phoneDialRecord.setPhoneDialMethod(signPatientManageRouteNode.getPhoneDialMethod());
+ phoneDialRecord.setErrorCode(data.getEndType() == 0 ? 1L : 0);
+ phoneDialRecord.setErrorStatus(data.getEndType() == 0 ? ErrorStatusEnum.fail.getValue() : ErrorStatusEnum.success.getValue());
+ phoneDialRecord.setCreateTime(LocalDateTime.now());
+ phoneDialRecordMapper.insertPhoneDialRecord(phoneDialRecord);
+
+ // 修改任务统计表数据
+ if (patientTaskExecuteRecordMapper.insertPatientTaskExecuteRecord(patientTaskExecuteRecord) > 0) {
+ // 任务统计表修改
+ patientTaskStatisticsService.updateNum(signPatientManageRoute.getPatientId(), TaskStatisticsTypeConstants.TASK_EXECUTE_NUM, 1);
+ }
+ }
+ }
+ return retObj;
}
+
+ private void sendSms(Long patientId, SignPatientManageRouteNode signPatientManageRouteNode) throws ClientException {
+ TextMessage textMessage = textMessageMapper.selectTextMessageById(signPatientManageRouteNode.getPhoneMessageTemplateId());
+ if (ObjectUtils.isNotEmpty(textMessage)) {
+ // 发送短信
+ SmsInfoDTO smsInfoDTO = new SmsInfoDTO();
+ String patientPhone = signPatientManageRouteMapper.selectPatientPhone(patientId);
+ smsInfoDTO.setPhoneNumbers(patientPhone);
+ smsInfoDTO.setSignName(aliYunSmsTwoConfig.getSignName());
+ smsInfoDTO.setTemplateCode(textMessage.getTextMessageId());
+ Boolean b = signPatientManageRouteService.sendSms(smsInfoDTO);
+ //发送记录
+ PatientQuestionSubmitResultDTO dto = new PatientQuestionSubmitResultDTO();
+ dto.setPatientId(patientId);
+ dto.setPatientPhone(patientPhone);
+ dto.setManageRouteNodeId(signPatientManageRouteNode.getId());
+ dto.setPhoneMessageTemplateCode(textMessage.getTextMessageId());
+ dto.setPhoneMessageTemplateContent(signPatientManageRouteNode.getPhoneMessageTemplateContent());
+ signPatientManageRouteService.shortMessageSendRecordExtracted(dto, LocalDateTime.now(), b, "AI");
+
+ if (!b) {
+ log.info("短信发送失败");
+ } else {
+ log.info("短信发送成功");
+ }
+ } else {
+ log.info("短信发送成功");
+ }
+ }
+
+ private void uploadCustomerInfoList(SignPatientManageRouteNode node, String taskId) {
+ CustomerInfoDto customerInfoDto = new CustomerInfoDto();
+ List customerInfoList = new ArrayList<>();
+ customerInfoDto.setExtJson(node.getId() + "");
+ SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(node.getManageRouteId());
+ PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(signPatientManageRoute.getPatientId());
+ customerInfoDto.setMobile(patientInfo.getPatientPhone());
+ // 查询患者画像信息
+ List labelFieldContentList = labelFieldContentMapper.selectByPatientId(patientInfo.getId());
+ ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getScriptInfoId());
+ // 处理变量
+ JSONObject jsonObject = new JSONObject();
+ if (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());
+ });
+ }
+
+ customerInfoDto.setVar(jsonObject);
+ customerInfoList.add(customerInfoDto);
+ // 上传名单
+ ImportTaskDto importTaskDto = new ImportTaskDto();
+ importTaskDto.setTaskId(taskId);
+ importTaskDto.setSecretType(2);
+ importTaskDto.setCustomerInfoList(customerInfoList);
+ importTask(importTaskDto);
+ }
+
}
diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/ISignPatientManageRouteService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/ISignPatientManageRouteService.java
index 091d0a68..ba2ae9bb 100644
--- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/ISignPatientManageRouteService.java
+++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/ISignPatientManageRouteService.java
@@ -121,5 +121,5 @@ public interface ISignPatientManageRouteService {
Boolean sendSms(SmsInfoDTO smsInfoDTO) throws ClientException, ServiceException;
- void shortMessageSendRecordExtracted(PatientQuestionSubmitResultDTO dto, LocalDateTime time, Boolean b);
+ void shortMessageSendRecordExtracted(PatientQuestionSubmitResultDTO dto, LocalDateTime time, Boolean b, String createBy);
}
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 2d7036a3..9e871bce 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
@@ -426,7 +426,7 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
smsInfoDTO.setTemplateCode(dto.getPhoneMessageTemplateCode());
Boolean b = sendSms(smsInfoDTO);
//发送记录
- shortMessageSendRecordExtracted(dto, time, b);
+ shortMessageSendRecordExtracted(dto, time, b, null);
if (!b) {
log.info("短信发送失败");
} else {
@@ -496,7 +496,7 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
* @param b 状态
*/
@Override
- public void shortMessageSendRecordExtracted(PatientQuestionSubmitResultDTO dto, LocalDateTime time, Boolean b) {
+ public void shortMessageSendRecordExtracted(PatientQuestionSubmitResultDTO dto, LocalDateTime time, Boolean b, String createBy) {
ShortMessageSendRecord shortMessageSendRecord = new ShortMessageSendRecord();
shortMessageSendRecord.setPatientId(dto.getPatientId());
shortMessageSendRecord.setPatientPhone(dto.getPatientPhone());
@@ -512,7 +512,7 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
shortMessageSendRecord.setErrorCode(0L);
shortMessageSendRecord.setErrorStatus(ErrorStatusEnum.success.getValue());
}
- shortMessageSendRecord.setCreateBy(SecurityUtils.getUsername());
+ shortMessageSendRecord.setCreateBy(StringUtils.isBlank(createBy) ? SecurityUtils.getUsername() : createBy);
shortMessageSendRecord.setCreateTime(time);
shortMessageSendRecordMapper.insertShortMessageSendRecord(shortMessageSendRecord);
}
diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/RobotPublishServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/RobotPublishServiceImpl.java
index a185fe3c..3cc80dc0 100644
--- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/RobotPublishServiceImpl.java
+++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/RobotPublishServiceImpl.java
@@ -224,7 +224,7 @@ public class RobotPublishServiceImpl implements IRobotPublishService {
dto.setManageRouteNodeId(signPatientManageRouteNode.getId());
dto.setPhoneMessageTemplateCode(textMessage.getTextMessageId());
dto.setPhoneMessageTemplateContent(signPatientManageRouteNode.getPhoneMessageTemplateContent());
- signPatientManageRouteService.shortMessageSendRecordExtracted(dto, LocalDateTime.now(), b);
+ signPatientManageRouteService.shortMessageSendRecordExtracted(dto, LocalDateTime.now(), b, "AI");
if (!b) {
log.info("短信发送失败");
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 ebbab86a..8399e5ce 100644
--- a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.xml
+++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfotaskinfo/ScriptInfoTaskInfoMapper.xml
@@ -51,4 +51,9 @@
+
+
+ delete
+ from script_info_task_info
+
\ No newline at end of file
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 1d79c1fd..c1b95932 100644
--- a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml
+++ b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml
@@ -22,6 +22,7 @@
+
@@ -80,10 +81,11 @@
+
- select id, manage_route_id, manage_route_name, route_node_id, route_node_name, route_node_day, task_type, task_status, task_subdivision, task_node_type, second_classify_describe, execute_time, phone_push_sign, script_info_id, phone_template_id, phone_template_name, phone_node_content, 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 from sign_patient_manage_route_node
+ select id, manage_route_id, manage_route_name, route_node_id, route_node_name, route_node_day, task_type, task_status, task_subdivision, task_node_type, second_classify_describe, execute_time, phone_push_sign, script_info_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 from sign_patient_manage_route_node