Files
Mediation-Backend/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/SmsUtils.java
T

193 lines
8.7 KiB
Java
Raw Normal View History

2024-04-18 09:32:37 +08:00
package com.ruoyi.wisdomarbitrate.utils;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONObject;
import com.ruoyi.common.enums.SMSStatusEnum;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ThreadUtil;
import com.ruoyi.system.domain.entity.sms.MsSmsSendRecordParam;
import com.ruoyi.system.domain.entity.sms.MsSmsTemplate;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.flow.MsCaseFlowRoleSmsRelatedMapper;
import com.ruoyi.system.mapper.sms.MsSmsSendRecordParamMapper;
import com.ruoyi.system.mapper.sms.MsSmsTemplateMapper;
import com.ruoyi.wisdomarbitrate.domain.dto.sendrecord.SmsSendRecord;
import com.ruoyi.wisdomarbitrate.domain.entity.mscase.MsCaseApplication;
import com.ruoyi.wisdomarbitrate.mapper.sendrecord.SmsRecordMapper;
import com.ruoyi.wisdomarbitrate.service.shortmessage.ShortMessageService;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import lombok.var;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
@Slf4j
public class SmsUtils {
//应用id
private static final String SDK_APP_ID = "1400854852";
//API的SecretId
private static final String SECRET_ID = "AKIDeEf2A8uX1HSainvvnXAc3X9ZlhtyvkMp";
//API的SecretKey
private static final String SECRET_KEY = "QjphKo8zkHZigT8j9PVtFPJyfIvO3d6V";
//签名内容
private static final String SIGN_NAME = "乙巢智慧仲裁网";
private static SmsRecordMapper recordMapper = SpringUtil.getBean(SmsRecordMapper.class);
private static MsSmsSendRecordParamMapper recordParamMapper = SpringUtil.getBean(MsSmsSendRecordParamMapper.class);
private static MsSmsTemplateMapper templateMapper = SpringUtil.getBean(MsSmsTemplateMapper.class);
private static SysUserMapper sysUserMapper = SpringUtil.getBean(SysUserMapper.class);
private static MsCaseFlowRoleSmsRelatedMapper flowRoleRelatedMapper = SpringUtil.getBean(MsCaseFlowRoleSmsRelatedMapper.class);
private static SysRoleMapper roleMapper = SpringUtil.getBean(SysRoleMapper.class);
private static ShortMessageService shortMessageService = SpringUtil.getBean(ShortMessageService.class);
public static JSONObject sendSms(SendSmsRequest request) {
JSONObject jsonObject = new JSONObject();
Credential cred = new Credential(SECRET_ID, SECRET_KEY);
SmsClient client = new SmsClient(cred, "ap-guangzhou");
final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
req.setSmsSdkAppId(SDK_APP_ID);
req.setSignName(SIGN_NAME);
req.setTemplateId(request.getTemplateId());
req.setTemplateParamSet(request.getTemplateParamSet());
SendSmsResponse res = null;
try {
res = client.SendSms(req);
} catch (TencentCloudSDKException e) {
log.error("发送短信出错:", e);
jsonObject.set("status", SMSStatusEnum.FAIL.getCode());
jsonObject.set("reason",e.getMessage());
return jsonObject;
}
SendStatus sendStatus = res.getSendStatusSet()[0];
log.info("发送短信结果:Code={}, Message={}", sendStatus.getCode(), sendStatus.getMessage());
if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())) {
jsonObject.set("status", SMSStatusEnum.SENDING.getCode());
} else {
jsonObject.set("status", SMSStatusEnum.FAIL.getCode());
}
jsonObject.set("sid", sendStatus.getSerialNo());
return jsonObject;
}
public static void sendSms(MsCaseApplication application, String templateId, String phone, String[] templateParamSet) {
if(application==null||StrUtil.isEmpty(templateId)||StrUtil.isEmpty(phone)||templateParamSet==null||templateParamSet.length==0){
return;
}
Example templateExam = new Example(MsSmsTemplate.class);
templateExam.createCriteria().andEqualTo("templateId", templateId);
List<MsSmsTemplate> templates = templateMapper.selectByExample(templateExam);
if (CollectionUtil.isEmpty(templates)) {
return ;
}
MsSmsTemplate template = templates.get(0);
SendSmsRequest request = new SendSmsRequest(phone, templateId, templateParamSet, application.getId());
Credential cred = new Credential(SECRET_ID, SECRET_KEY);
SmsClient client = new SmsClient(cred, "ap-guangzhou");
final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
req.setSmsSdkAppId(SDK_APP_ID);
req.setSignName(SIGN_NAME);
req.setTemplateId(request.getTemplateId());
req.setTemplateParamSet(request.getTemplateParamSet());
sendSms(client,template,application,phone, templateParamSet,req);
}
private static void sendSms(SmsClient client,MsSmsTemplate template, MsCaseApplication application, String phone, String[] templateParamSet, com.tencentcloudapi.sms.v20210111.models.SendSmsRequest req) {
SmsSendRecord smsSendRecord=new SmsSendRecord();
smsSendRecord.setMsSmsTemplateId(template.getId());
smsSendRecord.setCaseId(application.getId());
smsSendRecord.setCaseNum(application.getCaseNum());
smsSendRecord.setSendTime(new Date());
smsSendRecord.setPhone(phone);
smsSendRecord.setCreateTime(new Date());
smsSendRecord.setCreateBy(SecurityUtils.getUsername());
// SendSmsRequest request = new SendSmsRequest(phone, template.getTemplateId(), templateParamSet, application.getId());
req.setPhoneNumberSet(new String[]{"+86" + phone});
req.setTemplateId(template.getTemplateId());
req.setTemplateParamSet(templateParamSet);
try {
SendSmsResponse res=client.SendSms(req);
SendStatus sendStatus = res.getSendStatusSet()[0];
if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())) {
smsSendRecord.setSendStatus( SMSStatusEnum.SENDING.getCode());
} else {
smsSendRecord.setSendStatus(SMSStatusEnum.FAIL.getCode());
smsSendRecord.setReason(sendStatus.getMessage());
}
smsSendRecord.setSid(sendStatus.getSerialNo());
} catch (TencentCloudSDKException e) {
smsSendRecord.setSendStatus(SMSStatusEnum.FAIL.getCode());
smsSendRecord.setReason(e.getMessage());
}
int i = recordMapper.saveSmsSendRecord(smsSendRecord);
if(i>0){
List<MsSmsSendRecordParam> recordParams=new ArrayList<>();
for (String paramValue : templateParamSet) {
// 新增参数
MsSmsSendRecordParam recordParam = new MsSmsSendRecordParam();
recordParam.setSmsRecordId(smsSendRecord.getId());
recordParam.setParamValue(paramValue);
recordParams.add(recordParam);
}
ExecutorService executor = ThreadUtil.createThreadPool();
CompletableFuture.runAsync(() -> {
recordParamMapper.batchInsert(recordParams);
}, executor);
// 新增历史记录表
CompletableFuture.runAsync(() -> {
shortMessageService.insertShortMessageHistoryRecord(smsSendRecord,recordParams);
}, executor);
}
}
/**
* 参数对象
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class SendSmsRequest {
/**
* 电话
*/
private String phone;
/**
* 模板 ID: 必须填写已审核通过的模板 ID
*/
private String templateId;
/**
* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
*/
private String[] templateParamSet;
private Long caseId;
}
}