Commit f3b6783cc3d5ba563e8341960ef4fa34716b1738

Authored by YunaiV
1 parent df01bd6c

短信提交 2021-03-26,增加发送日志

src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsQueryLogDO.java deleted
1   -package cn.iocoder.dashboard.modules.system.dal.dataobject.sms;
2   -
3   -import cn.iocoder.dashboard.common.enums.UserTypeEnum;
4   -import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
5   -import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendFailureTypeEnum;
6   -import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
7   -import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsTemplateTypeEnum;
8   -import com.baomidou.mybatisplus.annotation.TableName;
9   -import lombok.Data;
10   -import lombok.EqualsAndHashCode;
11   -import lombok.experimental.Accessors;
12   -
13   -import java.util.Date;
14   -import java.util.Map;
15   -
16   -/**
17   - * 短信发送日志
18   - *
19   - * @author zzf
20   - * @since 2021-01-25
21   - */
22   -@Data
23   -@EqualsAndHashCode
24   -@Accessors(chain = true)
25   -@TableName(value = "sms_query_log", autoResultMap = true)
26   -public class SysSmsQueryLogDO extends BaseDO {
27   -
28   - /**
29   - * 自增编号
30   - */
31   - private Long id;
32   -
33   - // ========= 渠道相关字段 =========
34   -
35   - /**
36   - * 短信渠道编号
37   - *
38   - * 关联 {@link SysSmsChannelDO#getId()}
39   - */
40   - private Long channelId;
41   - /**
42   - * 短信渠道编码
43   - *
44   - * 冗余 {@link SysSmsChannelDO#getCode()}
45   - */
46   - private String channelCode;
47   - /**
48   - * 实际渠道模板唯一标识
49   - */
50   - private String apiTemplateId;
51   -
52   - // ========= 模板相关字段 =========
53   -
54   - /**
55   - * 短信模板编号
56   - *
57   - * 关联 {@link}
58   - */
59   - private String templateCode;
60   - /**
61   - * 短信类型
62   - *
63   - * 枚举 {@link SysSmsTemplateTypeEnum}
64   - */
65   - private Integer templateType;
66   - /**
67   - * 基于 {@link SysSmsTemplateDO#getContent()} 格式化后的内容
68   - */
69   - private String templateContent;
70   - /**
71   - * 基于 {@link SysSmsTemplateDO#getParams()} 输入后的内容
72   - */
73   - private Map<String, Object> templateParams;
74   -
75   - // ========= 手机相关字段 =========
76   -
77   - /**
78   - * 手机号
79   - */
80   - private String mobile;
81   - /**
82   - * 用户编号
83   - */
84   - private Integer userId;
85   - /**
86   - * 用户类型
87   - *
88   - * 枚举 {@link UserTypeEnum}
89   - */
90   - private Integer userType;
91   -
92   - // ========= 发送相关字段 =========
93   -
94   - /**
95   - * 发送状态
96   - *
97   - * 枚举 {@link SysSmsSendStatusEnum}
98   - */
99   - private Integer sendStatus;
100   - /**
101   - * 发送失败的类型
102   - *
103   - * 枚举 {@link SysSmsSendFailureTypeEnum}
104   - */
105   - private Integer sendFailureType;
106   - /**
107   - * 发送成功时间
108   - */
109   - private Date sendTime;
110   - /**
111   - * 短信 API 发送失败的类型
112   - *
113   - * 由于第三方的错误码可能是字符串,所以使用 String 类型
114   - */
115   - private String apiSendFailureType;
116   - /**
117   - * 短信 API 发送失败的提示
118   - */
119   - private String apiSendFailureMsg;
120   - /**
121   - * 短信 API 发送返回的唯一请求 ID
122   - *
123   - * 用于和短信 API 进行定位于排错
124   - */
125   - private String apiRequestId;
126   - /**
127   - * 短信 API 发送返回的序号
128   - *
129   - * 用于和短信 API 平台的发送记录关联
130   - */
131   - private String apiSerialNo;
132   -
133   - // ========= 接收相关字段 =========
134   -
135   - /**
136   - * 是否获取过结果[0否 1是]
137   - */
138   - private Integer gotResult;
139   -
140   -}
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsSendLogDO.java
1 1 package cn.iocoder.dashboard.modules.system.dal.dataobject.sms;
2 2  
  3 +import cn.iocoder.dashboard.common.enums.UserTypeEnum;
  4 +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
  5 +import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendFailureTypeEnum;
