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 | package cn.iocoder.dashboard.modules.system.dal.dataobject.sms; | 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 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; | 6 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; |
| 4 | import com.baomidou.mybatisplus.annotation.TableName; | 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 | import java.util.Date; | 10 | import java.util.Date; |
| 11 | +import java.util.Map; | ||
| 11 | 12 | ||
| 12 | /** | 13 | /** |
| 13 | - * 短信日志 | 14 | + * 短信发送日志 |
| 14 | * | 15 | * |
| 15 | * @author zzf | 16 | * @author zzf |
| 16 | * @since 2021-01-25 | 17 | * @since 2021-01-25 |
| 17 | */ | 18 | */ |
| 18 | -@Data | ||
| 19 | -@EqualsAndHashCode | ||
| 20 | -@Accessors(chain = true) | ||
| 21 | @TableName(value = "sms_send_log", autoResultMap = true) | 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 | private Long id; | 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 | private String channelCode; | 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 | private String templateCode; | 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 | private Integer sendStatus; | 107 | private Integer sendStatus; |
| 60 | - | ||
| 61 | /** | 108 | /** |
| 62 | - * 发送时间 | 109 | + * 发送失败的类型 |
| 110 | + * | ||
| 111 | + * 枚举 {@link SysSmsSendFailureTypeEnum} | ||
| 112 | + */ | ||
| 113 | + private Integer sendFailureType; | ||
| 114 | + /** | ||
| 115 | + * 发送成功时间 | ||
| 63 | */ | 116 | */ |
| 64 | private Date sendTime; | 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,6 +51,8 @@ public class SysSmsTemplateDO extends BaseDO { | ||
| 51 | private String name; | 51 | private String name; |
| 52 | /** | 52 | /** |
| 53 | * 内容 | 53 | * 内容 |
| 54 | + * | ||
| 55 | + * 内容的参数,使用 {} 包括,例如说 {name} | ||
| 54 | */ | 56 | */ |
| 55 | private String content; | 57 | private String content; |
| 56 | /** | 58 | /** |
| @@ -62,6 +64,10 @@ public class SysSmsTemplateDO extends BaseDO { | @@ -62,6 +64,10 @@ public class SysSmsTemplateDO extends BaseDO { | ||
| 62 | * 备注 | 64 | * 备注 |
| 63 | */ | 65 | */ |
| 64 | private String remark; | 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,9 +83,5 @@ public class SysSmsTemplateDO extends BaseDO { | ||
| 77 | * 冗余 {@link SysSmsChannelDO#getCode()} | 83 | * 冗余 {@link SysSmsChannelDO#getCode()} |
| 78 | */ | 84 | */ |
| 79 | private String channelCode; | 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 | package cn.iocoder.dashboard.modules.system.dal.mysql.sms; | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.sms; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.common.enums.DefaultBitFieldEnum; | 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 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; | 5 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; |
| 6 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 6 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 7 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 7 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| @@ -10,15 +10,15 @@ import org.apache.ibatis.annotations.Mapper; | @@ -10,15 +10,15 @@ import org.apache.ibatis.annotations.Mapper; | ||
| 10 | import java.util.List; | 10 | import java.util.List; |
| 11 | 11 | ||
| 12 | @Mapper | 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,9 +26,9 @@ public interface SysSmsQueryLogMapper extends BaseMapper<SysSmsQueryLogDO> { | ||
| 26 | /** | 26 | /** |
| 27 | * 根据APIId修改对象 | 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 | ) > 0; | 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,8 +5,6 @@ import cn.iocoder.dashboard.framework.sms.core.SmsBody; | ||
| 5 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; | 5 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; |
| 6 | import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; | 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,6 +12,7 @@ import java.util.List; | ||
| 14 | * @date 2021/1/25 9:24 | 12 | * @date 2021/1/25 9:24 |
| 15 | */ | 13 | */ |
| 16 | public interface SysSmsQueryLogService { | 14 | public interface SysSmsQueryLogService { |
| 15 | + | ||
| 17 | /** | 16 | /** |
| 18 | * 发送短信前的日志处理 | 17 | * 发送短信前的日志处理 |
| 19 | * | 18 | * |
| @@ -22,10 +21,6 @@ public interface SysSmsQueryLogService { | @@ -22,10 +21,6 @@ public interface SysSmsQueryLogService { | ||
| 22 | * @param client 短信客户端 | 21 | * @param client 短信客户端 |
| 23 | * @return 生成的日志id | 22 | * @return 生成的日志id |
| 24 | */ | 23 | */ |
| 25 | - // TODO FROM 芋艿 to ZZF: async 是针对发送的方式,对于日志不一定需要关心。这样,短信日志,实际就发送前插入,发送后更新结果. | ||
| 26 | - // 这里只用于记录状态,毕竟异步可能推送失败,此时日志可记录该状态。 | ||
| 27 | - | ||
| 28 | - // TODO FROM 芋艿 to ZZF:短信日志,群发的情况,应该是每个手机一条哈。虽然是群发,但是可能部分成功,部分失败;对应到短信平台,实际也是多条。 | ||
| 29 | void beforeSendLog(SmsBody smsBody, String targetPhone, AbstractSmsClient client); | 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 | package cn.iocoder.dashboard.modules.system.service.sms; | 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,6 +12,9 @@ package cn.iocoder.dashboard.modules.system.service.sms; | ||
| 8 | */ | 12 | */ |
| 9 | public interface SysSmsSendLogService { | 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 | void getAndSaveSmsSendLog(); | 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,6 +2,8 @@ package cn.iocoder.dashboard.modules.system.service.sms; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | 3 | import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; |
| 4 | 4 | ||
| 5 | +import java.util.Map; | ||
| 6 | + | ||
| 5 | /** | 7 | /** |
| 6 | * 短信模板 Service 接口 | 8 | * 短信模板 Service 接口 |
| 7 | * | 9 | * |
| @@ -18,4 +20,13 @@ public interface SysSmsTemplateService { | @@ -18,4 +20,13 @@ public interface SysSmsTemplateService { | ||
| 18 | */ | 20 | */ |
| 19 | SysSmsTemplateDO getSmsTemplateByCode(String code); | 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,7 +6,7 @@ import cn.iocoder.dashboard.framework.sms.core.SmsResult; | ||
| 6 | import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; | 6 | import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; |
| 7 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; | 7 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsQueryLogMapper; | 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 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; | 10 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; |
| 11 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService; | 11 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService; |
| 12 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| @@ -27,7 +27,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService { | @@ -27,7 +27,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService { | ||
| 27 | 27 | ||
| 28 | @Override | 28 | @Override |
| 29 | public void beforeSendLog(SmsBody smsBody, String targetPhone, AbstractSmsClient client) { | 29 | public void beforeSendLog(SmsBody smsBody, String targetPhone, AbstractSmsClient client) { |
| 30 | - SysSmsQueryLogDO smsLog = new SysSmsQueryLogDO(); | 30 | + SysSmsSendLogDO smsLog = new SysSmsSendLogDO(); |
| 31 | SmsChannelProperty property = client.getProperty(); | 31 | SmsChannelProperty property = client.getProperty(); |
| 32 | 32 | ||
| 33 | smsLog.setChannelCode(property.getCode()) | 33 | smsLog.setChannelCode(property.getCode()) |
| @@ -43,7 +43,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService { | @@ -43,7 +43,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService { | ||
| 43 | 43 | ||
| 44 | @Override | 44 | @Override |
| 45 | public void afterSendLog(Long logId, SmsResult result) { | 45 | public void afterSendLog(Long logId, SmsResult result) { |
| 46 | - SysSmsQueryLogDO smsLog = new SysSmsQueryLogDO(); | 46 | + SysSmsSendLogDO smsLog = new SysSmsSendLogDO(); |
| 47 | smsLog.setId(logId); | 47 | smsLog.setId(logId); |
| 48 | smsLog.setApiId(result.getApiId()); | 48 | smsLog.setApiId(result.getApiId()); |
| 49 | smsLog.setSendStatus(SysSmsSendStatusEnum.QUERY_FAIL.getStatus()); | 49 | smsLog.setSendStatus(SysSmsSendStatusEnum.QUERY_FAIL.getStatus()); |
| @@ -53,7 +53,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService { | @@ -53,7 +53,7 @@ public class SysSmsQueryLogServiceImpl implements SysSmsQueryLogService { | ||
| 53 | 53 | ||
| 54 | @Override | 54 | @Override |
| 55 | public void updateSendLogByResultDetail(SmsResultDetail smsResultDetail) { | 55 | public void updateSendLogByResultDetail(SmsResultDetail smsResultDetail) { |
| 56 | - SysSmsQueryLogDO queryLogDO = new SysSmsQueryLogDO(); | 56 | + SysSmsSendLogDO queryLogDO = new SysSmsSendLogDO(); |
| 57 | queryLogDO.setSendStatus(smsResultDetail.getSendStatus()); | 57 | queryLogDO.setSendStatus(smsResultDetail.getSendStatus()); |
| 58 | queryLogDO.setSendTime(smsResultDetail.getSendTime()); | 58 | queryLogDO.setSendTime(smsResultDetail.getSendTime()); |
| 59 | queryLogDO.setRemark(smsResultDetail.getMessage()); | 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,8 +2,9 @@ package cn.iocoder.dashboard.modules.system.service.sms.impl; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollectionUtil; | 3 | import cn.hutool.core.collection.CollectionUtil; |
| 4 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; | 4 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; |
| 5 | -import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsQueryLogDO; | ||
| 6 | import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsSendLogDO; | 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 | import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsQueryLogMapper; | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsQueryLogMapper; |
| 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsSendLogMapper; | 9 | import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsSendLogMapper; |
| 9 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; | 10 | import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum; |
| @@ -15,6 +16,7 @@ import org.springframework.stereotype.Service; | @@ -15,6 +16,7 @@ import org.springframework.stereotype.Service; | ||
| 15 | 16 | ||
| 16 | import javax.annotation.Resource; | 17 | import javax.annotation.Resource; |
| 17 | import java.util.List; | 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,17 +44,35 @@ public class SysSmsSendLogServiceImpl implements SysSmsSendLogService { | ||
| 42 | 44 | ||
| 43 | 45 | ||
| 44 | @Override | 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 | public void getAndSaveSmsSendLog() { | 65 | public void getAndSaveSmsSendLog() { |
| 46 | 66 | ||
| 47 | - List<SysSmsQueryLogDO> noResultQueryLogList = smsQueryLogMapper.selectNoResultQueryLogList(); | 67 | + List<SysSmsSendLogDO> noResultQueryLogList = smsQueryLogMapper.selectNoResultQueryLogList(); |
| 48 | 68 | ||
| 49 | if (CollectionUtil.isEmpty(noResultQueryLogList)) { | 69 | if (CollectionUtil.isEmpty(noResultQueryLogList)) { |
| 50 | return; | 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 | noResultQueryLogList.forEach(queryLog -> { | 77 | noResultQueryLogList.forEach(queryLog -> { |
| 58 | AbstractSmsClient smsClient = smsChannelService.getSmsClient(queryLog.getTemplateCode()); | 78 | AbstractSmsClient smsClient = smsChannelService.getSmsClient(queryLog.getTemplateCode()); |
| @@ -94,7 +114,7 @@ public class SysSmsSendLogServiceImpl implements SysSmsSendLogService { | @@ -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 | insertSendLog.setChannelCode(queryLog.getChannelCode()); | 118 | insertSendLog.setChannelCode(queryLog.getChannelCode()); |
| 99 | insertSendLog.setChannelId(queryLog.getChannelId()); | 119 | insertSendLog.setChannelId(queryLog.getChannelId()); |
| 100 | insertSendLog.setTemplateCode(queryLog.getTemplateCode()); | 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,10 +11,7 @@ import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; | ||
| 11 | import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | 11 | import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; |
| 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; |
| 13 | import cn.iocoder.dashboard.modules.system.mq.producer.sms.SmsSendStreamProducer; | 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 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | 15 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; |
| 19 | import org.springframework.stereotype.Service; | 16 | import org.springframework.stereotype.Service; |
| 20 | 17 | ||
| @@ -41,6 +38,9 @@ public class SysSmsServiceImpl implements SysSmsService { | @@ -41,6 +38,9 @@ public class SysSmsServiceImpl implements SysSmsService { | ||
| 41 | @Resource | 38 | @Resource |
| 42 | private SysSmsTemplateService smsTemplateService; | 39 | private SysSmsTemplateService smsTemplateService; |
| 43 | @Resource | 40 | @Resource |
| 41 | + private SysSmsSendLogService smsSendLogService; | ||
| 42 | + | ||
| 43 | + @Resource | ||
| 44 | private SysUserService userService; | 44 | private SysUserService userService; |
| 45 | 45 | ||
| 46 | @Resource | 46 | @Resource |
| @@ -63,7 +63,13 @@ public class SysSmsServiceImpl implements SysSmsService { | @@ -63,7 +63,13 @@ public class SysSmsServiceImpl implements SysSmsService { | ||
| 63 | SysSmsTemplateDO template = this.checkSmsTemplateValid(templateCode, templateParams); | 63 | SysSmsTemplateDO template = this.checkSmsTemplateValid(templateCode, templateParams); |
| 64 | // 校验手机号码是否存在 | 64 | // 校验手机号码是否存在 |
| 65 | mobile = this.checkMobile(mobile, userId, userType); | 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 | @Override | 75 | @Override |
| @@ -73,6 +79,11 @@ public class SysSmsServiceImpl implements SysSmsService { | @@ -73,6 +79,11 @@ public class SysSmsServiceImpl implements SysSmsService { | ||
| 73 | SysSmsTemplateDO template = this.checkSmsTemplateValid(templateCode, templateParams); | 79 | SysSmsTemplateDO template = this.checkSmsTemplateValid(templateCode, templateParams); |
| 74 | } | 80 | } |
| 75 | 81 | ||
| 82 | + @Override | ||
| 83 | + public void doSendSms() { | ||
| 84 | + | ||
| 85 | + } | ||
| 86 | + | ||
| 76 | private SysSmsTemplateDO checkSmsTemplateValid(String templateCode, Map<String, Object> templateParams) { | 87 | private SysSmsTemplateDO checkSmsTemplateValid(String templateCode, Map<String, Object> templateParams) { |
| 77 | // 短信模板不存在 | 88 | // 短信模板不存在 |
| 78 | SysSmsTemplateDO template = smsTemplateService.getSmsTemplateByCode(templateCode); | 89 | SysSmsTemplateDO template = smsTemplateService.getSmsTemplateByCode(templateCode); |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
| 1 | package cn.iocoder.dashboard.modules.system.service.sms.impl; | 1 | package cn.iocoder.dashboard.modules.system.service.sms.impl; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.StrUtil; | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | 4 | import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; |
| 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper; | 5 | import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper; |
| 5 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService; | 6 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService; |
| 6 | import org.springframework.stereotype.Service; | 7 | import org.springframework.stereotype.Service; |
| 7 | 8 | ||
| 8 | import javax.annotation.Resource; | 9 | import javax.annotation.Resource; |
| 10 | +import java.util.Map; | ||
| 9 | 11 | ||
| 10 | /** | 12 | /** |
| 11 | * 短信模板Service实现类 | 13 | * 短信模板Service实现类 |
| @@ -24,4 +26,9 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { | @@ -24,4 +26,9 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { | ||
| 24 | return smsTemplateMapper.selectOneByCode(code); | 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 | } |