Commit c3372d4bd2b569f370e51ac5637e1993fffcd97d

Authored by zengzefeng
1 parent cd2a0181

优化部分代码逻辑

src/main/java/cn/iocoder/dashboard/framework/sms/client/AbstractSmsClient.java
@@ -22,9 +22,9 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -22,9 +22,9 @@ public abstract class AbstractSmsClient implements SmsClient {
22 protected final SmsChannelProperty channelVO; 22 protected final SmsChannelProperty channelVO;
23 23
24 /** 24 /**
25 - * 构造阿里云短信发送处理 TODO FROM 芋艿 to zzf:貌似注释不对 25 + * 短信客户端有参构造函数
26 * 26 *
27 - * @param property 阿里云短信配置 27 + * @param property 短信配置
28 */ 28 */
29 public AbstractSmsClient(SmsChannelProperty property) { 29 public AbstractSmsClient(SmsChannelProperty property) {
30 this.channelVO = property; 30 this.channelVO = property;
@@ -44,7 +44,7 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -44,7 +44,7 @@ public abstract class AbstractSmsClient implements SmsClient {
44 } catch (Exception e) { 44 } catch (Exception e) {
45 // exception handle 45 // exception handle
46 log.debug(e.getMessage(), e); 46 log.debug(e.getMessage(), e);
47 - return failResult("发送异常: " + e.getMessage()); 47 + return SmsResult.failResult("发送异常: " + e.getMessage());
48 } 48 }
49 return result; 49 return result;
50 } 50 }
@@ -55,8 +55,8 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -55,8 +55,8 @@ public abstract class AbstractSmsClient implements SmsClient {
55 * @param templateApiId 短信模板唯一标识 55 * @param templateApiId 短信模板唯一标识
56 * @param smsBody 消息内容 56 * @param smsBody 消息内容
57 * @param targets 发送对象列表 57 * @param targets 发送对象列表
58 - * @throws Exception 调用发送失败,抛出异常  
59 * @return 短信发送结果 58 * @return 短信发送结果
  59 + * @throws Exception 调用发送失败,抛出异常
60 */ 60 */
61 public abstract SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception; 61 public abstract SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception;
62 62
@@ -66,11 +66,4 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -66,11 +66,4 @@ public abstract class AbstractSmsClient implements SmsClient {
66 protected void afterSend(String templateApiId, SmsBody smsBody, Collection<String> targets, SmsResult result) throws Exception { 66 protected void afterSend(String templateApiId, SmsBody smsBody, Collection<String> targets, SmsResult result) throws Exception {
67 } 67 }
68 68
69 - // TODO FROM 芋艿 to zzf:可以考虑抽到 SmsResult 里  
70 - SmsResult failResult(String message) {  
71 - SmsResult resultBody = new SmsResult();  
72 - resultBody.setSuccess(false);  
73 - resultBody.setMessage(message);  
74 - return resultBody;  
75 - }  
76 } 69 }
src/main/java/cn/iocoder/dashboard/framework/sms/client/AliyunSmsClient.java
1 package cn.iocoder.dashboard.framework.sms.client; 1 package cn.iocoder.dashboard.framework.sms.client;
2 2
3 import cn.hutool.core.date.DateUtil; 3 import cn.hutool.core.date.DateUtil;
  4 +import cn.hutool.core.util.ArrayUtil;
  5 +import cn.hutool.core.util.StrUtil;
