Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
head_group
xyqb-user2
Commits
21c69f37
Commit
21c69f37
authored
Nov 04, 2019
by
oole
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/phoneNoModify' into feature/modify_phone_no
parents
1d15ec9d
be19cd09
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
233 additions
and
25 deletions
+233
-25
UserController.java
...n/quantgroup/xyqb/controller/external/UserController.java
+25
-0
CacheEvictPhoneNoUpdateEventListener.java
...roup/xyqb/event/CacheEvictPhoneNoUpdateEventListener.java
+42
-0
PhoneNoUpdateEvent.java
...ain/java/cn/quantgroup/xyqb/event/PhoneNoUpdateEvent.java
+30
-0
UserDetailHashEventListener.java
...cn/quantgroup/xyqb/event/UserDetailHashEventListener.java
+7
-17
WechatPhoneNoUpdateEventListener.java
...antgroup/xyqb/event/WechatPhoneNoUpdateEventListener.java
+33
-0
ISessionService.java
...a/cn/quantgroup/xyqb/service/session/ISessionService.java
+7
-0
SessionServiceImpl.java
...ntgroup/xyqb/service/session/impl/SessionServiceImpl.java
+27
-7
IUserService.java
...in/java/cn/quantgroup/xyqb/service/user/IUserService.java
+15
-0
UserServiceImpl.java
...cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
+47
-1
No files found.
src/main/java/cn/quantgroup/xyqb/controller/external/UserController.java
View file @
21c69f37
...
...
@@ -15,6 +15,7 @@ import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.LoginProperties
;
import
cn.quantgroup.xyqb.model.UserModel
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.service.merchant.IMerchantService
;
import
cn.quantgroup.xyqb.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
...
...
@@ -24,6 +25,7 @@ import cn.quantgroup.xyqb.service.user.IUserDetailService;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.service.user.UserCenterService
;
import
cn.quantgroup.xyqb.service.wechat.IWechatService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
cn.quantgroup.xyqb.util.IpUtil
;
import
cn.quantgroup.xyqb.util.MqUtils
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
...
...
@@ -414,6 +416,28 @@ public class UserController implements IBaseController {
return
JsonResult
.
buildSuccessResult
(
"token valid"
,
exist
);
}
@RequestMapping
(
"/token"
)
public
JsonResult
token
(
@RequestParam
String
token
)
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
result
.
put
(
"exist"
,
false
);
if
(
StringUtils
.
isEmpty
(
token
))
{
return
JsonResult
.
buildSuccessResult
(
null
,
result
);
}
if
(
token
.
contains
(
Constants
.
TOKEN_MASTER
))
{
return
JsonResult
.
buildSuccessResult
(
null
,
result
);
}
SessionStruct
sessionStruct
=
XyqbSessionContextHolder
.
getXSessionFromRedis
(
token
);
if
(
sessionStruct
==
null
||
sessionStruct
.
getValues
()
==
null
)
{
return
JsonResult
.
buildSuccessResult
(
null
,
result
);
}
User
user
=
sessionStruct
.
getValues
().
getUser
();
String
phoneNo
=
user
.
getPhoneNo
();
result
.
put
(
"phoneNo"
,
phoneNo
);
result
.
put
(
"userId"
,
user
.
getId
());
result
.
put
(
"exist"
,
true
);
return
JsonResult
.
buildSuccessResult
(
null
,
result
);
}
/**
* 用户中心首页,显示用户头像、昵称、姓名
*
...
...
@@ -423,6 +447,7 @@ public class UserController implements IBaseController {
@RequestMapping
(
"/center/index"
)
@ApiOperation
(
value
=
"用户中心首页"
,
notes
=
"用户中心首页显示头像, 昵称, 姓名"
,
httpMethod
=
"POST"
)
public
JsonResult
userCenterIndex
()
{
String
phoneNo
=
getCurrentUserFromRedis
().
getPhoneNo
();
Long
userId
=
getCurrentUserFromRedis
().
getId
();
UserAttached
userAttached
=
userCenterService
.
searchUserAttachedByUserId
(
userId
);
Map
<
String
,
String
>
result
=
new
HashMap
<>();
...
...
src/main/java/cn/quantgroup/xyqb/event/CacheEvictPhoneNoUpdateEventListener.java
0 → 100644
View file @
21c69f37
package
cn
.
quantgroup
.
xyqb
.
event
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionValue
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationListener
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
@Slf4j
@Component
public
class
CacheEvictPhoneNoUpdateEventListener
implements
ApplicationListener
<
PhoneNoUpdateEvent
>
{
@Autowired
private
IUserService
userService
;
@Autowired
private
ISessionService
sessionService
;
@Override
public
void
onApplicationEvent
(
PhoneNoUpdateEvent
event
)
{
String
oldPhoneNo
=
event
.
getOldPhoneNo
();
User
user
=
event
.
getUser
();
List
<
SessionStruct
>
sessionStructList
=
sessionService
.
findByUserId
(
user
.
getId
());
for
(
SessionStruct
sessionStruct
:
sessionStructList
)
{
SessionValue
values
=
sessionStruct
.
getValues
();
User
sessionUser
=
values
.
getUser
();
//修改 session 中的手机号
sessionUser
.
setPhoneNo
(
user
.
getPhoneNo
());
values
.
setUser
(
sessionUser
);
}
sessionService
.
persistSession
(
sessionStructList
);
userService
.
userCacheEvict
(
user
.
getUuid
(),
oldPhoneNo
);
}
}
src/main/java/cn/quantgroup/xyqb/event/PhoneNoUpdateEvent.java
0 → 100644
View file @
21c69f37
package
cn
.
quantgroup
.
xyqb
.
event
;
import
cn.quantgroup.xyqb.entity.User
;
import
lombok.Getter
;
import
org.springframework.context.ApplicationEvent
;
/**
* @author 徐小光
*/
@Getter
public
class
PhoneNoUpdateEvent
extends
ApplicationEvent
{
private
User
user
;
private
String
oldPhoneNo
;
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public
PhoneNoUpdateEvent
(
Object
source
)
{
super
(
source
);
}
public
PhoneNoUpdateEvent
(
Object
source
,
User
user
,
String
oldPhoneNo
)
{
super
(
source
);
this
.
user
=
user
;
this
.
oldPhoneNo
=
oldPhoneNo
;
}
}
src/main/java/cn/quantgroup/xyqb/event/UserDetailHashEventListener.java
View file @
21c69f37
...
...
@@ -5,7 +5,6 @@ import cn.quantgroup.xyqb.entity.UserHashMapping;
import
cn.quantgroup.xyqb.repository.IUserHashMappingRepository
;
import
cn.quantgroup.xyqb.util.encrypt.Md5Util
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationListener
;
import
org.springframework.stereotype.Component
;
...
...
@@ -16,14 +15,13 @@ import javax.persistence.PersistenceException;
/**
* userDetail 更新时, 保存 hashMapping 数据
*/
@Component
@Slf4j
@Component
public
class
UserDetailHashEventListener
implements
ApplicationListener
<
UserDetailUpdateEvent
>
{
@Autowired
private
IUserHashMappingRepository
userHashMappingRepository
;
@Override
public
void
onApplicationEvent
(
UserDetailUpdateEvent
event
)
{
UserDetail
userDetail
=
event
.
getUserDetail
();
...
...
@@ -33,27 +31,19 @@ public class UserDetailHashEventListener implements ApplicationListener<UserDeta
//如果不存在, 我先保存一下
if
(
userHashMapping
==
null
)
{
userHashMapping
=
new
UserHashMapping
(
userDetail
.
getUserId
());
String
phoneNo
=
userDetail
.
getPhoneNo
();
userHashMapping
.
setPhoneNoMd5
(
Md5Util
.
build
(
phoneNo
));
}
String
idNoMd5
=
userHashMapping
.
getIdNoMd5
();
//可能存在手机号修改. 搞一下.
String
phoneNo
=
userDetail
.
getPhoneNo
();
userHashMapping
.
setPhoneNoMd5
(
Md5Util
.
build
(
phoneNo
));
//可能存在身份证号修改. 搞一下.
String
idNo
=
userDetail
.
getIdNo
().
toUpperCase
();
String
idNoMd5New
=
Md5Util
.
build
(
idNo
);
//新旧相同, 直接跳过
if
(
StringUtils
.
equals
(
idNoMd5
,
idNoMd5New
))
{
return
;
}
userHashMapping
.
setIdNoMd5
(
idNoMd5New
);
userHashMapping
.
setIdNoMd5
(
Md5Util
.
build
(
idNo
));
try
{
userHashMappingRepository
.
save
(
userHashMapping
);
}
catch
(
PersistenceException
e
){
}
catch
(
PersistenceException
e
)
{
log
.
error
(
"保存userHashMapping重复, 无需再保存, userId:{}"
,
userDetail
.
getUserId
());
}
}
}
src/main/java/cn/quantgroup/xyqb/event/WechatPhoneNoUpdateEventListener.java
0 → 100644
View file @
21c69f37
package
cn
.
quantgroup
.
xyqb
.
event
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.service.wechat.IWechatService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationListener
;
import
org.springframework.stereotype.Component
;
import
java.util.Objects
;
@Component
public
class
WechatPhoneNoUpdateEventListener
implements
ApplicationListener
<
PhoneNoUpdateEvent
>
{
@Autowired
private
IWechatService
wechatService
;
@Override
public
void
onApplicationEvent
(
PhoneNoUpdateEvent
event
)
{
String
oldPhoneNo
=
event
.
getOldPhoneNo
();
User
user
=
event
.
getUser
();
WechatUserInfo
userInfo
=
wechatService
.
findWechatUserInfoByPhoneNo
(
oldPhoneNo
);
if
(
Objects
.
isNull
(
userInfo
))
{
return
;
}
if
(
Objects
.
isNull
(
userInfo
.
getPhoneNo
()))
{
return
;
}
userInfo
.
setPhoneNo
(
user
.
getPhoneNo
());
wechatService
.
saveWechatUserInfo
(
userInfo
);
}
}
src/main/java/cn/quantgroup/xyqb/service/session/ISessionService.java
View file @
21c69f37
...
...
@@ -6,6 +6,8 @@ import cn.quantgroup.xyqb.model.LoginProperties;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionValue
;
import
java.util.List
;
/**
* Created by 11 on 2016/12/28.
*/
...
...
@@ -29,4 +31,9 @@ public interface ISessionService {
void
deleteByUserId
(
long
userId
);
void
deleteUserCatch
(
User
user
);
List
<
SessionStruct
>
findByUserId
(
long
userId
);
void
persistSession
(
List
<
SessionStruct
>
sessionStructList
);
}
src/main/java/cn/quantgroup/xyqb/service/session/impl/SessionServiceImpl.java
View file @
21c69f37
...
...
@@ -9,14 +9,12 @@ import cn.quantgroup.xyqb.model.session.SessionStruct;
import
cn.quantgroup.xyqb.model.session.SessionValue
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.session.aspect.UserBtRegisterFill
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.util.MqUtils
;
import
com.alibaba.fastjson.JSON
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.Caching
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
...
...
@@ -35,10 +33,6 @@ public class SessionServiceImpl implements ISessionService {
@Resource
private
RedisTemplate
<
String
,
String
>
stringRedisTemplate
;
@Resource
private
IUserService
userService
;
@Resource
private
ApplicationEventPublisher
applicationEventPublisher
;
/**
* 更新session
...
...
@@ -101,7 +95,8 @@ public class SessionServiceImpl implements ISessionService {
/**
* 每个渠道都有不同的 session
* @param userId 用户 ID
*
* @param userId 用户 ID
* @param properties baitiao/xyqb/vcc ... + 用户注册来源
* @return redisKey. 用来标识这个渠道的用户 Session 是否存在
*/
...
...
@@ -227,6 +222,31 @@ public class SessionServiceImpl implements ISessionService {
}
@Override
public
List
<
SessionStruct
>
findByUserId
(
long
userId
)
{
List
<
SessionStruct
>
sessionStructList
=
new
ArrayList
<>();
String
setKey
=
getUserSessionSetKey
(
userId
);
Set
<
String
>
userIdKeys
=
stringRedisTemplate
.
opsForSet
().
members
(
setKey
);
if
(
CollectionUtils
.
isEmpty
(
userIdKeys
))
{
return
sessionStructList
;
}
for
(
String
userIdKey
:
userIdKeys
)
{
String
sessionId
=
stringRedisTemplate
.
opsForValue
().
get
(
userIdKey
);
SessionStruct
sessionStruct
=
findSessionBySessionId
(
sessionId
);
sessionStructList
.
add
(
sessionStruct
);
}
return
sessionStructList
;
}
@Override
public
void
persistSession
(
List
<
SessionStruct
>
sessionStructList
)
{
for
(
SessionStruct
sessionStruct
:
sessionStructList
)
{
String
sid
=
sessionStruct
.
getSid
();
SessionValue
values
=
sessionStruct
.
getValues
();
persistSession
(
sid
,
values
);
}
}
/**
* 获取用户的会话缓存Set的Redis-Key
*
...
...
src/main/java/cn/quantgroup/xyqb/service/user/IUserService.java
View file @
21c69f37
...
...
@@ -52,4 +52,19 @@ public interface IUserService {
List
<
UserInfo
>
findUserInfosByPhones
(
List
<
String
>
phones
);
User
findByMd5
(
Integer
type
,
String
md5Value
);
/**
* 修改手机号码.
* @param oldPhoneNo 旧手机号
* @param newPhoneNo 新手机号
* @return 返回用户信息
*/
User
modifyPhoneNo
(
String
oldPhoneNo
,
String
newPhoneNo
);
/**
* 删除这个用户相关缓存
* @param uuid 根据 uuid
* @param phoneNo 根据手机号
*/
void
userCacheEvict
(
String
uuid
,
String
phoneNo
);
}
src/main/java/cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
View file @
21c69f37
...
...
@@ -4,6 +4,7 @@ import cn.quantgroup.xyqb.Constants;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserDetail
;
import
cn.quantgroup.xyqb.entity.UserHashMapping
;
import
cn.quantgroup.xyqb.event.PhoneNoUpdateEvent
;
import
cn.quantgroup.xyqb.model.UserInfo
;
import
cn.quantgroup.xyqb.repository.IUserHashMappingRepository
;
import
cn.quantgroup.xyqb.repository.IUserRepository
;
...
...
@@ -19,14 +20,18 @@ import org.apache.commons.lang.StringUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.cache.annotation.Caching
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
java.sql.Timestamp
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.concurrent.TimeUnit
;
/**
...
...
@@ -47,6 +52,9 @@ public class UserServiceImpl implements IUserService {
@Autowired
private
IUserDetailService
userDetailService
;
@Autowired
private
ApplicationEventPublisher
applicationEventPublisher
;
@Override
@Cacheable
(
value
=
"usercache"
,
key
=
"'xyqbuser' + #phone"
,
unless
=
"#result == null"
,
cacheManager
=
"cacheManager"
)
...
...
@@ -139,7 +147,6 @@ public class UserServiceImpl implements IUserService {
user
=
userRepository
.
save
(
user
);
stringRedisTemplate
.
expire
(
"usercache:xyqbuser"
+
phoneNo
,
1L
,
TimeUnit
.
MILLISECONDS
);
return
PasswordUtil
.
validatePassword
(
password
,
user
.
getPassword
());
}
@Override
...
...
@@ -200,4 +207,43 @@ public class UserServiceImpl implements IUserService {
return
userRepository
.
findById
(
userId
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
User
modifyPhoneNo
(
String
oldPhoneNo
,
String
newPhoneNo
)
{
//1. 判断新手机号是否存在
User
newPhoneUser
=
userRepository
.
findByPhoneNo
(
newPhoneNo
);
if
(
Objects
.
nonNull
(
newPhoneUser
))
{
//新手机号已存在
return
null
;
}
User
oldPhoneUser
=
userRepository
.
findByPhoneNo
(
oldPhoneNo
);
if
(
Objects
.
isNull
(
oldPhoneUser
))
{
//这不是扯了.旧手机号不存在.
return
null
;
}
//2. 执行修改
//2.1 修改 user 表
oldPhoneUser
.
setPhoneNo
(
newPhoneNo
);
User
user
=
userRepository
.
saveAndFlush
(
oldPhoneUser
);
//2.2 修改 user_detail 表
UserDetail
oldPhoneUserDetail
=
userDetailService
.
findByPhoneNo
(
oldPhoneNo
);
oldPhoneUserDetail
.
setPhoneNo
(
newPhoneNo
);
userDetailService
.
saveUserDetail
(
oldPhoneUserDetail
);
//3. 发送事件
PhoneNoUpdateEvent
phoneNoUpdateEvent
=
new
PhoneNoUpdateEvent
(
this
,
user
,
oldPhoneNo
);
applicationEventPublisher
.
publishEvent
(
phoneNoUpdateEvent
);
return
oldPhoneUser
;
}
@Override
@Caching
(
evict
=
{
@CacheEvict
(
value
=
"usercache"
,
key
=
"'xyqbuser' + #phoneNo"
,
cacheManager
=
"cacheManager"
),
@CacheEvict
(
value
=
"usercache"
,
key
=
"'xyqbuser' + #uuid"
,
cacheManager
=
"cacheManager"
)
})
public
void
userCacheEvict
(
String
uuid
,
String
phoneNo
)
{
log
.
info
(
"清理用户缓存成功,uuid:{},phoneNo:{}"
,
uuid
,
phoneNo
);
}
}
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