Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
roncoo
roncoo-education
提交
5f61f6dd
R
roncoo-education
项目概览
roncoo
/
roncoo-education
11 个月 前同步成功
通知
146
Star
5
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roncoo-education
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
1
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5f61f6dd
编写于
9月 07, 2022
作者:
F
fengyw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改
上级
6fc24fe0
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
225 addition
and
1 deletion
+225
-1
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/Aliyun.java
.../java/com/roncoo/education/common/core/aliyun/Aliyun.java
+5
-0
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/AliyunSmsUtil.java
...om/roncoo/education/common/core/aliyun/AliyunSmsUtil.java
+63
-0
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/tools/Constants.java
...ava/com/roncoo/education/common/core/tools/Constants.java
+1
-0
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/tools/NOUtil.java
...n/java/com/roncoo/education/common/core/tools/NOUtil.java
+4
-0
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/job/CourseJob.java
.../main/java/com/roncoo/education/course/job/CourseJob.java
+52
-0
roncoo-education-course/roncoo-education-course-service/src/test/java/com/roncoo/education/course/test/CourseTest.java
...est/java/com/roncoo/education/course/test/CourseTest.java
+9
-0
roncoo-education-system/roncoo-education-system-feign/src/main/java/com/roncoo/education/system/feign/interfaces/IFeignSysConfig.java
...oo/education/system/feign/interfaces/IFeignSysConfig.java
+5
-1
roncoo-education-system/roncoo-education-system-service/src/main/java/com/roncoo/education/system/feign/FeignSysConfigController.java
...ncoo/education/system/feign/FeignSysConfigController.java
+6
-0
roncoo-education-system/roncoo-education-system-service/src/main/java/com/roncoo/education/system/feign/biz/FeignSysConfigBiz.java
.../roncoo/education/system/feign/biz/FeignSysConfigBiz.java
+11
-0
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/ApiUsersController.java
...roncoo/education/user/service/api/ApiUsersController.java
+10
-0
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/biz/ApiUsersBiz.java
...om/roncoo/education/user/service/api/biz/ApiUsersBiz.java
+31
-0
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/req/SendCodeReq.java
...om/roncoo/education/user/service/api/req/SendCodeReq.java
+28
-0
未找到文件。
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/Aliyun.java
浏览文件 @
5f61f6dd
...
...
@@ -20,4 +20,9 @@ public class Aliyun implements Serializable {
private
String
aliyunOssEndpoint
;
private
String
aliyunOssBucket
;
// 短信签名
private
String
signName
;
// 验证码模板
private
String
templateVer
;
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/AliyunSmsUtil.java
0 → 100644
浏览文件 @
5f61f6dd
package
com.roncoo.education.common.core.aliyun
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
com.aliyuncs.CommonRequest
;
import
com.aliyuncs.DefaultAcsClient
;
import
com.aliyuncs.IAcsClient
;
import
com.aliyuncs.http.MethodType
;
import
com.aliyuncs.profile.DefaultProfile
;
import
com.aliyuncs.profile.IClientProfile
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author fengyw
*/
@Slf4j
public
final
class
AliyunSmsUtil
{
private
AliyunSmsUtil
()
{
}
/**
* 发送验证码
*
* @param mobile
* @param code
* @param aliyun
*/
public
static
Boolean
sendVerCode
(
String
mobile
,
String
code
,
Aliyun
aliyun
)
{
String
templateParam
=
"{\"code\":\"{code}\"}"
.
replace
(
"{code}"
,
code
);
return
send
(
mobile
,
templateParam
,
aliyun
.
getSignName
(),
aliyun
.
getTemplateVer
(),
aliyun
.
getAliyunAccessKeyId
(),
aliyun
.
getAliyunAccessKeySecret
());
}
private
static
Boolean
send
(
String
phone
,
String
templateParam
,
String
signName
,
String
templateCode
,
String
accessKeyId
,
String
accessKeySecret
)
{
System
.
setProperty
(
"sun.net.client.defaultConnectTimeout"
,
"10000"
);
System
.
setProperty
(
"sun.net.client.defaultReadTimeout"
,
"10000"
);
IClientProfile
profile
=
DefaultProfile
.
getProfile
(
"cn-hangzhou"
,
accessKeyId
,
accessKeySecret
);
IAcsClient
acsClient
=
new
DefaultAcsClient
(
profile
);
// 组装请求对象
CommonRequest
request
=
new
CommonRequest
();
request
.
setSysMethod
(
MethodType
.
POST
);
request
.
setSysDomain
(
"dysmsapi.aliyuncs.com"
);
request
.
setSysVersion
(
"2017-05-25"
);
request
.
setSysAction
(
"SendSms"
);
request
.
putQueryParameter
(
"RegionId"
,
"cn-hangzhou"
);
request
.
putQueryParameter
(
"PhoneNumbers"
,
phone
);
request
.
putQueryParameter
(
"SignName"
,
signName
);
request
.
putQueryParameter
(
"TemplateCode"
,
templateCode
);
request
.
putQueryParameter
(
"TemplateParam"
,
templateParam
);
try
{
JSONObject
resultJson
=
JSONUtil
.
parseObj
(
acsClient
.
getCommonResponse
(
request
).
getData
());
if
(!
"OK"
.
equals
(
resultJson
.
getStr
(
"Code"
)))
{
log
.
error
(
"短信发送错误={}"
,
resultJson
.
getStr
(
"Message"
));
return
false
;
}
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"系统繁忙"
,
e
);
return
false
;
}
}
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/tools/Constants.java
浏览文件 @
5f61f6dd
...
...
@@ -33,6 +33,7 @@ public final class Constants {
String
USER_STUDY
=
"user::study::"
;
String
RESOURCE
=
"resource::"
;
String
PROGRESS
=
"progress::"
;
String
CODE
=
"code::"
;
}
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/tools/NOUtil.java
浏览文件 @
5f61f6dd
...
...
@@ -18,6 +18,10 @@ public final class NOUtil {
private
NOUtil
()
{
}
public
static
String
getVerCode
()
{
return
RandomUtil
.
randomNumbers
(
6
);
}
public
static
Long
getOrderNo
()
{
return
Long
.
valueOf
(
DateUtil
.
format
(
new
Date
(),
YYYYMMDDHHMMSS
)
+
RandomUtil
.
randomNumbers
(
3
));
}
...
...
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/job/CourseJob.java
0 → 100644
浏览文件 @
5f61f6dd
package
com.roncoo.education.course.job
;
import
cn.hutool.core.collection.CollUtil
;
import
com.roncoo.education.common.core.tools.BeanUtil
;
import
com.roncoo.education.common.es.EsCourse
;
import
com.roncoo.education.course.dao.CourseDao
;
import
com.roncoo.education.course.dao.impl.mapper.entity.Course
;
import
com.roncoo.education.course.dao.impl.mapper.entity.CourseExample
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate
;
import
org.springframework.data.elasticsearch.core.mapping.IndexCoordinates
;
import
org.springframework.data.elasticsearch.core.query.IndexQuery
;
import
org.springframework.data.elasticsearch.core.query.IndexQueryBuilder
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 同步课程数据到es
*
* @author fengyw
*/
@Component
public
class
CourseJob
{
@Autowired
private
CourseDao
courseDao
;
@Autowired
private
ElasticsearchRestTemplate
elasticsearchRestTemplate
;
/**
* 每分钟执行一次
*/
@Scheduled
(
fixedRate
=
60000
)
public
void
course
()
{
CourseExample
example
=
new
CourseExample
();
List
<
Course
>
courseList
=
courseDao
.
listByExample
(
example
);
if
(
CollUtil
.
isNotEmpty
(
courseList
))
{
List
<
IndexQuery
>
queries
=
new
ArrayList
<>();
for
(
Course
course
:
courseList
)
{
EsCourse
esCourse
=
BeanUtil
.
copyProperties
(
course
,
EsCourse
.
class
);
IndexQuery
query
=
new
IndexQueryBuilder
().
withObject
(
esCourse
).
build
();
queries
.
add
(
query
);
}
elasticsearchRestTemplate
.
indexOps
(
EsCourse
.
class
).
delete
();
elasticsearchRestTemplate
.
bulkIndex
(
queries
,
IndexCoordinates
.
of
(
EsCourse
.
COURSE
));
}
}
}
roncoo-education-course/roncoo-education-course-service/src/test/java/com/roncoo/education/course/test/CourseTest.java
浏览文件 @
5f61f6dd
package
com.roncoo.education.course.test
;
import
com.roncoo.education.common.core.base.Result
;
import
com.roncoo.education.course.job.CourseJob
;
import
com.roncoo.education.course.service.api.biz.ApiCourseBiz
;
import
com.roncoo.education.course.service.api.req.ApiCourseReq
;
import
com.roncoo.education.course.service.api.resp.ApiCourseResp
;
...
...
@@ -14,6 +15,9 @@ public class CourseTest extends BaseTest {
@Autowired
private
ApiCourseBiz
courseBiz
;
@Autowired
private
CourseJob
courseJob
;
@Test
public
void
view
()
{
ApiCourseReq
req
=
new
ApiCourseReq
();
...
...
@@ -21,4 +25,9 @@ public class CourseTest extends BaseTest {
Result
<
ApiCourseResp
>
result
=
courseBiz
.
view
(
req
);
log
.
info
(
"course={}"
,
result
.
getData
());
}
@Test
public
void
es
()
{
courseJob
.
course
();
}
}
roncoo-education-system/roncoo-education-system-feign/src/main/java/com/roncoo/education/system/feign/interfaces/IFeignSysConfig.java
浏览文件 @
5f61f6dd
package
com.roncoo.education.system.feign.interfaces
;
import
com.roncoo.education.common.core.aliyun.Aliyun
;
import
com.roncoo.education.common.core.base.Page
;
import
com.roncoo.education.system.feign.interfaces.qo.SysConfigEditQO
;
import
com.roncoo.education.system.feign.interfaces.qo.SysConfigPageQO
;
...
...
@@ -62,4 +63,7 @@ public interface IFeignSysConfig {
*/
@GetMapping
(
value
=
"/get/{id}"
)
SysConfigViewVO
getById
(
@PathVariable
(
value
=
"id"
)
Long
id
);
}
\ No newline at end of file
@GetMapping
(
value
=
"/getAliyun"
)
Aliyun
getAliyun
();
}
roncoo-education-system/roncoo-education-system-service/src/main/java/com/roncoo/education/system/feign/FeignSysConfigController.java
浏览文件 @
5f61f6dd
package
com.roncoo.education.system.feign
;
import
com.roncoo.education.common.core.aliyun.Aliyun
;
import
com.roncoo.education.common.core.base.Page
;
import
com.roncoo.education.system.feign.biz.FeignSysConfigBiz
;
import
com.roncoo.education.system.feign.interfaces.IFeignSysConfig
;
...
...
@@ -54,4 +55,9 @@ public class FeignSysConfigController implements IFeignSysConfig {
public
SysConfigViewVO
getById
(
@PathVariable
(
value
=
"id"
)
Long
id
)
{
return
biz
.
getById
(
id
);
}
@Override
public
Aliyun
getAliyun
()
{
return
biz
.
getAliyun
();
}
}
roncoo-education-system/roncoo-education-system-service/src/main/java/com/roncoo/education/system/feign/biz/FeignSysConfigBiz.java
浏览文件 @
5f61f6dd
package
com.roncoo.education.system.feign.biz
;
import
com.roncoo.education.common.core.aliyun.Aliyun
;
import
com.roncoo.education.common.core.base.Page
;
import
com.roncoo.education.common.core.base.PageUtil
;
import
com.roncoo.education.common.core.tools.BeanUtil
;
...
...
@@ -18,6 +19,9 @@ import lombok.RequiredArgsConstructor;
import
org.springframework.stereotype.Component
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 系统配置
...
...
@@ -57,4 +61,11 @@ public class FeignSysConfigBiz extends BaseBiz {
SysConfig
record
=
dao
.
getById
(
id
);
return
BeanUtil
.
copyProperties
(
record
,
SysConfigViewVO
.
class
);
}
public
Aliyun
getAliyun
()
{
SysConfigExample
example
=
new
SysConfigExample
();
List
<
SysConfig
>
sysConfigs
=
dao
.
listByExample
(
example
);
Map
<
String
,
String
>
map
=
sysConfigs
.
stream
().
collect
(
Collectors
.
toMap
(
SysConfig:
:
getConfigKey
,
SysConfig:
:
getConfigValue
));
return
BeanUtil
.
objToBean
(
map
,
Aliyun
.
class
);
}
}
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/ApiUsersController.java
浏览文件 @
5f61f6dd
...
...
@@ -4,6 +4,7 @@ import com.roncoo.education.common.core.base.Result;
import
com.roncoo.education.user.service.api.biz.ApiUsersBiz
;
import
com.roncoo.education.user.service.api.req.PasswordReq
;
import
com.roncoo.education.user.service.api.req.RegisterReq
;
import
com.roncoo.education.user.service.api.req.SendCodeReq
;
import
com.roncoo.education.user.service.api.resp.UsersLoginResp
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
...
...
@@ -26,6 +27,15 @@ public class ApiUsersController {
@Autowired
private
ApiUsersBiz
biz
;
/**
* 注册验证码发送接口
*/
@ApiOperation
(
value
=
"注册验证码发送接口"
,
notes
=
"发送手机验证码"
)
@RequestMapping
(
value
=
"/send/code"
,
method
=
RequestMethod
.
POST
)
public
Result
<
String
>
sendCode
(
@RequestBody
SendCodeReq
req
)
{
return
biz
.
sendCode
(
req
);
}
/**
* 注册接口
*/
...
...
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/biz/ApiUsersBiz.java
浏览文件 @
5f61f6dd
...
...
@@ -2,22 +2,30 @@ package com.roncoo.education.user.service.api.biz;
import
cn.hutool.core.util.IdUtil
;
import
cn.hutool.crypto.digest.DigestUtil
;
import
com.roncoo.education.common.cache.CacheRedis
;
import
com.roncoo.education.common.core.aliyun.AliyunSmsUtil
;
import
com.roncoo.education.common.core.base.Result
;
import
com.roncoo.education.common.core.enums.LoginStatusEnum
;
import
com.roncoo.education.common.core.tools.Constants
;
import
com.roncoo.education.common.core.tools.JWTUtil
;
import
com.roncoo.education.common.core.tools.NOUtil
;
import
com.roncoo.education.common.service.BaseBiz
;
import
com.roncoo.education.system.feign.interfaces.IFeignSysConfig
;
import
com.roncoo.education.user.dao.LogLoginDao
;
import
com.roncoo.education.user.dao.UsersDao
;
import
com.roncoo.education.user.dao.impl.mapper.entity.LogLogin
;
import
com.roncoo.education.user.dao.impl.mapper.entity.Users
;
import
com.roncoo.education.user.service.api.req.PasswordReq
;
import
com.roncoo.education.user.service.api.req.RegisterReq
;
import
com.roncoo.education.user.service.api.req.SendCodeReq
;
import
com.roncoo.education.user.service.api.resp.UsersLoginResp
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.StringUtils
;
import
java.util.concurrent.TimeUnit
;
/**
* 用户基本信息
*
...
...
@@ -30,6 +38,10 @@ public class ApiUsersBiz extends BaseBiz {
private
UsersDao
userDao
;
@Autowired
private
LogLoginDao
logLoginDao
;
@Autowired
private
CacheRedis
cacheRedis
;
@Autowired
private
IFeignSysConfig
feignSysConfig
;
@Transactional
...
...
@@ -37,6 +49,16 @@ public class ApiUsersBiz extends BaseBiz {
if
(
StringUtils
.
isEmpty
(
req
.
getMobile
()))
{
return
Result
.
error
(
"手机号不能为空"
);
}
// 验证码校验
String
redisCode
=
cacheRedis
.
get
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
());
if
(!
StringUtils
.
hasText
(
redisCode
))
{
return
Result
.
error
(
"验证码已经过期"
);
}
if
(!
req
.
getCode
().
equals
(
redisCode
))
{
return
Result
.
error
(
"验证码不正确"
);
}
if
(
StringUtils
.
isEmpty
(
req
.
getMobilePwd
()))
{
return
Result
.
error
(
"密码不能为空"
);
}
...
...
@@ -113,4 +135,13 @@ public class ApiUsersBiz extends BaseBiz {
logLoginDao
.
save
(
record
);
}
public
Result
<
String
>
sendCode
(
SendCodeReq
req
)
{
String
code
=
NOUtil
.
getVerCode
();
if
(
AliyunSmsUtil
.
sendVerCode
(
req
.
getMobile
(),
code
,
feignSysConfig
.
getAliyun
()))
{
// 缓存5分钟
cacheRedis
.
set
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
(),
code
,
5
,
TimeUnit
.
MINUTES
);
return
Result
.
success
(
"发送成功"
);
}
return
Result
.
error
(
"发送失败"
);
}
}
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/req/SendCodeReq.java
0 → 100644
浏览文件 @
5f61f6dd
/**
* Copyright 2015-现在 广州市领课网络科技有限公司
*/
package
com.roncoo.education.user.service.api.req
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* <p>
* 用户基本信息
* </p>
*
* @author wujing123
*/
@Data
@Accessors
(
chain
=
true
)
public
class
SendCodeReq
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 手机号码
*/
private
String
mobile
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录