Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
liyeyun-user-web
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cfld-backend
liyeyun-user-web
Commits
5afb96eb
Commit
5afb96eb
authored
Nov 20, 2023
by
zhouxudong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加短信发送记录
parent
d6c1ff21
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
286 additions
and
28 deletions
+286
-28
pom.xml
pom.xml
+6
-0
MyMetaObjectHandler.java
...java/com/lyy/user/config/mybatis/MyMetaObjectHandler.java
+3
-3
SendMsgTypeEnum.java
src/main/java/com/lyy/user/enums/SendMsgTypeEnum.java
+10
-2
SysPcLoginController.java
...yy/user/moudle/login/controller/SysPcLoginController.java
+12
-10
SmsVo.java
src/main/java/com/lyy/user/moudle/login/vo/SmsVo.java
+37
-0
SysSmsLogEntity.java
...va/com/lyy/user/moudle/smslog/entity/SysSmsLogEntity.java
+52
-0
SysSmsLogMapper.java
...va/com/lyy/user/moudle/smslog/mapper/SysSmsLogMapper.java
+14
-0
SysSmsLogService.java
.../com/lyy/user/moudle/smslog/service/SysSmsLogService.java
+15
-0
SysSmsLogServiceImpl.java
...user/moudle/smslog/service/impl/SysSmsLogServiceImpl.java
+15
-0
SysUserController.java
...om/lyy/user/moudle/user/controller/SysUserController.java
+32
-0
SysUserInfoService.java
.../com/lyy/user/moudle/user/service/SysUserInfoService.java
+7
-0
SysUserInfoServiceImpl.java
...user/moudle/user/service/impl/SysUserInfoServiceImpl.java
+70
-13
application.yml
src/main/resources/application.yml
+7
-0
SysSmsLogMapper.xml
src/main/resources/mapper/sms/SysSmsLogMapper.xml
+6
-0
No files found.
pom.xml
View file @
5afb96eb
...
...
@@ -93,6 +93,12 @@
<artifactId>
nimbus-jose-jwt
</artifactId>
<version>
9.23
</version>
</dependency>
<!--启用Spring Boot的配置处理器。-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-configuration-processor
</artifactId>
<optional>
true
</optional>
</dependency>
</dependencies>
<build>
...
...
src/main/java/com/lyy/user/config/mybatis/MyMetaObjectHandler.java
View file @
5afb96eb
...
...
@@ -20,9 +20,9 @@ import java.util.Arrays;
@Component
public
class
MyMetaObjectHandler
implements
MetaObjectHandler
{
private
final
String
[]
createNeedToFill
=
{
"create
Person"
,
"createTime"
,
"updatePerson
"
,
"updateTime"
,
"version"
"create
By"
,
"createTime"
,
"updateBy
"
,
"updateTime"
,
"version"
};
private
final
String
[]
updateNeedToFill
=
{
"update
Person
"
,
"updateTime"
};
private
final
String
[]
updateNeedToFill
=
{
"update
By
"
,
"updateTime"
};
private
final
Class
[]
ignoreAutoFillEntity
=
{};
@Override
...
...
@@ -45,7 +45,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
.
forEach
(
property
->
{
if
(
metaObject
.
hasSetter
(
property
))
{
if
(
property
.
endsWith
(
"
Person
"
))
{
if
(
property
.
endsWith
(
"
By
"
))
{
this
.
setFieldValByName
(
property
,
userInfo
.
getUserName
(),
metaObject
);
}
...
...
src/main/java/com/lyy/user/enums/SendMsgTypeEnum.java
View file @
5afb96eb
...
...
@@ -4,8 +4,8 @@ import lombok.Getter;
@Getter
public
enum
SendMsgTypeEnum
{
REGISTER
(
1
,
"
345
"
,
"注册"
),
LOGIN
(
2
,
"
234
"
,
"登录"
);
REGISTER
(
1
,
"
a0072fe0c74c47e59fbf700a4ce94350
"
,
"注册"
),
LOGIN
(
2
,
"
a0072fe0c74c47e59fbf700a4ce94350
"
,
"登录"
);
private
final
Integer
code
;
private
final
String
templateId
;
...
...
@@ -25,4 +25,12 @@ public enum SendMsgTypeEnum {
}
return
null
;
}
public
static
String
getName
(
Integer
code
){
for
(
SendMsgTypeEnum
bt:
values
()){
if
(
bt
.
code
.
equals
(
code
)){
return
bt
.
templateId
;
}
}
return
null
;
}
}
src/main/java/com/lyy/user/moudle/login/controller/SysPcLoginController.java
View file @
5afb96eb
...
...
@@ -30,6 +30,7 @@ public class SysPcLoginController {
*/
@PostMapping
(
"/login"
)
public
String
login
(
@Validated
@RequestBody
LoginVo
loginVo
)
{
return
this
.
sysUserInfoService
.
loginPc
(
loginVo
);
}
...
...
@@ -44,16 +45,7 @@ public class SysPcLoginController {
public
String
phoneLogin
(
@Validated
@RequestBody
PhoneLoginVo
phoneLoginVo
)
{
return
sysUserInfoService
.
phoneLogin
(
phoneLoginVo
);
}
/**
* @description: pc-退出登录
* @date: 2023/11/20 9:40
* @param: [request]
* @return: boolean
*/
@PostMapping
(
"logout"
)
public
boolean
logout
(
HttpServletRequest
request
)
{
return
this
.
sysUserInfoService
.
logout
(
request
.
getHeader
(
"token"
));
}
/**
* @description: 核对手机号是否已经注册
* @date: 2023/11/20 9:40
...
...
@@ -74,6 +66,16 @@ public class SysPcLoginController {
public
boolean
sendMsg
(
@RequestBody
@Validated
SendPhoneVo
sendPhoneVo
)
{
return
this
.
sysUserInfoService
.
sendMsg
(
sendPhoneVo
);
}
/**
* @description: 发送短信
* @date: 2023/11/20 14:21
* @param: [phone]
* @return: boolean
*/
@PostMapping
(
"/sendMsg/{phone}"
)
public
boolean
sendMsg
(
String
phone
)
{
return
this
.
sysUserInfoService
.
sendMsg
(
phone
);
}
/**
* @description: 注册
...
...
src/main/java/com/lyy/user/moudle/login/vo/SmsVo.java
0 → 100644
View file @
5afb96eb
package
com
.
lyy
.
user
.
moudle
.
login
.
vo
;
import
lombok.*
;
import
java.util.List
;
/**
* @Author:zhouxudong
* @version: 1.0
* @Date: 2023/11/20 14:38
* @Description: 短信返回格式
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public
class
SmsVo
{
private
String
code
;
private
String
description
;
private
List
<
Object
>
result
;
//返回样例
/* {
"result": [{
"total": 1,
"originTo": "18731081812",
"createTime": "2023-11-20T06:05:08Z",
"from": "8823112010314",
"smsMsgId": "0521b98d-75ae-467f-9672-8a9707095e67_28147916",
"countryId": "CN",
"status": "000000"
}],
"code": "000000",
"description": "Success"
}*/
}
src/main/java/com/lyy/user/moudle/smslog/entity/SysSmsLogEntity.java
0 → 100644
View file @
5afb96eb
package
com
.
lyy
.
user
.
moudle
.
smslog
.
entity
;
import
com.baomidou.mybatisplus.annotation.*
;
import
lombok.*
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* 短信发送记录表;
*
* @author : http://www.chiner.pro
* @date : 2023-11-20
*/
@TableName
(
"sys_sms_log"
)
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors
(
chain
=
true
)
public
class
SysSmsLogEntity
implements
Serializable
{
/** 主键id */
@TableId
private
String
id
;
/** 返回标识符 */
private
String
code
;
/** 返回字段描述 */
private
String
description
;
/** json格式字符串 */
private
String
result
;
/** 短信类型 */
private
String
type
;
private
String
phone
;
/** 乐观锁 */
@Version
@TableField
(
value
=
"version"
,
fill
=
FieldFill
.
INSERT
)
private
Integer
version
;
/** 创建人 */
@TableField
(
value
=
"create_by"
,
fill
=
FieldFill
.
INSERT
)
private
String
createBy
;
/** 创建时间 */
@TableField
(
value
=
"create_time"
,
fill
=
FieldFill
.
INSERT
)
private
Date
createTime
;
/** 更新人 */
@TableField
(
value
=
"update_by"
,
fill
=
FieldFill
.
UPDATE
)
private
String
updateBy
;
/** 更新时间 */
@TableField
(
value
=
"update_time"
,
fill
=
FieldFill
.
UPDATE
)
private
Date
updateTime
;
}
src/main/java/com/lyy/user/moudle/smslog/mapper/SysSmsLogMapper.java
0 → 100644
View file @
5afb96eb
package
com
.
lyy
.
user
.
moudle
.
smslog
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.lyy.user.moudle.smslog.entity.SysSmsLogEntity
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @author: zhouxudong
* @version: 1.0
* @createTime: 2023/11/20 15:02
* @description: 短信发送记录表
*/
@Mapper
public
interface
SysSmsLogMapper
extends
BaseMapper
<
SysSmsLogEntity
>
{}
src/main/java/com/lyy/user/moudle/smslog/service/SysSmsLogService.java
0 → 100644
View file @
5afb96eb
package
com
.
lyy
.
user
.
moudle
.
smslog
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.lyy.user.moudle.smslog.entity.SysSmsLogEntity
;
/**
* @author: zhouxudong
* @version: 1.0
* @createTime: 2023/11/20 15:01
* @description: 短信发送记录表
*/
public
interface
SysSmsLogService
extends
IService
<
SysSmsLogEntity
>
{
}
src/main/java/com/lyy/user/moudle/smslog/service/impl/SysSmsLogServiceImpl.java
0 → 100644
View file @
5afb96eb
package
com
.
lyy
.
user
.
moudle
.
smslog
.
service
.
impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.lyy.user.moudle.smslog.entity.SysSmsLogEntity
;
import
com.lyy.user.moudle.smslog.mapper.SysSmsLogMapper
;
import
org.springframework.stereotype.Service
;
import
com.lyy.user.moudle.smslog.service.SysSmsLogService
;
/**
* @author: zhouxudong
* @version: 1.0
* @createTime: 2023/11/20 15:01
* @description: 短信发送记录表
*/
@Service
public
class
SysSmsLogServiceImpl
extends
ServiceImpl
<
SysSmsLogMapper
,
SysSmsLogEntity
>
implements
SysSmsLogService
{}
src/main/java/com/lyy/user/moudle/user/controller/SysUserController.java
0 → 100644
View file @
5afb96eb
package
com
.
lyy
.
user
.
moudle
.
user
.
controller
;
import
com.lyy.user.moudle.user.service.SysUserInfoService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @Author:zhouxudong
*
* @version: 1.0 @Date: 2023/11/20 15:21 @Description: 用户模块
*/
@RestController
@RequestMapping
(
"/user"
)
@RequiredArgsConstructor
public
class
SysUserController
{
private
final
SysUserInfoService
sysUserInfoService
;
/**
* @description: pc-退出登录
* @date: 2023/11/20 9:40
* @param: [request]
* @return: boolean
*/
@PostMapping
(
"logout"
)
public
boolean
logout
(
HttpServletRequest
request
)
{
return
this
.
sysUserInfoService
.
logout
(
request
.
getHeader
(
"token"
));
}
}
src/main/java/com/lyy/user/moudle/user/service/SysUserInfoService.java
View file @
5afb96eb
...
...
@@ -53,6 +53,13 @@ public interface SysUserInfoService extends IService<SysUserInfo> {
* @return: boolean
**/
boolean
sendMsg
(
SendPhoneVo
sendPhoneVo
);
/**
* @description: 发送短信
* @date: 2023/11/16 18:36
* @param: [phone]
* @return: boolean
**/
boolean
sendMsg
(
String
phone
);
//用户注册
boolean
sign
(
RegisterVo
registerVo
);
}
src/main/java/com/lyy/user/moudle/user/service/impl/SysUserInfoServiceImpl.java
View file @
5afb96eb
package
com
.
lyy
.
user
.
moudle
.
user
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.ReUtil
;
...
...
@@ -11,12 +12,16 @@ import com.lyy.user.config.LyyConfig;
import
com.lyy.user.config.exception.ServiceException
;
import
com.lyy.user.constant.Constants
;
import
com.lyy.user.enums.SendMsgTypeEnum
;
import
com.lyy.user.moudle.login.vo.SmsVo
;
import
com.lyy.user.moudle.smslog.entity.SysSmsLogEntity
;
import
com.lyy.user.moudle.smslog.service.SysSmsLogService
;
import
com.lyy.user.moudle.user.entity.SysUserInfo
;
import
com.lyy.user.moudle.user.mapper.SysUserInfoMapper
;
import
com.lyy.user.moudle.user.service.SysUserInfoService
;
import
com.lyy.user.moudle.user.vo.*
;
import
com.lyy.user.util.jwt.JwtTokenUtil
;
import
com.lyy.user.util.sms.SendMsgUtils
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -39,10 +44,12 @@ import java.util.concurrent.TimeUnit;
*/
@Service
@Slf4j
@RequiredArgsConstructor
public
class
SysUserInfoServiceImpl
extends
ServiceImpl
<
SysUserInfoMapper
,
SysUserInfo
>
implements
SysUserInfoService
{
@Autowired
LyyConfig
lyyConfig
;
private
final
LyyConfig
lyyConfig
;
private
final
SysSmsLogService
sysSmsLogService
;
@Autowired
(
required
=
false
)
private
StringRedisTemplate
stringRedisTemplate
;
...
...
@@ -64,14 +71,13 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
}
// 设置token
// String token = getToken(sysUserInfo, type);
String
token
=
JwtTokenUtil
.
createToken
(
sysUserInfo
,
null
);
String
token
=
JwtTokenUtil
.
createToken
(
sysUserInfo
,
null
);
stringRedisTemplate
.
opsForValue
()
.
set
(
Constants
.
token
+
token
,
sysUserInfo
.
getUserId
().
toString
(),
15
,
TimeUnit
.
DAYS
);
return
token
;
}
public
boolean
checkPassword
(
String
realPassword
,
String
password
)
{
String
md5Password
=
DigestUtils
.
md5DigestAsHex
((
password
+
lyyConfig
.
getPasswordSalt
()).
getBytes
());
...
...
@@ -114,19 +120,27 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
}
String
phone
=
phoneLoginVo
.
getPhone
();
String
code
=
phoneLoginVo
.
getCode
();
String
msgCode
=
stringRedisTemplate
.
opsForValue
()
.
get
(
Constants
.
MSG_KEY
+
SendMsgTypeEnum
.
LOGIN
.
getCode
()
+
":"
+
phone
);
String
msgCode
=
getPhoneKey
(
phone
,
SendMsgTypeEnum
.
LOGIN
.
getCode
());
if
(
StringUtils
.
isBlank
(
msgCode
))
{
throw
new
ServiceException
(
"验证码失效,请重新发送"
);
}
if
(!
code
.
equals
(
msgCode
))
{
throw
new
ServiceException
(
"验证码有误"
);
}
return
JwtTokenUtil
.
createToken
(
sysUserInfo
,
null
);
return
JwtTokenUtil
.
createToken
(
sysUserInfo
,
null
);
}
/**
* @description: 获取验证码 如果需要类型 则在key上拼接 type :Constants.MSG_KEY + sendPhoneVo.getType() + ":" +
* sendPhoneVo.getPhone();
* @date: 2023/11/20 14:29
* @param: [phone, type]
* @return: java.lang.String
*/
private
String
getPhoneKey
(
String
phone
,
Integer
type
)
{
return
stringRedisTemplate
.
opsForValue
()
.
get
(
Constants
.
MSG_KEY
+
SendMsgTypeEnum
.
LOGIN
.
getCode
()
+
":"
+
phone
);
}
/**
* @description: 退出
* @date: 2023/11/16 18:17
...
...
@@ -152,6 +166,38 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
return
this
.
count
(
lambdaQueryWrapper
)
>
0
;
}
@Override
public
boolean
sendMsg
(
String
phone
)
{
check
(
phone
);
String
key
=
Constants
.
MSG_KEY
+
phone
;
String
code
=
stringRedisTemplate
.
opsForValue
().
get
(
key
);
if
(
StringUtils
.
isNotBlank
(
code
))
{
throw
new
ServiceException
(
"短信以发送,请勿重复发送"
);
}
int
randomInt
=
RandomUtil
.
randomInt
(
100000
,
999999
);
List
<
Integer
>
temp
=
new
ArrayList
<>();
temp
.
add
(
randomInt
);
// 发送短信
String
result
=
sendMsgUtils
.
sendMsg
(
phone
,
SendMsgTypeEnum
.
getTemplateId
(
1
),
temp
.
toString
());
log
.
info
(
"发送短信信息:{},返回结果:{}"
,
randomInt
,
result
);
if
(
ObjectUtils
.
isEmpty
(
result
))
{
throw
new
ServiceException
(
"短信发送失败"
);
}
SmsVo
smsVo
=
BeanUtil
.
toBean
(
result
,
SmsVo
.
class
);
SysSmsLogEntity
sysSmsLog
=
new
SysSmsLogEntity
();
sysSmsLog
.
setCode
(
smsVo
.
getCode
())
.
setDescription
(
smsVo
.
getDescription
())
.
setType
(
"登录/注册"
)
.
setResult
(
result
)
.
setPhone
(
phone
);
this
.
sysSmsLogService
.
save
(
sysSmsLog
);
if
(!
"000000"
.
equals
(
smsVo
.
getCode
()))
{
throw
new
ServiceException
(
"短信发送失败,请稍后重试"
);
}
stringRedisTemplate
.
opsForValue
().
set
(
key
,
String
.
valueOf
(
randomInt
),
5
,
TimeUnit
.
MINUTES
);
return
true
;
}
/**
* @description: 发送短信
* @date: 2023/11/16 18:36
...
...
@@ -178,10 +224,22 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
sendPhoneVo
.
getPhone
(),
SendMsgTypeEnum
.
getTemplateId
(
sendPhoneVo
.
getType
()),
temp
.
toString
());
if
(
ObjectUtils
.
isEmpty
(
result
))
{
SmsVo
smsVo
=
BeanUtil
.
toBean
(
result
,
SmsVo
.
class
);
if
(
ObjectUtils
.
isEmpty
(
smsVo
))
{
throw
new
ServiceException
(
"短信发送失败"
);
}
log
.
info
(
"发送短信返回结果:{}"
,
result
);
log
.
info
(
"发送短信信息:{},返回结果:{}"
,
randomInt
,
result
);
SysSmsLogEntity
sysSmsLog
=
new
SysSmsLogEntity
();
sysSmsLog
.
setCode
(
smsVo
.
getCode
())
.
setDescription
(
smsVo
.
getDescription
())
.
setType
(
SendMsgTypeEnum
.
getName
(
sendPhoneVo
.
getType
()))
.
setResult
(
result
)
.
setPhone
(
sendPhoneVo
.
getPhone
());
this
.
sysSmsLogService
.
save
(
sysSmsLog
);
if
(!
"000000"
.
equals
(
smsVo
.
getCode
()))
{
throw
new
ServiceException
(
"短信发送失败,请稍后重试"
);
}
stringRedisTemplate
.
opsForValue
().
set
(
key
,
String
.
valueOf
(
randomInt
),
5
,
TimeUnit
.
MINUTES
);
return
true
;
}
...
...
@@ -199,8 +257,7 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
if
(
checkPhone
(
phone
))
{
throw
new
ServiceException
(
"手机号已经注册"
);
}
String
key
=
Constants
.
MSG_KEY
+
SendMsgTypeEnum
.
REGISTER
.
getCode
()
+
":"
+
phone
;
String
code
=
stringRedisTemplate
.
opsForValue
().
get
(
key
);
String
code
=
getPhoneKey
(
phone
,
SendMsgTypeEnum
.
REGISTER
.
getCode
());
if
(
StringUtils
.
isBlank
(
code
))
{
throw
new
ServiceException
(
"验证码已失效"
);
}
...
...
src/main/resources/application.yml
View file @
5afb96eb
...
...
@@ -34,3 +34,10 @@ mybatis-plus:
#逻辑已删除值
logic-delete-value
:
0
logic-not-delete-value
:
1
sms
:
appKey
:
J12997I0SJ988a4Hjmk72WmuP51i
appSecret
:
I6bUKWfZU51i9FSsXGGg9XkN2GRw
appUrl
:
https://smsapi.cn-north-4.myhuaweicloud.com:443/sms/batchSendSms/v1
sender
:
8823112010314
signature
:
立业云
src/main/resources/mapper/sms/SysSmsLogMapper.xml
0 → 100644
View file @
5afb96eb
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.lyy.user.moudle.smslog.mapper.SysSmsLogMapper"
>
</mapper>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment