功能优化
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user