- 优化:增加注释,优化格式
This commit is contained in:
parent
20e65bf2f7
commit
0c198e8f08
|
@ -80,7 +80,6 @@ public class AliYunSmsClient implements SmsClient {
|
|||
request.putQueryParameter("SignName", sign);
|
||||
request.putQueryParameter("TemplateCode", templateCode);
|
||||
request.putQueryParameter("TemplateParam", JSON.toJSONString(templateParams));
|
||||
|
||||
// 发送请求
|
||||
return doSend(request);
|
||||
}
|
||||
|
@ -88,19 +87,17 @@ public class AliYunSmsClient implements SmsClient {
|
|||
@Override
|
||||
public SendResult batchSend(List<String> mobileList, String sign, String templateCode,
|
||||
String template, Map<String, String> templateParams) {
|
||||
|
||||
// 最大发送数为 1000,我们设置为 500 个, 分段发送
|
||||
int maxSendSize = MAX_BATCH_SIZE;
|
||||
int maxSendSizeCount = mobileList.size() % maxSendSize == 0
|
||||
? mobileList.size() / maxSendSize
|
||||
: mobileList.size() / maxSendSize + 1;
|
||||
|
||||
// 处理批量
|
||||
SendResult sendResult = null;
|
||||
for (int i = 0; i < maxSendSizeCount; i++) {
|
||||
// 分批发送
|
||||
List<String> batchSendMobile = mobileList
|
||||
.subList(i * maxSendSize, (i + 1) * maxSendSize);
|
||||
|
||||
// params
|
||||
CommonRequest request = new CommonRequest();
|
||||
request.setMethod(MethodType.POST);
|
||||
|
@ -111,7 +108,6 @@ public class AliYunSmsClient implements SmsClient {
|
|||
request.putQueryParameter("SignNameJson", JSON.toJSONString(Collections.singletonList(sign)));
|
||||
request.putQueryParameter("TemplateCode", templateCode);
|
||||
request.putQueryParameter("TemplateParamJson", JSON.toJSONString(Collections.singletonList(templateParams)));
|
||||
|
||||
// 发送请求
|
||||
sendResult = doSend(request);
|
||||
}
|
||||
|
@ -125,9 +121,7 @@ public class AliYunSmsClient implements SmsClient {
|
|||
CommonResponse response = client.getCommonResponse(request);
|
||||
Result result = JSON.parseObject(response.getData(), Result.class);
|
||||
if (!SUCCESS_CODE.equals(result.getCode())) {
|
||||
|
||||
LOGGER.info("发送验证码失败 params {} res {}", JSON.toJSON(request), JSON.toJSON(result));
|
||||
|
||||
// 错误发送失败
|
||||
return new SendResult()
|
||||
.setIsSuccess(false)
|
||||
|
@ -135,7 +129,6 @@ public class AliYunSmsClient implements SmsClient {
|
|||
.setMessage(result.getMessage());
|
||||
} else {
|
||||
LOGGER.info("发送验证码失败 params {} res", JSON.toJSON(request), JSON.toJSON(result));
|
||||
|
||||
// 发送成功
|
||||
return new SendResult()
|
||||
.setIsSuccess(true)
|
||||
|
|
|
@ -23,6 +23,7 @@ import cn.iocoder.mall.system.biz.dto.smsTemplate.ListSmsTemplateDTO;
|
|||
import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum;
|
||||
import cn.iocoder.mall.system.biz.enums.sms.SmsApplyStatusEnum;
|
||||
import cn.iocoder.mall.system.biz.enums.sms.SmsPlatformEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
|
@ -70,16 +71,14 @@ public class SmsServiceImpl implements SmsService {
|
|||
|
||||
@Override
|
||||
public PageResult<ListSmsTemplateBO> listSmsTemplate(ListSmsTemplateDTO listSmsTemplateDTO) {
|
||||
// 获取 template
|
||||
IPage<SmsTemplateDO> signPage = smsTemplateMapper.listSmsTemplate(listSmsTemplateDTO);
|
||||
|
||||
List<ListSmsTemplateBO> templateList
|
||||
= SmsTemplateConvert.INSTANCE.convert(signPage.getRecords());
|
||||
|
||||
if (CollectionUtils.isEmpty(templateList)) {
|
||||
if (CollectionUtils.isEmpty(signPage.getRecords())) {
|
||||
// TODO DOME FROM 芋艿 to 小范,Collections.EMPTY_LIST =》Collections.emptyList();另外,可以考虑直接 Convert 哈
|
||||
return new PageResult<ListSmsTemplateBO>().setList(Collections.emptyList()).setTotal(signPage.getTotal());
|
||||
}
|
||||
|
||||
// 转换bo
|
||||
List<ListSmsTemplateBO> templateList = SmsTemplateConvert.INSTANCE.convert(signPage.getRecords());
|
||||
// 获取 sign
|
||||
Set<Integer> smsSignIds = templateList.stream().map(
|
||||
ListSmsTemplateBO::getSmsSignId).collect(Collectors.toSet());
|
||||
|
@ -88,37 +87,32 @@ public class SmsServiceImpl implements SmsService {
|
|||
new QueryWrapper<SmsSignDO>().in("id", smsSignIds));
|
||||
|
||||
List<ListSmsTemplateBO.Sign> signList = SmsTemplateConvert.INSTANCE.convertTemplateSign(smsSignDOList);
|
||||
|
||||
// sign 转换为 map
|
||||
Map<Integer, ListSmsTemplateBO.Sign> smsSignDOMap = signList
|
||||
.stream().collect(Collectors.toMap(ListSmsTemplateBO.Sign::getId, o -> o));
|
||||
|
||||
// 设置 sign
|
||||
|
||||
templateList.forEach(template -> {
|
||||
if (smsSignDOMap.containsKey(template.getSmsSignId())) {
|
||||
template.setSign(smsSignDOMap.get(template.getSmsSignId()));
|
||||
}
|
||||
});
|
||||
|
||||
return new PageResult<ListSmsTemplateBO>().setList(templateList).setTotal(signPage.getTotal());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void addSign(AddSignDTO addSignDTO) {
|
||||
|
||||
// 避免重复
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectOne(
|
||||
new QueryWrapper<SmsSignDO>()
|
||||
.eq("platform", addSignDTO.getPlatform())
|
||||
.eq("sign", addSignDTO.getSign())
|
||||
);
|
||||
|
||||
// 处理 null 情况
|
||||
if (smsSignDO != null) {
|
||||
// TODO DOME FROM 芋艿 to 小范:可以使用 ServiceExceptionUtil.exception(SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT);
|
||||
throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT);
|
||||
}
|
||||
|
||||
// 保存数据库
|
||||
smsSignMapper.insert(
|
||||
(SmsSignDO) new SmsSignDO()
|
||||
|
@ -133,16 +127,17 @@ public class SmsServiceImpl implements SmsService {
|
|||
|
||||
@Override
|
||||
public SmsSignBO getSign(Integer signId) {
|
||||
// 查询数据库
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectOne(
|
||||
new QueryWrapper<SmsSignDO>()
|
||||
.eq("id", signId)
|
||||
.eq("deleted", DeletedStatusEnum.DELETED_NO.getValue()));
|
||||
|
||||
// 处理 null
|
||||
if (smsSignDO == null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 转换vo返回
|
||||
return SmsSignConvert.INSTANCE.convert(smsSignDO);
|
||||
}
|
||||
|
||||
|
@ -154,12 +149,11 @@ public class SmsServiceImpl implements SmsService {
|
|||
new QueryWrapper<SmsSignDO>()
|
||||
.eq("sign", updateSignDTO.getSign())
|
||||
.eq("platform", updateSignDTO.getPlatform()));
|
||||
|
||||
// 处理 null
|
||||
if (smsSignDO != null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 更新
|
||||
smsSignMapper.update(
|
||||
(SmsSignDO) new SmsSignDO()
|
||||
|
@ -172,15 +166,13 @@ public class SmsServiceImpl implements SmsService {
|
|||
|
||||
@Override
|
||||
public void deleteSign(Integer id) {
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectOne(
|
||||
new QueryWrapper<SmsSignDO>()
|
||||
.eq("id", id));
|
||||
|
||||
// 根据id查询
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectById(id);
|
||||
// 处理 null
|
||||
if (smsSignDO == null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 更新 deleted 为 YES
|
||||
smsSignMapper.delete(new UpdateWrapper<SmsSignDO>()
|
||||
.set("deleted", DeletedStatusEnum.DELETED_YES.getName())
|
||||
|
@ -192,15 +184,13 @@ public class SmsServiceImpl implements SmsService {
|
|||
@Transactional
|
||||
public void addTemplate(Integer smsSignId, String templateCode,
|
||||
String template, Integer platform, Integer smsType) {
|
||||
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectOne(
|
||||
new QueryWrapper<SmsSignDO>().eq("id", smsSignId));
|
||||
|
||||
// 根据id查询
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectById(smsSignId);
|
||||
// 处理 null
|
||||
if (smsSignDO == null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 保存数据库
|
||||
smsTemplateMapper.insert(
|
||||
(SmsTemplateDO) new SmsTemplateDO()
|
||||
|
@ -219,16 +209,17 @@ public class SmsServiceImpl implements SmsService {
|
|||
|
||||
@Override
|
||||
public SmsTemplateBO getTemplate(Integer id, Integer platform) {
|
||||
// 获取数据
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectOne(
|
||||
new QueryWrapper<SmsTemplateDO>()
|
||||
.eq("platform", platform)
|
||||
.eq("id", id));
|
||||
|
||||
// 处理 null
|
||||
if (smsTemplateDO == null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 转换bo返回
|
||||
return SmsTemplateConvert.INSTANCE.convert(smsTemplateDO);
|
||||
}
|
||||
|
||||
|
@ -236,22 +227,20 @@ public class SmsServiceImpl implements SmsService {
|
|||
@Transactional
|
||||
public void updateTemplate(Integer id, Integer smsSignId, String templateCode,
|
||||
String template, Integer platform, Integer smsType) {
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectOne(
|
||||
new QueryWrapper<SmsTemplateDO>().eq("id", id));
|
||||
|
||||
// 获取 template
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(id);
|
||||
if (smsTemplateDO == null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 获取 sign
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectOne(
|
||||
new QueryWrapper<SmsSignDO>().eq("id", smsTemplateDO.getSmsSignId()));
|
||||
|
||||
if (smsSignDO == null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 更新数据库
|
||||
smsTemplateMapper.update(
|
||||
(SmsTemplateDO) new SmsTemplateDO()
|
||||
.setSmsSignId(smsSignId)
|
||||
|
@ -269,13 +258,12 @@ public class SmsServiceImpl implements SmsService {
|
|||
public void deleteTemplate(Integer id) {
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectOne(
|
||||
new QueryWrapper<SmsTemplateDO>().eq("id", id));
|
||||
|
||||
// 处理不存在情况
|
||||
if (smsTemplateDO == null
|
||||
|| smsTemplateDO.getDeleted().equals(DeletedStatusEnum.DELETED_YES.getValue())) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 删除 数据库模板
|
||||
SmsTemplateDO updateTemplate =new SmsTemplateDO();
|
||||
updateTemplate.setDeleted(DeletedStatusEnum.DELETED_YES.getValue());
|
||||
|
@ -287,29 +275,24 @@ public class SmsServiceImpl implements SmsService {
|
|||
|
||||
@Override
|
||||
public void singleSend(String mobile, Integer smsTemplateId, Map<String, String> params) {
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectOne(
|
||||
new QueryWrapper<SmsTemplateDO>().eq("id", smsTemplateId));
|
||||
|
||||
// 获取 template
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(smsTemplateId);
|
||||
if (smsTemplateDO == null
|
||||
|| smsTemplateDO.getDeleted().equals(DeletedStatusEnum.DELETED_YES.getValue())) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectOne(
|
||||
new QueryWrapper<SmsSignDO>().eq("id", smsTemplateDO.getSmsSignId()));
|
||||
|
||||
// 获取 sign
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectById(smsTemplateDO.getSmsSignId());
|
||||
if (smsSignDO == null) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 获取 client
|
||||
SmsClient smsClient = getSmsClient(smsTemplateDO.getPlatform());
|
||||
// 发送短信
|
||||
SmsClient.SendResult sendResult = smsClient.singleSend(mobile, smsSignDO.getSign(),
|
||||
smsTemplateDO.getTemplateCode(), smsTemplateDO.getTemplate(), params);
|
||||
|
||||
// 添加日志
|
||||
smsSendMapper.insert(
|
||||
(SmsSendLogDO) new SmsSendLogDO()
|
||||
|
@ -322,18 +305,15 @@ public class SmsServiceImpl implements SmsService {
|
|||
|
||||
@Override
|
||||
public void batchSend(List<String> mobileList, Integer smsTemplateId, Map<String, String> params) {
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectOne(
|
||||
new QueryWrapper<SmsTemplateDO>().eq("id", smsTemplateId));
|
||||
|
||||
// 获取 template
|
||||
SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(smsTemplateId);
|
||||
if (smsTemplateDO == null
|
||||
|| smsTemplateDO.getDeleted().equals(DeletedStatusEnum.DELETED_YES.getValue())) {
|
||||
throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectOne(
|
||||
new QueryWrapper<SmsSignDO>().eq("id", smsTemplateDO.getSmsSignId()));
|
||||
|
||||
// 获取 sign
|
||||
SmsSignDO smsSignDO = smsSignMapper.selectById(smsTemplateDO.getSmsSignId());
|
||||
if (smsSignDO == null) {
|
||||
// 添加日志
|
||||
smsSendMapper.insert(
|
||||
|
@ -347,14 +327,11 @@ public class SmsServiceImpl implements SmsService {
|
|||
throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage());
|
||||
}
|
||||
|
||||
// 获取 client
|
||||
SmsClient smsClient = getSmsClient(smsTemplateDO.getPlatform());
|
||||
|
||||
// 发送短信
|
||||
SmsClient.SendResult sendResult = smsClient.batchSend(mobileList, smsSignDO.getSign(),
|
||||
smsTemplateDO.getTemplateCode(), smsTemplateDO.getTemplate(), params);
|
||||
|
||||
// 添加日志
|
||||
smsSendMapper.insert(
|
||||
(SmsSendLogDO) new SmsSendLogDO()
|
||||
|
@ -373,18 +350,18 @@ public class SmsServiceImpl implements SmsService {
|
|||
*/
|
||||
private SmsClient getSmsClient(Integer platform) {
|
||||
SmsClient smsClient = null;
|
||||
// 阿里云和云片
|
||||
if (SmsPlatformEnum.YunPian.getValue().equals(platform)) {
|
||||
smsClient = smsYunPianClient;
|
||||
} else if (SmsPlatformEnum.AliYun.getValue().equals(platform)) {
|
||||
smsClient = smsAliYunClient;
|
||||
}
|
||||
|
||||
// 没有支持的平台
|
||||
if (smsClient == null) {
|
||||
throw new ServiceException(
|
||||
SystemErrorCodeEnum.SMS_NOT_SEND_CLIENT.getCode(),
|
||||
SystemErrorCodeEnum.SMS_NOT_SEND_CLIENT.getMessage());
|
||||
}
|
||||
|
||||
return smsClient;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -88,7 +88,6 @@ public class YunPianSmsClient implements SmsClient {
|
|||
*/
|
||||
private static final String URL_SEND_BATCH = "https://sms.yunpian.com/v2/sms/batch_send.json";
|
||||
|
||||
|
||||
//编码格式。发送编码格式统一用UTF-8
|
||||
private static String ENCODING = "UTF-8";
|
||||
|
||||
|
@ -99,7 +98,6 @@ public class YunPianSmsClient implements SmsClient {
|
|||
public SendResult singleSend(String mobile, String sign, String templateCode, String template, Map<String, String> templateParams) {
|
||||
// build 模板
|
||||
template = buildTemplate(sign, template, templateParams);
|
||||
|
||||
// 请求参数
|
||||
Map<String, String> params = new LinkedHashMap<>();
|
||||
params.put("apikey", apiKey);
|
||||
|
@ -114,7 +112,7 @@ public class YunPianSmsClient implements SmsClient {
|
|||
throw new ServiceException(SystemErrorCodeEnum.SMS_PLATFORM_FAIL.getCode(),
|
||||
jsonObject.getString("detail"));
|
||||
}
|
||||
|
||||
// 转换 result
|
||||
return new SendResult()
|
||||
.setIsSuccess(SUCCESS_CODE == jsonObject.getInteger("code"))
|
||||
.setCode(jsonObject.getInteger("code"))
|
||||
|
@ -127,7 +125,6 @@ public class YunPianSmsClient implements SmsClient {
|
|||
Map<String, String> templateParams) {
|
||||
// build 模板
|
||||
template = buildTemplate(sign, template, templateParams);
|
||||
|
||||
// 最大发送数为 1000,我们设置为 500 个, 分段发送
|
||||
int maxSendSize = MAX_BATCH_SIZE;
|
||||
int maxSendSizeCount = mobileList.size() % maxSendSize == 0
|
||||
|
@ -142,9 +139,7 @@ public class YunPianSmsClient implements SmsClient {
|
|||
sendMobileStr.append(",");
|
||||
sendMobileStr.append(mobileList.get(k));
|
||||
}
|
||||
|
||||
String dividedMobile = sendMobileStr.toString().substring(1);
|
||||
|
||||
// 发送手机号
|
||||
Map<String, String> params = new LinkedHashMap<>();
|
||||
params.put("apikey", apiKey);
|
||||
|
@ -159,12 +154,10 @@ public class YunPianSmsClient implements SmsClient {
|
|||
throw new ServiceException(SystemErrorCodeEnum.SMS_PLATFORM_FAIL.getCode(),
|
||||
jsonObject.getString("detail"));
|
||||
}
|
||||
|
||||
// 用于递增 maxSendSize
|
||||
j = j2;
|
||||
j2 = j + maxSendSize;
|
||||
}
|
||||
|
||||
return new SendResult()
|
||||
.setIsSuccess(true)
|
||||
.setCode(SUCCESS_CODE)
|
||||
|
@ -181,18 +174,17 @@ public class YunPianSmsClient implements SmsClient {
|
|||
*/
|
||||
private static String buildTemplate(String sign, String template,
|
||||
Map<String, String> templateParams) {
|
||||
|
||||
// 不处理 empty 数据
|
||||
if (CollectionUtils.isEmpty(templateParams)) {
|
||||
return template;
|
||||
}
|
||||
|
||||
// 处理template参数
|
||||
for (Map.Entry<String, String> entry : templateParams.entrySet()) {
|
||||
String paramsKey = entry.getKey();
|
||||
String value = entry.getValue();
|
||||
String paramPlace = String.format(PARAM_TEMPLATE, paramsKey);
|
||||
template = template.replaceAll(paramPlace, value);
|
||||
}
|
||||
|
||||
template = String.format(SIGN_TEMPLATE, sign, template);
|
||||
return template;
|
||||
}
|
||||
|
@ -234,7 +226,6 @@ public class YunPianSmsClient implements SmsClient {
|
|||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
LOGGER.debug("云片短信平台 res: {}", responseText);
|
||||
return responseText;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue