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 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 29 public AbstractSmsClient(SmsChannelProperty property) {
30 30 this.channelVO = property;
... ... @@ -44,7 +44,7 @@ public abstract class AbstractSmsClient implements SmsClient {
44 44 } catch (Exception e) {
45 45 // exception handle
46 46 log.debug(e.getMessage(), e);
47   - return failResult("发送异常: " + e.getMessage());
  47 + return SmsResult.failResult("发送异常: " + e.getMessage());
48 48 }
49 49 return result;
50 50 }
... ... @@ -55,8 +55,8 @@ public abstract class AbstractSmsClient implements SmsClient {
55 55 * @param templateApiId 短信模板唯一标识
56 56 * @param smsBody 消息内容
57 57 * @param targets 发送对象列表
58   - * @throws Exception 调用发送失败,抛出异常
59 58 * @return 短信发送结果
  59 + * @throws Exception 调用发送失败,抛出异常
60 60 */
61 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 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 1 package cn.iocoder.dashboard.framework.sms.client;
2 2  
3 3 import cn.hutool.core.date.DateUtil;
  4 +import cn.hutool.core.util.ArrayUtil;
  5 +import cn.hutool.core.util.StrUtil;
4 6 import cn.iocoder.dashboard.framework.sms.core.SmsBody;
5 7 import cn.iocoder.dashboard.framework.sms.core.SmsResult;
6 8 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
... ... @@ -62,7 +64,7 @@ public class AliyunSmsClient extends AbstractSmsClient {
62 64 public SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception {
63 65 SendSmsRequest request = new SendSmsRequest();
64 66 request.setSysMethod(MethodType.POST);
65   - request.setPhoneNumbers(StringUtils.join(targets, ",")); // TODO FROM 芋艿 to zzf:统一使用 Hutool 工具类嘿。
  67 + request.setPhoneNumbers(ArrayUtil.join(targets, ","));
66 68 request.setSignName(channelVO.getApiSignatureId());
67 69 request.setTemplateCode(templateApiId);
68 70 request.setTemplateParam(smsBody.getParamsStr());
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsClientFactory.java
... ... @@ -76,7 +76,7 @@ public class SmsClientFactory {
76 76 * 添加或修改短信模板信息缓存
77 77 */
78 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 31 */
32 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 1 package cn.iocoder.dashboard.modules.system.convert.sms;
2 2  
3 3 import cn.iocoder.dashboard.common.pojo.PageResult;
  4 +import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty;
4 5 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO;
5 6 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO;
6 7 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO;
... ... @@ -23,4 +24,6 @@ public interface SmsTemplateConvert {
23 24  
24 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 24  
25 25 @Override
26 26 public void onMessage(SmsSendMessage message) {
27   - log.info("[onMessage][收到 发送短信 消息]"); // TODO FROM 芋艿 to zzf:log 如果要打,这里要内容打上。其他 Consumer 没打的原因,是没内容。。。
  27 + log.info("[onMessage][收到 发送短信 消息], content: " + message.toString());
28 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 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 6 import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory;
7 7 import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum;
8 8 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty;
  9 +import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty;
9 10 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO;
  11 +import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO;
10 12 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO;
11 13 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO;
12 14 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO;
... ... @@ -39,39 +41,36 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService {
39 41  
40 42 private final Map<String, Long> templateCode2ChannelIdMap = new ConcurrentHashMap<>(32);
41 43  
42   - @Autowired
  44 + @Resource
43 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 54 @PostConstruct
50 55 @Override
51   - public void initSmsClient() {
  56 + public void initSmsClientAndCacheSmsTemplate() {
52 57 // 查询有效渠道信息
53 58 List<SysSmsChannelDO> channelDOList = channelMapper.selectEnabledList();
54 59 List<SmsChannelProperty> propertyList = SmsChannelConvert.INSTANCE.convertProperties(channelDOList);
55 60  
56   - // 遍历渠道生成client并获取模板缓存
  61 + // 遍历渠道生成client、获取模板并缓存
57 62 propertyList.forEach(channelProperty -> {
58   - Long clientId = clientFactory.createClient(channelProperty);
59 63 List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(channelProperty.getId());
60 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 74 @Override
76 75 public PageResult<SysSmsChannelDO> pageSmsChannels(SmsChannelPageReqVO reqVO) {
77 76 return SmsChannelConvert.INSTANCE.convertPage(channelMapper.selectChannelPage(reqVO));
... ... @@ -106,9 +105,7 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService {
106 105 return null;
107 106 }
108 107 List<SmsChannelAllVO> channelAllVOList = SmsChannelConvert.INSTANCE.convert(channelDOList);
109   -
110 108 channelAllVOList.forEach(smsChannelDO -> {
111   -
112 109 List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(smsChannelDO.getId());
113 110 if (ObjectUtil.isNull(templateDOList)) {
114 111 templateDOList = new ArrayList<>();
... ...