Commit f3b6783cc3d5ba563e8341960ef4fa34716b1738
1 parent
df01bd6c
短信提交 2021-03-26,增加发送日志
Showing
12 changed files
with
255 additions
and
194 deletions
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<SysSmsQueryLogDO> { |
| 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 | } | ... | ... |