package cn.gistack.alerts.sms.service.impl;
|
|
import cn.com.flaginfo.sdk.cmc.api.result.ComResult;
|
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendDataResult;
|
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
|
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendDataResult;
|
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
|
import cn.gistack.alerts.alarmRule.entity.AlarmRecordDetail;
|
import cn.gistack.alerts.alarmRule.service.AlarmRecordDetailService;
|
import cn.gistack.alerts.sms.entity.SmsRecord;
|
import cn.gistack.alerts.sms.entity.SmsResult;
|
import cn.gistack.alerts.sms.entity.SmsTemplate;
|
import cn.gistack.alerts.sms.service.ISmsRecordService;
|
import cn.gistack.alerts.sms.service.ISmsResultService;
|
import cn.gistack.alerts.sms.service.SmsService;
|
import cn.gistack.alerts.sms.util.SmsUtils;
|
import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
|
/**
|
* 短信发送服务实现层
|
* @author zhongrj
|
* @date 2023-05-30
|
*/
|
@Service
|
public class SmsServiceImpl implements SmsService {
|
|
@Autowired
|
private ISmsRecordService smsRecordService;
|
|
@Autowired
|
private AlarmRecordDetailService alarmRecordDetailService;
|
|
@Autowired
|
private ISmsResultService smsResultService;
|
|
/**
|
* 发送 xx 变量模板短信
|
* @param phoneNumbers 手机号集合
|
* @param request 内容对象
|
* @return
|
*/
|
@Override
|
public Object sendXXMsg(SMSSendRequest request, List<String> phoneNumbers) {
|
List<ComResult<SMSSendDataResult>> list = new ArrayList<>();
|
if (phoneNumbers.size()>0){
|
// 先保存结果记录
|
SmsResult smsResult = saveSendResult(request, phoneNumbers.size());
|
// 遍历发送
|
for (String phone : phoneNumbers) {
|
request.setUserNumber(phone);
|
// 发送
|
ComResult<SMSSendDataResult> result = SmsUtils.sendMsg(request);
|
if(null != smsResult) {
|
// 保存记录
|
saveSendRecord(request, result.getCode(), result.getMsg(), smsResult.getId());
|
}
|
list.add(result);
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 发送 具名 变量模板短信
|
* @param smsRequestTemplate
|
* @return
|
*/
|
@Override
|
public Object sendSignMsg(SmsRequestTemplate smsRequestTemplate) {
|
// 取出数据
|
SMSSendRequest request = new SMSSendRequest();
|
SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
|
request.setTemplateId(smsTemplate.getTemplateId());
|
List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
|
// 先保存结果记录
|
SmsResult smsResult = saveSendResult(request, templateContent.size());
|
List<SmsRecord> smsRecordList = new ArrayList<>();
|
// 遍历处理
|
for (List<String> list : templateContent) {
|
AlarmRecordDetail alarmRecordDetail = new AlarmRecordDetail();
|
alarmRecordDetail.setReservoirNumber(list.get(0));
|
alarmRecordDetail.setAlarmRecordId(Long.parseLong(list.get(list.size() - 1)));
|
alarmRecordDetail.setAlarmMode("短信");
|
// 删除 最后一个 告警记录id
|
list.remove(list.size() - 1);
|
// 删除 0 水库编码
|
list.remove(0);
|
// 转换字符串
|
String row = String.join(",", list);
|
// 组装数据
|
String[][] dyns = new String[][]{{smsRequestTemplate.getTitle()}, {row}};
|
//请求参数
|
DynSMSSendRequest sendRequest = new DynSMSSendRequest();
|
sendRequest.setTemplateId(smsTemplate.getTemplateId());
|
sendRequest.setDynData(dyns);
|
// 发送
|
ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(sendRequest);
|
|
SmsRecord smsRecord = new SmsRecord();
|
if (null != smsResult){
|
alarmRecordDetail.setPhone(list.get(0));
|
// 设置手机号
|
request.setUserNumber(list.get(0));
|
// 内容处理
|
String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
|
// 短信内容拼接(完成发送的结果信息)
|
// 需要删除最前面的手机号
|
list.remove(0);
|
// 格式转换
|
String format = String.format(s, list.toArray());
|
// 设置内容
|
request.setMessageContent(format);
|
// 保存记录
|
smsRecord = saveSendRecord(request, resultComResult.getCode(), resultComResult.getMsg(), smsResult.getId());
|
if (null != smsRecord){
|
alarmRecordDetail.setAlarmContent(format);
|
alarmRecordDetail.setSendRecordId(smsRecord.getId());
|
alarmRecordDetail.setCreateTime(new Date());
|
// 保存告警记录详情信息
|
boolean save = alarmRecordDetailService.save(alarmRecordDetail);
|
}
|
}
|
smsRecordList.add(smsRecord);
|
}
|
Map<String, Object> map = new HashMap<>(2);
|
map.put("smsRecord",smsRecordList);
|
map.put("smsResult",smsResult);
|
// 返回
|
return map;
|
}
|
|
|
/**
|
* 发送 具名 变量模板短信--批量一次发送
|
* @param title 具名变量头
|
* @return
|
*/
|
public Object sendSignMsg(String title, String datas, SMSSendRequest request, Integer type, SmsTemplate smsTemplate) {
|
String[] titleArr = title.split(",");
|
String[] rows = datas.split(";");
|
String[][] dyns = new String[rows.length + 1][titleArr.length];
|
dyns[0] = titleArr;
|
int rowNum = 1;
|
for (String row : rows) {
|
String[] cols = row.split(",");
|
dyns[rowNum++] = cols;
|
}
|
//请求参数
|
DynSMSSendRequest sendRequest = new DynSMSSendRequest();
|
sendRequest.setTemplateId(request.getTemplateId());
|
sendRequest.setDynData(dyns);
|
// 发送
|
ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(sendRequest);
|
// 先保存结果记录
|
SmsResult smsResult = saveSendResult(request, rows.length);
|
SmsRecord smsRecord = new SmsRecord();
|
if (null != smsResult){
|
// 保存记录
|
smsRecord = saveSendRecord(request, resultComResult.getCode(), resultComResult.getMsg(), smsResult.getId());
|
}
|
Map<String, Object> map = new HashMap<>(2);
|
map.put("smsRecord",smsRecord);
|
map.put("smsResult",smsResult);
|
// 返回
|
return map;
|
}
|
|
|
/**
|
* 发送记录保存
|
* @param request 发送信息
|
* @param number 号码个数
|
*/
|
@Override
|
public SmsResult saveSendResult(SMSSendRequest request,Integer number) {
|
// 先保存结果表
|
SmsResult smsResult = new SmsResult();
|
smsResult.setTemplateId(request.getTemplateId());
|
smsResult.setContent(request.getMessageContent());
|
smsResult.setNumber(number);
|
//插入记录
|
boolean save = smsResultService.save(smsResult);
|
if (save){
|
return smsResult;
|
}
|
// 返回
|
return null;
|
}
|
|
|
/**
|
* 保存发送短信记录信息
|
* @param request
|
* @param code 响应code
|
* @param sendMsg 响应消息
|
* @param resultId
|
*/
|
@Override
|
public SmsRecord saveSendRecord(SMSSendRequest request, Integer code, String sendMsg, Long resultId) {
|
// 在保存明细
|
SmsRecord smsRecord = new SmsRecord();
|
smsRecord.setTel(request.getUserNumber());
|
smsRecord.setContent(request.getMessageContent());
|
smsRecord.setTemplateId(request.getTemplateId());
|
smsRecord.setResultId(resultId);
|
smsRecord.setResponseStatus(code.toString());
|
smsRecord.setResponseMsg(sendMsg);
|
//插入记录
|
smsRecordService.save(smsRecord);
|
// 返回
|
return smsRecord;
|
}
|
}
|