Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
roncoo
roncoo-education
比较版本
ee8ffa6263f3568a510883cc267e4c02d17d4aac...946f770524bfad06784b704c311263995f3faf24
R
roncoo-education
项目概览
roncoo
/
roncoo-education
9 个月 前同步成功
通知
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 搜索 >>
源分支
946f770524bfad06784b704c311263995f3faf24
选择Git版本
...
目标分支
ee8ffa6263f3568a510883cc267e4c02d17d4aac
选择Git版本
比较
Commits (2)
https://gitcode.net/roncoocom/roncoo-education/-/commit/2a365cc54903eddab5b6c735ec977a7d320948f6
style: 增加默认头像
2023-11-25T14:20:27+08:00
fengyw
fengyw@roncoo.com
https://gitcode.net/roncoocom/roncoo-education/-/commit/946f770524bfad06784b704c311263995f3faf24
feat: 优化验证码发送逻辑
2023-11-26T11:18:16+08:00
fengyw
fengyw@roncoo.com
隐藏空白更改
内联
并排
Showing
17 changed file
with
117 addition
and
292 deletion
+117
-292
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
+0
-29
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/AliyunOssUtil.java
...om/roncoo/education/common/core/aliyun/AliyunOssUtil.java
+0
-167
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
+0
-62
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
+10
-0
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/cache/CacheRedis.java
...in/java/com/roncoo/education/common/cache/CacheRedis.java
+11
-10
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/sms/SmsConfig.java
.../main/java/com/roncoo/education/common/sms/SmsConfig.java
+1
-1
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/sms/SmsUtil.java
...rc/main/java/com/roncoo/education/common/sms/SmsUtil.java
+1
-1
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/upload/Upload.java
.../main/java/com/roncoo/education/common/upload/Upload.java
+9
-0
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/upload/impl/AliyunUploadImpl.java
...roncoo/education/common/upload/impl/AliyunUploadImpl.java
+41
-7
roncoo-education-feign/roncoo-education-feign-system/src/main/java/com/roncoo/education/system/feign/interfaces/IFeignSysConfig.java
...oo/education/system/feign/interfaces/IFeignSysConfig.java
+1
-1
roncoo-education-service/roncoo-education-service-course/src/main/java/com/roncoo/education/course/job/UserStudyJob.java
...in/java/com/roncoo/education/course/job/UserStudyJob.java
+1
-1
roncoo-education-service/roncoo-education-service-course/src/main/java/com/roncoo/education/course/service/api/biz/ApiUserStudyBiz.java
...coo/education/course/service/api/biz/ApiUserStudyBiz.java
+2
-2
roncoo-education-service/roncoo-education-service-system/src/main/java/com/roncoo/education/system/feign/FeignSysConfigController.java
...ncoo/education/system/feign/FeignSysConfigController.java
+1
-1
roncoo-education-service/roncoo-education-service-system/src/main/java/com/roncoo/education/system/feign/biz/FeignSysConfigBiz.java
.../roncoo/education/system/feign/biz/FeignSysConfigBiz.java
+1
-1
roncoo-education-service/roncoo-education-service-system/src/main/java/com/roncoo/education/system/service/api/ApiCommonController.java
...coo/education/system/service/api/ApiCommonController.java
+1
-1
roncoo-education-service/roncoo-education-service-user/src/main/java/com/roncoo/education/user/service/api/ApiUsersController.java
...roncoo/education/user/service/api/ApiUsersController.java
+2
-2
roncoo-education-service/roncoo-education-service-user/src/main/java/com/roncoo/education/user/service/api/biz/ApiUsersBiz.java
...om/roncoo/education/user/service/api/biz/ApiUsersBiz.java
+35
-6
未找到文件。
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/Aliyun.java
已删除
100644 → 0
浏览文件 @
ee8ffa62
package
com.roncoo.education.common.core.aliyun
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* @author wujing
*/
@Data
@Accessors
(
chain
=
true
)
public
class
Aliyun
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
aliyunAccessKeyId
;
private
String
aliyunAccessKeySecret
;
private
String
aliyunOssUrl
;
private
String
aliyunOssEndpoint
;
private
String
aliyunOssBucket
;
// // 短信签名
// private String aliyunSmsSignName;
// private String aliyunSmsAccessKeyId;
// private String aliyunSmsAccessKeySecret;
// private String aliyunSmsAuthCode;
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/AliyunOssUtil.java
已删除
100644 → 0
浏览文件 @
ee8ffa62
package
com.roncoo.education.common.core.aliyun
;
import
cn.hutool.core.util.IdUtil
;
import
com.aliyun.oss.OSS
;
import
com.aliyun.oss.OSSClientBuilder
;
import
com.aliyun.oss.model.CannedAccessControlList
;
import
com.aliyun.oss.model.GeneratePresignedUrlRequest
;
import
com.aliyun.oss.model.ObjectMetadata
;
import
com.aliyun.oss.model.PutObjectResult
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.Date
;
/**
* @author fengyw
*/
@Slf4j
public
final
class
AliyunOssUtil
{
private
final
static
String
PREFIX
=
"education"
;
private
AliyunOssUtil
()
{
}
public
static
String
getUrlSign
(
Aliyun
aliyun
,
String
url
,
Date
expires
)
{
GeneratePresignedUrlRequest
generatePresignedUrlRequest
=
new
GeneratePresignedUrlRequest
(
aliyun
.
getAliyunOssBucket
(),
url
.
replace
(
aliyun
.
getAliyunOssUrl
(),
""
));
generatePresignedUrlRequest
.
setExpiration
(
expires
);
return
url
+
"?"
+
getOssClient
(
aliyun
.
getAliyunOssEndpoint
(),
aliyun
.
getAliyunAccessKeyId
(),
aliyun
.
getAliyunAccessKeySecret
()).
generatePresignedUrl
(
generatePresignedUrlRequest
).
getQuery
();
}
public
static
String
uploadPic
(
File
file
,
Aliyun
aliyun
)
{
// 上传
try
{
String
name
=
file
.
getName
();
String
filePath
=
PREFIX
+
"/"
+
IdUtil
.
simpleUUID
()
+
name
.
substring
(
name
.
lastIndexOf
(
"."
));
getOssClient
(
aliyun
.
getAliyunOssEndpoint
(),
aliyun
.
getAliyunAccessKeyId
(),
aliyun
.
getAliyunAccessKeySecret
()).
putObject
(
aliyun
.
getAliyunOssBucket
(),
filePath
,
file
);
return
aliyun
.
getAliyunOssUrl
()
+
filePath
;
}
catch
(
Exception
e
)
{
log
.
error
(
"上传失败"
,
e
);
return
""
;
}
}
public
static
String
uploadPic
(
MultipartFile
file
,
Aliyun
aliyun
)
{
// 上传
InputStream
in
=
null
;
try
{
in
=
file
.
getInputStream
();
String
name
=
file
.
getOriginalFilename
();
String
filePath
=
PREFIX
+
"/"
+
IdUtil
.
simpleUUID
()
+
name
.
substring
(
name
.
lastIndexOf
(
"."
));
getOssClient
(
aliyun
.
getAliyunOssEndpoint
(),
aliyun
.
getAliyunAccessKeyId
(),
aliyun
.
getAliyunAccessKeySecret
()).
putObject
(
aliyun
.
getAliyunOssBucket
(),
filePath
,
in
);
return
aliyun
.
getAliyunOssUrl
()
+
filePath
;
}
catch
(
Exception
e
)
{
log
.
error
(
"上传失败"
,
e
);
return
""
;
}
finally
{
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
IOException
e
)
{
}
}
}
}
public
static
String
uploadDoc
(
File
file
,
Aliyun
aliyun
)
{
// 上传
try
{
String
name
=
file
.
getName
();
String
filePath
=
PREFIX
+
"/"
+
IdUtil
.
simpleUUID
()
+
name
.
substring
(
name
.
lastIndexOf
(
"."
));
putObjectForFile
(
aliyun
.
getAliyunOssEndpoint
(),
aliyun
.
getAliyunAccessKeyId
(),
aliyun
.
getAliyunAccessKeySecret
(),
aliyun
.
getAliyunOssBucket
(),
filePath
,
new
FileInputStream
(
file
),
file
.
getName
());
return
aliyun
.
getAliyunOssUrl
()
+
filePath
;
}
catch
(
Exception
e
)
{
log
.
error
(
"上传失败"
,
e
);
return
""
;
}
}
public
static
String
uploadDoc
(
MultipartFile
file
,
Aliyun
aliyun
)
{
InputStream
in
=
null
;
// 上传
try
{
in
=
file
.
getInputStream
();
String
name
=
file
.
getOriginalFilename
();
String
filePath
=
PREFIX
+
"/"
+
IdUtil
.
simpleUUID
()
+
name
.
substring
(
name
.
lastIndexOf
(
"."
));
putObjectForFile
(
aliyun
.
getAliyunOssEndpoint
(),
aliyun
.
getAliyunAccessKeyId
(),
aliyun
.
getAliyunAccessKeySecret
(),
aliyun
.
getAliyunOssBucket
(),
filePath
,
in
,
file
.
getOriginalFilename
());
return
aliyun
.
getAliyunOssUrl
()
+
filePath
;
}
catch
(
Exception
e
)
{
log
.
error
(
"上传失败"
,
e
);
return
""
;
}
finally
{
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
IOException
e
)
{
}
}
}
}
/**
* 根据url删除
*
* @param url
*/
public
static
void
delete
(
String
url
,
Aliyun
aliyun
)
{
try
{
String
filePath
=
url
.
replace
(
aliyun
.
getAliyunOssUrl
(),
""
);
deleteObject
(
aliyun
.
getAliyunOssBucket
(),
filePath
,
aliyun
);
}
catch
(
Exception
e
)
{
log
.
error
(
"上传失败"
,
e
);
}
}
private
static
String
check
(
String
url
,
String
ossUrl
)
{
String
key
=
url
.
replace
(
ossUrl
,
""
);
if
(
key
.
startsWith
(
"http"
))
{
if
(
ossUrl
.
startsWith
(
"https"
))
{
ossUrl
=
"http"
+
ossUrl
.
substring
(
5
,
ossUrl
.
length
());
}
else
{
ossUrl
=
"https"
+
ossUrl
.
substring
(
4
,
ossUrl
.
length
());
}
}
return
key
.
replace
(
ossUrl
,
""
);
}
/**
* 文件存储入OSS
*
* @param bucketName
* @param key
* @param inputStream
*/
private
static
PutObjectResult
putObjectForFile
(
String
endpoint
,
String
keyId
,
String
keySecret
,
String
bucketName
,
String
key
,
InputStream
inputStream
,
String
fileName
)
{
OSS
ossClient
=
getOssClient
(
endpoint
,
keyId
,
keySecret
);
ObjectMetadata
meta
=
new
ObjectMetadata
();
meta
.
setContentEncoding
(
"UTF-8"
);
if
(
StringUtils
.
hasText
(
fileName
))
{
meta
.
setContentDisposition
(
"attachment;filename={}"
.
replace
(
"{}"
,
fileName
));
meta
.
setObjectAcl
(
CannedAccessControlList
.
Private
);
}
return
ossClient
.
putObject
(
bucketName
,
key
,
inputStream
,
meta
);
}
private
static
OSS
getOssClient
(
String
endpoint
,
String
keyId
,
String
keySecret
)
{
return
new
OSSClientBuilder
().
build
(
endpoint
,
keyId
,
keySecret
);
}
/**
* 删除Bucket中的Object
*
* @param bucketName
* @param key
* @throws IOException
*/
private
static
void
deleteObject
(
String
bucketName
,
String
key
,
Aliyun
aliyun
)
throws
IOException
{
getOssClient
(
aliyun
.
getAliyunOssEndpoint
(),
aliyun
.
getAliyunAccessKeyId
(),
aliyun
.
getAliyunAccessKeySecret
()).
deleteObject
(
bucketName
,
key
);
}
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/AliyunSmsUtil.java
已删除
100644 → 0
浏览文件 @
ee8ffa62
//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.getAliyunSmsSignName(), aliyun.getAliyunSmsAuthCode(), aliyun.getAliyunSmsAccessKeyId(), aliyun.getAliyunSmsAccessKeySecret());
// }
//
// 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
浏览文件 @
946f7705
...
...
@@ -26,9 +26,19 @@ public final class Constants {
String
ADMINI_MENU
=
"admin::menu::"
;
String
ADMIN_VERI_CODE
=
"admin::ver::code::"
;
String
USER_STUDY
=
"user::study::"
;
/**
* 资源
*/
String
RESOURCE
=
"resource::"
;
/**
* 学习进度
*/
String
PROGRESS
=
"progress::"
;
/**
* 短信验证码
*/
String
CODE
=
"code::"
;
String
CODE_STAT
=
"code::stat::"
;
}
}
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/cache/CacheRedis.java
浏览文件 @
946f7705
...
...
@@ -28,9 +28,9 @@ public class CacheRedis {
*/
public
<
T
>
T
set
(
String
key
,
T
t
)
{
if
(
t
!=
null
)
{
String
value
=
JSUtil
.
toJsonString
(
t
);
if
(
t
instanceof
String
)
{
value
=
t
.
toString
(
);
String
value
=
t
.
toString
(
);
if
(
!(
t
instanceof
String
)
)
{
value
=
JSUtil
.
toJsonString
(
t
);
}
stringRedisTemplate
.
opsForValue
().
set
(
key
,
value
,
timeToLive
,
TimeUnit
.
MILLISECONDS
);
}
...
...
@@ -42,9 +42,9 @@ public class CacheRedis {
*/
public
<
T
>
T
set
(
String
key
,
T
t
,
int
time
,
TimeUnit
timeUnit
)
{
if
(
t
!=
null
)
{
String
value
=
JSUtil
.
toJsonString
(
t
);
if
(
t
instanceof
String
)
{
value
=
t
.
toString
(
);
String
value
=
t
.
toString
(
);
if
(
!(
t
instanceof
String
)
)
{
value
=
JSUtil
.
toJsonString
(
t
);
}
stringRedisTemplate
.
opsForValue
().
set
(
key
,
value
,
time
,
timeUnit
);
}
...
...
@@ -58,7 +58,7 @@ public class CacheRedis {
return
null
;
}
public
<
T
>
T
get
ByJson
(
String
key
,
Class
<
T
>
clazz
)
{
public
<
T
>
T
get
(
String
key
,
Class
<
T
>
clazz
)
{
String
value
=
get
(
key
);
if
(
StringUtils
.
hasText
(
value
))
{
return
JSUtil
.
parseObject
(
value
,
clazz
);
...
...
@@ -66,12 +66,13 @@ public class CacheRedis {
return
null
;
}
public
<
T
>
List
<
T
>
list
(
String
key
,
Class
<
T
>
clazz
)
{
return
JSUtil
.
parseArray
(
get
(
key
),
clazz
);
}
public
void
delete
(
String
key
)
{
stringRedisTemplate
.
delete
(
key
);
}
public
<
T
>
List
<
T
>
listByJson
(
String
key
,
Class
<
T
>
clazz
)
{
return
JSUtil
.
parseArray
(
get
(
key
),
clazz
);
}
}
roncoo-education-common/roncoo-education-common-
core/src/main/java/com/roncoo/education/common/core
/sms/SmsConfig.java
→
roncoo-education-common/roncoo-education-common-
service/src/main/java/com/roncoo/education/common
/sms/SmsConfig.java
浏览文件 @
946f7705
package
com.roncoo.education.common.
core.
sms
;
package
com.roncoo.education.common.sms
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
roncoo-education-common/roncoo-education-common-
core/src/main/java/com/roncoo/education/common/core
/sms/SmsUtil.java
→
roncoo-education-common/roncoo-education-common-
service/src/main/java/com/roncoo/education/common
/sms/SmsUtil.java
浏览文件 @
946f7705
package
com.roncoo.education.common.
core.
sms
;
package
com.roncoo.education.common.sms
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.crypto.SecureUtil
;
...
...
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/upload/Upload.java
浏览文件 @
946f7705
...
...
@@ -34,4 +34,13 @@ public class Upload implements Serializable {
private
String
minioSecretKey
;
private
String
minioDomain
;
private
String
minioBucket
;
/**
* OSS
*/
private
String
aliyunOssEndpoint
;
private
String
aliyunAccessKeyId
;
private
String
aliyunAccessKeySecret
;
private
String
aliyunOssUrl
;
private
String
aliyunOssBucket
;
}
roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/upload/impl/AliyunUploadImpl.java
浏览文件 @
946f7705
package
com.roncoo.education.common.upload.impl
;
import
com.roncoo.education.common.core.aliyun.Aliyun
;
import
com.roncoo.education.common.core.aliyun.AliyunOssUtil
;
import
com.roncoo.education.common.core.tools.BeanUtil
;
import
cn.hutool.core.util.IdUtil
;
import
com.aliyun.oss.OSS
;
import
com.aliyun.oss.OSSClientBuilder
;
import
com.aliyun.oss.model.CannedAccessControlList
;
import
com.aliyun.oss.model.ObjectMetadata
;
import
com.roncoo.education.common.upload.Upload
;
import
com.roncoo.education.common.upload.UploadFace
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.IOException
;
import
java.io.InputStream
;
/**
* @author fengyw
*/
...
...
@@ -16,16 +21,45 @@ import org.springframework.web.multipart.MultipartFile;
@Component
(
value
=
"aliyun"
)
public
class
AliyunUploadImpl
implements
UploadFace
{
private
final
static
String
PREFIX
=
"education"
;
@Override
public
String
uploadPic
(
MultipartFile
file
,
Upload
upload
)
{
Aliyun
aliyun
=
BeanUtil
.
copyProperties
(
upload
,
Aliyun
.
class
);
return
AliyunOssUtil
.
uploadPic
(
file
,
aliyun
);
return
putObject
(
file
,
upload
,
CannedAccessControlList
.
PublicRead
);
}
@Override
public
String
uploadDoc
(
MultipartFile
file
,
Upload
upload
)
{
Aliyun
aliyun
=
BeanUtil
.
copyProperties
(
upload
,
Aliyun
.
class
);
return
AliyunOssUtil
.
uploadDoc
(
file
,
aliyun
);
return
putObject
(
file
,
upload
,
CannedAccessControlList
.
Private
);
}
/**
* 存入OSS
*/
private
static
String
putObject
(
MultipartFile
file
,
Upload
upload
,
CannedAccessControlList
cannedAcl
)
{
InputStream
inputStream
=
null
;
// 上传
try
{
inputStream
=
file
.
getInputStream
();
String
name
=
file
.
getOriginalFilename
();
String
filePath
=
PREFIX
+
"/"
+
IdUtil
.
simpleUUID
()
+
name
.
substring
(
name
.
lastIndexOf
(
"."
));
OSS
ossClient
=
new
OSSClientBuilder
().
build
(
upload
.
getAliyunOssEndpoint
(),
upload
.
getAliyunAccessKeyId
(),
upload
.
getAliyunAccessKeySecret
());
ObjectMetadata
meta
=
new
ObjectMetadata
();
meta
.
setContentEncoding
(
"UTF-8"
);
meta
.
setContentDisposition
(
"attachment;filename={}"
.
replace
(
"{}"
,
name
));
meta
.
setObjectAcl
(
cannedAcl
);
ossClient
.
putObject
(
upload
.
getAliyunOssBucket
(),
filePath
,
inputStream
,
meta
);
return
upload
.
getAliyunOssUrl
()
+
filePath
;
}
catch
(
Exception
e
)
{
log
.
error
(
"上传失败"
,
e
);
return
""
;
}
finally
{
if
(
inputStream
!=
null
)
{
try
{
inputStream
.
close
();
}
catch
(
IOException
e
)
{
}
}
}
}
}
roncoo-education-feign/roncoo-education-feign-system/src/main/java/com/roncoo/education/system/feign/interfaces/IFeignSysConfig.java
浏览文件 @
946f7705
package
com.roncoo.education.system.feign.interfaces
;
import
com.roncoo.education.common.
core.
sms.SmsConfig
;
import
com.roncoo.education.common.sms.SmsConfig
;
import
com.roncoo.education.system.feign.interfaces.vo.PayConfig
;
import
com.roncoo.education.system.feign.interfaces.vo.SysConfig
;
import
com.roncoo.education.system.feign.interfaces.vo.VodConfig
;
...
...
roncoo-education-service/roncoo-education-service-course/src/main/java/com/roncoo/education/course/job/UserStudyJob.java
浏览文件 @
946f7705
...
...
@@ -41,7 +41,7 @@ public class UserStudyJob {
for
(
String
key
:
keys
)
{
if
(
cacheRedis
.
getStringRedisTemplate
().
getExpire
(
key
,
TimeUnit
.
MINUTES
)
<
1439
)
{
// 默认过期时间为60分钟,若剩余时间小于59分,则处理
AuthUserStudyReq
req
=
cacheRedis
.
get
ByJson
(
key
,
AuthUserStudyReq
.
class
);
AuthUserStudyReq
req
=
cacheRedis
.
get
(
key
,
AuthUserStudyReq
.
class
);
UserStudy
userStudy
=
userStudyDao
.
getById
(
req
.
getStudyId
());
if
(
ResourceTypeEnum
.
VIDEO
.
getCode
().
equals
(
req
.
getResourceType
())
||
ResourceTypeEnum
.
AUDIO
.
getCode
().
equals
(
req
.
getResourceType
()))
{
userStudy
.
setProgress
(
req
.
getCurrentDuration
().
divide
(
req
.
getTotalDuration
(),
BigDecimal
.
ROUND_CEILING
).
multiply
(
BigDecimal
.
valueOf
(
100
)).
setScale
(
2
,
RoundingMode
.
HALF_UP
));
...
...
roncoo-education-service/roncoo-education-service-course/src/main/java/com/roncoo/education/course/service/api/biz/ApiUserStudyBiz.java
浏览文件 @
946f7705
...
...
@@ -78,7 +78,7 @@ public class ApiUserStudyBiz extends BaseBiz {
}
private
Resource
getByResource
(
AuthUserStudyReq
req
)
{
Resource
resource
=
cacheRedis
.
get
ByJson
(
Constants
.
RedisPre
.
RESOURCE
+
req
.
getResourceId
(),
Resource
.
class
);
Resource
resource
=
cacheRedis
.
get
(
Constants
.
RedisPre
.
RESOURCE
+
req
.
getResourceId
(),
Resource
.
class
);
if
(
ObjectUtil
.
isEmpty
(
resource
))
{
resource
=
resourceDao
.
getById
(
req
.
getResourceId
());
cacheRedis
.
set
(
Constants
.
RedisPre
.
RESOURCE
+
req
.
getResourceId
(),
resource
,
1
,
TimeUnit
.
HOURS
);
...
...
@@ -87,7 +87,7 @@ public class ApiUserStudyBiz extends BaseBiz {
}
private
UserStudy
getUserStudy
(
AuthUserStudyReq
req
)
{
UserStudy
userStudy
=
cacheRedis
.
get
ByJson
(
Constants
.
RedisPre
.
USER_STUDY
+
req
.
getStudyId
(),
UserStudy
.
class
);
UserStudy
userStudy
=
cacheRedis
.
get
(
Constants
.
RedisPre
.
USER_STUDY
+
req
.
getStudyId
(),
UserStudy
.
class
);
if
(
ObjectUtil
.
isEmpty
(
userStudy
))
{
userStudy
=
dao
.
getById
(
req
.
getStudyId
());
cacheRedis
.
set
(
Constants
.
RedisPre
.
USER_STUDY
+
req
.
getStudyId
(),
userStudy
,
1
,
TimeUnit
.
HOURS
);
...
...
roncoo-education-service/roncoo-education-service-system/src/main/java/com/roncoo/education/system/feign/FeignSysConfigController.java
浏览文件 @
946f7705
package
com.roncoo.education.system.feign
;
import
com.roncoo.education.common.
core.
sms.SmsConfig
;
import
com.roncoo.education.common.sms.SmsConfig
;
import
com.roncoo.education.system.feign.biz.FeignSysConfigBiz
;
import
com.roncoo.education.system.feign.interfaces.IFeignSysConfig
;
import
com.roncoo.education.system.feign.interfaces.vo.PayConfig
;
...
...
roncoo-education-service/roncoo-education-service-system/src/main/java/com/roncoo/education/system/feign/biz/FeignSysConfigBiz.java
浏览文件 @
946f7705
package
com.roncoo.education.system.feign.biz
;
import
com.roncoo.education.common.core.sms.SmsConfig
;
import
com.roncoo.education.common.pay.util.AliPayConfig
;
import
com.roncoo.education.common.pay.util.WxPayConfig
;
import
com.roncoo.education.common.service.BaseBiz
;
import
com.roncoo.education.common.sms.SmsConfig
;
import
com.roncoo.education.system.feign.interfaces.vo.PayConfig
;
import
com.roncoo.education.system.feign.interfaces.vo.SysConfig
;
import
com.roncoo.education.system.feign.interfaces.vo.VodConfig
;
...
...
roncoo-education-service/roncoo-education-service-system/src/main/java/com/roncoo/education/system/service/api/ApiCommonController.java
浏览文件 @
946f7705
...
...
@@ -48,7 +48,7 @@ public class ApiCommonController {
}
}
@ApiOperation
(
value
=
"获取验证码"
,
notes
=
"获取图片验证码"
)
@ApiOperation
(
value
=
"获取
图片
验证码"
,
notes
=
"获取图片验证码"
)
@GetMapping
(
value
=
"/code"
)
public
Result
<
ApiVerCodeResp
>
getVerCode
()
{
CircleCaptcha
captcha
=
CaptchaUtil
.
createCircleCaptcha
(
200
,
100
,
4
,
20
);
...
...
roncoo-education-service/roncoo-education-service-user/src/main/java/com/roncoo/education/user/service/api/ApiUsersController.java
浏览文件 @
946f7705
...
...
@@ -29,9 +29,9 @@ public class ApiUsersController {
private
ApiUsersBiz
biz
;
/**
*
注册验证码发送接口
*
验证码发送接口(注册验证码 + 重置密码验证码)
*/
@ApiOperation
(
value
=
"
注册
验证码发送接口"
,
notes
=
"发送手机验证码"
)
@ApiOperation
(
value
=
"验证码发送接口"
,
notes
=
"发送手机验证码"
)
@RequestMapping
(
value
=
"/send/code"
,
method
=
RequestMethod
.
POST
)
public
Result
<
String
>
sendCode
(
@RequestBody
SendCodeReq
req
)
{
return
biz
.
sendCode
(
req
);
...
...
roncoo-education-service/roncoo-education-service-user/src/main/java/com/roncoo/education/user/service/api/biz/ApiUsersBiz.java
浏览文件 @
946f7705
...
...
@@ -8,9 +8,9 @@ import cn.hutool.extra.servlet.ServletUtil;
import
com.roncoo.education.common.cache.CacheRedis
;
import
com.roncoo.education.common.core.base.Result
;
import
com.roncoo.education.common.core.enums.LoginStatusEnum
;
import
com.roncoo.education.common.core.sms.SmsUtil
;
import
com.roncoo.education.common.core.tools.*
;
import
com.roncoo.education.common.service.BaseBiz
;
import
com.roncoo.education.common.sms.SmsUtil
;
import
com.roncoo.education.system.feign.interfaces.IFeignSysConfig
;
import
com.roncoo.education.user.dao.LogLoginDao
;
import
com.roncoo.education.user.dao.UsersDao
;
...
...
@@ -53,7 +53,6 @@ public class ApiUsersBiz extends BaseBiz {
if
(!
StringUtils
.
hasText
(
req
.
getMobile
()))
{
return
Result
.
error
(
"手机号不能为空"
);
}
// 验证码校验
String
redisCode
=
cacheRedis
.
get
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
());
if
(!
StringUtils
.
hasText
(
redisCode
))
{
...
...
@@ -62,6 +61,8 @@ public class ApiUsersBiz extends BaseBiz {
if
(!
req
.
getCode
().
equals
(
redisCode
))
{
return
Result
.
error
(
"验证码不正确"
);
}
// 删除验证码缓存
cacheRedis
.
delete
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
());
if
(!
StringUtils
.
hasText
(
req
.
getMobilePwd
()))
{
return
Result
.
error
(
"密码不能为空"
);
...
...
@@ -96,8 +97,6 @@ public class ApiUsersBiz extends BaseBiz {
if
(!
StringUtils
.
hasText
(
req
.
getPassword
()))
{
return
Result
.
error
(
"密码不能为空"
);
}
// 密码错误次数校验
// 用户校验
Users
user
=
userDao
.
getByMobile
(
req
.
getMobile
());
if
(
null
==
user
)
{
...
...
@@ -132,6 +131,7 @@ public class ApiUsersBiz extends BaseBiz {
user
.
setMobilePsw
(
DigestUtil
.
sha1Hex
(
user
.
getMobileSalt
()
+
password
));
// 默认8位随机字符串
user
.
setNickname
(
RandomUtil
.
randomString
(
8
));
user
.
setUserHead
(
"https://static.roncoos.com/lingke.png"
);
userDao
.
save
(
user
);
return
user
;
}
...
...
@@ -154,15 +154,41 @@ public class ApiUsersBiz extends BaseBiz {
String
code
=
NOUtil
.
getVerCode
();
log
.
warn
(
"手机号:{},验证码:{}"
,
req
.
getMobile
(),
code
);
// 正常应该是发送成功才放入缓存,这里方便没有短信通道的情况下,也能测试注册
// 验证码发送次数校验
if
(!
sendCodeCheck
(
req
.
getMobile
()))
{
return
Result
.
error
(
"验证码发送次数过多,请稍后再试"
);
}
// 正常应该是发送成功才放入缓存,这里方便没有短信通道的情况下,也能测试注册(上线需要删除,并打开下面)
cacheRedis
.
set
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
(),
code
,
5
,
TimeUnit
.
MINUTES
);
if
(
SmsUtil
.
sendVerCode
(
req
.
getMobile
(),
code
,
feignSysConfig
.
getSms
()))
{
// 发送成功才放入缓存
// cacheRedis.set(Constants.RedisPre.CODE + req.getMobile(), code, 5, TimeUnit.MINUTES);
return
Result
.
success
(
"发送成功"
);
}
return
Result
.
error
(
"发送失败"
);
}
/**
* 5分钟内,同一个手机号不能超2次发送验证码
*
* @param mobile
*/
private
Boolean
sendCodeCheck
(
String
mobile
)
{
String
count
=
cacheRedis
.
get
(
Constants
.
RedisPre
.
CODE_STAT
+
mobile
);
if
(
StringUtils
.
hasText
(
count
))
{
int
countNum
=
Integer
.
valueOf
(
count
);
if
(
countNum
<
2
)
{
cacheRedis
.
set
(
Constants
.
RedisPre
.
CODE_STAT
+
mobile
,
countNum
++);
return
Boolean
.
TRUE
;
}
}
else
{
cacheRedis
.
set
(
Constants
.
RedisPre
.
CODE_STAT
+
mobile
,
1
);
}
return
Boolean
.
FALSE
;
}
public
Result
<
String
>
password
(
PasswordReq
req
)
{
// 验证码校验
String
redisCode
=
cacheRedis
.
get
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
());
...
...
@@ -172,7 +198,10 @@ public class ApiUsersBiz extends BaseBiz {
if
(!
req
.
getCode
().
equals
(
redisCode
))
{
return
Result
.
error
(
"验证码不正确"
);
}
if
(
StringUtils
.
isEmpty
(
req
.
getMobilePwd
()))
{
// 删除验证码缓存
cacheRedis
.
delete
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
());
if
(!
StringUtils
.
hasText
(
req
.
getMobilePwd
()))
{
return
Result
.
error
(
"密码不能为空"
);
}
// 密码校验
...
...