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
f332a947
Commit
f332a947
authored
Dec 13, 2017
by
技术部-任文超
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://git.quantgroup.cn/head_group/xyqb-user2
parents
c3e6c119
cbc5d96a
Changes
27
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
1155 additions
and
591 deletions
+1155
-591
Constants.java
src/main/java/cn/quantgroup/xyqb/Constants.java
+5
-0
MotanUserServiceImpl.java
.../xyqb/controller/external/motan/MotanUserServiceImpl.java
+6
-64
AppController.java
...antgroup/xyqb/controller/external/user/AppController.java
+9
-90
InnerController.java
...tgroup/xyqb/controller/external/user/InnerController.java
+31
-8
UserController.java
...ntgroup/xyqb/controller/internal/user/UserController.java
+16
-97
PushUserToLkbException.java
.../cn/quantgroup/xyqb/exception/PushUserToLkbException.java
+26
-0
UserRegisterParam.java
...main/java/cn/quantgroup/xyqb/model/UserRegisterParam.java
+39
-0
AbstractUserRegisterService.java
...up/xyqb/service/register/AbstractUserRegisterService.java
+108
-0
IUserRegisterService.java
...uantgroup/xyqb/service/register/IUserRegisterService.java
+107
-0
AbstractUserRegisterHandler.java
...service/register/handler/AbstractUserRegisterHandler.java
+18
-0
AddressUserRegisterHandler.java
...ice/register/handler/impl/AddressUserRegisterHandler.java
+43
-0
BaseUserRegisterHandler.java
...ervice/register/handler/impl/BaseUserRegisterHandler.java
+99
-0
BtUserRegisterHandler.java
.../service/register/handler/impl/BtUserRegisterHandler.java
+54
-0
ContactUserRegisterHandler.java
...ice/register/handler/impl/ContactUserRegisterHandler.java
+74
-0
DetailUserRegisterHandler.java
...vice/register/handler/impl/DetailUserRegisterHandler.java
+78
-0
MqUserRegisterHandler.java
.../service/register/handler/impl/MqUserRegisterHandler.java
+54
-0
SmsUserRegisterHandler.java
...service/register/handler/impl/SmsUserRegisterHandler.java
+94
-0
UserRegisterServiceImpl.java
...p/xyqb/service/register/impl/UserRegisterServiceImpl.java
+112
-0
ILkbUserService.java
...java/cn/quantgroup/xyqb/service/user/ILkbUserService.java
+9
-0
IUserService.java
...in/java/cn/quantgroup/xyqb/service/user/IUserService.java
+0
-38
LkbUserviceImpl.java
...cn/quantgroup/xyqb/service/user/impl/LkbUserviceImpl.java
+78
-44
UserServiceImpl.java
...cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
+1
-227
JsonUtil.java
src/main/java/cn/quantgroup/xyqb/util/JsonUtil.java
+38
-0
PasswordUtil.java
src/main/java/cn/quantgroup/xyqb/util/PasswordUtil.java
+52
-22
xyqb.properties
src/main/resources/config/dev/xyqb.properties
+2
-1
xyqb.properties
src/main/resources/config/release01/xyqb.properties
+1
-0
xyqb.properties
src/main/resources/config/test/xyqb.properties
+1
-0
No files found.
src/main/java/cn/quantgroup/xyqb/Constants.java
View file @
f332a947
...
...
@@ -70,6 +70,11 @@ public interface Constants {
*/
String
SESSION_PREFIX
=
"spring:session:sessions:"
;
/**
* 默认随机密码长度
*/
int
RANDOM_PWD_LEN
=
15
;
interface
Channel
{
long
BAITIAO
=
222L
;
String
LKB_CODE
=
"0002"
;
// 量化派channnel_code
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/motan/MotanUserServiceImpl.java
View file @
f332a947
...
...
@@ -16,6 +16,7 @@ import cn.quantgroup.xyqb.service.api.IUserApiService;
import
cn.quantgroup.xyqb.service.auth.IIdCardService
;
import
cn.quantgroup.xyqb.service.http.IHttpService
;
import
cn.quantgroup.xyqb.service.merchant.IMerchantService
;
import
cn.quantgroup.xyqb.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.sms.ISmsService
;
import
cn.quantgroup.xyqb.service.user.*
;
...
...
@@ -98,6 +99,9 @@ public class MotanUserServiceImpl implements UserMotanService {
@Autowired
private
IUserApiService
userApiService
;
@Autowired
private
IUserRegisterService
userRegisterService
;
@Autowired
private
IUserBtRegisterService
userBtRegisterService
;
...
...
@@ -296,7 +300,7 @@ public class MotanUserServiceImpl implements UserMotanService {
log
.
info
(
"第三方用户登录, loginFrom:{}, requestIp:{}"
,
appLoginParam
.
getRegisterFrom
(),
requestIp
);
User
user
=
userService
.
findByPhoneInDb
(
appLoginParam
.
getPhoneNo
());
if
(
user
==
null
)
{
user
=
register
(
appLoginParam
.
getRegisterFrom
(),
appLoginParam
.
getPhoneNo
(),
appLoginParam
.
getIdNo
(),
appLoginParam
.
getName
(),
appLoginParam
.
getChannelId
());
user
=
userRegisterService
.
register
(
appLoginParam
.
getRegisterFrom
(),
appLoginParam
.
getPhoneNo
(),
appLoginParam
.
getIdNo
(),
appLoginParam
.
getName
(),
appLoginParam
.
getChannelId
());
}
if
(
user
==
null
)
{
return
returnErrorValue
(
"账户或者密码错误"
);
...
...
@@ -633,7 +637,7 @@ public class MotanUserServiceImpl implements UserMotanService {
log
.
info
(
"第三方用户登录, appLoginParam:{} "
,
appLoginParam
);
User
user
=
userService
.
findByPhoneInDb
(
appLoginParam
.
getPhoneNo
());
if
(
user
==
null
)
{
user
=
register
(
appLoginParam
.
getRegisterFrom
(),
appLoginParam
.
getPhoneNo
(),
appLoginParam
.
getIdNo
(),
appLoginParam
.
getName
(),
appLoginParam
.
getChannelId
());
user
=
userRegisterService
.
register
(
appLoginParam
.
getRegisterFrom
(),
appLoginParam
.
getPhoneNo
(),
appLoginParam
.
getIdNo
(),
appLoginParam
.
getName
(),
appLoginParam
.
getChannelId
());
}
if
(
user
==
null
)
{
throw
new
RuntimeException
(
USER_ERROR_OR_PASSWORD_ERROR
);
...
...
@@ -762,68 +766,6 @@ public class MotanUserServiceImpl implements UserMotanService {
return
returnValue
(
t
,
""
);
}
/**
* 注册新用户
*
* @return
*/
private
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
,
Long
channelId
)
{
String
randomCode
=
String
.
valueOf
(
random
.
nextInt
(
899999
)
+
100000
);
String
uuid
=
lkbUserService
.
registerApp
(
phoneNo
,
randomCode
);
Timestamp
currentTime
=
new
Timestamp
(
System
.
currentTimeMillis
());
log
.
info
(
"第三方登录用户,保存 User"
);
User
user
=
new
User
();
if
(
channelId
==
222L
)
{
user
.
setRegisteredFrom
(
channelId
);
}
else
{
user
.
setRegisteredFrom
(
registerFrom
);
}
user
.
setRegisteredFrom
(
registerFrom
);
user
.
setUuid
(
uuid
);
user
.
setEnable
(
true
);
user
.
setPhoneNo
(
phoneNo
);
user
.
setPassword
(
PasswordUtil
.
MD5
(
randomCode
+
Constants
.
PASSWORD_SALT
));
user
.
setUpdatedAt
(
currentTime
);
user
.
setCreatedAt
(
currentTime
);
userRepository
.
saveAndFlush
(
user
);
if
(
registerFrom
!=
645L
&&
registerFrom
!=
900L
)
{
smsService
.
sendAfterRegister
(
phoneNo
);
log
.
info
(
"第三方登录用户注册成功, registerFrom:{}, phoneNo:{},idNo:{},name:{} 并且已发送短信通知"
,
registerFrom
,
phoneNo
,
idNo
,
name
);
}
else
if
(
registerFrom
==
900L
){
smsService
.
sendAfterRegister
(
phoneNo
,
"123"
);
log
.
info
(
"第三方(聚美)登录用户注册成功, registerFrom:{}, phoneNo:{},idNo:{},name:{} 并且已发送短信通知"
,
registerFrom
,
phoneNo
,
idNo
,
name
);
}
if
(
StringUtils
.
isNotBlank
(
idNo
)
&&
StringUtils
.
isNotBlank
(
name
)
&&
ValidationUtil
.
validateChinese
(
name
))
{
IdCardInfo
cardInfo
;
try
{
cardInfo
=
idCardService
.
getIdCardInfoWithExceptions
(
idNo
);
UserDetail
userDetail
=
new
UserDetail
();
userDetail
.
setIdNo
(
cardInfo
.
getIdNo
());
userDetail
.
setPhoneNo
(
phoneNo
);
userDetail
.
setName
(
name
);
userDetail
.
setIdType
(
IdType
.
ID_CARD
);
userDetail
.
setCreatedAt
(
currentTime
);
userDetail
.
setUpdatedAt
(
currentTime
);
userDetail
.
setUserId
(
user
.
getId
());
userDetail
.
setGender
(
cardInfo
.
getGender
());
userDetailService
.
saveUserDetail
(
userDetail
);
lkbUserService
.
userUpdate
(
user
.
getUuid
(),
name
,
idNo
);
}
catch
(
Exception
e
)
{
log
.
error
(
"保存 UserDetail 出现异常"
,
e
);
}
}
return
user
;
}
@Override
public
UserSysResult
<
XUserDetail
>
modifyUserDetail
(
UserDetailUpdateBean
userDetailUpdateBean
)
{
return
returnErrorValue
(
"MotanUserServiceImpl modifyUserDetail(UserDetailUpdateBean userDetailUpdateBean) need to be finish."
);
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/user/AppController.java
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
controller
.
external
.
user
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.aspect.accessable.IpValidator
;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.entity.Merchant
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserBtRegister
;
import
cn.quantgroup.xyqb.entity.UserDetail
;
import
cn.quantgroup.xyqb.model.*
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.LoginProperties
;
import
cn.quantgroup.xyqb.model.UserRet
;
import
cn.quantgroup.xyqb.model.session.LoginInfo
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.repository.IUserRepository
;
import
cn.quantgroup.xyqb.service.auth.IIdCardService
;
import
cn.quantgroup.xyqb.service.merchant.IMerchantService
;
import
cn.quantgroup.xyqb.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.sms.ISmsService
;
import
cn.quantgroup.xyqb.service.user.ILkbUserService
;
...
...
@@ -20,10 +21,7 @@ import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import
cn.quantgroup.xyqb.service.user.IUserDetailService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.util.IPUtil
;
import
cn.quantgroup.xyqb.util.MqUtils
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
cn.quantgroup.xyqb.util.ValidationUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -32,7 +30,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
java.sql.Timestamp
;
import
java.util.Random
;
import
static
cn
.
quantgroup
.
xyqb
.
constant
.
UserConstant
.
USER_ERROR_OR_PASSWORD_ERROR
;
...
...
@@ -65,6 +62,8 @@ public class AppController implements IBaseController {
private
IMerchantService
merchantService
;
@Autowired
private
IUserBtRegisterService
userBtRegisterService
;
@Autowired
private
IUserRegisterService
userRegisterService
;
/**
* 第三方用户登录
*/
...
...
@@ -83,8 +82,7 @@ public class AppController implements IBaseController {
LOGGER
.
info
(
"第三方用户登录 login --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}"
,
registerFrom
,
channelId
,
btRegisterChannelId
,
IPUtil
.
getRemoteIP
(
request
),
idNo
,
name
);
User
user
=
userService
.
findByPhoneInDb
(
phoneNo
);
if
(
user
==
null
)
{
user
=
register
(
registerFrom
,
phoneNo
,
idNo
,
name
,
channelId
,
btRegisterChannelId
);
user
=
userRegisterService
.
register
(
registerFrom
,
phoneNo
,
idNo
,
name
,
channelId
,
btRegisterChannelId
);
}
if
(
user
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
USER_ERROR_OR_PASSWORD_ERROR
,
null
);
...
...
@@ -168,7 +166,7 @@ public class AppController implements IBaseController {
LOGGER
.
info
(
"第三方用户登录 loginSuper --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}"
,
registerFrom
,
channelId
,
btRegisterChannelId
,
IPUtil
.
getRemoteIP
(
request
),
idNo
,
name
);
User
user
=
userService
.
findByPhoneInDb
(
phoneNo
);
if
(
user
==
null
)
{
user
=
register
(
registerFrom
,
phoneNo
,
idNo
,
name
,
channelId
,
btRegisterChannelId
);
user
=
userRegisterService
.
register
(
registerFrom
,
phoneNo
,
idNo
,
name
,
channelId
,
btRegisterChannelId
);
}
if
(
user
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
USER_ERROR_OR_PASSWORD_ERROR
,
null
);
...
...
@@ -202,83 +200,4 @@ public class AppController implements IBaseController {
}
/**
* 注册新用户,带白条渠道号
* @param registerFrom
* @param phoneNo
* @param idNo
* @param name
* @param channelId
* @param btRegisterChannelId
* @return
*/
private
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
,
Long
channelId
,
Long
btRegisterChannelId
)
{
User
user
=
register
(
registerFrom
,
phoneNo
,
idNo
,
name
,
channelId
);
if
(
null
!=
user
&&
null
!=
btRegisterChannelId
&&
channelId
==
222L
)
{
UserBtRegister
userBtRegister
=
new
UserBtRegister
();
userBtRegister
.
setUserId
(
user
.
getId
());
userBtRegister
.
setRegisterBtMerchantId
(
btRegisterChannelId
);
userBtRegisterService
.
save
(
userBtRegister
);
}
return
user
;
}
/**
* 注册新用户
*
* @return
*/
private
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
,
Long
channelId
)
{
String
randomCode
=
String
.
valueOf
(
random
.
nextInt
(
899999
)
+
100000
);
String
uuid
=
lkbUserService
.
registerApp
(
phoneNo
,
randomCode
);
Timestamp
currentTime
=
new
Timestamp
(
System
.
currentTimeMillis
());
LOGGER
.
info
(
"第三方登录用户,保存 User"
);
User
user
=
new
User
();
if
(
channelId
==
222L
)
{
user
.
setRegisteredFrom
(
channelId
);
}
else
{
user
.
setRegisteredFrom
(
registerFrom
);
}
user
.
setUuid
(
uuid
);
user
.
setEnable
(
true
);
user
.
setPhoneNo
(
phoneNo
);
user
.
setPassword
(
PasswordUtil
.
MD5
(
randomCode
+
Constants
.
PASSWORD_SALT
));
user
.
setUpdatedAt
(
currentTime
);
user
.
setCreatedAt
(
currentTime
);
userRepository
.
saveAndFlush
(
user
);
if
(
registerFrom
==
900L
){
smsService
.
sendAfterRegister
(
phoneNo
,
"123"
);
LOGGER
.
info
(
"第三方(聚美)登录用户注册成功, registerFrom:{}, phoneNo:{},idNo:{},name:{} 并且已发送短信通知"
,
registerFrom
,
phoneNo
,
idNo
,
name
);
}
else
if
(
registerFrom
!=
645L
)
{
smsService
.
sendAfterRegister
(
phoneNo
);
LOGGER
.
info
(
"第三方登录用户注册成功, registerFrom:{}, phoneNo:{}, 并且已发送短信通知"
,
registerFrom
,
phoneNo
);
}
if
(
StringUtils
.
isNotBlank
(
idNo
)
&&
StringUtils
.
isNotBlank
(
name
)
&&
ValidationUtil
.
validateChinese
(
name
))
{
LOGGER
.
info
(
"第三方登录用户,保存 UserDetail"
);
IdCardInfo
cardInfo
;
try
{
cardInfo
=
idCardService
.
getIdCardInfoWithExceptions
(
idNo
);
UserDetail
userDetail
=
new
UserDetail
();
userDetail
.
setIdNo
(
cardInfo
.
getIdNo
());
userDetail
.
setPhoneNo
(
phoneNo
);
userDetail
.
setName
(
name
);
userDetail
.
setIdType
(
IdType
.
ID_CARD
);
userDetail
.
setCreatedAt
(
currentTime
);
userDetail
.
setUpdatedAt
(
currentTime
);
userDetail
.
setUserId
(
user
.
getId
());
userDetail
.
setGender
(
cardInfo
.
getGender
());
userDetailService
.
saveUserDetail
(
userDetail
);
lkbUserService
.
userUpdate
(
user
.
getUuid
(),
name
,
idNo
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"保存 UserDetail 出现异常"
,
e
);
}
}
MqUtils
.
sendRegisterMessage
(
channelId
,
null
,
user
);
return
user
;
}
}
src/main/java/cn/quantgroup/xyqb/controller/external/user/InnerController.java
View file @
f332a947
...
...
@@ -11,13 +11,11 @@ import cn.quantgroup.xyqb.model.*;
import
cn.quantgroup.xyqb.service.api.IUserApiService
;
import
cn.quantgroup.xyqb.service.auth.IIdCardService
;
import
cn.quantgroup.xyqb.service.http.IHttpService
;
import
cn.quantgroup.xyqb.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.user.*
;
import
cn.quantgroup.xyqb.service.wechat.IWechatService
;
import
cn.quantgroup.xyqb.util.AESUtil
;
import
cn.quantgroup.xyqb.util.IPUtil
;
import
cn.quantgroup.xyqb.util.MqUtils
;
import
cn.quantgroup.xyqb.util.ValidationUtil
;
import
cn.quantgroup.xyqb.util.*
;
import
cn.quantgroup.xyqb.util.encrypt.MD5Util
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
...
...
@@ -76,6 +74,8 @@ public class InnerController implements IBaseController {
@Autowired
private
IHttpService
httpService
;
@Autowired
private
IUserRegisterService
userRegisterService
;
@Value
(
"${xyqb.user.query.url}"
)
private
String
queryUrl
;
...
...
@@ -89,6 +89,11 @@ public class InnerController implements IBaseController {
MAPPER
.
configure
(
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
);
MAPPER
.
configure
(
SerializationFeature
.
WRITE_ENUMS_USING_INDEX
,
true
);
}
private
static
final
char
[]
PWD_BASE
=
{
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
,
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
};
@RequestMapping
(
"/user/search/phoneNo"
)
@LogHttpCaller
...
...
@@ -184,7 +189,8 @@ public class InnerController implements IBaseController {
registeredFrom
=
0L
;
}
if
(
StringUtils
.
isBlank
(
password
))
{
password
=
""
;
password
=
genRandomPwd
();
password
=
PasswordUtil
.
MD5
(
password
.
toLowerCase
()
+
Constants
.
PASSWORD_SALT
);
}
if
(
StringUtils
.
isBlank
(
uuid
))
{
return
JsonResult
.
buildErrorStateResult
(
"用户uuid为空."
,
null
);
...
...
@@ -916,7 +922,7 @@ public class InnerController implements IBaseController {
return
JsonResult
.
buildErrorStateResult
(
"用户已存在,手机号被占用"
,
null
);
}
user
=
user
Service
.
registerAndReturn
(
Long
.
valueOf
(
registeredFrom
),
Long
.
valueOf
(
channelId
),
phoneNo
,
name
,
idNo
,
provinceCode
,
province
,
cityCode
,
city
,
districtCode
,
district
,
address
,
contacts
);
user
=
user
RegisterService
.
register
(
Long
.
valueOf
(
registeredFrom
),
Long
.
valueOf
(
channelId
),
phoneNo
,
name
,
idNo
,
provinceCode
,
province
,
cityCode
,
city
,
districtCode
,
district
,
address
,
contacts
);
UserRet
userRet
=
new
UserRet
(
user
);
return
JsonResult
.
buildSuccessResult
(
null
,
userRet
);
...
...
@@ -930,7 +936,7 @@ public class InnerController implements IBaseController {
LOGGER
.
info
(
"[/innerapi/user/register]channelId={},ip={}"
,
channelId
,
getIp
());
User
user
=
userService
.
findByPhoneInDb
(
phoneNo
);
if
(
user
==
null
)
{
user
=
user
Service
.
registerAndReturn
(
phoneNo
,
StringUtils
.
defaultString
(
password
,
""
),
channelId
);
user
=
user
RegisterService
.
register
(
phoneNo
,
StringUtils
.
defaultString
(
password
,
""
),
channelId
);
}
if
(
user
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"注册失败"
,
null
);
...
...
@@ -1034,5 +1040,22 @@ public class InnerController implements IBaseController {
httpService
.
get
(
hanguguanUrl
.
concat
(
"/innerapi/forbiddenUserOrNot"
),
param
);
return
JsonResult
.
buildSuccessResult
(
"用户禁用或重启成功成功"
,
affectedRows
);
}
private
String
genRandomPwd
()
{
int
pwdMax
=
PWD_BASE
.
length
;
// 生成的随机数
int
i
;
// 生成的密码的长度
int
count
=
0
;
StringBuffer
pwd
=
new
StringBuffer
();
Random
r
=
new
Random
();
while
(
count
<
15
)
{
// 生成的数最大为36-1
i
=
Math
.
abs
(
r
.
nextInt
(
pwdMax
));
if
(
i
>=
0
&&
i
<
PWD_BASE
.
length
)
{
pwd
.
append
(
PWD_BASE
[
i
]);
count
++;
}
}
return
pwd
.
toString
();
}
}
\ No newline at end of file
src/main/java/cn/quantgroup/xyqb/controller/internal/user/UserController.java
View file @
f332a947
...
...
@@ -9,20 +9,23 @@ import cn.quantgroup.xyqb.entity.Merchant;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserDetail
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.exception.PasswordErrorLimitException
;
import
cn.quantgroup.xyqb.exception.UserNotExistException
;
import
cn.quantgroup.xyqb.exception.VerificationCodeErrorException
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.UserModel
;
import
cn.quantgroup.xyqb.model.UserStatistics
;
import
cn.quantgroup.xyqb.service.merchant.IMerchantService
;
import
cn.quantgroup.xyqb.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.sms.ISmsService
;
import
cn.quantgroup.xyqb.service.user.ILockIpv4Service
;
import
cn.quantgroup.xyqb.service.user.IUserDetailService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.service.wechat.IWechatService
;
import
cn.quantgroup.xyqb.util.*
;
import
cn.quantgroup.xyqb.util.IPUtil
;
import
cn.quantgroup.xyqb.util.MqUtils
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
cn.quantgroup.xyqb.util.ValidationUtil
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.lang.StringUtils
;
import
org.slf4j.Logger
;
...
...
@@ -37,8 +40,8 @@ import org.springframework.web.bind.annotation.RestController;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.UnsupportedEncodingException
;
import
java.nio.charset.Charset
;
import
java.util.
*
;
import
java.util.
concurrent.TimeUnit
;
import
java.util.
HashMap
;
import
java.util.
Map
;
/**
* Http服务接口:用户注册、登录、重置密码
...
...
@@ -74,12 +77,8 @@ public class UserController implements IBaseController {
private
IMerchantService
merchantService
;
@Autowired
private
IWechatService
wechatService
;
private
static
final
char
[]
PWD_BASE
=
{
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
,
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
};
@Autowired
private
IUserRegisterService
userRegisterService
;
@RequestMapping
(
"/test"
)
public
JsonResult
test
()
{
...
...
@@ -182,6 +181,10 @@ public class UserController implements IBaseController {
}
JsonResult
successResult
=
validMap
.
get
(
"success"
);
String
phoneNo
=
successResult
.
getData
().
toString
();
if
(!
ValidationUtil
.
validatePhoneNo
(
phoneNo
))
{
LOGGER
.
info
(
"用户快速注册失败,手机号错误, createdFrom:{},phoneNo:{}"
,
createdFrom
,
phoneNo
);
throw
new
UserNotExistException
(
"手机号错误"
);
}
String
verificationCode
=
successResult
.
getMsg
();
// 执行短信验证码检查
smsValidForFastLogin
(
phoneNo
,
verificationCode
);
...
...
@@ -191,7 +194,7 @@ public class UserController implements IBaseController {
return
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
);
}
if
(
user
==
null
)
{
user
=
registerFastWhenLogin
(
phoneNo
,
channelId
,
createdFrom
,
appChannel
,
btRegisterChannelId
,
dimension
);
user
=
userRegisterService
.
register
(
phoneNo
,
channelId
,
createdFrom
,
appChannel
,
btRegisterChannelId
,
dimension
);
if
(
user
==
null
)
{
throw
new
UserNotExistException
(
"用户未找到"
);
}
...
...
@@ -203,25 +206,6 @@ public class UserController implements IBaseController {
// return createSession(channelId, createdFrom, appChannel, user);
}
private
User
registerFastWhenLogin
(
String
phoneNo
,
Long
channelId
,
Long
registerFrom
,
String
appChannel
,
Long
btRegisterChannelId
,
String
dimension
)
{
String
password
=
genRandomPwd
();
LOGGER
.
info
(
"用户快速注册:login/fast -> phoneNo:{}, channelId:{}, registerFrom:{},appChannel:{},btRegisterChannelId:{}"
,
phoneNo
,
channelId
,
registerFrom
,
appChannel
,
btRegisterChannelId
);
if
(!
ValidationUtil
.
validatePhoneNo
(
phoneNo
))
{
LOGGER
.
info
(
"用户快速注册失败,手机号错误:login/fast -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
throw
new
UserNotExistException
(
"手机号错误"
);
}
if
(
null
==
registerFrom
)
{
registerFrom
=
1L
;
}
if
(
channelId
==
222L
)
{
registerFrom
=
222L
;
}
User
user
=
userService
.
registerAndReturn
(
phoneNo
,
password
,
registerFrom
,
btRegisterChannelId
);
LOGGER
.
info
(
"用户快速注册成功:login/fast -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
MqUtils
.
sendRegisterMessage
(
channelId
,
dimension
,
user
);
return
user
;
}
/**
* 快速登录验证
*
...
...
@@ -259,50 +243,6 @@ public class UserController implements IBaseController {
return
result
;
}
/**
* 用户快速注册
*
* @param phoneNo
* @param verificationCode
* @param channelId
* @return
*/
@LogHttpCaller
@RequestMapping
(
"/register/fast"
)
public
JsonResult
registerFast
(
@RequestParam
String
phoneNo
,
@RequestParam
String
verificationCode
,
@RequestParam
(
required
=
false
)
Long
channelId
,
@RequestParam
(
required
=
false
)
Long
registerFrom
,
@RequestParam
(
required
=
false
,
defaultValue
=
""
)
String
appChannel
,
@RequestParam
(
required
=
false
)
Long
btRegisterChannelId
,
@RequestParam
(
required
=
false
)
String
dimension
)
{
String
password
=
genRandomPwd
();
LOGGER
.
info
(
"用户快速注册:register/fast -> phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},appChannel:{},btRegisterChannelId:{},dimension:{}"
,
phoneNo
,
verificationCode
,
channelId
,
registerFrom
,
appChannel
,
btRegisterChannelId
,
dimension
);
if
(!
ValidationUtil
.
validatePhoneNo
(
phoneNo
))
{
LOGGER
.
info
(
"用户快速注册失败,手机号错误:register/fast -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
return
JsonResult
.
buildErrorStateResult
(
"手机号错误"
,
null
);
}
if
(
StringUtils
.
isEmpty
(
password
))
{
LOGGER
.
info
(
"用户快速注册失败,密码不能为空:register/fast -> registerFrom:{}, phoneNo:{}, password:{}"
,
registerFrom
,
phoneNo
,
password
);
return
JsonResult
.
buildErrorStateResult
(
"密码不能为空"
,
null
);
}
if
(
password
.
length
()
<
6
||
password
.
length
()
>
12
)
{
LOGGER
.
info
(
"用户快速注册失败,密码长度须在6位至12位之间:register/fast -> registerFrom:{}, phoneNo:{}, password:{}"
,
registerFrom
,
phoneNo
,
password
);
return
JsonResult
.
buildErrorStateResult
(
"密码应为6-12位"
,
null
);
}
if
(
null
==
registerFrom
)
{
registerFrom
=
1L
;
}
smsValidForFastLogin
(
phoneNo
,
verificationCode
);
if
(
userService
.
exist
(
phoneNo
))
{
LOGGER
.
info
(
"用户快速注册失败,该手机号已经被注册:register/fast -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
return
JsonResult
.
buildErrorStateResult
(
"该手机号已经被注册"
,
null
);
}
if
(!
userService
.
register
(
phoneNo
,
password
,
registerFrom
,
getIp
(),
channelId
,
btRegisterChannelId
,
dimension
))
{
LOGGER
.
info
(
"用户快速注册失败,请稍后重试:register/fast -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
return
JsonResult
.
buildErrorStateResult
(
"注册失败,请稍后重试"
,
null
);
}
LOGGER
.
info
(
"用户快速注册成功:register/fast -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
return
JsonResult
.
buildSuccessResult
(
null
,
null
);
}
/**
* 用户注册
*
...
...
@@ -338,8 +278,8 @@ public class UserController implements IBaseController {
LOGGER
.
info
(
"用户注册失败,该手机号已经被注册:register -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
return
JsonResult
.
buildErrorStateResult
(
"该手机号已经被注册"
,
null
);
}
if
(!
userService
.
register
(
phoneNo
,
password
,
registerFrom
,
getIp
(),
channelId
,
btRegisterChannelId
,
dimension
))
{
LOGGER
.
info
(
"用户快速注册失败,请稍后重试
:register ->
registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
if
(!
user
Register
Service
.
register
(
phoneNo
,
password
,
registerFrom
,
getIp
(),
channelId
,
btRegisterChannelId
,
dimension
))
{
LOGGER
.
info
(
"用户快速注册失败,请稍后重试
,
registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
return
JsonResult
.
buildErrorStateResult
(
"注册失败,请稍后重试"
,
null
);
}
LOGGER
.
info
(
"用户注册成功:register -> registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
...
...
@@ -431,27 +371,6 @@ public class UserController implements IBaseController {
return
JsonResult
.
buildSuccessResult
(
null
,
stringRedisTemplate
.
hasKey
(
tokenKey
)||
stringRedisTemplate
.
hasKey
(
tokenKey2
));
}
private
String
genRandomPwd
()
{
int
pwdMax
=
PWD_BASE
.
length
;
// 生成的随机数
int
i
;
// 生成的密码的长度
int
count
=
0
;
StringBuffer
pwd
=
new
StringBuffer
();
Random
r
=
new
Random
();
while
(
count
<
15
)
{
// 生成的数最大为36-1
i
=
Math
.
abs
(
r
.
nextInt
(
pwdMax
));
if
(
i
>=
0
&&
i
<
PWD_BASE
.
length
)
{
pwd
.
append
(
PWD_BASE
[
i
]);
count
++;
}
}
return
pwd
.
toString
();
}
@RequestMapping
(
"/syncUserInfo"
)
public
JsonResult
syncUserInfo
()
{
User
user
=
getCurrentUserFromRedis
();
...
...
src/main/java/cn/quantgroup/xyqb/exception/PushUserToLkbException.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
exception
;
/**
* Created by liqing on 2017/12/5 0005.
* 同步用户信息至Lkb异常
*/
public
class
PushUserToLkbException
extends
RuntimeException
{
public
PushUserToLkbException
()
{
}
public
PushUserToLkbException
(
String
message
)
{
super
(
message
);
}
public
PushUserToLkbException
(
String
message
,
Throwable
cause
)
{
super
(
message
,
cause
);
}
public
PushUserToLkbException
(
Throwable
cause
)
{
super
(
cause
);
}
public
PushUserToLkbException
(
String
message
,
Throwable
cause
,
boolean
enableSuppression
,
boolean
writableStackTrace
)
{
super
(
message
,
cause
,
enableSuppression
,
writableStackTrace
);
}
}
src/main/java/cn/quantgroup/xyqb/model/UserRegisterParam.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
model
;
import
cn.quantgroup.xyqb.entity.Address
;
import
cn.quantgroup.xyqb.entity.User
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* Created by liqing on 2017/12/4 0004.
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
UserRegisterParam
{
/** ======数据部分开始====== */
private
Long
registerFrom
;
// 注册渠道
private
String
phoneNo
;
// 手机号
private
String
password
;
// 密码
private
String
idNo
;
// 身份证号
private
String
name
;
// 姓名
private
Long
channelId
;
// 业务渠道
private
Long
btRegisterChannelId
;
// 白条渠道
private
String
dimension
;
private
Address
address
;
// 地址
private
String
contacts
;
// 联系人
private
User
user
;
// 注册生成的用户,也是返回结果
/** ======数据部分结束====== */
/** ======流程控制部分开始====== */
private
boolean
generateRandomPwd
=
false
;
// 是否生成随机密码
private
boolean
sendSuccessSms
=
true
;
// 是否发送注册成功短信
private
boolean
sendAppSms
=
true
;
// 是否发送推送App短信
private
boolean
sendSuccessMq
=
true
;
// 是否发送注册成功mq
/** ======流程控制部分开始====== */
}
src/main/java/cn/quantgroup/xyqb/service/register/AbstractUserRegisterService.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
cn.quantgroup.xyqb.util.ApplicationContextHolder
;
import
com.google.common.collect.Maps
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
java.util.Map
;
/**
* Created by liqing on 2017/12/5 0005.
*/
@Slf4j
public
abstract
class
AbstractUserRegisterService
implements
IUserRegisterService
,
ApplicationContextAware
{
private
static
Map
<
String
,
AbstractUserRegisterHandler
>
userRegisterHandlerMap
=
Maps
.
newConcurrentMap
();
private
static
final
String
USER_REGISTER_HANDLER_DEFAULT_KEY
=
"register_default"
;
private
static
final
String
USER_REGISTER_HANDLER_EXT_KEY
=
"register_ext"
;
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
// 创建默认注册流程
createDefaultUserRegisterHandler
(
applicationContext
);
// 创建扩展注册流程
createExtUserRegisterHandler
(
applicationContext
);
}
/**
* 创建默认注册流程
* 1、保存基本信息 - 2、保存用户详情 - 3、保存白条信息 - 4、发送短信 - 5、发送mq
* @param applicationContext
*/
protected
AbstractUserRegisterHandler
createDefaultUserRegisterHandler
(
ApplicationContext
applicationContext
){
AbstractUserRegisterHandler
baseUserRegisterHandler
=
applicationContext
.
getBean
(
"baseUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
detailUserRegisterHandler
=
applicationContext
.
getBean
(
"detailUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
btUserRegisterHandler
=
applicationContext
.
getBean
(
"btUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
smsUserRegisterHandler
=
applicationContext
.
getBean
(
"smsUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
mqUserRegisterHandler
=
applicationContext
.
getBean
(
"mqUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
baseUserRegisterHandler
.
setSuccessor
(
detailUserRegisterHandler
);
detailUserRegisterHandler
.
setSuccessor
(
btUserRegisterHandler
);
btUserRegisterHandler
.
setSuccessor
(
smsUserRegisterHandler
);
smsUserRegisterHandler
.
setSuccessor
(
mqUserRegisterHandler
);
userRegisterHandlerMap
.
put
(
USER_REGISTER_HANDLER_DEFAULT_KEY
,
baseUserRegisterHandler
);
return
baseUserRegisterHandler
;
}
/**
* 创建扩展注册流程
* 1、保存基本信息 - 2、保存用户详情 - 3、保存白条信息 - 4、保存用户地址 - 5、保存联系人
* 5、发送短信 - 6、发送mq
* @param applicationContext
*/
protected
AbstractUserRegisterHandler
createExtUserRegisterHandler
(
ApplicationContext
applicationContext
){
AbstractUserRegisterHandler
baseUserRegisterHandler
=
applicationContext
.
getBean
(
"baseUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
detailUserRegisterHandler
=
applicationContext
.
getBean
(
"detailUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
btUserRegisterHandler
=
applicationContext
.
getBean
(
"btUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
smsUserRegisterHandler
=
applicationContext
.
getBean
(
"smsUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
mqUserRegisterHandler
=
applicationContext
.
getBean
(
"mqUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
addressUserRegisterHandler
=
applicationContext
.
getBean
(
"addressUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
AbstractUserRegisterHandler
contactUserRegisterHandler
=
applicationContext
.
getBean
(
"contactUserRegisterHandler"
,
AbstractUserRegisterHandler
.
class
);
baseUserRegisterHandler
.
setSuccessor
(
detailUserRegisterHandler
);
detailUserRegisterHandler
.
setSuccessor
(
btUserRegisterHandler
);
btUserRegisterHandler
.
setSuccessor
(
addressUserRegisterHandler
);
addressUserRegisterHandler
.
setSuccessor
(
contactUserRegisterHandler
);
contactUserRegisterHandler
.
setSuccessor
(
smsUserRegisterHandler
);
smsUserRegisterHandler
.
setSuccessor
(
mqUserRegisterHandler
);
userRegisterHandlerMap
.
put
(
USER_REGISTER_HANDLER_EXT_KEY
,
baseUserRegisterHandler
);
return
baseUserRegisterHandler
;
}
/**
* 获取默认注册流程
* @return
*/
protected
AbstractUserRegisterHandler
getDefaultUserRegisterHandler
(){
AbstractUserRegisterHandler
curUserRegisterHandler
=
userRegisterHandlerMap
.
get
(
USER_REGISTER_HANDLER_DEFAULT_KEY
);
if
(
curUserRegisterHandler
==
null
){
synchronized
(
USER_REGISTER_HANDLER_DEFAULT_KEY
){
curUserRegisterHandler
=
userRegisterHandlerMap
.
get
(
USER_REGISTER_HANDLER_DEFAULT_KEY
);
if
(
curUserRegisterHandler
==
null
){
curUserRegisterHandler
=
createDefaultUserRegisterHandler
(
ApplicationContextHolder
.
getApplicationContext
());
}
}
}
return
curUserRegisterHandler
;
}
/**
* 获取扩展注册流程
* @return
*/
protected
AbstractUserRegisterHandler
getExtUserRegisterHandler
(){
AbstractUserRegisterHandler
curUserRegisterHandler
=
userRegisterHandlerMap
.
get
(
USER_REGISTER_HANDLER_EXT_KEY
);
if
(
curUserRegisterHandler
==
null
){
synchronized
(
USER_REGISTER_HANDLER_EXT_KEY
){
curUserRegisterHandler
=
userRegisterHandlerMap
.
get
(
USER_REGISTER_HANDLER_EXT_KEY
);
if
(
curUserRegisterHandler
==
null
){
curUserRegisterHandler
=
createExtUserRegisterHandler
(
ApplicationContextHolder
.
getApplicationContext
());
}
}
}
return
curUserRegisterHandler
;
}
}
src/main/java/cn/quantgroup/xyqb/service/register/IUserRegisterService.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
/**
* Created by liqing on 2017/12/4 0004.
*/
public
interface
IUserRegisterService
{
/**
* 以默认流程注册
* @param userRegisterParam
* @return
* @throws Exception
*/
User
registerDefault
(
UserRegisterParam
userRegisterParam
);
/**
* 以扩展流程注册
* @param userRegisterParam
* @return
* @throws Exception
*/
User
registerExt
(
UserRegisterParam
userRegisterParam
);
/**
* 替换AppController.register
* /app/login,/app/login_super
* @param registerFrom
* @param phoneNo
* @param idNo
* @param name
* @param channelId
* @param btRegisterChannelId
* @return
*/
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
,
Long
channelId
,
Long
btRegisterChannelId
);
/**
* 替换InnerController里的userService.registerAndReturn
* /innerapi/user/register
* @param phoneNo
* @param password
* @param registerFrom
* @return
*/
User
register
(
String
phoneNo
,
String
password
,
Long
registerFrom
);
/**
* 替换UserController.register里的userService.register
* /user/register
* @param phoneNo
* @param password
* @param registerFrom
* @param ip
* @param channelId
* @param btRegisterChannelId
* @param dimension
* @return
*/
boolean
register
(
String
phoneNo
,
String
password
,
Long
registerFrom
,
String
ip
,
Long
channelId
,
Long
btRegisterChannelId
,
String
dimension
);
/**
* 替换UserController.loginFast里的registerFastWhenLogin
* /user/login/fast
* @param phoneNo
* @param channelId
* @param registerFrom
* @param appChannel
* @param btRegisterChannelId
* @param dimension
* @return
*/
User
register
(
String
phoneNo
,
Long
channelId
,
Long
registerFrom
,
String
appChannel
,
Long
btRegisterChannelId
,
String
dimension
);
/**
* 替换InnerController.saveMulti里的userService.registerAndReturn
* /innserapi/user/save_multi
* @param registeredFrom
* @param channelId
* @param phoneNo
* @param name
* @param idNo
* @param provinceCode
* @param province
* @param cityCode
* @param city
* @param districtCode
* @param district
* @param address
* @param contacts
* @return
*/
User
register
(
Long
registeredFrom
,
Long
channelId
,
String
phoneNo
,
String
name
,
String
idNo
,
String
provinceCode
,
String
province
,
String
cityCode
,
String
city
,
String
districtCode
,
String
district
,
String
address
,
String
contacts
);
/**
* 替换MotanUserServiceImpl.appLoginAndFetchLoginInfo和MotanUserServiceImpl.appLogin里的register
* @param registerFrom
* @param phoneNo
* @param idNo
* @param name
* @param channelId
* @return
*/
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
,
Long
channelId
);
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/AbstractUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
/**
* Created by liqing on 2017/12/4 0004.
*/
public
abstract
class
AbstractUserRegisterHandler
{
protected
AbstractUserRegisterHandler
successor
;
public
void
setSuccessor
(
AbstractUserRegisterHandler
successor
)
{
this
.
successor
=
successor
;
}
public
abstract
User
handleRegister
(
UserRegisterParam
userRegisterParam
);
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/impl/AddressUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
.
impl
;
import
cn.quantgroup.xyqb.entity.Address
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.repository.IAddressRepository
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.config.ConfigurableBeanFactory
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.stereotype.Component
;
import
java.sql.Timestamp
;
/**
* Created by liqing on 2017/12/5 0005.
* 注册 - 地址信息
* 失败影响注册流程
*/
@Component
(
"addressUserRegisterHandler"
)
@Scope
(
ConfigurableBeanFactory
.
SCOPE_PROTOTYPE
)
@Slf4j
public
class
AddressUserRegisterHandler
extends
AbstractUserRegisterHandler
{
@Autowired
private
IAddressRepository
addressRepository
;
@Override
public
User
handleRegister
(
UserRegisterParam
userRegisterParam
)
{
Address
address
=
userRegisterParam
.
getAddress
();
User
user
=
userRegisterParam
.
getUser
();
address
.
setUserId
(
user
.
getId
());
Timestamp
currentTime
=
new
Timestamp
(
System
.
currentTimeMillis
());
address
.
setCreatedAt
(
currentTime
);
address
.
setUpdateAt
(
currentTime
);
addressRepository
.
save
(
address
);
if
(
successor
!=
null
){
return
successor
.
handleRegister
(
userRegisterParam
);
}
return
userRegisterParam
.
getUser
();
}
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/impl/BaseUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
.
impl
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.exception.PushUserToLkbException
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
cn.quantgroup.xyqb.service.user.ILkbUserService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.util.JsonUtil
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.config.ConfigurableBeanFactory
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.stereotype.Component
;
import
java.sql.Timestamp
;
import
java.util.UUID
;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 基本信息
* 失败影响注册流程
*/
@Component
(
"baseUserRegisterHandler"
)
@Scope
(
ConfigurableBeanFactory
.
SCOPE_PROTOTYPE
)
@Slf4j
public
class
BaseUserRegisterHandler
extends
AbstractUserRegisterHandler
{
@Autowired
private
ILkbUserService
lkbUserService
;
@Autowired
private
IUserService
userService
;
@Override
public
User
handleRegister
(
UserRegisterParam
userRegisterParam
)
{
String
uuid
=
UUID
.
randomUUID
().
toString
();
// 保存user信息
User
user
=
saveUser
(
uuid
,
userRegisterParam
);
// user保存成功后同步用户信息到Lkb
pushUserToLkb
(
uuid
,
userRegisterParam
);
userRegisterParam
.
setUser
(
user
);
if
(
successor
!=
null
){
return
successor
.
handleRegister
(
userRegisterParam
);
}
return
userRegisterParam
.
getUser
();
}
/**
* 保存用户user信息
* @param uuid
* @param userRegisterParam
* @return
*/
private
User
saveUser
(
String
uuid
,
UserRegisterParam
userRegisterParam
)
{
User
user
=
new
User
();
user
.
setUuid
(
uuid
);
user
.
setEnable
(
true
);
user
.
setPhoneNo
(
userRegisterParam
.
getPhoneNo
());
Long
registerFrom
=
userRegisterParam
.
getRegisterFrom
();
if
(
null
==
registerFrom
)
{
registerFrom
=
1L
;
}
Long
channelId
=
userRegisterParam
.
getChannelId
();
if
(
channelId
==
222L
)
{
user
.
setRegisteredFrom
(
channelId
);
}
else
{
user
.
setRegisteredFrom
(
registerFrom
);
}
String
password
=
StringUtils
.
defaultString
(
userRegisterParam
.
getPassword
(),
""
);
if
(
userRegisterParam
.
isGenerateRandomPwd
()){
// 如果需要生成随机密码
password
=
PasswordUtil
.
generateRandomPwd
(
Constants
.
RANDOM_PWD_LEN
);
}
user
.
setPassword
(
PasswordUtil
.
MD5
(
password
.
toLowerCase
()
+
Constants
.
PASSWORD_SALT
));
Timestamp
currentTime
=
new
Timestamp
(
System
.
currentTimeMillis
());
user
.
setUpdatedAt
(
currentTime
);
user
.
setCreatedAt
(
currentTime
);
userService
.
saveUser
(
user
);
return
user
;
}
/**
* 同步用户信息到Lkb,失败影响注册流程
* @param uuid
* @param userRegisterParam
*/
private
void
pushUserToLkb
(
String
uuid
,
UserRegisterParam
userRegisterParam
)
{
log
.
info
(
"[pushUserToLkb]同步用户信息到Lkb,phoneNo : {}"
,
userRegisterParam
.
getPhoneNo
());
boolean
pushResult
=
lkbUserService
.
pushUser
(
uuid
,
userRegisterParam
.
getPhoneNo
(),
userRegisterParam
.
getName
(),
userRegisterParam
.
getIdNo
());
if
(!
pushResult
){
log
.
error
(
"[userRegisterHandler][baseUserRegisterHandler]同步用户至Lkb出错,userRegisterParam:{}"
,
JsonUtil
.
toJson
(
userRegisterParam
));
throw
new
PushUserToLkbException
(
"同步用户至Lkb出错"
);
}
}
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/impl/BtUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
.
impl
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserBtRegister
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
cn.quantgroup.xyqb.service.user.IUserBtRegisterService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.config.ConfigurableBeanFactory
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.stereotype.Component
;
import
java.sql.Timestamp
;
/**
* Created by liqing on 2017/12/4 0004.
* 用户注册 - 白条
* 失败影响注册流程
*/
@Component
(
"btUserRegisterHandler"
)
@Scope
(
ConfigurableBeanFactory
.
SCOPE_PROTOTYPE
)
@Slf4j
public
class
BtUserRegisterHandler
extends
AbstractUserRegisterHandler
{
@Autowired
private
IUserBtRegisterService
userBtRegisterService
;
@Override
public
User
handleRegister
(
UserRegisterParam
userRegisterParam
)
{
Long
channelId
=
userRegisterParam
.
getChannelId
();
User
user
=
userRegisterParam
.
getUser
();
Long
btRegisterChannelId
=
userRegisterParam
.
getBtRegisterChannelId
();
if
(
null
!=
user
&&
channelId
==
222L
){
UserBtRegister
userBtRegister
=
new
UserBtRegister
();
userBtRegister
.
setUserId
(
user
.
getId
());
if
(
null
==
btRegisterChannelId
){
userBtRegister
.
setRegisterBtMerchantId
(
0L
);
}
else
{
userBtRegister
.
setRegisterBtMerchantId
(
btRegisterChannelId
);
}
userBtRegister
.
setIsActive
(
true
);
Timestamp
currentTime
=
new
Timestamp
(
System
.
currentTimeMillis
());
userBtRegister
.
setCreatedAt
(
currentTime
);
userBtRegister
.
setUpdatedAt
(
currentTime
);
userBtRegisterService
.
save
(
userBtRegister
);
}
if
(
successor
!=
null
){
return
successor
.
handleRegister
(
userRegisterParam
);
}
return
userRegisterParam
.
getUser
();
}
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/impl/ContactUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
.
impl
;
import
cn.quantgroup.user.enums.Relation
;
import
cn.quantgroup.xyqb.entity.Contact
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.repository.IContactRepository
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.TypeReference
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.config.ConfigurableBeanFactory
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.stereotype.Component
;
import
java.sql.Timestamp
;
import
java.util.List
;
/**
* Created by liqing on 2017/12/5 0005.
* 注册 - 联系人信息
* 失败影响注册流程
*/
@Component
(
"contactUserRegisterHandler"
)
@Scope
(
ConfigurableBeanFactory
.
SCOPE_PROTOTYPE
)
@Slf4j
public
class
ContactUserRegisterHandler
extends
AbstractUserRegisterHandler
{
@Autowired
private
IContactRepository
contactRepository
;
@Override
public
User
handleRegister
(
UserRegisterParam
userRegisterParam
)
{
String
contact_str
=
userRegisterParam
.
getContacts
();
User
user
=
userRegisterParam
.
getUser
();
if
(
StringUtils
.
isNotBlank
(
contact_str
))
{
List
<
Contact
>
contactList
=
JSONObject
.
parseObject
(
contact_str
,
new
TypeReference
<
List
<
Contact
>>()
{});
if
(
CollectionUtils
.
isNotEmpty
(
contactList
))
{
convertContactList
(
user
.
getId
(),
contactList
,
2
);
contactRepository
.
save
(
contactList
);
}
}
if
(
successor
!=
null
){
return
successor
.
handleRegister
(
userRegisterParam
);
}
return
userRegisterParam
.
getUser
();
}
/**
* 转换联系人信息
* @param userId 用户id
* @param contacts 联系人列表
* @param number 允许的联系人数量
*/
private
void
convertContactList
(
Long
userId
,
List
<
Contact
>
contacts
,
int
number
)
{
Timestamp
now
=
new
Timestamp
(
System
.
currentTimeMillis
());
int
count
=
1
;
for
(
Contact
c
:
contacts
)
{
if
(
count
>
number
)
{
break
;
}
c
.
setId
(
null
);
c
.
setUserId
(
userId
);
c
.
setRelation
(
c
.
getRelation
()
==
null
?
Relation
.
OTHER
:
c
.
getRelation
());
c
.
setCreatedAt
(
now
);
c
.
setUpdateAt
(
now
);
count
++;
}
}
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/impl/DetailUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
.
impl
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserDetail
;
import
cn.quantgroup.xyqb.model.IdCardInfo
;
import
cn.quantgroup.xyqb.model.IdType
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.service.auth.IIdCardService
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
cn.quantgroup.xyqb.service.user.IUserDetailService
;
import
cn.quantgroup.xyqb.util.JsonUtil
;
import
cn.quantgroup.xyqb.util.ValidationUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.config.ConfigurableBeanFactory
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.stereotype.Component
;
import
java.sql.Timestamp
;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 用户详情
* 失败不影响注册流程
*/
@Component
(
"detailUserRegisterHandler"
)
@Scope
(
ConfigurableBeanFactory
.
SCOPE_PROTOTYPE
)
@Slf4j
public
class
DetailUserRegisterHandler
extends
AbstractUserRegisterHandler
{
@Autowired
private
IIdCardService
idCardService
;
@Autowired
private
IUserDetailService
userDetailService
;
@Override
public
User
handleRegister
(
UserRegisterParam
userRegisterParam
)
{
try
{
doHandleUserDetailRegister
(
userRegisterParam
);
}
catch
(
Exception
e
)
{
// 用户详情注册失败不影响注册流程
log
.
error
(
"[exception][detailUserRegisterHandler_exception]userRegisterParam={},error={}"
,
JsonUtil
.
toJson
(
userRegisterParam
),
e
);
}
if
(
successor
!=
null
){
return
successor
.
handleRegister
(
userRegisterParam
);
}
return
userRegisterParam
.
getUser
();
}
/**
* 执行用户详情注册
* @param userRegisterParam
*/
private
void
doHandleUserDetailRegister
(
UserRegisterParam
userRegisterParam
)
throws
Exception
{
if
(
StringUtils
.
isAnyBlank
(
userRegisterParam
.
getIdNo
(),
userRegisterParam
.
getName
())
||
!
ValidationUtil
.
validateChinese
(
userRegisterParam
.
getName
()))
{
return
;
}
String
phoneNo
=
userRegisterParam
.
getPhoneNo
();
String
name
=
userRegisterParam
.
getName
();
String
idNo
=
userRegisterParam
.
getIdNo
();
IdCardInfo
cardInfo
=
idCardService
.
getIdCardInfoWithExceptions
(
idNo
);
UserDetail
userDetail
=
new
UserDetail
();
userDetail
.
setIdNo
(
cardInfo
.
getIdNo
());
userDetail
.
setPhoneNo
(
phoneNo
);
userDetail
.
setName
(
name
);
userDetail
.
setIdType
(
IdType
.
ID_CARD
);
Timestamp
currentTime
=
new
Timestamp
(
System
.
currentTimeMillis
());
userDetail
.
setCreatedAt
(
currentTime
);
userDetail
.
setUpdatedAt
(
currentTime
);
User
user
=
userRegisterParam
.
getUser
();
userDetail
.
setUserId
(
user
.
getId
());
userDetail
.
setGender
(
cardInfo
.
getGender
());
userDetailService
.
saveUserDetail
(
userDetail
);
}
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/impl/MqUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
.
impl
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
cn.quantgroup.xyqb.util.JsonUtil
;
import
cn.quantgroup.xyqb.util.MqUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.config.ConfigurableBeanFactory
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.stereotype.Component
;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 发送mq
* 失败不影响注册流程
*/
@Component
(
"mqUserRegisterHandler"
)
@Scope
(
ConfigurableBeanFactory
.
SCOPE_PROTOTYPE
)
@Slf4j
public
class
MqUserRegisterHandler
extends
AbstractUserRegisterHandler
{
@Override
public
User
handleRegister
(
UserRegisterParam
userRegisterParam
)
{
try
{
doHandleMqUserRegister
(
userRegisterParam
);
}
catch
(
Exception
e
)
{
// 发送Mq失败不影响注册流程
log
.
error
(
"[exception][mqUserRegisterHandler_exception]userRegisterParam={},error={}"
,
JsonUtil
.
toJson
(
userRegisterParam
),
e
);
}
if
(
successor
!=
null
){
return
successor
.
handleRegister
(
userRegisterParam
);
}
return
userRegisterParam
.
getUser
();
}
/**
* 执行注册发送mq
* @param userRegisterParam
*/
private
void
doHandleMqUserRegister
(
UserRegisterParam
userRegisterParam
)
{
if
(!
userRegisterParam
.
isSendSuccessMq
()){
return
;
}
Long
channelId
=
userRegisterParam
.
getChannelId
();
String
dimension
=
userRegisterParam
.
getDimension
();
User
user
=
userRegisterParam
.
getUser
();
if
(
user
!=
null
){
MqUtils
.
sendRegisterMessage
(
channelId
,
dimension
,
user
);
}
}
}
src/main/java/cn/quantgroup/xyqb/service/register/handler/impl/SmsUserRegisterHandler.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
handler
.
impl
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler
;
import
cn.quantgroup.xyqb.service.sms.ISmsService
;
import
cn.quantgroup.xyqb.util.JsonUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.config.ConfigurableBeanFactory
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.stereotype.Component
;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 发送短信
* 失败不影响注册流程
*/
@Component
(
"smsUserRegisterHandler"
)
@Scope
(
ConfigurableBeanFactory
.
SCOPE_PROTOTYPE
)
@Slf4j
public
class
SmsUserRegisterHandler
extends
AbstractUserRegisterHandler
{
@Autowired
private
ISmsService
smsService
;
@Override
public
User
handleRegister
(
UserRegisterParam
userRegisterParam
)
{
try
{
doHandleSmsUserRegister
(
userRegisterParam
);
}
catch
(
Exception
e
)
{
// 发送短信失败不影响注册流程
log
.
error
(
"[exception][smsUserRegisterHandler_exception]userRegisterParam={},error={}"
,
JsonUtil
.
toJson
(
userRegisterParam
),
e
);
}
if
(
successor
!=
null
){
return
successor
.
handleRegister
(
userRegisterParam
);
}
return
userRegisterParam
.
getUser
();
}
/**
* 执行发送短信
* @param userRegisterParam
*/
private
void
doHandleSmsUserRegister
(
UserRegisterParam
userRegisterParam
)
{
// 发送注册成功短信
try
{
doHandleSendSuccessSms
(
userRegisterParam
);
}
catch
(
Exception
e
)
{
// 发送短信失败不影响注册流程
log
.
error
(
"[exception][smsUserRegisterHandler_doHandleSendSuccessSms_exception]userRegisterParam={},error={}"
,
JsonUtil
.
toJson
(
userRegisterParam
),
e
);
}
// 发送推送app短信
try
{
doHandleSendAppSms
(
userRegisterParam
);
}
catch
(
Exception
e
)
{
// 发送短信失败不影响注册流程
log
.
error
(
"[exception][smsUserRegisterHandler_doHandleSendAppSms_exception]userRegisterParam={},error={}"
,
JsonUtil
.
toJson
(
userRegisterParam
),
e
);
}
}
/**
* 执行发送推送app短信 TODO
* @param userRegisterParam
*/
private
void
doHandleSendAppSms
(
UserRegisterParam
userRegisterParam
)
{
if
(!
userRegisterParam
.
isSendAppSms
()){
return
;
}
}
/**
* 执行发送注册成功短信
* @param userRegisterParam
*/
private
void
doHandleSendSuccessSms
(
UserRegisterParam
userRegisterParam
)
{
if
(!
userRegisterParam
.
isSendSuccessSms
()){
return
;
}
Long
registerFrom
=
userRegisterParam
.
getRegisterFrom
();
String
phoneNo
=
userRegisterParam
.
getPhoneNo
();
if
(
registerFrom
!=
645L
&&
registerFrom
!=
900L
&&
registerFrom
!=
158412L
)
{
smsService
.
sendAfterRegister
(
phoneNo
);
log
.
info
(
"第三方登录用户注册成功,registerFrom:{}, phoneNo:{},并且已发送短信通知"
,
registerFrom
,
phoneNo
);
}
else
if
(
registerFrom
==
900L
){
smsService
.
sendAfterRegister
(
phoneNo
,
"123"
);
log
.
info
(
"第三方(聚美)登录用户注册成功,registerFrom:{},phoneNo:{},并且已发送短信通知"
,
registerFrom
,
phoneNo
);
}
}
}
src/main/java/cn/quantgroup/xyqb/service/register/impl/UserRegisterServiceImpl.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
service
.
register
.
impl
;
import
cn.quantgroup.xyqb.entity.Address
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.UserRegisterParam
;
import
cn.quantgroup.xyqb.service.register.AbstractUserRegisterService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* Created by liqing on 2017/12/4 0004.
*/
@Service
(
"userRegisterService"
)
@Slf4j
public
class
UserRegisterServiceImpl
extends
AbstractUserRegisterService
{
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
User
registerDefault
(
UserRegisterParam
userRegisterParam
)
{
return
getDefaultUserRegisterHandler
().
handleRegister
(
userRegisterParam
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
User
registerExt
(
UserRegisterParam
userRegisterParam
)
{
return
getExtUserRegisterHandler
().
handleRegister
(
userRegisterParam
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
,
Long
channelId
,
Long
btRegisterChannelId
)
{
UserRegisterParam
userRegisterParam
=
UserRegisterParam
.
builder
()
.
registerFrom
(
registerFrom
).
phoneNo
(
phoneNo
).
idNo
(
idNo
).
name
(
name
)
.
channelId
(
channelId
).
btRegisterChannelId
(
btRegisterChannelId
)
.
generateRandomPwd
(
true
).
sendSuccessSms
(
true
).
sendAppSms
(
true
)
.
sendSuccessMq
(
true
)
.
build
();
return
registerDefault
(
userRegisterParam
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
User
register
(
String
phoneNo
,
String
password
,
Long
registerFrom
)
{
UserRegisterParam
userRegisterParam
=
UserRegisterParam
.
builder
()
.
registerFrom
(
registerFrom
).
phoneNo
(
phoneNo
).
password
(
password
)
.
generateRandomPwd
(
false
).
sendSuccessSms
(
true
).
sendAppSms
(
true
)
.
sendSuccessMq
(
true
)
.
build
();
return
registerDefault
(
userRegisterParam
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
register
(
String
phoneNo
,
String
password
,
Long
registerFrom
,
String
ip
,
Long
channelId
,
Long
btRegisterChannelId
,
String
dimension
)
{
UserRegisterParam
userRegisterParam
=
UserRegisterParam
.
builder
()
.
registerFrom
(
registerFrom
).
phoneNo
(
phoneNo
).
password
(
password
)
.
channelId
(
channelId
).
btRegisterChannelId
(
btRegisterChannelId
)
.
dimension
(
dimension
)
.
generateRandomPwd
(
false
).
sendSuccessSms
(
true
).
sendAppSms
(
true
)
.
sendSuccessMq
(
true
)
.
build
();
User
user
=
registerDefault
(
userRegisterParam
);
return
user
!=
null
;
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
User
register
(
String
phoneNo
,
Long
channelId
,
Long
registerFrom
,
String
appChannel
,
Long
btRegisterChannelId
,
String
dimension
)
{
UserRegisterParam
userRegisterParam
=
UserRegisterParam
.
builder
()
.
registerFrom
(
registerFrom
).
phoneNo
(
phoneNo
)
.
channelId
(
channelId
).
btRegisterChannelId
(
btRegisterChannelId
)
.
dimension
(
dimension
)
.
generateRandomPwd
(
true
).
sendSuccessSms
(
true
).
sendAppSms
(
true
)
.
sendSuccessMq
(
true
)
.
build
();
return
registerDefault
(
userRegisterParam
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
User
register
(
Long
registeredFrom
,
Long
channelId
,
String
phoneNo
,
String
name
,
String
idNo
,
String
provinceCode
,
String
province
,
String
cityCode
,
String
city
,
String
districtCode
,
String
district
,
String
address
,
String
contacts
)
{
Address
addressObj
=
new
Address
();
addressObj
.
setProvinceCode
(
Long
.
valueOf
(
provinceCode
));
addressObj
.
setProvince
(
province
);
addressObj
.
setCityCode
(
Long
.
valueOf
(
cityCode
));
addressObj
.
setCity
(
city
);
addressObj
.
setDistrictCode
(
Long
.
valueOf
(
districtCode
));
addressObj
.
setDistrict
(
district
);
addressObj
.
setAddress
(
address
);
UserRegisterParam
userRegisterParam
=
UserRegisterParam
.
builder
()
.
registerFrom
(
registeredFrom
).
phoneNo
(
phoneNo
).
idNo
(
idNo
).
name
(
name
)
.
channelId
(
channelId
)
.
address
(
addressObj
).
contacts
(
contacts
)
.
generateRandomPwd
(
true
).
sendSuccessSms
(
true
).
sendAppSms
(
true
)
.
sendSuccessMq
(
true
)
.
build
();
return
registerExt
(
userRegisterParam
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
,
Long
channelId
)
{
UserRegisterParam
userRegisterParam
=
UserRegisterParam
.
builder
()
.
registerFrom
(
registerFrom
).
phoneNo
(
phoneNo
).
idNo
(
idNo
).
name
(
name
)
.
channelId
(
channelId
)
.
generateRandomPwd
(
true
).
sendSuccessSms
(
true
).
sendAppSms
(
true
)
.
sendSuccessMq
(
true
)
.
build
();
return
registerDefault
(
userRegisterParam
);
}
}
src/main/java/cn/quantgroup/xyqb/service/user/ILkbUserService.java
View file @
f332a947
...
...
@@ -23,4 +23,13 @@ public interface ILkbUserService {
* @param idNo
*/
void
userUpdate
(
String
uuid
,
String
name
,
String
idNo
);
/**
* 同步用戶信息
* @param uuid
* @param phoneNo
* @param name
* @param idNo
*/
boolean
pushUser
(
String
uuid
,
String
phoneNo
,
String
name
,
String
idNo
);
}
src/main/java/cn/quantgroup/xyqb/service/user/IUserService.java
View file @
f332a947
...
...
@@ -14,10 +14,6 @@ public interface IUserService {
User
findByUuidWithCache
(
String
uuid
);
boolean
register
(
String
phoneNo
,
String
password
,
Long
registerFrom
,
String
userIp
,
Long
channelId
);
User
registerAndReturn
(
String
phoneNo
,
String
password
,
Long
registerFrom
);
boolean
exist
(
String
phoneNo
);
boolean
resetPassword
(
String
phoneNo
,
String
password
);
...
...
@@ -32,42 +28,8 @@ public interface IUserService {
User
findById
(
Long
userId
);
boolean
register
(
String
phoneNo
,
String
password
,
Long
registerFrom
,
String
ip
,
Long
channelId
,
Long
btRegisterChannelId
,
String
dimension
);
List
<
User
>
findByPhones
(
List
<
String
>
phones
);
User
registerAndReturn
(
String
phoneNo
,
String
password
,
Long
registerFrom
,
Long
btRegisterChannelId
);
/**
* 用户、联系人、地址信息注册
* @param registeredFrom
* @param channelId
* @param phoneNo
* @param name
* @param idNo
* @param provinceCode
* @param province
* @param cityCode
* @param city
* @param districtCode
* @param district
* @param address
* @param contacts
* @return
*/
User
registerAndReturn
(
Long
registeredFrom
,
Long
channelId
,
String
phoneNo
,
String
name
,
String
idNo
,
String
provinceCode
,
String
province
,
String
cityCode
,
String
city
,
String
districtCode
,
String
district
,
String
address
,
String
contacts
);
List
<
User
>
findRegisterUserByTime
(
String
beginTime
,
String
endTime
);
/**
...
...
src/main/java/cn/quantgroup/xyqb/service/user/impl/LkbUserviceImpl.java
View file @
f332a947
...
...
@@ -3,9 +3,13 @@ package cn.quantgroup.xyqb.service.user.impl;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.service.http.IHttpService
;
import
cn.quantgroup.xyqb.service.user.ILkbUserService
;
import
cn.quantgroup.xyqb.util.JsonUtil
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.common.collect.ImmutableMap
;
import
com.google.common.collect.Maps
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -14,6 +18,7 @@ import org.springframework.scheduling.annotation.Async;
import
org.springframework.stereotype.Service
;
import
java.util.Map
;
import
java.util.Optional
;
/**
...
...
@@ -21,60 +26,89 @@ import java.util.Map;
* @time 2015-08-19 18:20
*/
@Service
@Slf4j
public
class
LkbUserviceImpl
implements
ILkbUserService
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
LkbUserviceImpl
.
class
);
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
LkbUserviceImpl
.
class
);
private
static
final
String
TOKEN_PATTERN
=
"timeunit=%sappkey=lkb010203#$%%"
;
private
static
final
String
TOKEN_PATTERN
=
"timeunit=%sappkey=lkb010203#$%%"
;
@Autowired
private
IHttpService
httpService
;
@Autowired
private
IHttpService
httpService
;
@Value
(
"${lkb.client.url}"
)
private
String
clientUrl
;
@Value
(
"${lkb.client.url}"
)
private
String
clientUrl
;
@Value
(
"${lkb.client.user.register.app}"
)
private
String
registerApp
;
@Value
(
"${lkb.client.user.register.app}"
)
private
String
registerApp
;
@Value
(
"${lkb.client.user.update}"
)
private
String
userUpdate
;
@Value
(
"${lkb.client.user.update}"
)
private
String
userUpdate
;
@Override
public
String
registerApp
(
String
phoneNo
,
String
password
)
{
String
timeunit
=
System
.
currentTimeMillis
()
+
""
;
String
token
=
PasswordUtil
.
MD5
(
String
.
format
(
TOKEN_PATTERN
,
timeunit
));
@Value
(
"${lkb.client.user.push}"
)
private
String
userPushPath
;
Map
<
String
,
String
>
parameters
=
ImmutableMap
.<
String
,
String
>
builder
()
.
put
(
"appId"
,
Constants
.
Channel
.
LKB_CODE
)
.
put
(
"timeunit"
,
timeunit
)
.
put
(
"token"
,
token
)
.
put
(
"userName"
,
phoneNo
)
.
put
(
"password"
,
password
)
.
build
();
@Override
public
String
registerApp
(
String
phoneNo
,
String
password
)
{
String
timeunit
=
System
.
currentTimeMillis
()
+
""
;
String
token
=
PasswordUtil
.
MD5
(
String
.
format
(
TOKEN_PATTERN
,
timeunit
));
String
response
=
httpService
.
get
(
clientUrl
+
registerApp
,
parameters
);
Map
<
String
,
String
>
result
=
JSONObject
.
parseObject
(
response
,
Map
.
class
);
if
(
result
==
null
||
"0"
.
equals
(
result
.
get
(
"flag"
)))
{
LOGGER
.
warn
(
"向LKB注册用户失败, phoneNo:{}, password:{}"
,
phoneNo
,
password
);
return
""
;
Map
<
String
,
String
>
parameters
=
ImmutableMap
.<
String
,
String
>
builder
()
.
put
(
"appId"
,
Constants
.
Channel
.
LKB_CODE
)
.
put
(
"timeunit"
,
timeunit
)
.
put
(
"token"
,
token
)
.
put
(
"userName"
,
phoneNo
)
.
put
(
"password"
,
password
)
.
build
();
String
response
=
httpService
.
get
(
clientUrl
+
registerApp
,
parameters
);
Map
<
String
,
String
>
result
=
JSONObject
.
parseObject
(
response
,
Map
.
class
);
if
(
result
==
null
||
"0"
.
equals
(
result
.
get
(
"flag"
)))
{
LOGGER
.
warn
(
"向LKB注册用户失败, phoneNo:{}, password:{}"
,
phoneNo
,
password
);
return
""
;
}
return
result
.
get
(
"uid"
);
}
return
result
.
get
(
"uid"
);
}
@Override
@Async
public
void
userUpdate
(
String
uuid
,
String
name
,
String
idNo
)
{
Map
<
String
,
String
>
parameters
=
ImmutableMap
.<
String
,
String
>
builder
()
.
put
(
"userId"
,
uuid
)
.
put
(
"realName"
,
name
)
.
put
(
"idcard"
,
idNo
)
.
build
();
String
response
=
httpService
.
get
(
clientUrl
+
userUpdate
,
parameters
);
//Map<String, String> result = GSON.fromJson(response, Map.class);
Map
<
String
,
String
>
result
=
JSONObject
.
parseObject
(
response
,
Map
.
class
);
if
(
result
==
null
||
"false"
.
equals
(
result
.
get
(
"flag"
)))
{
LOGGER
.
warn
(
"向LKB-Client同步用户信息失败, result: {}"
,
result
);
@Override
@Async
public
void
userUpdate
(
String
uuid
,
String
name
,
String
idNo
)
{
Map
<
String
,
String
>
parameters
=
ImmutableMap
.<
String
,
String
>
builder
()
.
put
(
"userId"
,
uuid
)
.
put
(
"realName"
,
name
)
.
put
(
"idcard"
,
idNo
)
.
build
();
String
response
=
httpService
.
get
(
clientUrl
+
userUpdate
,
parameters
);
//Map<String, String> result = GSON.fromJson(response, Map.class);
Map
<
String
,
String
>
result
=
JSONObject
.
parseObject
(
response
,
Map
.
class
);
if
(
result
==
null
||
"false"
.
equals
(
result
.
get
(
"flag"
)))
{
LOGGER
.
warn
(
"向LKB-Client同步用户信息失败, result: {}"
,
result
);
}
}
@Override
public
boolean
pushUser
(
String
uuid
,
String
phoneNo
,
String
name
,
String
idNo
)
{
String
timeunit
=
System
.
currentTimeMillis
()
+
""
;
String
token
=
PasswordUtil
.
MD5
(
String
.
format
(
TOKEN_PATTERN
,
timeunit
));
Map
<
String
,
String
>
parameters
=
Maps
.
newHashMap
();
parameters
.
put
(
"appId"
,
Constants
.
Channel
.
LKB_CODE
);
parameters
.
put
(
"timeunit"
,
timeunit
);
parameters
.
put
(
"token"
,
token
);
parameters
.
put
(
"userId"
,
uuid
);
parameters
.
put
(
"loginName"
,
phoneNo
);
if
(
StringUtils
.
isNotBlank
(
name
)){
parameters
.
put
(
"realName"
,
name
);
}
if
(
StringUtils
.
isNotBlank
(
idNo
)){
parameters
.
put
(
"idCardNo"
,
idNo
);
}
String
response
=
httpService
.
post
(
clientUrl
+
userPushPath
,
parameters
);
Optional
<
Map
>
resultOptional
=
JsonUtil
.
fromJson
(
response
,
Map
.
class
);
if
(!
resultOptional
.
isPresent
()
||
!
"0000"
.
equals
(
resultOptional
.
get
().
get
(
"code"
)))
{
LOGGER
.
error
(
"[lkb_user_push]向LKB同步用户失败,phoneNo:{},response={}"
,
phoneNo
,
response
);
return
false
;
}
return
true
;
}
}
}
src/main/java/cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
View file @
f332a947
This diff is collapsed.
Click to expand it.
src/main/java/cn/quantgroup/xyqb/util/JsonUtil.java
0 → 100644
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
util
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Optional
;
/**
* Created by liqing on 2017/12/4 0004.
*/
@Slf4j
public
class
JsonUtil
{
/**
* 转换json为对象
* @param jsonStr
* @param clazz
* @param <T>
* @return
*/
public
static
<
T
>
Optional
<
T
>
fromJson
(
String
jsonStr
,
Class
<
T
>
clazz
)
{
try
{
return
Optional
.
ofNullable
(
JSONObject
.
parseObject
(
jsonStr
,
clazz
));
}
catch
(
Exception
e
)
{
log
.
error
(
"[exception][fromJson_exception]error={}"
,
e
);
}
return
Optional
.
empty
();
}
/**
* 将对象转成json字符串
* @param object
* @return
*/
public
static
String
toJson
(
Object
object
)
{
return
JSONObject
.
toJSONString
(
object
);
}
}
src/main/java/cn/quantgroup/xyqb/util/PasswordUtil.java
View file @
f332a947
package
cn
.
quantgroup
.
xyqb
.
util
;
import
com.google.common.base.Preconditions
;
import
java.security.MessageDigest
;
import
java.util.concurrent.ThreadLocalRandom
;
/**
* Created by Miraculous on 15/7/5.
*/
public
class
PasswordUtil
{
private
static
final
char
[]
HEX_DIGITS
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
};
public
final
static
String
MD5
(
String
s
)
{
try
{
byte
[]
strTemp
=
s
.
getBytes
(
"utf-8"
);
MessageDigest
mdTemp
=
MessageDigest
.
getInstance
(
"MD5"
);
mdTemp
.
update
(
strTemp
);
byte
[]
md
=
mdTemp
.
digest
();
int
j
=
md
.
length
;
char
[]
str
=
new
char
[
j
<<
1
];
int
k
=
0
;
for
(
int
i
=
0
;
i
<
j
;
i
++)
{
byte
byte0
=
md
[
i
];
str
[
k
++]
=
HEX_DIGITS
[
byte0
>>>
4
&
0xf
];
str
[
k
++]
=
HEX_DIGITS
[
byte0
&
0xf
];
}
return
new
String
(
str
);
}
catch
(
Exception
e
)
{
return
null
;
private
static
final
char
[]
HEX_DIGITS
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
};
private
static
final
char
[]
PWD_BASE
=
{
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
,
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
};
public
final
static
String
MD5
(
String
s
)
{
try
{
byte
[]
strTemp
=
s
.
getBytes
(
"utf-8"
);
MessageDigest
mdTemp
=
MessageDigest
.
getInstance
(
"MD5"
);
mdTemp
.
update
(
strTemp
);
byte
[]
md
=
mdTemp
.
digest
();
int
j
=
md
.
length
;
char
[]
str
=
new
char
[
j
<<
1
];
int
k
=
0
;
for
(
int
i
=
0
;
i
<
j
;
i
++)
{
byte
byte0
=
md
[
i
];
str
[
k
++]
=
HEX_DIGITS
[
byte0
>>>
4
&
0xf
];
str
[
k
++]
=
HEX_DIGITS
[
byte0
&
0xf
];
}
return
new
String
(
str
);
}
catch
(
Exception
e
)
{
return
null
;
}
}
/**
* 生成随机密码
* @param pwdLen 密码长度,必须大于0
* @return
*/
public
static
String
generateRandomPwd
(
int
pwdLen
)
{
Preconditions
.
checkArgument
(
pwdLen
>
0
);
int
pwdMax
=
PWD_BASE
.
length
;
int
i
;
// 生成的随机数
int
count
=
0
;
// 生成的密码的长度
StringBuffer
pwd
=
new
StringBuffer
();
while
(
count
<
pwdLen
)
{
i
=
ThreadLocalRandom
.
current
().
nextInt
(
pwdMax
);
// 生成的数最大为36-1
if
(
i
>=
0
&&
i
<
PWD_BASE
.
length
)
{
pwd
.
append
(
PWD_BASE
[
i
]);
count
++;
}
}
return
pwd
.
toString
();
}
}
}
src/main/resources/config/dev/xyqb.properties
View file @
f332a947
...
...
@@ -31,9 +31,10 @@ xyqb.redis.sentinel3.port=0
sms.is.debug
=
1
# LKB client
lkb.client.url
=
http://192.168.4.193:808
3
/LKBClient/openapi
lkb.client.url
=
http://192.168.4.193:808
2
/LKBClient/openapi
lkb.client.user.register.app
=
/new/register/registerApp.json
lkb.client.user.update
=
/new/register/updateUser.json
lkb.client.user.push
=
/user/push.json
# LKB import
...
...
src/main/resources/config/release01/xyqb.properties
View file @
f332a947
...
...
@@ -21,6 +21,7 @@ sms.is.debug=0
lkb.client.url
=
http://openapi.quantgroup.cn/LKBClient/openapi
lkb.client.user.register.app
=
/new/register/registerApp.json
lkb.client.user.update
=
/new/register/updateUser.json
lkb.client.user.push
=
/user/push.json
# LKB import
lkb.import.url
=
http://spider.quantgroup.cn
# LKB
...
...
src/main/resources/config/test/xyqb.properties
View file @
f332a947
...
...
@@ -24,6 +24,7 @@ sms.is.debug=1
lkb.client.url
=
http://192.168.192.251:8082/LKBClient/openapi
lkb.client.user.register.app
=
/new/register/registerApp.json
lkb.client.user.update
=
/new/register/updateUser.json
lkb.client.user.push
=
/user/push.json
# LKB import
lkb.import.url
=
http://spider.quantgroup.cn
# LKB
...
...
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