diff --git a/postdischarge-admin/src/main/resources/application-dev.yml b/postdischarge-admin/src/main/resources/application-dev.yml index 622a9f18..c7909ae9 100644 --- a/postdischarge-admin/src/main/resources/application-dev.yml +++ b/postdischarge-admin/src/main/resources/application-dev.yml @@ -6,15 +6,15 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://127.0.0.1:3306/post-discharge-hkey?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true + url: jdbc:mysql://8.131.93.145:54081/post-discharge?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true username: root - password: Hk2y!@#$ + password: 1qaz!@#$ hkhis: # 从数据源开关/默认关闭 enabled: true - url: jdbc:mysql://127.0.0.1:3306/post-discharge-hkey?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true + url: jdbc:mysql://8.131.93.145:54081/post-discharge?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true username: root - password: Hk2y!@#$ + password: 1qaz!@#$ driverClassName: com.mysql.cj.jdbc.Driver # 初始连接数 initialSize: 5 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/batchsendtaskinfo/BatchSendTaskInfoController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/batchsendtaskinfo/BatchSendTaskInfoController.java index 5c46f1ee..beccd106 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/batchsendtaskinfo/BatchSendTaskInfoController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/batchsendtaskinfo/BatchSendTaskInfoController.java @@ -44,6 +44,14 @@ public class BatchSendTaskInfoController extends BaseController { return getDataTable(list); } + /** + * 查询批量推送任务信息列表 + */ + @GetMapping("/batchSendTaskList") + public List batchSendTaskList(BatchSendTaskInfo batchSendTaskInfo) { + return batchSendTaskInfoService.selectBatchSendTaskInfoList(batchSendTaskInfo); + } + /** * 导出批量推送任务信息列表 */ diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/textmessage/SmsReport.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/textmessage/SmsReport.java new file mode 100644 index 00000000..909f68c8 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/textmessage/SmsReport.java @@ -0,0 +1,55 @@ +package com.xinelu.manage.domain.textmessage; + +import lombok.Data; + +/** + * 对SendSms和SendBatchSms短信发送接口设置回执接收 + */ +@Data +public class SmsReport { + + /** + * 转发给运营商的时间。 + */ + private String send_time; + + /** + * 收到运营商回执的时间。 + */ + private String report_time; + + /** + * 是否发送成功。取值:true:发送成功。false:发送失败。 + */ + private Boolean success; + + /** + * 错误码信息描述。 + */ + private String err_msg; + + /** + * 错误码。 + */ + private String err_code; + + /** + * 短信接收号码 + */ + private String phone_number; + + /** + * 短信长度。 + */ + private String sms_size; + + /** + * 发送回执ID,即发送流水号 + */ + private String biz_id; + + /** + * 用发送短信SendSms接口时传的outId。 + */ + private String out_id; +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/textmessage/TaskMessageBackEntity.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/textmessage/TaskMessageBackEntity.java new file mode 100644 index 00000000..8ecbd5a4 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/textmessage/TaskMessageBackEntity.java @@ -0,0 +1,38 @@ +package com.xinelu.manage.domain.textmessage; + +import com.alibaba.fastjson.JSONArray; +import lombok.Data; + +import java.util.Date; + +/** + * 阿里云回调服务数据库表 + */ +@Data +public class TaskMessageBackEntity { + + /** + * 主键 + */ + private Integer id; + + /** + * 回调数据 + */ + private JSONArray messageBackData; + + /** + * 已读状态,0:未读,1:已读 + */ + private Integer readState; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 修改时间 + */ + private Date updateDate; +} \ No newline at end of file diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java index 9f45c0f7..654810ae 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java @@ -90,4 +90,12 @@ public interface ShortMessageSendRecordMapper { * @return BillInfoDto */ List selectShortMessageRecordByBillId(Long billId); + + /** + * 批量新增短信发送结果记录 + * + * @param shortMessageSendRecords 短信发送结果记录 + * @return 结果 + */ + int insertShortMessageSendRecords(List shortMessageSendRecords); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/batchsendtaskinfo/impl/BatchSendTaskInfoServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/batchsendtaskinfo/impl/BatchSendTaskInfoServiceImpl.java index 6f5d92fc..273c3b0c 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/batchsendtaskinfo/impl/BatchSendTaskInfoServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/batchsendtaskinfo/impl/BatchSendTaskInfoServiceImpl.java @@ -210,7 +210,8 @@ public class BatchSendTaskInfoServiceImpl implements IBatchSendTaskInfoService { if (StringUtils.isNotBlank(batchSendTaskInfo.getPhysicalExaminationSummary())) { String[] strings = BracketExtractor.extractToArray(batchSendTaskInfo.getPhysicalExaminationSummary()); stringList.addAll(Arrays.asList(strings)); - batchSendTaskInfo.setPhysicalExaminationLabel(Arrays.toString(strings)); + String result = Arrays.toString(strings).replaceAll("^\\[|\\]$", ""); + batchSendTaskInfo.setPhysicalExaminationLabel(result); if (batchSendTaskInfo.getPhysicalExaminationSummary().length() > 999) { batchSendTaskInfo.setPhysicalExaminationSummary(batchSendTaskInfo.getPhysicalExaminationSummary().substring(0, 999)); } diff --git a/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml index e3c9048b..02eec252 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml @@ -348,4 +348,46 @@ left join text_message message on record.message_template_id = message.id where record.bill_id = #{billId} + + + insert into sign_patient_manage_route( + patient_id, + manage_route_node_id, + patient_phone, + send_time, + message_template_id, + message_node_content, + error_code, + error_status, + create_by, + create_time, + message_type, + message_length, + message_quantity, + message_unit_price, + message_expense, + bill_id + ) + values + + ( + #{ShortMessageSendRecord.patientId}, + #{ShortMessageSendRecord.manageRouteNodeId}, + #{ShortMessageSendRecord.patientPhone}, + #{ShortMessageSendRecord.sendTime}, + #{ShortMessageSendRecord.messageTemplateId}, + #{ShortMessageSendRecord.messageNodeContent}, + #{ShortMessageSendRecord.errorCode}, + #{ShortMessageSendRecord.errorStatus}, + #{ShortMessageSendRecord.createBy}, + #{ShortMessageSendRecord.errorStatus}, + #{ShortMessageSendRecord.createTime}, + #{ShortMessageSendRecord.messageLength}, + #{ShortMessageSendRecord.messageQuantity}, + #{ShortMessageSendRecord.messageUnitPrice}, + #{ShortMessageSendRecord.messageExpense}, + #{ShortMessageSendRecord.billId} + ) + + \ No newline at end of file diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/controller/SendTextMessageController.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/controller/SendTextMessageController.java index 71243b88..326f2358 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/controller/SendTextMessageController.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/controller/SendTextMessageController.java @@ -1,12 +1,23 @@ package com.xinelu.quartz.controller; +import com.alibaba.fastjson2.JSONObject; import com.aliyuncs.exceptions.ClientException; +import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord; +import com.xinelu.manage.domain.textmessage.SmsReport; +import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper; +import com.xinelu.quartz.service.SendTextMessageService; import com.xinelu.quartz.task.SendTextMessageTask; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** * @Description 短信相关定时任务 @@ -19,6 +30,10 @@ public class SendTextMessageController { @Resource private SendTextMessageTask textMessageTask; + @Resource + private SendTextMessageService sendTextMessageService; + @Resource + private ShortMessageSendRecordMapper shortMessageSendRecordMapper; /** * 手动执行短信发送定时任务 @@ -27,4 +42,19 @@ public class SendTextMessageController { public void textMessageSend() throws ClientException { textMessageTask.automaticSendTextMessageTask(); } + + @PostMapping("/textMessageSendBask") + public JSONObject textMessageSendBask(SmsReport data) { + JSONObject retObj = new JSONObject(); + retObj.fluentPut("code", 0).fluentPut("msg", "成功"); + if (Objects.isNull(data) || StringUtils.isBlank(data.getPhone_number())){ + return retObj; + } + List shortMessageSendRecords = new ArrayList<>(); + JSONObject jsonObject = sendTextMessageService.taskTextMessageSendBack(data, shortMessageSendRecords); + if (CollectionUtils.isNotEmpty(shortMessageSendRecords)) { + shortMessageSendRecordMapper.insertShortMessageSendRecords(shortMessageSendRecords); + } + return jsonObject; + } } diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/SendTextMessageService.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/SendTextMessageService.java index 47a839e4..71a95750 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/SendTextMessageService.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/SendTextMessageService.java @@ -1,6 +1,12 @@ package com.xinelu.quartz.service; +import com.alibaba.fastjson2.JSONObject; import com.aliyuncs.exceptions.ClientException; +import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord; +import com.xinelu.manage.domain.textmessage.SmsReport; +import com.xinelu.manage.domain.textmessage.TaskMessageBackEntity; + +import java.util.List; /** * @Description 短信发送定时任务业务层 @@ -13,4 +19,18 @@ public interface SendTextMessageService { * 签约患者管理任务路径节点短信发送定时任务 */ void sendTextMessageSendTask() throws ClientException; + + List taskMessageBack(TaskMessageBackEntity taskMessageBackEntity); + + /** + * 任务执行回调方法 + * + * @param data 任务单通电话回调传输data + * @return JSONObject + */ + JSONObject taskTextMessageSendBack(SmsReport data, List shortMessageSendRecords); + + Integer updateReadState(Integer readState, Integer id); + + Integer deleteData(); } diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java index 02db3ef7..9776dec3 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java @@ -1,10 +1,16 @@ package com.xinelu.quartz.service.impl; +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.config.PushMessageRestrictions; import com.xinelu.common.enums.*; import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord; +import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode; +import com.xinelu.manage.domain.textmessage.SmsReport; +import com.xinelu.manage.domain.textmessage.TaskMessageBackEntity; import com.xinelu.manage.dto.smssend.SmsInfoDTO; import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper; import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper; @@ -15,12 +21,20 @@ import com.xinelu.mobile.utils.SmsSendUtils; import com.xinelu.quartz.service.SendTextMessageService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -44,8 +58,10 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { private PushMessageRestrictions pushMessageRestrictions; @Resource private ShortMessageSendRecordMapper shortMessageSendRecordMapper; - @Resource - private IPatientTaskStatisticsService patientTaskStatisticsService; + @Resource + private IPatientTaskStatisticsService patientTaskStatisticsService; + @Value("${aiob.callBackUrl}") + private String callBackUrl; /** * 签约患者管理任务路径节点短信发送定时任务 @@ -87,7 +103,7 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { localDate = textMessage.getVisitDate().plusDays(textMessage.getRouteNodeDay()); } //没有天数按执行时间处理NodePlanTime - if (Objects.isNull(textMessage.getRouteNodeDay()) && Objects.nonNull(textMessage.getNodePlanTime())){ + if (Objects.isNull(textMessage.getRouteNodeDay()) && Objects.nonNull(textMessage.getNodePlanTime())) { localDate = textMessage.getNodePlanTime().toLocalDate();//新加的外呼立即执行没有getRouteNodeDay } if (Objects.isNull(localDate)) { @@ -102,7 +118,7 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { continue; } //没有天数按执行时间处理NodePlanTime - if (Objects.isNull(textMessage.getRouteNodeDay()) && now.isBefore(textMessage.getNodePlanTime())){ + if (Objects.isNull(textMessage.getRouteNodeDay()) && now.isBefore(textMessage.getNodePlanTime())) { continue; } textMessage.setRouteNodeName(RouteNodeNameEnum.getNameByInfo(textMessage.getRouteNodeName()).getName()); @@ -153,7 +169,7 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { //发送失败ids List failSignPatientManageRouteNodeIds = new ArrayList<>(); - Set patientIdSet = new HashSet<>(); + Set patientIdSet = new HashSet<>(); if (CollectionUtils.isNotEmpty(messages)) { List ids = new ArrayList<>(); for (TextMessage message : messages) { @@ -189,8 +205,8 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { } } shortMessageSendRecordMapper.insertShortMessageSendRecord(shortMessageSendRecord); - // 修改患者任务统计表 - patientIdSet.add(message.getPatientId()); + // 修改患者任务统计表 + patientIdSet.add(message.getPatientId()); } //修改节点状态 if (CollectionUtils.isNotEmpty(ids)) { @@ -201,10 +217,87 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.FAILURE.getInfo(), null, now); } - // 患者任务统计表修改 - if (CollectionUtils.isNotEmpty(patientIdSet)) { - patientTaskStatisticsService.updateNum(new ArrayList<>(patientIdSet)); - } + // 患者任务统计表修改 + if (CollectionUtils.isNotEmpty(patientIdSet)) { + patientTaskStatisticsService.updateNum(new ArrayList<>(patientIdSet)); + } } } + + @Override + public List taskMessageBack(TaskMessageBackEntity taskMessageBackEntity) { + // 接口获取外呼回调数据app + List taskMessageBackEntityList = new ArrayList<>(); + HttpEntity requestEntity = new HttpEntity<>((JSONObject) JSON.toJSON(taskMessageBackEntityList)); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.exchange(callBackUrl + "/getMessageBackList", HttpMethod.POST, requestEntity, String.class); + JSONObject object = JSON.parseObject(responseEntity.getBody()); + if (object == null || object.getInteger("code") == null || object.getInteger("code") != 0) { + return null; + } + if (object.containsKey("data")) { + JSONArray data = object.getJSONArray("data"); + if (data != null && data.size() > 0) { + taskMessageBackEntityList = data.toJavaList(TaskMessageBackEntity.class); + } + } + return taskMessageBackEntityList; + } + + @Override + public JSONObject taskTextMessageSendBack(SmsReport data, List shortMessageSendRecords) { + JSONObject retObj = new JSONObject(); + retObj.fluentPut("code", 0).fluentPut("msg", "成功"); + SignPatientManageRouteNode signPatientManageRouteNode = signPatientManageRouteNodeMapper.selectSignPatientManageRouteNodeById(Long.valueOf(data.getOut_id())); + ShortMessageSendRecord shortMessageSendRecord = new ShortMessageSendRecord(); + if (ObjectUtils.isNotEmpty(signPatientManageRouteNode) && signPatientManageRouteNode.getMessagePushSign() == 1) { + if (data.getSuccess()) { + // 标记任务执行状态 + signPatientManageRouteNode.setNodeExecuteStatus(NodeExecuteStatusEnum.EXECUTED.getInfo()); + signPatientManageRouteNode.setMessageNodeExecuteResultStatus(NodeExecuteResultStatusEnum.SUCCESS.getInfo()); + signPatientManageRouteNode.setNodeFinishDate(LocalDateTime.parse(data.getReport_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + shortMessageSendRecord.setErrorStatus(ErrorStatusEnum.success.getValue()); + shortMessageSendRecord.setErrorCode(0L); + } else { + // 标记任务执行状态 + signPatientManageRouteNode.setNodeExecuteStatus(NodeExecuteStatusEnum.EXECUTED.getInfo()); + signPatientManageRouteNode.setMessageNodeExecuteResultStatus(NodeExecuteResultStatusEnum.FAILURE.getInfo()); + signPatientManageRouteNode.setNodeFinishDate(LocalDateTime.parse(data.getReport_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + shortMessageSendRecord.setErrorStatus(ErrorStatusEnum.fail.getValue()); + shortMessageSendRecord.setErrorCode(1L); + } + shortMessageSendRecord.setManageRouteNodeId(signPatientManageRouteNode.getId()); + shortMessageSendRecord.setPatientPhone(data.getPhone_number()); + shortMessageSendRecord.setMessageTemplateId(shortMessageSendRecord.getMessageTemplateId()); + shortMessageSendRecord.setMessageNodeContent(signPatientManageRouteNode.getMessageNodeContent()); + shortMessageSendRecord.setMessageQuantity(Long.valueOf(data.getSms_size())); + shortMessageSendRecord.setMessageUnitPrice(new BigDecimal("0.1")); + shortMessageSendRecord.setMessageExpense(shortMessageSendRecord.getMessageUnitPrice().multiply(new BigDecimal(shortMessageSendRecord.getMessageQuantity()))); + shortMessageSendRecords.add(shortMessageSendRecord); + signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode); + } + return retObj; + } + + @Override + public Integer updateReadState(Integer readState, Integer id) { + log.info("修改短信回调数据已读状态--id:{}", id); + JSONObject TaskCallbackUpdateDto = new JSONObject(); + TaskCallbackUpdateDto.fluentPut("id", id).fluentPut("readState", readState); + HttpEntity requestEntity = new HttpEntity<>(TaskCallbackUpdateDto); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.exchange(callBackUrl + "/updateMessageBackReadState", HttpMethod.POST, requestEntity, String.class); + JSONObject object = JSON.parseObject(responseEntity.getBody()); + if (object == null || object.getInteger("code") == null || object.getInteger("code") != 0) { + log.info("修改百度外呼回调数据已读状态失败--id:{},原因:{}", id, object.getString("message")); + return null; + } + log.info("修改百度外呼回调数据已读状态成功--id:{}", id); + return 1; + } + + @Override + public Integer deleteData() { + return null; + } } diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/SendTextMessageTask.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/SendTextMessageTask.java index a92d1a99..62528655 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/SendTextMessageTask.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/SendTextMessageTask.java @@ -1,12 +1,20 @@ package com.xinelu.quartz.task; +import com.alibaba.fastjson.JSON; import com.aliyuncs.exceptions.ClientException; +import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord; +import com.xinelu.manage.domain.textmessage.SmsReport; +import com.xinelu.manage.domain.textmessage.TaskMessageBackEntity; +import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper; import com.xinelu.quartz.service.SendTextMessageService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; /** * @Description 短信相关定时任务 @@ -19,6 +27,8 @@ public class SendTextMessageTask { @Resource private SendTextMessageService sendTextMessageService; + @Resource + private ShortMessageSendRecordMapper shortMessageSendRecordMapper; /** * 签约患者管理任务路径节点短信发送定时任务 @@ -28,4 +38,32 @@ public class SendTextMessageTask { sendTextMessageService.sendTextMessageSendTask(); log.info("完成订阅签约患者管理任务路径节点推送定时任务......"); } + + public void smsReportBack() { + log.info("开始执行同步短信回调数据定时任务......"); + TaskMessageBackEntity taskMessageBackEntity = new TaskMessageBackEntity(); + taskMessageBackEntity.setReadState(0); + List taskMessageBackEntityList = sendTextMessageService.taskMessageBack(taskMessageBackEntity); + List shortMessageSendRecords = new ArrayList<>(); + if (!CollectionUtils.isEmpty(taskMessageBackEntityList)) { + // 回调数据解析 + taskMessageBackEntityList.forEach(entity -> { + // JSONString 转 TaskCallbackDataDto + SmsReport smsReport = JSON.parseObject(entity.getMessageBackData().toString(), SmsReport.class); + // 执行回调 + sendTextMessageService.taskTextMessageSendBack(smsReport, shortMessageSendRecords); + // 修改阿里云服务器回调数据已读状态 + sendTextMessageService.updateReadState(1, entity.getId()); + }); + shortMessageSendRecordMapper.insertShortMessageSendRecords(shortMessageSendRecords); + } + log.info("完成同步百度外呼回调数据定时任务......"); + } + + public void clearCallbackData() { + log.info("开始执行清除过期的百度外呼回调数据定时任务......"); + // 清除一个月前的数据 + int count = sendTextMessageService.deleteData(); + log.info("完成清除过期的百度外呼回调数据定时任务,共清除" + count + "条......"); + } }