Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
O
online-edu-backend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Redmine
Redmine
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
online-edu
online-edu-backend
Commits
c3c67360
Commit
c3c67360
authored
May 27, 2021
by
liuyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
用户端登陆完成
parent
79e857d2
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
308 additions
and
13 deletions
+308
-13
AliyunApiController.java
...com/qkdata/biz/aliyun/controller/AliyunApiController.java
+1
-0
CourseController.java
...om/qkdata/biz/management/controller/CourseController.java
+7
-0
RecommendConfigController.java
.../biz/management/controller/RecommendConfigController.java
+1
-1
CourseService.java
...java/com/qkdata/biz/management/service/CourseService.java
+11
-0
VideoInfoModel.java
...ain/java/com/qkdata/biz/management/vo/VideoInfoModel.java
+11
-0
SmsController.java
...ain/java/com/qkdata/biz/sms/controller/SmsController.java
+2
-5
SysUserMapper.java
src/main/java/com/qkdata/biz/sys/mapper/SysUserMapper.java
+3
-0
ShiroService.java
src/main/java/com/qkdata/biz/sys/service/ShiroService.java
+92
-4
SysUserService.java
src/main/java/com/qkdata/biz/sys/service/SysUserService.java
+24
-0
LoginController.java
...n/java/com/qkdata/biz/web/controller/LoginController.java
+41
-0
FullUserInfo.java
src/main/java/com/qkdata/biz/web/vo/FullUserInfo.java
+77
-0
LoginByCodeModel.java
src/main/java/com/qkdata/biz/web/vo/LoginByCodeModel.java
+16
-0
application.yml
src/main/resources/application.yml
+2
-3
SysUserMapper.xml
src/main/resources/mappers/sys/SysUserMapper.xml
+20
-0
No files found.
src/main/java/com/qkdata/biz/aliyun/controller/AliyunApiController.java
View file @
c3c67360
...
...
@@ -46,4 +46,5 @@ public class AliyunApiController {
public
Result
<
RefreshUploadVideoResponse
>
refreshVideoUploadPolicy
(
@RequestParam
(
required
=
true
)
String
videoId
)
throws
Exception
{
return
Result
.
succeed
(
aliyunService
.
refreshUploadVideo
(
videoId
));
}
}
src/main/java/com/qkdata/biz/management/controller/CourseController.java
View file @
c3c67360
package
com
.
qkdata
.
biz
.
management
.
controller
;
import
com.aliyuncs.exceptions.ClientException
;
import
com.qkdata.biz.common.BizConstants
;
import
com.qkdata.biz.management.entity.CourseSeriesPO
;
import
com.qkdata.biz.management.service.CourseService
;
...
...
@@ -117,4 +118,10 @@ public class CourseController {
courseService
.
saveSeries
(
po
);
return
Result
.
succeed
(
"ok"
);
}
@ApiOperation
(
"获取视频信息"
)
@GetMapping
(
"/videoInfo/{videoId}"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_ADMIN
,
BizConstants
.
ROLE_OPERATOR
},
logical
=
Logical
.
OR
)
public
Result
<
VideoInfoModel
>
videoInfo
(
@PathVariable
String
videoId
)
throws
ClientException
{
return
Result
.
succeed
(
courseService
.
getVideoInfo
(
videoId
));
}
}
src/main/java/com/qkdata/biz/management/controller/RecommendConfigController.java
View file @
c3c67360
...
...
@@ -34,7 +34,7 @@ public class RecommendConfigController {
@GetMapping
(
"/list"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_ADMIN
,
BizConstants
.
ROLE_OPERATOR
},
logical
=
Logical
.
OR
)
public
Result
<
List
<
RecommendConfigPO
>>
list
(){
Result
.
succeed
(
configService
.
list
());
return
Result
.
succeed
(
configService
.
list
());
}
@ApiOperation
(
"添加推荐"
)
@PostMapping
(
"/add"
)
...
...
src/main/java/com/qkdata/biz/management/service/CourseService.java
View file @
c3c67360
...
...
@@ -371,4 +371,14 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
po
.
setSeriesId
(
model
.
getSeriesId
());
return
po
.
getId
();
}
public
VideoInfoModel
getVideoInfo
(
String
videoId
)
throws
ClientException
{
VideoInfoModel
model
=
new
VideoInfoModel
();
GetVideoInfoResponse
response
=
aliyunService
.
getVideoInfo
(
videoId
);
model
.
setVideoId
(
videoId
);
model
.
setSize
(
response
.
getVideo
().
getSize
());
model
.
setDuration
(
response
.
getVideo
().
getDuration
());
model
.
setCoverURL
(
response
.
getVideo
().
getCoverURL
());
return
model
;
}
}
\ No newline at end of file
src/main/java/com/qkdata/biz/management/vo/VideoInfoModel.java
0 → 100644
View file @
c3c67360
package
com
.
qkdata
.
biz
.
management
.
vo
;
import
lombok.Data
;
@Data
public
class
VideoInfoModel
{
private
String
videoId
;
private
Long
size
;
private
Float
duration
;
private
String
coverURL
;
}
src/main/java/com/qkdata/biz/sms/controller/SmsController.java
View file @
c3c67360
...
...
@@ -14,10 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
...
...
@@ -35,7 +32,7 @@ public class SmsController {
@ApiOperation
(
"发送验证码"
)
@SysLog
(
"发送验证码"
)
@
Ge
tMapping
(
"/sendCode"
)
@
Pos
tMapping
(
"/sendCode"
)
public
Result
<
String
>
sendCode
(
@RequestBody
@Validated
SendValCodeReq
req
){
Map
<
String
,
Object
>
param
=
Maps
.
newHashMap
();
String
captcha
=
RandomDigitGenerator
.
generate
(
6
);
...
...
src/main/java/com/qkdata/biz/sys/mapper/SysUserMapper.java
View file @
c3c67360
...
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
com.qkdata.biz.sys.entity.SysUserPO
;
import
com.qkdata.biz.sys.vo.QueryUserModel
;
import
com.qkdata.biz.sys.vo.SysUserListModel
;
import
com.qkdata.biz.web.vo.FullUserInfo
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
...
...
@@ -17,4 +18,6 @@ public interface SysUserMapper extends BaseMapper<SysUserPO> {
List
<
SysUserListModel
>
queryPageList
(
Page
<
SysUserListModel
>
page
,
@Param
(
"p"
)
QueryUserModel
queryUserModel
);
List
<
Long
>
queryAllMenuId
(
Long
userId
);
FullUserInfo
selectFullUserInfo
(
String
username
);
}
src/main/java/com/qkdata/biz/sys/service/ShiroService.java
View file @
c3c67360
...
...
@@ -3,18 +3,27 @@ package com.qkdata.biz.sys.service;
import
cn.hutool.core.date.DateUtil
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Maps
;
import
com.qkdata.biz.common.BizConstants
;
import
com.qkdata.biz.enums.AccountStatusEnum
;
import
com.qkdata.biz.management.entity.OrganizationPO
;
import
com.qkdata.biz.management.service.OrganizationService
;
import
com.qkdata.biz.sys.entity.SysMenuPO
;
import
com.qkdata.biz.sys.entity.SysUserPO
;
import
com.qkdata.biz.sys.vo.LoginUserInfo
;
import
com.qkdata.biz.sys.vo.SysRoleModel
;
import
com.qkdata.biz.web.vo.FullUserInfo
;
import
com.qkdata.biz.web.vo.LoginByCodeModel
;
import
com.qkdata.common.base.exception.BusinessException
;
import
com.qkdata.common.jwt.JWTService
;
import
com.qkdata.common.oauth.AuthorizedUser
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.shiro.crypto.hash.Sha256Hash
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
...
...
@@ -22,6 +31,7 @@ import java.time.LocalDateTime;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Slf4j
@Service
public
class
ShiroService
{
@Autowired
...
...
@@ -34,6 +44,12 @@ public class ShiroService {
private
JWTService
jwtService
;
@Autowired
private
SysRoleService
sysRoleService
;
@Autowired
private
OrganizationService
orgSerivce
;
@Autowired
@Qualifier
(
"stringRedisTemplate"
)
private
StringRedisTemplate
redisTemplate
;
public
Set
<
String
>
getUserPermissions
(
Long
userId
)
{
List
<
String
>
permsList
;
...
...
@@ -71,7 +87,7 @@ public class ShiroService {
userPO
.
setActivateTime
(
LocalDateTime
.
now
());
sysUserService
.
updateById
(
userPO
);
}
String
token
=
generatorToken
(
userPO
);
String
token
=
generatorToken
(
userPO
.
getId
(),
userPO
.
getUsername
()
);
LoginUserInfo
loginUser
=
new
LoginUserInfo
();
BeanUtils
.
copyProperties
(
userPO
,
loginUser
);
loginUser
.
setAuthorization
(
token
);
...
...
@@ -79,10 +95,10 @@ public class ShiroService {
return
loginUser
;
}
private
String
generatorToken
(
SysUserPO
userPO
)
throws
JsonProcessingException
{
private
String
generatorToken
(
Long
id
,
String
username
)
throws
JsonProcessingException
{
AuthorizedUser
user
=
new
AuthorizedUser
();
user
.
setUserId
(
userPO
.
getId
()
);
user
.
setUsername
(
user
PO
.
getUsername
()
);
user
.
setUserId
(
id
);
user
.
setUsername
(
user
name
);
String
userJson
=
objectMapper
.
writeValueAsString
(
user
);
Map
<
String
,
Object
>
userClaim
=
Maps
.
newConcurrentMap
();
userClaim
.
put
(
"user"
,
userJson
);
...
...
@@ -97,4 +113,76 @@ public class ShiroService {
List
<
SysRoleModel
>
roles
=
sysRoleService
.
getUserRoles
(
userId
);
return
roles
.
stream
().
map
(
SysRoleModel:
:
getCode
).
collect
(
Collectors
.
toSet
());
}
public
FullUserInfo
loginByCode
(
LoginByCodeModel
model
)
{
String
cache_captcha
=
(
String
)
redisTemplate
.
opsForValue
().
get
(
BizConstants
.
MOBILE_CAPTCHA_PREFIX
+
model
.
getMobile
());
if
(!
Strings
.
isNullOrEmpty
(
cache_captcha
)){
cache_captcha
=
cache_captcha
.
trim
();
if
(!
cache_captcha
.
equals
(
model
.
getCode
())){
log
.
error
(
"验证码错误:redis值为{},输入值为{}"
,
cache_captcha
,
model
.
getCode
());
throw
new
BusinessException
(
"验证码错误"
);
}
}
else
{
throw
new
BusinessException
(
"验证码错误"
);
}
FullUserInfo
userInfo
=
sysUserService
.
findFullUserInfo
(
model
.
getMobile
());
if
(
userInfo
==
null
){
//用户不存在时需要注册
registerUser
(
model
.
getMobile
());
userInfo
=
sysUserService
.
findFullUserInfo
(
model
.
getMobile
());
}
if
(
userInfo
.
getStatus
()
==
AccountStatusEnum
.
DISABLE
){
throw
new
BusinessException
(
"对不起,您的帐户已禁用,请联系客服人员"
);
}
if
(
userInfo
.
getStatus
()
==
AccountStatusEnum
.
UNACTIVATE
){
//激活用户
SysUserPO
userPO
=
new
SysUserPO
();
userPO
.
setId
(
userInfo
.
getId
());
userPO
.
setStatus
(
AccountStatusEnum
.
ENABLE
);
userPO
.
setActivateTime
(
LocalDateTime
.
now
());
sysUserService
.
updateById
(
userPO
);
}
//判断帐户角色是否为企业管理员或普通用户
List
<
SysRoleModel
>
roleModels
=
sysRoleService
.
getUserRoles
(
userInfo
.
getId
());
boolean
hasPerm
=
false
;
for
(
SysRoleModel
role
:
roleModels
){
if
(
role
.
getCode
().
equals
(
BizConstants
.
ROLE_ENTERPRISE_ADMIN
)){
hasPerm
=
true
;
userInfo
.
setEnterpriesMgr
(
true
);
}
else
if
(
role
.
getCode
().
equals
(
BizConstants
.
ROLE_USER
)){
hasPerm
=
true
;
userInfo
.
setEnterpriesMgr
(
false
);
}
}
if
(!
hasPerm
){
throw
new
BusinessException
(
"对不起,您没有权限登陆,请联系客服人员"
);
}
//获取所属企业
if
(
userInfo
.
getEnterpriseId
()
!=
null
){
OrganizationPO
orgPo
=
orgSerivce
.
getById
(
userInfo
.
getEnterpriseId
());
if
(
orgPo
!=
null
){
userInfo
.
setEnterpriseName
(
orgPo
.
getName
());
}
}
updateLastLoginTime
(
userInfo
.
getId
());
try
{
userInfo
.
setAuthorization
(
generatorToken
(
userInfo
.
getId
(),
userInfo
.
getUsername
()));
}
catch
(
JsonProcessingException
e
)
{
throw
new
BusinessException
(
"系统处理错误"
);
}
return
userInfo
;
}
private
void
updateLastLoginTime
(
Long
id
)
{
SysUserPO
po
=
new
SysUserPO
();
po
.
setLastLoginTime
(
LocalDateTime
.
now
());
po
.
setId
(
id
);
sysUserService
.
updateById
(
po
);
}
private
void
registerUser
(
String
mobile
)
{
sysUserService
.
registerUser
(
mobile
);
}
}
src/main/java/com/qkdata/biz/sys/service/SysUserService.java
View file @
c3c67360
...
...
@@ -5,12 +5,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.google.common.collect.Lists
;
import
com.qkdata.biz.enums.AccountStatusEnum
;
import
com.qkdata.biz.enums.AccountTypeEnum
;
import
com.qkdata.biz.sys.entity.SysUserExtPO
;
import
com.qkdata.biz.sys.entity.SysUserPO
;
import
com.qkdata.biz.sys.mapper.SysUserExtMapper
;
import
com.qkdata.biz.sys.mapper.SysUserMapper
;
import
com.qkdata.biz.sys.vo.QueryUserModel
;
import
com.qkdata.biz.sys.vo.SysRoleModel
;
import
com.qkdata.biz.sys.vo.SysUserListModel
;
import
com.qkdata.biz.sys.vo.SysUserModel
;
import
com.qkdata.biz.web.vo.FullUserInfo
;
import
com.qkdata.common.base.enums.CodeEnum
;
import
com.qkdata.common.base.exception.BusinessException
;
import
com.qkdata.common.base.model.PageResult
;
...
...
@@ -34,6 +38,8 @@ public class SysUserService extends BaseServiceImpl<SysUserMapper, SysUserPO> {
private
SysUserRoleService
sysUserRoleService
;
@Autowired
private
SysRoleService
sysRoleService
;
@Autowired
private
SysUserExtMapper
sysUserExtMapper
;
public
SysUserPO
getByUsername
(
String
username
)
{
return
baseMapper
.
selectOne
(
Wrappers
.<
SysUserPO
>
lambdaQuery
().
eq
(
SysUserPO:
:
getUsername
,
username
));
...
...
@@ -111,4 +117,22 @@ public class SysUserService extends BaseServiceImpl<SysUserMapper, SysUserPO> {
removeByIds
(
ids
);
sysUserRoleService
.
deleteByUserIds
(
ids
);
}
public
FullUserInfo
findFullUserInfo
(
String
username
)
{
return
baseMapper
.
selectFullUserInfo
(
username
);
}
public
void
registerUser
(
String
mobile
)
{
SysUserPO
userPo
=
new
SysUserPO
();
userPo
.
setUsername
(
mobile
);
userPo
.
setStatus
(
AccountStatusEnum
.
ENABLE
);
userPo
.
setActivateTime
(
LocalDateTime
.
now
());
save
(
userPo
);
List
<
Long
>
roleIds
=
Lists
.
newArrayList
(
5L
);
sysUserRoleService
.
saveOrUpdateUserRole
(
userPo
.
getId
(),
roleIds
);
SysUserExtPO
extUser
=
new
SysUserExtPO
();
extUser
.
setUserId
(
userPo
.
getId
());
extUser
.
setType
(
AccountTypeEnum
.
USER
);
sysUserExtMapper
.
insert
(
extUser
);
}
}
src/main/java/com/qkdata/biz/web/controller/LoginController.java
0 → 100644
View file @
c3c67360
package
com
.
qkdata
.
biz
.
web
.
controller
;
import
com.google.common.base.Strings
;
import
com.qkdata.biz.common.BizConstants
;
import
com.qkdata.biz.sys.service.ShiroService
;
import
com.qkdata.biz.sys.vo.LoginUserInfo
;
import
com.qkdata.biz.web.vo.FullUserInfo
;
import
com.qkdata.biz.web.vo.LoginByCodeModel
;
import
com.qkdata.common.annotation.SysLog
;
import
com.qkdata.common.base.exception.BusinessException
;
import
com.qkdata.common.base.model.Result
;
import
com.qkdata.common.constants.Constants
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@Slf4j
@Api
(
tags
=
"用户端登陆"
)
@RestController
@RequestMapping
(
"/api/web/login"
)
public
class
LoginController
{
@Autowired
private
ShiroService
shiroService
;
@ApiOperation
(
"手机号+验证码登陆"
)
@PostMapping
(
"/loginByCode"
)
@SysLog
(
value
=
"手机号+验证码登陆"
,
includeParam
=
false
)
public
Result
<
FullUserInfo
>
loginByCode
(
@RequestBody
@Validated
LoginByCodeModel
model
){
return
Result
.
succeed
(
shiroService
.
loginByCode
(
model
));
}
}
src/main/java/com/qkdata/biz/web/vo/FullUserInfo.java
0 → 100644
View file @
c3c67360
package
com
.
qkdata
.
biz
.
web
.
vo
;
import
com.qkdata.biz.enums.AccountStatusEnum
;
import
com.qkdata.biz.enums.AccountTypeEnum
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
@Data
public
class
FullUserInfo
{
/**
* 用户ID
*/
private
Long
id
;
/**
* 用户帐号
*/
private
String
username
;
/**
* 昵称
*/
private
String
nickName
;
/**
* 状态
*/
private
AccountStatusEnum
status
;
/**
* 注册时间
*/
private
LocalDateTime
createTime
;
/**
* 最后登陆时间
*/
private
LocalDateTime
lastLoginTime
;
/**
* 激活时间
*/
private
LocalDateTime
activateTime
;
/**
* 姓名
*/
private
String
name
;
/**
* 性别
*/
private
String
sex
;
/**
* 年龄
*/
private
Integer
age
;
/**
* 头像url
*/
private
String
avatarUrl
;
/**
* 用户类型
*/
private
AccountTypeEnum
type
;
/**
* 所属企业ID
*/
private
Long
enterpriseId
;
/**
* 所属企业名称
*/
private
String
enterpriseName
;
/**
* 是否企业管理员
*/
private
boolean
enterpriesMgr
=
false
;
/**
* 认证token
*/
private
String
authorization
;
}
src/main/java/com/qkdata/biz/web/vo/LoginByCodeModel.java
0 → 100644
View file @
c3c67360
package
com
.
qkdata
.
biz
.
web
.
vo
;
import
com.qkdata.common.constants.ValidatorPattern
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.Pattern
;
@Data
public
class
LoginByCodeModel
{
@NotBlank
(
message
=
"请填写手机号"
)
@Pattern
(
regexp
=
ValidatorPattern
.
MOBILE_PATTERN
,
message
=
"手机号格式不正确"
)
private
String
mobile
;
@NotBlank
(
message
=
"验证码不能为空"
)
private
String
code
;
}
src/main/resources/application.yml
View file @
c3c67360
...
...
@@ -89,9 +89,8 @@ jwt:
exclude-urls
:
-
/api/wx/user/**
-
/api/sys/login
-
/api/aliyun/mgr/uploadPolicy
#test
-
/api/aliyun/mgr/videoUploadPolicy
#test
-
/api/aliyun/mgr/videoConfig
#test
-
/api/sms/sendCode
-
/api/web/login/**
aud
:
qkdata
exp
:
720
#24*30 30天
...
...
src/main/resources/mappers/sys/SysUserMapper.xml
View file @
c3c67360
...
...
@@ -22,4 +22,23 @@
LEFT JOIN sys_role_menu rm on ur.role_id = rm.role_id
where ur.user_id = #{userId}
</select>
<select
id=
"selectFullUserInfo"
resultType=
"com.qkdata.biz.web.vo.FullUserInfo"
>
SELECT u.id,
u.username,
u.nick_name,
u.`status`,
u.create_time,
u.activate_time,
u.last_login_time,
e.`name`,
e.age,
e.sex,
e.avatar_url,
e.type,
e.enterprise_id
FROM sys_user u
INNER JOIN user_ext e on u.id = e.user_id
WHERE u.is_del = 0
and username = #{username}
</select>
</mapper>
\ No newline at end of file
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