3 6 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
4 7 import com.baomidou.mybatisplus.annotation.TableName;
5   -import lombok.Data;
6   -import lombok.EqualsAndHashCode;
7   -import lombok.experimental.Accessors;
  8 +import lombok.*;
8 9  
9   -import java.io.Serializable;
10 10 import java.util.Date;
  11 +import java.util.Map;
11 12  
12 13 /**
13   - * 短信日志
  14 + * 短信发送日志
14 15 *
15 16 * @author zzf
16 17 * @since 2021-01-25
17 18 */
18   -@Data
19   -@EqualsAndHashCode
20   -@Accessors(chain = true)
21 19 @TableName(value = "sms_send_log", autoResultMap = true)
22   -public class SysSmsSendLogDO implements Serializable {
  20 +@Data
  21 +@EqualsAndHashCode(callSuper = true)
  22 +@ToString(callSuper = true)
  23 +@AllArgsConstructor
  24 +@NoArgsConstructor
  25 +@Builder
  26 +public class SysSmsSendLogDO extends BaseDO {
23 27  
24 28 /**
25 29 * 自增编号
26 30 */
27 31 private Long id;
28 32  
  33 + // ========= 渠道相关字段 =========
  34 +
  35 + /**
  36 + * 短信渠道编号
  37 + *
  38 + * 关联 {@link SysSmsChannelDO#getId()}
  39 + */
  40 + private Long channelId;
29 41 /**
30   - * 短信渠道编码(来自枚举类)
  42 + * 短信渠道编码
  43 + *
  44 + * 冗余 {@link SysSmsChannelDO#getCode()}
31 45 */
32 46 private String channelCode;
33 47  
  48 + // ========= 模板相关字段 =========
  49 +
34 50 /**
35   - * 短信渠道id
  51 + * 短信模板编号
  52 + *
  53 + * 关联 {@link SysSmsTemplateDO#getId()}
36 54 */
37   - private Long channelId;
38   -
  55 + private Long templateId;
39 56 /**
40   - * 模板id
  57 + * 模板编码
  58 + *
  59 + * 冗余 {@link SysSmsTemplateDO#getCode()}
41 60 */
42 61 private String templateCode;
  62 + /**
  63 + * 短信类型
  64 + *
  65 + * 冗余 {@link SysSmsTemplateDO#getType()}
  66 + */
  67 + private Integer templateType;
  68 + /**
  69 + * 基于 {@link SysSmsTemplateDO#getContent()} 格式化后的内容
  70 + */
  71 + private String templateContent;
  72 + /**
  73 + * 基于 {@link SysSmsTemplateDO#getParams()} 输入后的内容
  74 + */
  75 + private Map<String, Object> templateParams;
  76 + /**
  77 + * 短信 API 的模板编号
  78 + *
  79 + * 冗余 {@link SysSmsTemplateDO#getApiTemplateId()}
  80 + */
  81 + private String apiTemplateId;
  82 +
  83 + // ========= 手机相关字段 =========
43 84  
44 85 /**
45 86 * 手机号
46 87 */
47   - private String phone;
48   -
  88 + private String mobile;
  89 + /**
  90 + * 用户编号
  91 + */
  92 + private Long userId;
49 93 /**
50   - * 备注
  94 + * 用户类型
  95 + *
  96 + * 枚举 {@link UserTypeEnum}
51 97 */
52   - private String remark;
  98 + private Integer userType;
  99 +
  100 + // ========= 发送相关字段 =========
53 101  
54 102 /**
55 103 * 发送状态
56 104 *
57   - * @see SysSmsSendStatusEnum
  105 + * 枚举 {@link SysSmsSendStatusEnum}
58 106 */
59 107 private Integer sendStatus;
60   -
61 108 /**
62   - * 发送时间
  109 + * 发送失败的类型
  110 + *
  111 + * 枚举 {@link SysSmsSendFailureTypeEnum}
  112 + */
  113 + private Integer sendFailureType;
  114 + /**
  115 + * 发送成功时间
63 116 */
64 117 private Date sendTime;
  118 + /**
  119 + * 短信 API 发送失败的类型
  120 + *
  121 + * 由于第三方的错误码可能是字符串,所以使用 String 类型
  122 + */
  123 + private String apiSendFailureType;
  124 + /**
  125 + * 短信 API 发送失败的提示
  126 + */
  127 + private String apiSendFailureMsg;
  128 + /**
  129 + * 短信 API 发送返回的唯一请求 ID
  130 + *
  131 + * 用于和短信 API 进行定位于排错
  132 + */
  133 + private String apiRequestId;
  134 + /**
  135 + * 短信 API 发送返回的序号
  136 + *
  137 + * 用于和短信 API 平台的发送记录关联
  138 + */
  139 + private String apiSerialNo;
  140 +
  141 + // ========= 接收相关字段 =========
  142 +
  143 + /**
  144 + * 是否获取过结果[0否 1是]
  145 + */
  146 + private Integer gotResult;
65 147  
66 148 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsSendLogDOX.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.system.dal.dataobject.sms;
  2 +
  3 +import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
  4 +import com.baomidou.mybatisplus.annotation.TableName;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.experimental.Accessors;
  8 +
  9 +import java.io.Serializable;
  10 +import java.util.Date;
  11 +
  12 +/**
  13 + * 短信日志
  14 + *
  15 + * @author zzf
  16 + * @since 2021-01-25
  17 + */
  18 +@Data
  19 +@EqualsAndHashCode
  20 +@Accessors(chain = true)
  21 +@TableName(value = "sms_send_log", autoResultMap = true)
  22 +public class SysSmsSendLogDOX implements Serializable {
  23 +
  24 + /**
  25 + * 自增编号
  26 + */
  27 + private Long id;
  28 +
  29 + /**
  30 + * 短信渠道编码(来自枚举类)
  31 + */
  32 + private String channelCode;
  33 +
  34 + /**
  35 + * 短信渠道id
  36 + */
  37 + private Long channelId;
  38 +
  39 + /**
  40 + * 模板id
  41 + */
  42 + private String templateCode;
  43 +
  44 + /**
  45 + * 手机号
  46 + */
  47 + private String phone;
  48 +
  49 + /**
  50 + * 备注
  51 + */
  52 + private String remark;
  53 +
  54 + /**
  55 + * 发送状态
  56 + *
  57 + * @see SysSmsSendStatusEnum
  58 + */
  59 + private Integer sendStatus;
  60 +
  61 + /**
  62 + * 发送时间
  63 + */
  64 + private Date sendTime;
  65 +
  66 +}
... ...
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsTemplateDO.java
... ... @@ -51,6 +51,8 @@ public class SysSmsTemplateDO extends BaseDO {
51 51 private String name;
52 52 /**
53 53 * 内容
  54 + *
  55 + * 内容的参数,使用 {} 包括,例如说 {name}
54 56 */
55 57 private String content;
56 58 /**
... ... @@ -62,6 +64,10 @@ public class SysSmsTemplateDO extends BaseDO {
62 64 * 备注
63 65 */
64 66 private String remark;
  67 + /**
  68 + * 短信 API 的模板编号
  69 + */
  70 + private String apiTemplateId;
65 71  
66 72 // ========= 渠道相关字段 =========
67 73  
... ... @@ -77,9 +83,5 @@ public class SysSmsTemplateDO extends BaseDO {
77 83 * 冗余 {@link SysSmsChannelDO#getCode()}
78 84 */
79 85 private String channelCode;
80   - /**
81   - * 短信 API 的模板编号
82   - */
83   - private String apiTemplateId;
84 86  
85 87 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/sms/SysSmsQueryLogMapper.java
1 1 package cn.iocoder.dashboard.modules.system.dal.mysql.sms;
2 2  
3 3 import cn.iocoder.dashboard.common.enums.DefaultBitFieldEnum;
4   -import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsQueryLogDO;
  4 +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsSendLogDO;
5 5 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
6 6 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
7 7 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
... ... @@ -10,15 +10,15 @@ import org.apache.ibatis.annotations.Mapper;
10 10 import java.util.List;
11 11  
12 12 @Mapper
13   -public interface SysSmsQueryLogMapper extends BaseMapper<SysSmsQueryLogDO> {
  13 +public interface SysSmsQueryLogMapper extends BaseMapper<SysSmsSendLogDO> {
14 14  
15 15 /**
16 16 * 查询还没有获取发送结果的短信请求信息
17 17 */
18   - default List<SysSmsQueryLogDO> selectNoResultQueryLogList() {
19   - return this.selectList(new LambdaQueryWrapper<SysSmsQueryLogDO>()
20   - .eq(SysSmsQueryLogDO::getSendStatus, SysSmsSendStatusEnum.QUERY_SUCCESS)
21   - .eq(SysSmsQueryLogDO::getGotResult, DefaultBitFieldEnum.NO)
  18 + default List<SysSmsSendLogDO> selectNoResultQueryLogList() {
  19 + return this.selectList(new LambdaQueryWrapper<SysSmsSendLogDO>()
  20 + .eq(SysSmsSendLogDO::getSendStatus, SysSmsSendStatusEnum.QUERY_SUCCESS)
  21 + .eq(SysSmsSendLogDO::getGotResult, DefaultBitFieldEnum.NO)
22 22 );
23 23 }
24 24  
... ... @@ -26,9 +26,9 @@ public interface SysSmsQueryLogMapper extends BaseMapper&lt;SysSmsQueryLogDO&gt; {
26 26 /**
27 27 * 根据APIId修改对象
28 28 */
29   - default boolean updateByApiId(SysSmsQueryLogDO queryLogDO, String apiId) {
30   - return update(queryLogDO, new LambdaQueryWrapper<SysSmsQueryLogDO>()
31   - .eq(SysSmsQueryLogDO::getApiId, apiId)
  29 + default boolean updateByApiId(SysSmsSendLogDO queryLogDO, String apiId) {
  30 + return update(queryLogDO, new LambdaQueryWrapper<SysSmsSendLogDO>()
  31 + .eq(SysSmsSendLogDO::getApiId, apiId)
32 32 ) > 0;
33 33 }
34 34 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsQueryLogService.java
... ... @@ -5,8 +5,6 @@ import cn.iocoder.dashboard.framework.sms.core.SmsBody;
5 5 import cn.iocoder.dashboard.framework.sms.core.SmsResult;
6 6 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
7 7  
8   -import java.util.List;
9   -
10 8 /**
11 9 * 短信请求日志服务接口
12 10 *
... ... @@ -14,6 +12,7 @@ import java.util.List;
14 12 * @date 2021/1/25 9:24
15 13 */
16 14 public interface SysSmsQueryLogService {
  15 +
17 16 /**
18 17 * 发送短信前的日志处理
19 18 *
... ... @@ -22,10 +21,6 @@ public interface SysSmsQueryLogService {
22 21 * @param client 短信客户端
23 22 * @return 生成的日志id
24 23 */
25   - // TODO FROM 芋艿 to ZZF: async 是针对发送的方式,对于日志不一定需要关心。这样,短信日志,实际就发送前插入,发送后更新结果.
26   - // 这里只用于记录状态,毕竟异步可能推送失败,此时日志可记录该状态。
27   -
28   - // TODO FROM 芋艿 to ZZF:短信日志,群发的情况,应该是每个手机一条哈。虽然是群发,但是可能部分成功,部分失败;对应到短信平台,实际也是多条。
29 24 void beforeSendLog(SmsBody smsBody, String targetPhone, AbstractSmsClient client);
30 25  
31 26 /**
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsSendLogService.java
1 1 package cn.iocoder.dashboard.modules.system.service.sms;
2 2  
  3 +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  4 +
  5 +import java.util.Map;
  6 +
3 7 /**
4 8 * 短信发送日志服务接口
5 9 *
... ... @@ -8,6 +12,9 @@ package cn.iocoder.dashboard.modules.system.service.sms;
8 12 */
9 13 public interface SysSmsSendLogService {
10 14  
  15 + Long createSmsSendLog(String mobile, Long userId, Integer userType,
  16 + SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams);
  17 +
11 18 void getAndSaveSmsSendLog();
12 19  
13 20 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsTemplateService.java
... ... @@ -2,6 +2,8 @@ package cn.iocoder.dashboard.modules.system.service.sms;
2 2  
3 3 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
4 4  
  5 +import java.util.Map;
  6 +
5 7 /**
6 8 * 短信模板 Service 接口
7 9 *
... ... @@ -18,4 +20,13 @@ public interface SysSmsTemplateService {
18 20 */
19 21 SysSmsTemplateDO getSmsTemplateByCode(String code);
20 22  
  23 + /**
  24 + * 格式化短信内容
  25 + *
  26 + * @param content 短信模板的内容
  27 + * @param params 内容的参数
  28 + * @return 格式化后的内容
  29 + */
  30 + String formatSmsTemplateContent(String content, Map<String, Object> params);
  31 +
21 32 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsQueryLogServiceImpl.java
... ... @@ -6,7 +6,7 @@ import cn.iocoder.dashboard.framework.sms.core.SmsResult;
6 6 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
7 7 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty;
8 8 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsQueryLogMapper;
9   -import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsQueryLogDO;
  9 +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsSendLogDO;
10 10 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
11 11 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService;
12 12 import org.springframework.stereotype.Service;
... ... @@ -27,7 +27,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService {
27 27  
28 28 @Override
29 29 public void beforeSendLog(SmsBody smsBody, String targetPhone, AbstractSmsClient client) {
30   - SysSmsQueryLogDO smsLog = new SysSmsQueryLogDO();
  30 + SysSmsSendLogDO smsLog = new SysSmsSendLogDO();
31 31 SmsChannelProperty property = client.getProperty();
32 32  
33 33 smsLog.setChannelCode(property.getCode())
... ... @@ -43,7 +43,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService {
43 43  
44 44 @Override
45 45 public void afterSendLog(Long logId, SmsResult result) {
46   - SysSmsQueryLogDO smsLog = new SysSmsQueryLogDO();
  46 + SysSmsSendLogDO smsLog = new SysSmsSendLogDO();
47 47 smsLog.setId(logId);
48 48 smsLog.setApiId(result.getApiId());
49 49 smsLog.setSendStatus(SysSmsSendStatusEnum.QUERY_FAIL.getStatus());
... ... @@ -53,7 +53,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService {
53 53  
54 54 @Override
55 55 public void updateSendLogByResultDetail(SmsResultDetail smsResultDetail) {
56   - SysSmsQueryLogDO queryLogDO = new SysSmsQueryLogDO();
  56 + SysSmsSendLogDO queryLogDO = new SysSmsSendLogDO();
57 57 queryLogDO.setSendStatus(smsResultDetail.getSendStatus());
58 58 queryLogDO.setSendTime(smsResultDetail.getSendTime());
59 59 queryLogDO.setRemark(smsResultDetail.getMessage());
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsSendLogServiceImpl.java
... ... @@ -2,8 +2,9 @@ package cn.iocoder.dashboard.modules.system.service.sms.impl;
2 2  
3 3 import cn.hutool.core.collection.CollectionUtil;
4 4 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient;
5   -import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsQueryLogDO;
6 5 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsSendLogDO;
  6 +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsSendLogDOX;
  7 +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
7 8 import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsQueryLogMapper;
8 9 import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsSendLogMapper;
9 10 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
... ... @@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
15 16  
16 17 import javax.annotation.Resource;
17 18 import java.util.List;
  19 +import java.util.Map;
18 20  
19 21 /**
20 22 * 短信发送日志服务实现类
... ... @@ -42,17 +44,35 @@ public class SysSmsSendLogServiceImpl implements SysSmsSendLogService {
42 44  
43 45  
44 46 @Override
  47 + public Long createSmsSendLog(String mobile, Long userId, Integer userType,
  48 + SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams) {
  49 + SysSmsSendLogDO.SysSmsSendLogDOBuilder logBuilder = SysSmsSendLogDO.builder();
  50 + // 设置手机相关字段
  51 + logBuilder.mobile(mobile).userId(userId).userType(userType);
  52 + // 设置模板相关字段
  53 + logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType());
  54 + logBuilder.templateContent(templateContent).templateParams(templateParams).apiTemplateId(template.getApiTemplateId());
  55 + // 设置渠道相关字段
  56 + logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode());
  57 +
  58 + // 插入数据库
  59 + SysSmsSendLogDO logDO = logBuilder.build();
  60 + smsSendLogMapper.insert(logDO);
  61 + return logDO.getId();
  62 + }
  63 +
  64 + @Override
45 65 public void getAndSaveSmsSendLog() {
46 66  
47   - List<SysSmsQueryLogDO> noResultQueryLogList = smsQueryLogMapper.selectNoResultQueryLogList();
  67 + List<SysSmsSendLogDO> noResultQueryLogList = smsQueryLogMapper.selectNoResultQueryLogList();
48 68  
49 69 if (CollectionUtil.isEmpty(noResultQueryLogList)) {
50 70 return;
51 71 }
52 72 //用于添加的发送日志对象
53   - SysSmsSendLogDO insertSendLog = new SysSmsSendLogDO();
  73 + SysSmsSendLogDOX insertSendLog = new SysSmsSendLogDOX();
54 74 //用于修改状态的请求日志对象
55   - SysSmsQueryLogDO updateQueryLog = new SysSmsQueryLogDO();
  75 + SysSmsSendLogDO updateQueryLog = new SysSmsSendLogDO();
56 76  
57 77 noResultQueryLogList.forEach(queryLog -> {
58 78 AbstractSmsClient smsClient = smsChannelService.getSmsClient(queryLog.getTemplateCode());
... ... @@ -94,7 +114,7 @@ public class SysSmsSendLogServiceImpl implements SysSmsSendLogService {
94 114 });
95 115 }
96 116  
97   - private void queryLog2SendLong(SysSmsSendLogDO insertSendLog, SysSmsQueryLogDO queryLog) {
  117 + private void queryLog2SendLong(SysSmsSendLogDOX insertSendLog, SysSmsSendLogDO queryLog) {
98 118 insertSendLog.setChannelCode(queryLog.getChannelCode());
99 119 insertSendLog.setChannelId(queryLog.getChannelId());
100 120 insertSendLog.setTemplateCode(queryLog.getTemplateCode());
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsServiceImpl.java
... ... @@ -11,10 +11,7 @@ import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
11 11 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
12 12 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
13 13 import cn.iocoder.dashboard.modules.system.mq.producer.sms.SmsSendStreamProducer;
14   -import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService;
15   -import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService;
16   -import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService;
17   -import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService;
  14 +import cn.iocoder.dashboard.modules.system.service.sms.*;
18 15 import cn.iocoder.dashboard.modules.system.service.user.SysUserService;
19 16 import org.springframework.stereotype.Service;
20 17  
... ... @@ -41,6 +38,9 @@ public class SysSmsServiceImpl implements SysSmsService {
41 38 @Resource
42 39 private SysSmsTemplateService smsTemplateService;
43 40 @Resource
  41 + private SysSmsSendLogService smsSendLogService;
  42 +
  43 + @Resource
44 44 private SysUserService userService;
45 45  
46 46 @Resource
... ... @@ -63,7 +63,13 @@ public class SysSmsServiceImpl implements SysSmsService {
63 63 SysSmsTemplateDO template = this.checkSmsTemplateValid(templateCode, templateParams);
64 64 // 校验手机号码是否存在
65 65 mobile = this.checkMobile(mobile, userId, userType);
66   - //
  66 +
  67 + // 创建发送日志
  68 + String content = smsTemplateService.formatSmsTemplateContent(template.getContent(), templateParams);
  69 + Long sendLogId = smsSendLogService.createSmsSendLog(mobile, userId, userType, template, content, templateParams);
  70 +
  71 + // 发送 MQ 消息
  72 +
67 73 }
68 74  
69 75 @Override
... ... @@ -73,6 +79,11 @@ public class SysSmsServiceImpl implements SysSmsService {
73 79 SysSmsTemplateDO template = this.checkSmsTemplateValid(templateCode, templateParams);
74 80 }
75 81  
  82 + @Override
  83 + public void doSendSms() {
  84 +
  85 + }
  86 +
76 87 private SysSmsTemplateDO checkSmsTemplateValid(String templateCode, Map<String, Object> templateParams) {
77 88 // 短信模板不存在
78 89 SysSmsTemplateDO template = smsTemplateService.getSmsTemplateByCode(templateCode);
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
1 1 package cn.iocoder.dashboard.modules.system.service.sms.impl;
2 2  
  3 +import cn.hutool.core.util.StrUtil;
3 4 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
4 5 import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper;
5 6 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService;
6 7 import org.springframework.stereotype.Service;
7 8  
8 9 import javax.annotation.Resource;
  10 +import java.util.Map;
9 11  
10 12 /**
11 13 * 短信模板Service实现类
... ... @@ -24,4 +26,9 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService {
24 26 return smsTemplateMapper.selectOneByCode(code);
25 27 }
26 28  
  29 + @Override
  30 + public String formatSmsTemplateContent(String content, Map<String, Object> params) {
  31 + return StrUtil.format(content, params);
  32 + }
  33 +
27 34 }
... ...