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
5a775628
Commit
5a775628
authored
Nov 05, 2019
by
杨锐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
后台客服处理功能 - 查询列表。人工审核。反馈跟进。API DONE。
parent
2448ea7f
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
241 additions
and
16 deletions
+241
-16
ModifyPhoneNoController.java
...yqb/controller/modifyphoneno/ModifyPhoneNoController.java
+10
-7
AuditReq.java
...uantgroup/xyqb/controller/modifyphoneno/req/AuditReq.java
+7
-1
ModifyPhoneNoQueryReq.java
...b/controller/modifyphoneno/req/ModifyPhoneNoQueryReq.java
+48
-0
Page.java
src/main/java/cn/quantgroup/xyqb/controller/req/Page.java
+31
-0
IModifyPhoneNoRepository.java
.../quantgroup/xyqb/repository/IModifyPhoneNoRepository.java
+5
-4
IModifyPhoneNoService.java
...n/quantgroup/xyqb/service/user/IModifyPhoneNoService.java
+10
-0
ModifyPhoneNoServiceImpl.java
...roup/xyqb/service/user/impl/ModifyPhoneNoServiceImpl.java
+84
-2
UserServiceImpl.java
...cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
+3
-2
DateUtilsV1.java
src/main/java/cn/quantgroup/xyqb/util/DateUtilsV1.java
+43
-0
No files found.
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/ModifyPhoneNoController.java
View file @
5a775628
...
...
@@ -2,19 +2,20 @@ package cn.quantgroup.xyqb.controller.modifyphoneno;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.AuditReq
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.ModifyPhoneNoQueryReq
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step1Req
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step2Req
;
import
cn.quantgroup.xyqb.
controller.modifyphoneno.resp.ModifyPhoneNoResp
;
import
cn.quantgroup.xyqb.
entity.ModifyPhoneNo
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.service.user.IModifyPhoneNoService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.data.domain.Page
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
javax.validation.Valid
;
import
java.util.List
;
/**
* 用户手机号修改相关api
...
...
@@ -79,16 +80,17 @@ public class ModifyPhoneNoController implements IBaseController {
*/
@ApiOperation
(
"后台客服处理功能 - 查询列表"
)
@GetMapping
public
JsonResult
<
List
<
ModifyPhoneNoResp
>>
list
(
)
{
return
JsonResult
.
buildSuccessResult
();
public
JsonResult
<
Page
<
ModifyPhoneNo
>>
list
(
@Valid
ModifyPhoneNoQueryReq
modifyPhoneNoQueryReq
)
{
return
JsonResult
.
buildSuccessResult
(
modifyPhoneNoService
.
list
(
modifyPhoneNoQueryReq
)
);
}
/**
* 后台客服处理功能 - 人工审核
*/
@ApiOperation
(
"后台客服处理功能 - 人工审核"
)
@PutMapping
(
"/audit"
)
public
JsonResult
audit
(
AuditReq
auditReq
)
{
@PostMapping
(
"/audit"
)
public
JsonResult
audit
(
@Valid
@RequestBody
AuditReq
auditReq
)
{
modifyPhoneNoService
.
audit
(
auditReq
);
return
JsonResult
.
buildSuccessResult
();
}
...
...
@@ -96,8 +98,9 @@ public class ModifyPhoneNoController implements IBaseController {
* 后台客服处理功能 - 反馈跟进
*/
@ApiOperation
(
"后台客服处理功能 - 反馈跟进"
)
@P
u
tMapping
(
"/{id}/feedback"
)
@P
os
tMapping
(
"/{id}/feedback"
)
public
JsonResult
feedback
(
@PathVariable
Long
id
)
{
modifyPhoneNoService
.
feedback
(
id
);
return
JsonResult
.
buildSuccessResult
();
}
...
...
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/req/AuditReq.java
View file @
5a775628
...
...
@@ -2,6 +2,9 @@ package cn.quantgroup.xyqb.controller.modifyphoneno.req;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.Range
;
import
javax.validation.constraints.NotNull
;
/**
* Date: 2019/11/4
...
...
@@ -11,8 +14,11 @@ import lombok.Data;
*/
@Data
public
class
AuditReq
{
@NotNull
(
message
=
"id不能为空"
)
private
Long
id
;
@ApiModelProperty
(
"审核状态"
)
@ApiModelProperty
(
"申请状态 0处理中; 1修改完成; 2不允许修改;"
)
@NotNull
(
message
=
"申请状态不能为空"
)
@Range
(
min
=
0
,
max
=
2
,
message
=
"申请状态不合法。"
)
private
Integer
applyStatus
;
@ApiModelProperty
(
"申请状态补充原因"
)
private
String
applyStatusReason
;
...
...
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/req/ModifyPhoneNoQueryReq.java
0 → 100644
View file @
5a775628
package
cn
.
quantgroup
.
xyqb
.
controller
.
modifyphoneno
.
req
;
import
cn.quantgroup.xyqb.controller.req.Page
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.Range
;
/**
* Date: 2019/11/5
* Time: 下午4:02
*
* @author: yangrui
*/
@Data
public
class
ModifyPhoneNoQueryReq
extends
Page
{
/**
* 申请人旧手机号
*/
@ApiModelProperty
(
"申请人旧手机号"
)
private
String
phoneNo
;
/**
* 开始时间
*/
@ApiModelProperty
(
"开始时间"
)
private
String
startAt
;
/**
* 结束时间
*/
@ApiModelProperty
(
"结束时间"
)
private
String
endAt
;
/**
* 申请状态 0处理中; 1修改完成; 2不允许修改;
*/
@ApiModelProperty
(
"申请状态 0处理中; 1修改完成; 2不允许修改;"
)
@Range
(
min
=
0
,
max
=
2
,
message
=
"申请状态不合法。"
)
private
Integer
applyStatus
;
/**
* 处理状态 0待人工处理 1待用户反馈结果 2已反馈
*/
@ApiModelProperty
(
"处理状态 0待人工处理; 1待用户反馈结果; 2已反馈"
)
@Range
(
min
=
0
,
max
=
2
,
message
=
"处理状态不合法。"
)
private
Integer
processingStatus
;
}
src/main/java/cn/quantgroup/xyqb/controller/req/Page.java
0 → 100644
View file @
5a775628
package
cn
.
quantgroup
.
xyqb
.
controller
.
req
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
/**
* common page
* <p>
* Date: 2019/11/5
* Time: 下午4:06
*
* @author: yangrui
*/
@Data
public
class
Page
{
/**
* page
*/
@ApiModelProperty
(
"zero-based page index"
)
@NotNull
(
message
=
"page不能为空"
)
private
Integer
page
;
/**
* size
*/
@ApiModelProperty
(
"the size of the page to be returned"
)
@NotNull
(
message
=
"size不能为空"
)
private
Integer
size
;
}
src/main/java/cn/quantgroup/xyqb/repository/IModifyPhoneNoRepository.java
View file @
5a775628
...
...
@@ -2,14 +2,15 @@ package cn.quantgroup.xyqb.repository;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.query.Param
;
public
interface
IModifyPhoneNoRepository
extends
JpaRepository
<
ModifyPhoneNo
,
Long
>
{
public
interface
IModifyPhoneNoRepository
extends
JpaRepository
<
ModifyPhoneNo
,
Long
>
,
JpaSpecificationExecutor
<
ModifyPhoneNo
>
{
@Query
(
nativeQuery
=
true
,
value
=
"select * from user_modify_phone_no "
+
"where user_id = :userId and (
processing_status is null or processing_status <> :processing
Status)"
+
"where user_id = :userId and (
apply_status is null or apply_status = :apply
Status)"
+
"limit 1"
)
ModifyPhoneNo
findFirstByUserIdAnd
ProcessingStatusNot
(
@Param
(
"userId"
)
Long
userId
,
@Param
(
"
processingStatus"
)
Integer
processing
Status
);
ModifyPhoneNo
findFirstByUserIdAnd
ApplyStatus
(
@Param
(
"userId"
)
Long
userId
,
@Param
(
"
applyStatus"
)
Integer
apply
Status
);
}
src/main/java/cn/quantgroup/xyqb/service/user/IModifyPhoneNoService.java
View file @
5a775628
package
cn
.
quantgroup
.
xyqb
.
service
.
user
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.AuditReq
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.ModifyPhoneNoQueryReq
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step1Req
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step2Req
;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
import
org.springframework.data.domain.Page
;
/**
* Date: 2019/11/4
...
...
@@ -22,4 +26,10 @@ public interface IModifyPhoneNoService {
void
saveStep2
(
Step2Req
step2Req
);
Integer
progress
(
Long
id
);
Page
<
ModifyPhoneNo
>
list
(
ModifyPhoneNoQueryReq
modifyPhoneNoQueryReq
);
void
feedback
(
Long
id
);
void
audit
(
AuditReq
auditReq
);
}
src/main/java/cn/quantgroup/xyqb/service/user/impl/ModifyPhoneNoServiceImpl.java
View file @
5a775628
...
...
@@ -2,6 +2,8 @@ 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.AuditReq
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.ModifyPhoneNoQueryReq
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step1Req
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.Step2Req
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.UserLoanStatusResp
;
...
...
@@ -11,14 +13,24 @@ 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
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.util.DateUtilsV1
;
import
com.google.common.collect.Lists
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.client.RestTemplate
;
import
javax.annotation.Resource
;
import
javax.persistence.criteria.*
;
import
java.util.List
;
/**
* Date: 2019/11/4
...
...
@@ -38,6 +50,8 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
private
ISmsService
smsService
;
@Resource
private
RestTemplate
restTemplate
;
@Resource
private
IUserService
userService
;
@Value
(
"${api.https}"
)
public
String
apiHttps
;
...
...
@@ -84,7 +98,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
*/
@Override
public
Integer
progress
(
Long
id
)
{
ModifyPhoneNo
modifyPhoneNo
=
modifyPhoneNoRepository
.
findFirstByUserIdAnd
ProcessingStatusNot
(
id
,
ModifyPhoneNoProcessingStatusEnum
.
DONE
.
getType
());
ModifyPhoneNo
modifyPhoneNo
=
modifyPhoneNoRepository
.
findFirstByUserIdAnd
ApplyStatus
(
id
,
ModifyPhoneNoApplyStatusEnum
.
INIT
.
getType
());
if
(
modifyPhoneNo
==
null
)
{
return
0
;
}
...
...
@@ -97,6 +111,70 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
return
-
1
;
}
@Override
public
Page
<
ModifyPhoneNo
>
list
(
ModifyPhoneNoQueryReq
modifyPhoneNoQueryReq
)
{
Sort
.
Order
order
=
new
Sort
.
Order
(
Sort
.
Direction
.
DESC
,
"id"
);
Sort
sort
=
new
Sort
(
order
);
Pageable
pageable
=
new
PageRequest
(
modifyPhoneNoQueryReq
.
getPage
()
-
1
,
modifyPhoneNoQueryReq
.
getSize
(),
sort
);
Specification
<
ModifyPhoneNo
>
specification
=
new
Specification
<
ModifyPhoneNo
>()
{
@Override
public
Predicate
toPredicate
(
Root
<
ModifyPhoneNo
>
root
,
CriteriaQuery
<?>
criteriaQuery
,
CriteriaBuilder
criteriaBuilder
)
{
List
<
Predicate
>
list
=
Lists
.
newArrayList
();
if
(
StringUtils
.
isNotBlank
(
modifyPhoneNoQueryReq
.
getPhoneNo
()))
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"prevPhoneNo"
),
modifyPhoneNoQueryReq
.
getPhoneNo
()));
}
if
(
StringUtils
.
isNotBlank
(
modifyPhoneNoQueryReq
.
getStartAt
()))
{
list
.
add
(
criteriaBuilder
.
greaterThanOrEqualTo
(
root
.
get
(
"createAt"
),
DateUtilsV1
.
strToDate
(
modifyPhoneNoQueryReq
.
getStartAt
(),
DateUtilsV1
.
YMD_FORMAT
)));
}
if
(
StringUtils
.
isNotBlank
(
modifyPhoneNoQueryReq
.
getEndAt
()))
{
list
.
add
(
criteriaBuilder
.
lessThanOrEqualTo
(
root
.
get
(
"createAt"
),
DateUtilsV1
.
strToDate
(
modifyPhoneNoQueryReq
.
getEndAt
(),
DateUtilsV1
.
YMD_FORMAT
)));
}
if
(
modifyPhoneNoQueryReq
.
getApplyStatus
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"applyStatus"
),
modifyPhoneNoQueryReq
.
getApplyStatus
()));
}
if
(
modifyPhoneNoQueryReq
.
getProcessingStatus
()
!=
null
)
{
list
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"processingStatus"
),
modifyPhoneNoQueryReq
.
getProcessingStatus
()));
}
Predicate
[]
arr
=
new
Predicate
[
list
.
size
()];
return
criteriaBuilder
.
and
(
list
.
toArray
(
arr
));
}
};
return
modifyPhoneNoRepository
.
findAll
(
specification
,
pageable
);
}
/**
* @param id user_modify_phone_no.id
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
feedback
(
Long
id
)
{
ModifyPhoneNo
modifyPhoneNo
=
modifyPhoneNoRepository
.
findOne
(
id
);
if
(
modifyPhoneNo
==
null
)
{
throw
new
DataException
(
"数据不存在。"
);
}
modifyPhoneNo
.
setProcessingStatus
(
ModifyPhoneNoProcessingStatusEnum
.
DONE
.
getType
());
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
audit
(
AuditReq
auditReq
)
{
ModifyPhoneNo
modifyPhoneNo
=
modifyPhoneNoRepository
.
findOne
(
auditReq
.
getId
());
if
(
modifyPhoneNo
==
null
)
{
throw
new
DataException
(
"数据不存在。"
);
}
if
(
ModifyPhoneNoApplyStatusEnum
.
NO_ALLOW
.
getType
()
==
auditReq
.
getApplyStatus
())
{
modifyPhoneNo
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
NO_ALLOW
.
getType
());
modifyPhoneNo
.
setApplyStatusReason
(
auditReq
.
getApplyStatusReason
());
}
if
(
ModifyPhoneNoApplyStatusEnum
.
DONE
.
getType
()
==
auditReq
.
getApplyStatus
())
{
allowModifyHttp
(
modifyPhoneNo
.
getUserId
());
userService
.
modifyPhoneNo
(
modifyPhoneNo
.
getPrevPhoneNo
(),
modifyPhoneNo
.
getCurPhoneNo
());
modifyPhoneNo
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
DONE
.
getType
());
}
}
/**
* 验证用户是否允许修改手机号
* <p>
...
...
@@ -115,7 +193,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
* @return
*/
public
void
allowModify
(
Long
id
,
String
name
,
String
idCard
,
String
prevPhoneNo
,
String
curPhoneNo
,
String
smsCode
)
{
if
(
modifyPhoneNoRepository
.
findFirstByUserIdAnd
ProcessingStatusNot
(
id
,
ModifyPhoneNoProcessingStatusEnum
.
DONE
.
getType
())
!=
null
)
{
if
(
modifyPhoneNoRepository
.
findFirstByUserIdAnd
ApplyStatus
(
id
,
ModifyPhoneNoProcessingStatusEnum
.
INIT
.
getType
())
!=
null
)
{
throw
new
DataException
(
"已存在处理中的申请单,不支持再次更换。"
);
}
if
(
userDetailRepository
.
findByUserIdAndPhoneNoAndNameAndIdNo
(
id
,
prevPhoneNo
,
name
,
idCard
)
==
null
)
{
...
...
@@ -127,6 +205,10 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
if
(!
smsService
.
verifyPhoneAndCode
(
curPhoneNo
,
smsCode
))
{
throw
new
DataException
(
"验证码不正确。"
);
}
allowModifyHttp
(
id
);
}
public
void
allowModifyHttp
(
Long
id
)
{
log
.
info
(
"allowModify userId = 【{}】"
,
id
);
UserLoanStatusResp
userLoanStatusResp
=
restTemplate
.
getForObject
(
apiHttps
+
"?userId="
+
id
,
UserLoanStatusResp
.
class
);
log
.
info
(
"allowModify userLoanStatusResp = 【{}】"
,
userLoanStatusResp
);
...
...
src/main/java/cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
View file @
5a775628
...
...
@@ -5,6 +5,7 @@ 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.exception.DataException
;
import
cn.quantgroup.xyqb.model.UserInfo
;
import
cn.quantgroup.xyqb.repository.IUserHashMappingRepository
;
import
cn.quantgroup.xyqb.repository.IUserRepository
;
...
...
@@ -214,12 +215,12 @@ public class UserServiceImpl implements IUserService {
User
newPhoneUser
=
userRepository
.
findByPhoneNo
(
newPhoneNo
);
if
(
Objects
.
nonNull
(
newPhoneUser
))
{
//新手机号已存在
return
null
;
throw
new
DataException
(
"新手机号已存在。"
)
;
}
User
oldPhoneUser
=
userRepository
.
findByPhoneNo
(
oldPhoneNo
);
if
(
Objects
.
isNull
(
oldPhoneUser
))
{
//这不是扯了.旧手机号不存在.
return
null
;
throw
new
DataException
(
"旧手机号不存在。"
)
;
}
//2. 执行修改
//2.1 修改 user 表
...
...
src/main/java/cn/quantgroup/xyqb/util/DateUtilsV1.java
0 → 100644
View file @
5a775628
package
cn
.
quantgroup
.
xyqb
.
util
;
import
org.apache.commons.lang3.StringUtils
;
import
org.joda.time.DateTime
;
import
org.joda.time.Days
;
import
org.joda.time.format.DateTimeFormat
;
import
org.joda.time.format.DateTimeFormatter
;
import
java.util.Date
;
/**
*
*
* Date: 2019/11/5
* Time: 下午5:07
*
* @author: yangrui
*/
public
class
DateUtilsV1
{
public
static
final
String
STANDARD_FORMAT
=
"yyyy-MM-dd HH:mm:ss"
;
public
static
final
String
YMD_FORMAT
=
"yyyy-MM-dd"
;
public
static
Date
strToDate
(
String
dateTimeStr
,
String
formatStr
)
{
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormat
.
forPattern
(
formatStr
);
DateTime
dateTime
=
dateTimeFormatter
.
parseDateTime
(
dateTimeStr
);
return
dateTime
.
toDate
();
}
public
static
String
dateToStr
(
Date
date
,
String
formatStr
)
{
if
(
date
==
null
)
{
return
StringUtils
.
EMPTY
;
}
DateTime
dateTime
=
new
DateTime
(
date
);
return
dateTime
.
toString
(
formatStr
);
}
public
static
int
daysBetween
(
DateTime
fromDate
,
DateTime
toDate
)
{
return
Days
.
daysBetween
(
fromDate
,
toDate
).
getDays
();
}
public
static
void
main
(
String
[]
args
)
{
}
}
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