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
097be491
Commit
097be491
authored
Nov 05, 2019
by
杨锐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
app - 申请修改手机号Step_1,Step_2 DONE
parent
bd86a057
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
271 additions
and
5 deletions
+271
-5
ModifyPhoneNoApplyStatusEnum.java
...n/quantgroup/user/enums/ModifyPhoneNoApplyStatusEnum.java
+51
-0
ModifyPhoneNoProcessingStatusEnum.java
...ntgroup/user/enums/ModifyPhoneNoProcessingStatusEnum.java
+51
-0
RestTemplateConfig.java
...va/cn/quantgroup/xyqb/config/http/RestTemplateConfig.java
+28
-0
ExceptionHandlingController.java
...antgroup/xyqb/controller/ExceptionHandlingController.java
+7
-0
ModifyPhoneNoController.java
...yqb/controller/modifyphoneno/ModifyPhoneNoController.java
+3
-0
ModifyPhoneNoResp.java
...xyqb/controller/modifyphoneno/resp/ModifyPhoneNoResp.java
+8
-2
UserLoanStatusResp.java
...yqb/controller/modifyphoneno/resp/UserLoanStatusResp.java
+28
-0
DataException.java
...main/java/cn/quantgroup/xyqb/exception/DataException.java
+16
-0
IModifyPhoneNoRepository.java
.../quantgroup/xyqb/repository/IModifyPhoneNoRepository.java
+7
-0
IUserDetailRepository.java
.../cn/quantgroup/xyqb/repository/IUserDetailRepository.java
+9
-1
ModifyPhoneNoServiceImpl.java
...roup/xyqb/service/user/impl/ModifyPhoneNoServiceImpl.java
+63
-2
No files found.
src/main/java/cn/quantgroup/user/enums/ModifyPhoneNoApplyStatusEnum.java
0 → 100644
View file @
097be491
package
cn
.
quantgroup
.
user
.
enums
;
import
lombok.Getter
;
/**
* 用户手机号修改申请状态
* <p>
* Date: 2019/11/5
* Time: 下午2:11
*
* @author: yangrui
*/
@Getter
public
enum
ModifyPhoneNoApplyStatusEnum
{
/**
* 处理中
*/
INIT
(
0
,
"处理中"
),
/**
* 修改完成
*/
DONE
(
1
,
"修改完成"
),
/**
* 不允许修改
*/
NO_ALLOW
(
2
,
"不允许修改"
);
/**
* 类型
*/
private
int
type
;
/**
* 描述
*/
private
String
desc
;
ModifyPhoneNoApplyStatusEnum
(
int
type
,
String
desc
)
{
this
.
type
=
type
;
this
.
desc
=
desc
;
}
public
static
String
getDesc
(
int
type
)
{
for
(
ModifyPhoneNoApplyStatusEnum
modifyPhoneNoApplyStatusEnum
:
ModifyPhoneNoApplyStatusEnum
.
values
())
{
if
(
modifyPhoneNoApplyStatusEnum
.
type
==
type
)
{
return
modifyPhoneNoApplyStatusEnum
.
desc
;
}
}
return
null
;
}
}
src/main/java/cn/quantgroup/user/enums/ModifyPhoneNoProcessingStatusEnum.java
0 → 100644
View file @
097be491
package
cn
.
quantgroup
.
user
.
enums
;
import
lombok.Getter
;
/**
* 用户手机号修改处理状态
* <p>
* Date: 2019/11/5
* Time: 下午2:11
*
* @author: yangrui
*/
@Getter
public
enum
ModifyPhoneNoProcessingStatusEnum
{
/**
* 待人工处理
*/
INIT
(
0
,
"待人工处理"
),
/**
* 待用户反馈
*/
WAIT_4_USER_FEEDBACK
(
1
,
"待用户反馈"
),
/**
* 已反馈
*/
DONE
(
2
,
"已反馈"
);
/**
* 类型
*/
private
int
type
;
/**
* 描述
*/
private
String
desc
;
ModifyPhoneNoProcessingStatusEnum
(
int
type
,
String
desc
)
{
this
.
type
=
type
;
this
.
desc
=
desc
;
}
public
static
String
getDesc
(
int
type
)
{
for
(
ModifyPhoneNoProcessingStatusEnum
modifyPhoneNoProcessingStatusEnum
:
ModifyPhoneNoProcessingStatusEnum
.
values
())
{
if
(
modifyPhoneNoProcessingStatusEnum
.
type
==
type
)
{
return
modifyPhoneNoProcessingStatusEnum
.
desc
;
}
}
return
null
;
}
}
src/main/java/cn/quantgroup/xyqb/config/http/RestTemplateConfig.java
0 → 100644
View file @
097be491
package
cn
.
quantgroup
.
xyqb
.
config
.
http
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.client.SimpleClientHttpRequestFactory
;
import
org.springframework.web.client.RestTemplate
;
/**
* rest
* <p>
* Date: 2019/11/5
* Time: 上午11:37
*
* @author: yangrui
*/
@Configuration
public
class
RestTemplateConfig
{
@Bean
public
RestTemplate
restTemplate
()
{
SimpleClientHttpRequestFactory
requestFactory
=
new
SimpleClientHttpRequestFactory
();
requestFactory
.
setConnectTimeout
(
60
*
1000
);
requestFactory
.
setReadTimeout
(
60
*
1000
);
RestTemplate
restTemplate
=
new
RestTemplate
(
requestFactory
);
return
restTemplate
;
}
}
src/main/java/cn/quantgroup/xyqb/controller/ExceptionHandlingController.java
View file @
097be491
...
...
@@ -151,4 +151,11 @@ public class ExceptionHandlingController implements IBaseController {
}
return
null
;
}
@ExceptionHandler
(
DataException
.
class
)
@ResponseBody
@ResponseStatus
(
HttpStatus
.
OK
)
public
JsonResult
handleDataException
(
DataException
e
)
{
return
JsonResult
.
buildErrorStateResult
(
e
.
getMessage
(),
null
);
}
}
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/ModifyPhoneNoController.java
View file @
097be491
...
...
@@ -50,6 +50,9 @@ public class ModifyPhoneNoController implements IBaseController {
/**
* step_2
*
* @param step2Req
* @return
*/
@ApiOperation
(
"step_2"
)
@PostMapping
(
"/step_2"
)
...
...
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/resp/ModifyPhoneNoResp.java
View file @
097be491
...
...
@@ -25,7 +25,7 @@ public class ModifyPhoneNoResp {
@ApiModelProperty
(
"申请人现手机号"
)
private
String
curPhoneNo
;
@ApiModelProperty
(
"申请时间"
)
private
Date
createAt
;
private
Date
create
d
At
;
@ApiModelProperty
(
"申请结果"
)
private
Integer
applyStatus
;
@ApiModelProperty
(
"拒绝原因"
)
...
...
@@ -33,5 +33,11 @@ public class ModifyPhoneNoResp {
@ApiModelProperty
(
"处理状态"
)
private
Integer
processStatus
;
@ApiModelProperty
(
"最近更新时间"
)
private
Date
updateAt
;
private
Date
updatedAt
;
@ApiModelProperty
(
"身份证正面"
)
private
String
idCardFaceUrl
;
@ApiModelProperty
(
"身份证背面"
)
private
String
idCardRearUrl
;
@ApiModelProperty
(
"本人手持身份证照片"
)
private
String
idCardHoldUrl
;
}
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/resp/UserLoanStatusResp.java
0 → 100644
View file @
097be491
package
cn
.
quantgroup
.
xyqb
.
controller
.
modifyphoneno
.
resp
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* Date: 2019/11/5
* Time: 上午11:49
*
* @author: yangrui
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
UserLoanStatusResp
{
private
boolean
bizSuc
;
private
String
businessCode
;
private
String
code
;
/**
* true:没有订单; false: 存在订单
*/
private
boolean
data
;
private
String
msg
;
private
boolean
success
;
}
src/main/java/cn/quantgroup/xyqb/exception/DataException.java
0 → 100644
View file @
097be491
package
cn
.
quantgroup
.
xyqb
.
exception
;
/**
* 数据异常
* <p>
* Date: 2019/11/5
* Time: 上午11:01
*
* @author: yangrui
*/
public
class
DataException
extends
RuntimeException
{
public
DataException
(
String
message
)
{
super
(
message
);
}
}
src/main/java/cn/quantgroup/xyqb/repository/IModifyPhoneNoRepository.java
View file @
097be491
...
...
@@ -2,7 +2,14 @@ package cn.quantgroup.xyqb.repository;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.query.Param
;
public
interface
IModifyPhoneNoRepository
extends
JpaRepository
<
ModifyPhoneNo
,
Long
>
{
@Query
(
nativeQuery
=
true
,
value
=
"select * from user_modify_phone_no "
+
"where user_id = :userId and (processing_status is null or processing_status <> :processingStatus)"
+
"limit 1"
)
ModifyPhoneNo
findFirstByUserIdAndProcessingStatusNot
(
@Param
(
"userId"
)
Long
userId
,
@Param
(
"processingStatus"
)
Integer
processingStatus
);
}
src/main/java/cn/quantgroup/xyqb/repository/IUserDetailRepository.java
View file @
097be491
...
...
@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.data.jpa.repository.Modifying
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.query.Param
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
...
...
@@ -52,8 +53,9 @@ public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>,
/**
* 按照身份证号和手机号 - 模糊查询
*
* @param phoneNo - 手机号
* @param idNo - 身份证号
* @param idNo
- 身份证号
* @return List<UserDetail>
*/
@Query
(
value
=
"select * from user_detail where phone_no like ?1 and id_no like ?2"
,
nativeQuery
=
true
)
...
...
@@ -65,4 +67,10 @@ public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>,
List
<
UserDetail
>
findByIdBetween
(
Long
id
,
Long
endId
);
@Query
(
nativeQuery
=
true
,
value
=
"select * from user_detail where user_id = ?1 and phone_no = ?2 "
+
"and name = ?3 and id_no = ?4 limit 1"
)
UserDetail
findByUserIdAndPhoneNoAndNameAndIdNo
(
Long
userId
,
String
phoneNo
,
String
name
,
String
idNo
);
@Query
(
nativeQuery
=
true
,
value
=
"select * from user_detail where phone_no =:phoneNo limit 1"
)
UserDetail
findOneByPhoneNo
(
@Param
(
"phoneNo"
)
String
phoneNo
);
}
src/main/java/cn/quantgroup/xyqb/service/user/impl/ModifyPhoneNoServiceImpl.java
View file @
097be491
package
cn
.
quantgroup
.
xyqb
.
service
.
user
.
impl
;
import
cn.quantgroup.user.enums.ModifyPhoneNoApplyStatusEnum
;
import
cn.quantgroup.user.enums.ModifyPhoneNoProcessingStatusEnum
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step1Req
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step2Req
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.UserLoanStatusResp
;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
import
cn.quantgroup.xyqb.exception.DataException
;
import
cn.quantgroup.xyqb.repository.IModifyPhoneNoRepository
;
import
cn.quantgroup.xyqb.repository.IUserDetailRepository
;
import
cn.quantgroup.xyqb.service.sms.ISmsService
;
import
cn.quantgroup.xyqb.service.user.IModifyPhoneNoService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.client.RestTemplate
;
import
javax.annotation.Resource
;
...
...
@@ -23,14 +31,28 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Resource
private
IModifyPhoneNoRepository
modifyPhoneNoRepository
;
@Resource
private
IUserDetailRepository
userDetailRepository
;
@Resource
private
ISmsService
smsService
;
@Resource
private
RestTemplate
restTemplate
;
@Value
(
"${api.https}"
)
public
String
apiHttps
;
/**
* @param id user.id
* @param step1Req
* @return
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Long
saveStep1
(
Long
id
,
Step1Req
step1Req
)
{
// TODO: 2019/11/4 并发访问 && 校验规则
// TODO: 2019/11/4 并发访问
allowModify
(
id
,
step1Req
.
getName
(),
step1Req
.
getIdCard
(),
step1Req
.
getPrevPhoneNo
(),
step1Req
.
getCurPhoneNo
(),
step1Req
.
getSmsCode
());
ModifyPhoneNo
modifyPhoneNo
=
Step1Req
.
adapt
(
step1Req
);
modifyPhoneNo
.
setUserId
(
id
);
modifyPhoneNoRepository
.
saveAndFlush
(
modifyPhoneNo
);
...
...
@@ -43,10 +65,49 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
saveStep2
(
Step2Req
step2Req
)
{
// TODO: 2019/11/4 申请状态、处理状态修改
ModifyPhoneNo
modifyPhoneNo
=
modifyPhoneNoRepository
.
findOne
(
step2Req
.
getId
());
modifyPhoneNo
.
setIdCardFaceUrl
(
step2Req
.
getIdCardFaceUrl
());
modifyPhoneNo
.
setIdCardRearUrl
(
step2Req
.
getIdCardRearUrl
());
modifyPhoneNo
.
setIdCardHoldUrl
(
step2Req
.
getIdCardHoldUrl
());
modifyPhoneNo
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
INIT
.
getType
());
modifyPhoneNo
.
setProcessingStatus
(
ModifyPhoneNoProcessingStatusEnum
.
INIT
.
getType
());
}
/**
* 验证用户是否允许修改手机号
* <p>
* 校验用户填写的原手机号对应的用户姓名、用户身份证是否和用户中心已有信息一致。若不一致,不允许修改。
* 新手机号是否在用户中心已存在,若已存在,不允许修改。
* 用户有审核中和放款中的订单,不允许修改。
* 用户有还款中的订单,不允许修改。
* </p>
*
* @param id user.id
* @param name 注册人真实姓名
* @param idCard 注册人身份证件号
* @param prevPhoneNo 当前手机号码
* @param curPhoneNo 新手机号码
* @param smsCode 新手机号码短信验证码
* @return
*/
public
void
allowModify
(
Long
id
,
String
name
,
String
idCard
,
String
prevPhoneNo
,
String
curPhoneNo
,
String
smsCode
)
{
if
(
modifyPhoneNoRepository
.
findFirstByUserIdAndProcessingStatusNot
(
id
,
ModifyPhoneNoProcessingStatusEnum
.
DONE
.
getType
())
!=
null
)
{
throw
new
DataException
(
"已存在处理中的申请单,不支持再次更换。"
);
}
if
(
userDetailRepository
.
findByUserIdAndPhoneNoAndNameAndIdNo
(
id
,
prevPhoneNo
,
name
,
idCard
)
==
null
)
{
throw
new
DataException
(
"姓名、身份证、电话号不符。"
);
}
if
(
userDetailRepository
.
findOneByPhoneNo
(
curPhoneNo
)
!=
null
)
{
throw
new
DataException
(
"新手机号已存在,不支持更换。"
);
}
if
(!
smsService
.
verifyPhoneAndCode
(
curPhoneNo
,
smsCode
))
{
throw
new
DataException
(
"验证码不正确。"
);
}
log
.
info
(
"allowModify userId = 【{}】"
,
id
);
UserLoanStatusResp
userLoanStatusResp
=
restTemplate
.
getForObject
(
apiHttps
+
"?userId="
+
id
,
UserLoanStatusResp
.
class
);
log
.
info
(
"allowModify userLoanStatusResp = 【{}】"
,
userLoanStatusResp
);
if
(!
userLoanStatusResp
.
isSuccess
()
||
!
userLoanStatusResp
.
isData
())
{
throw
new
DataException
(
"用户存在订单,不支持修改。"
);
}
}
}
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