4 import cn.iocoder.dashboard.framework.sms.core.SmsBody; 6 import cn.iocoder.dashboard.framework.sms.core.SmsBody;
5 import cn.iocoder.dashboard.framework.sms.core.SmsResult; 7 import cn.iocoder.dashboard.framework.sms.core.SmsResult;
6 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; 8 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
@@ -62,7 +64,7 @@ public class AliyunSmsClient extends AbstractSmsClient { @@ -62,7 +64,7 @@ public class AliyunSmsClient extends AbstractSmsClient {
62 public SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception { 64 public SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception {
63 SendSmsRequest request = new SendSmsRequest(); 65 SendSmsRequest request = new SendSmsRequest();
64 request.setSysMethod(MethodType.POST); 66 request.setSysMethod(MethodType.POST);
65 - request.setPhoneNumbers(StringUtils.join(targets, ",")); // TODO FROM 芋艿 to zzf:统一使用 Hutool 工具类嘿。 67 + request.setPhoneNumbers(ArrayUtil.join(targets, ","));
66 request.setSignName(channelVO.getApiSignatureId()); 68 request.setSignName(channelVO.getApiSignatureId());
67 request.setTemplateCode(templateApiId); 69 request.setTemplateCode(templateApiId);
68 request.setTemplateParam(smsBody.getParamsStr()); 70 request.setTemplateParam(smsBody.getParamsStr());
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsClientFactory.java
@@ -76,7 +76,7 @@ public class SmsClientFactory { @@ -76,7 +76,7 @@ public class SmsClientFactory {
76 * 添加或修改短信模板信息缓存 76 * 添加或修改短信模板信息缓存
77 */ 77 */
78 public void addOrUpdateTemplateCache(Collection<SmsTemplateProperty> templateProperties) { 78 public void addOrUpdateTemplateCache(Collection<SmsTemplateProperty> templateProperties) {
79 - templateProperties.forEach(s -> addOrUpdateTemplateCache(templateProperties)); 79 + templateProperties.forEach(this::addOrUpdateTemplateCache);
80 } 80 }
81 81
82 82
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsResult.java
@@ -31,4 +31,11 @@ public class SmsResult implements Serializable { @@ -31,4 +31,11 @@ public class SmsResult implements Serializable {
31 */ 31 */
32 private List<SmsResultDetail> result; 32 private List<SmsResultDetail> result;
33 33
  34 +
  35 + public static SmsResult failResult(String message) {
  36 + SmsResult resultBody = new SmsResult();
  37 + resultBody.setSuccess(false);
  38 + resultBody.setMessage(message);
  39 + return resultBody;
  40 + }
34 } 41 }
src/main/java/cn/iocoder/dashboard/modules/system/convert/sms/SmsTemplateConvert.java
1 package cn.iocoder.dashboard.modules.system.convert.sms; 1 package cn.iocoder.dashboard.modules.system.convert.sms;
2 2
3 import cn.iocoder.dashboard.common.pojo.PageResult; 3 import cn.iocoder.dashboard.common.pojo.PageResult;
  4 +import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty;
4 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO; 5 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO;
5 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; 6 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO;
6 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO; 7 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO;
@@ -23,4 +24,6 @@ public interface SmsTemplateConvert { @@ -23,4 +24,6 @@ public interface SmsTemplateConvert {
23 24
24 SmsTemplateVO convert(SysSmsTemplateDO bean); 25 SmsTemplateVO convert(SysSmsTemplateDO bean);
25 26
  27 + List<SmsTemplateProperty> convertProperty(List<SysSmsTemplateDO> bean);
  28 +
26 } 29 }
src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/sms/SmsSendConsumer.java
@@ -24,7 +24,7 @@ public class SmsSendConsumer extends AbstractChannelMessageListener&lt;SmsSendMessa @@ -24,7 +24,7 @@ public class SmsSendConsumer extends AbstractChannelMessageListener&lt;SmsSendMessa
24 24
25 @Override 25 @Override
26 public void onMessage(SmsSendMessage message) { 26 public void onMessage(SmsSendMessage message) {
27 - log.info("[onMessage][收到 发送短信 消息]"); // TODO FROM 芋艿 to zzf:log 如果要打,这里要内容打上。其他 Consumer 没打的原因,是没内容。。。 27 + log.info("[onMessage][收到 发送短信 消息], content: " + message.toString());
28 SmsResult send = sysSmsService.send(message.getSmsBody(), message.getTargetPhones()); 28 SmsResult send = sysSmsService.send(message.getSmsBody(), message.getTargetPhones());
29 } 29 }
30 30
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsChannelService.java
@@ -19,9 +19,9 @@ import java.util.List; @@ -19,9 +19,9 @@ import java.util.List;
19 public interface SysSmsChannelService { 19 public interface SysSmsChannelService {
20 20
21 /** 21 /**
22 - * 初始化短信渠道 22 + * 初始化短信渠道并缓存短信模板信息
23 */ 23 */
24 - void initSmsClient(); 24 + void initSmsClientAndCacheSmsTemplate();
25 25
26 /** 26 /**
27 * 分页查询短信渠道信息 27 * 分页查询短信渠道信息
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsChannelServiceImpl.java
@@ -6,7 +6,9 @@ import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; @@ -6,7 +6,9 @@ import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient;
6 import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory; 6 import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory;
7 import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum; 7 import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum;
8 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; 8 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty;
  9 +import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty;
9 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; 10 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO;
  11 +import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO;
10 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; 12 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO;
11 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; 13 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO;
12 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; 14 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO;
@@ -39,39 +41,36 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { @@ -39,39 +41,36 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService {
39 41
40 private final Map<String, Long> templateCode2ChannelIdMap = new ConcurrentHashMap<>(32); 42 private final Map<String, Long> templateCode2ChannelIdMap = new ConcurrentHashMap<>(32);
41 43
42 - @Autowired 44 + @Resource
43 private SmsClientFactory clientFactory; 45 private SmsClientFactory clientFactory;
44 46
45 - // TODO FROM 芋艿 to zzf:方法要放在成员变量下面;  
46 - /**  
47 - * 初始化短信客户端  
48 - */ 47 + @Resource
  48 + private SysSmsChannelMapper channelMapper;
  49 +
  50 + @Resource
  51 + private SysSmsTemplateMapper templateMapper;
  52 +
  53 +
49 @PostConstruct 54 @PostConstruct
50 @Override 55 @Override
51 - public void initSmsClient() { 56 + public void initSmsClientAndCacheSmsTemplate() {
52 // 查询有效渠道信息 57 // 查询有效渠道信息
53 List<SysSmsChannelDO> channelDOList = channelMapper.selectEnabledList(); 58 List<SysSmsChannelDO> channelDOList = channelMapper.selectEnabledList();
54 List<SmsChannelProperty> propertyList = SmsChannelConvert.INSTANCE.convertProperties(channelDOList); 59 List<SmsChannelProperty> propertyList = SmsChannelConvert.INSTANCE.convertProperties(channelDOList);
55 60
56 - // 遍历渠道生成client并获取模板缓存 61 + // 遍历渠道生成client、获取模板并缓存
57 propertyList.forEach(channelProperty -> { 62 propertyList.forEach(channelProperty -> {
58 - Long clientId = clientFactory.createClient(channelProperty);  
59 List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(channelProperty.getId()); 63 List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(channelProperty.getId());
60 if (ObjectUtil.isNotEmpty(templateDOList)) { 64 if (ObjectUtil.isNotEmpty(templateDOList)) {
61 - templateDOList.forEach(template -> {  
62 - templateCode2ChannelIdMap.put(template.getCode(), clientId);  
63 - });  
64 - SmsTemplateConvert.INSTANCE.convert(templateDOList); 65 + Long clientId = clientFactory.createClient(channelProperty);
  66 + templateDOList.forEach(template -> templateCode2ChannelIdMap.put(template.getCode(), clientId));
  67 +
  68 + List<SmsTemplateProperty> templatePropertyList = SmsTemplateConvert.INSTANCE.convertProperty(templateDOList);
  69 + clientFactory.addOrUpdateTemplateCache(templatePropertyList);
65 } 70 }
66 }); 71 });
67 } 72 }
68 73
69 - @Resource  
70 - private SysSmsChannelMapper channelMapper;  
71 -  
72 - @Resource  
73 - private SysSmsTemplateMapper templateMapper;  
74 -  
75 @Override 74 @Override
76 public PageResult<SysSmsChannelDO> pageSmsChannels(SmsChannelPageReqVO reqVO) { 75 public PageResult<SysSmsChannelDO> pageSmsChannels(SmsChannelPageReqVO reqVO) {
77 return SmsChannelConvert.INSTANCE.convertPage(channelMapper.selectChannelPage(reqVO)); 76 return SmsChannelConvert.INSTANCE.convertPage(channelMapper.selectChannelPage(reqVO));
@@ -106,9 +105,7 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { @@ -106,9 +105,7 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService {
106 return null; 105 return null;
107 } 106 }
108 List<SmsChannelAllVO> channelAllVOList = SmsChannelConvert.INSTANCE.convert(channelDOList); 107 List<SmsChannelAllVO> channelAllVOList = SmsChannelConvert.INSTANCE.convert(channelDOList);
109 -  
110 channelAllVOList.forEach(smsChannelDO -> { 108 channelAllVOList.forEach(smsChannelDO -> {
111 -  
112 List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(smsChannelDO.getId()); 109 List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(smsChannelDO.getId());
113 if (ObjectUtil.isNull(templateDOList)) { 110 if (ObjectUtil.isNull(templateDOList)) {
114 templateDOList = new ArrayList<>(); 111 templateDOList = new ArrayList<>();