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
be7bc113
Commit
be7bc113
authored
May 19, 2023
by
孙 楠
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature-modify-phone-no-20230510' into 'master'
Feature modify phone no 20230510 See merge request
!108
parents
67ce7215
28550325
Changes
16
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
407 additions
and
31 deletions
+407
-31
Constants.java
src/main/java/cn/quantgroup/xyqb/Constants.java
+4
-0
CaptchaNewValidateAdvisor.java
...tgroup/xyqb/aspect/captcha/CaptchaNewValidateAdvisor.java
+3
-0
SmsController.java
...uantgroup/xyqb/controller/external/sms/SmsController.java
+6
-0
InnerController.java
...tgroup/xyqb/controller/internal/user/InnerController.java
+2
-2
ModifyPhoneNoController.java
...yqb/controller/modifyphoneno/ModifyPhoneNoController.java
+34
-1
ModifyPhoneRecord.java
.../xyqb/controller/modifyphoneno/req/ModifyPhoneRecord.java
+14
-4
ModifyRejectRecord.java
...xyqb/controller/modifyphoneno/req/ModifyRejectRecord.java
+28
-0
ModifyPhoneNoResp.java
...xyqb/controller/modifyphoneno/resp/ModifyPhoneNoResp.java
+85
-19
UserModifyPhoneRecordResp.java
...troller/modifyphoneno/resp/UserModifyPhoneRecordResp.java
+14
-0
ModifyPhoneNo.java
src/main/java/cn/quantgroup/xyqb/entity/ModifyPhoneNo.java
+7
-0
UserModifyPhoneRecord.java
...java/cn/quantgroup/xyqb/entity/UserModifyPhoneRecord.java
+19
-0
ApplySource.java
...ain/java/cn/quantgroup/xyqb/entity/enums/ApplySource.java
+23
-0
SmsMerchant.java
src/main/java/cn/quantgroup/xyqb/model/sms/SmsMerchant.java
+5
-1
IModifyPhoneRecordRepository.java
...ntgroup/xyqb/repository/IModifyPhoneRecordRepository.java
+11
-0
IModifyPhoneNoService.java
...n/quantgroup/xyqb/service/user/IModifyPhoneNoService.java
+9
-0
ModifyPhoneNoServiceImpl.java
...roup/xyqb/service/user/impl/ModifyPhoneNoServiceImpl.java
+143
-4
No files found.
src/main/java/cn/quantgroup/xyqb/Constants.java
View file @
be7bc113
...
...
@@ -237,6 +237,10 @@ public interface Constants {
* 验证类型 - 量化派图形验证
*/
String
VERIFY_TYPE_QG
=
"qg"
;
/**
* 验证类型 - 不验证
*/
String
VERIFY_TYPE_NONE
=
"none"
;
// -- End -- 验证码常量组
/** 注销用户后再次允许注册时间间隔-天数 */
...
...
src/main/java/cn/quantgroup/xyqb/aspect/captcha/CaptchaNewValidateAdvisor.java
View file @
be7bc113
...
...
@@ -67,6 +67,9 @@ public class CaptchaNewValidateAdvisor {
}
else
{
return
JsonResult
.
buildErrorStateResult
(
"验证码不正确"
,
""
);
}
}
else
if
(
Objects
.
equals
(
Constants
.
VERIFY_TYPE_NONE
,
request
.
getParameter
(
Constants
.
VERIFY_PARAM
)))
{
//不校验验证码,针对电商用户端修改手机号场景
return
pjp
.
proceed
();
}
else
{
if
(
qgValid
(
request
))
{
return
pjp
.
proceed
();
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/sms/SmsController.java
View file @
be7bc113
...
...
@@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
...
...
@@ -83,6 +84,11 @@ public class SmsController implements IBaseController {
return
sendVerificationCode2
(
phoneNo
,
randomCode
,
appName
,
smsMerchant
);
}
@PostMapping
(
"/verify_sms_verification_code"
)
public
JsonResult
verifyCode
(
String
phoneNo
,
String
verificationCode
)
{
return
JsonResult
.
buildSuccessResult
(
"校验验证码"
,
smsService
.
verifyPhoneAndCode
(
phoneNo
,
verificationCode
));
}
/**
* 短信验证码 : 重置密码
*
...
...
src/main/java/cn/quantgroup/xyqb/controller/internal/user/InnerController.java
View file @
be7bc113
...
...
@@ -206,13 +206,13 @@ public class InnerController implements IBaseController {
public
JsonResult
findByPhoneNo
(
String
phoneNo
,
Integer
tenantId
)
{
User
user
=
userService
.
findByPhoneInDb
(
phoneNo
);
if
(
user
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"查无此人"
,
null
);
return
JsonResult
.
buildErrorStateResult
(
"查无此人"
,
null
,
4L
);
}
if
(
tenantId
!=
null
&&
!
TenantUtil
.
TENANT_DEFAULT
.
equals
(
tenantId
))
{
// userId 查询对应productLogin 获取手机号和customerId
user
=
tenantService
.
getTenantUser
(
user
,
tenantId
);
if
(
user
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"查无此人"
,
null
);
return
JsonResult
.
buildErrorStateResult
(
"查无此人"
,
null
,
4L
);
}
}
UserRet
userRet
=
new
UserRet
(
user
);
...
...
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/ModifyPhoneNoController.java
View file @
be7bc113
...
...
@@ -2,6 +2,8 @@ package cn.quantgroup.xyqb.controller.modifyphoneno;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.*
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.ModifyPhoneRecord.UserClient
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.ModifyPhoneNoResp
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.ProgressResp
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.UserModifyPhoneRecordResp
;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
...
...
@@ -12,6 +14,7 @@ import cn.quantgroup.xyqb.service.user.IModifyPhoneNoService;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.data.domain.Page
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
...
...
@@ -83,7 +86,8 @@ public class ModifyPhoneNoController implements IBaseController {
objectMapper
.
setDateFormat
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
));
String
s
;
try
{
s
=
objectMapper
.
writeValueAsString
(
list
);
Page
<
ModifyPhoneNoResp
>
result
=
list
.
map
(
ModifyPhoneNoResp:
:
from
);
s
=
objectMapper
.
writeValueAsString
(
result
);
Object
o
=
objectMapper
.
readValue
(
s
,
Object
.
class
);
return
JsonResult
.
buildSuccessResultGeneric
(
o
);
}
catch
(
Exception
ignored
)
{
...
...
@@ -133,6 +137,17 @@ public class ModifyPhoneNoController implements IBaseController {
return
JsonResult
.
buildSuccessResult
();
}
/**
* 用户端修改手机号
* @param modifyPhoneRecord
* @return
*/
@PostMapping
(
"/client/submitModify"
)
public
JsonResult
clientSubmitModify
(
@Validated
(
value
=
UserClient
.
class
)
@RequestBody
ModifyPhoneRecord
modifyPhoneRecord
)
{
modifyPhoneNoService
.
clientSubmitModify
(
modifyPhoneRecord
);
return
JsonResult
.
buildSuccessResult
();
}
@PostMapping
(
"/modifyPhoneNolist"
)
public
JsonResult
getModifyPhoneNolist
(
@RequestParam
(
"userId"
)
Long
userId
,
@RequestParam
(
value
=
"pageNo"
,
defaultValue
=
"1"
,
required
=
false
)
int
pageNo
,
...
...
@@ -147,4 +162,22 @@ public class ModifyPhoneNoController implements IBaseController {
return
JsonResult
.
buildSuccessResult
(
"修改手机号列表"
,
pageData
);
}
@GetMapping
(
"/lastRecord"
)
public
JsonResult
getLastRecord
(
@RequestParam
(
"userId"
)
Long
userId
){
UserModifyPhoneRecordResp
resp
=
modifyPhoneNoService
.
getLastRecord
(
userId
);
return
JsonResult
.
buildSuccessResult
(
"最后修改记录"
,
resp
);
}
@PostMapping
(
"/rejectReason/save"
)
public
JsonResult
saveRejectReason
(
@Valid
@RequestBody
ModifyRejectRecord
modifyRejectRecord
){
modifyPhoneNoService
.
saveRejectReason
(
modifyRejectRecord
);
return
JsonResult
.
buildSuccessResult
(
"保存手机号修改失败原因成功"
);
}
@GetMapping
(
"/modifyRecord"
)
public
JsonResult
modifyRecord
(
@RequestParam
(
"prevPhoneNo"
)
String
prevPhoneNo
){
UserModifyPhoneRecordResp
resp
=
modifyPhoneNoService
.
modifyRecord
(
prevPhoneNo
);
return
JsonResult
.
buildSuccessResult
(
"手机号修改记录"
,
resp
);
}
}
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/req/ModifyPhoneRecord.java
View file @
be7bc113
package
cn
.
quantgroup
.
xyqb
.
controller
.
modifyphoneno
.
req
;
import
cn.quantgroup.xyqb.entity.enums.ApplySource
;
import
cn.quantgroup.xyqb.entity.enums.Reason
;
import
cn.quantgroup.xyqb.util.ValidationUtil
;
import
feign.Client.Default
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.NotBlank
;
...
...
@@ -15,12 +17,12 @@ public class ModifyPhoneRecord implements Serializable {
// @NotNull(message = "用户ID不能为空")
private
Long
userId
;
@NotBlank
(
message
=
"原手机号不能为空"
)
@Pattern
(
regexp
=
ValidationUtil
.
phoneRegExp
,
message
=
"原手机号码格式错误"
)
@NotBlank
(
message
=
"原手机号不能为空"
,
groups
=
{
Default
.
class
,
UserClient
.
class
}
)
@Pattern
(
regexp
=
ValidationUtil
.
phoneRegExp
,
message
=
"原手机号码格式错误"
,
groups
=
{
Default
.
class
,
UserClient
.
class
}
)
private
String
prevPhoneNo
;
@NotBlank
(
message
=
"新手机号不能为空"
)
@Pattern
(
regexp
=
ValidationUtil
.
phoneRegExp
,
message
=
"新手机号码格式错误"
)
@NotBlank
(
message
=
"新手机号不能为空"
,
groups
=
{
Default
.
class
,
UserClient
.
class
}
)
@Pattern
(
regexp
=
ValidationUtil
.
phoneRegExp
,
message
=
"新手机号码格式错误"
,
groups
=
{
Default
.
class
,
UserClient
.
class
}
)
private
String
curPhoneNo
;
@NotNull
(
message
=
"修改原因不能为空"
)
...
...
@@ -32,4 +34,12 @@ public class ModifyPhoneRecord implements Serializable {
// @NotBlank(message = "备注不能为空")
private
String
remark
;
/**
* 申请来源
*/
private
ApplySource
applySource
;
public
interface
Background
{}
public
interface
UserClient
{}
public
interface
Finance
{}
}
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/req/ModifyRejectRecord.java
0 → 100644
View file @
be7bc113
package
cn
.
quantgroup
.
xyqb
.
controller
.
modifyphoneno
.
req
;
import
cn.quantgroup.xyqb.entity.enums.ApplySource
;
import
cn.quantgroup.xyqb.util.ValidationUtil
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.NotBlank
;
@Data
public
class
ModifyRejectRecord
{
@NotNull
(
message
=
"用户id不能为空"
)
private
Long
userId
;
@NotBlank
(
message
=
"原手机号不能为空"
)
@Pattern
(
regexp
=
ValidationUtil
.
phoneRegExp
,
message
=
"原手机号码格式错误"
)
private
String
prevPhoneNo
;
@NotBlank
(
message
=
"新手机号不能为空"
)
@Pattern
(
regexp
=
ValidationUtil
.
phoneRegExp
,
message
=
"新手机号码格式错误"
)
private
String
curPhoneNo
;
private
String
remark
;
@NotBlank
(
message
=
"拒绝原因不能为空"
)
private
String
rejectReason
;
}
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/resp/ModifyPhoneNoResp.java
View file @
be7bc113
package
cn
.
quantgroup
.
xyqb
.
controller
.
modifyphoneno
.
resp
;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
java.sql.Timestamp
;
import
java.util.Date
;
import
lombok.Data
;
...
...
@@ -11,31 +14,94 @@ import lombok.Data;
*/
@Data
public
class
ModifyPhoneNoResp
{
private
static
final
long
serialVersionUID
=
0x93c999d06b6f64d2
L
;
private
Long
id
;
// //@ApiModelProperty("申请编号")
private
String
applyNo
;
// //@ApiModelProperty("申请人姓名")
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Timestamp
createdAt
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Timestamp
updatedAt
;
/**
* user.id
*/
private
Long
userId
;
/**
* 注册人真实姓名
*/
private
String
name
;
// //@ApiModelProperty("申请人身份证号")
/**
* 注册人身份证件号
*/
private
String
idCard
;
//@ApiModelProperty("申请人原手机号")
/**
* 原手机号码
*/
private
String
prevPhoneNo
;
//@ApiModelProperty("申请人现手机号")
/**
* 新手机号码
*/
private
String
curPhoneNo
;
//@ApiModelProperty("申请时间")
private
Date
createdAt
;
//@ApiModelProperty("申请结果")
private
Integer
applyStatus
;
//@ApiModelProperty("拒绝原因")
private
String
applyStatusReason
;
//@ApiModelProperty("处理状态")
private
Integer
processStatus
;
//@ApiModelProperty("最近更新时间")
private
Date
updatedAt
;
//@ApiModelProperty("身份证正面")
/**
* 身份证正面
*/
private
String
idCardFaceUrl
;
//@ApiModelProperty("身份证背面")
/**
* 身份证背面
*/
private
String
idCardRearUrl
;
//@ApiModelProperty("本人手持身份证照片")
/**
* 本人手持身份证照片
*/
private
String
idCardHoldUrl
;
/**
* 申请状态 0处理中; 1修改完成; 2不允许修改;
*/
private
Integer
applyStatus
;
/**
* 申请状态补充原因
*/
private
String
applyStatusReason
;
/**
* 处理状态 0待人工处理 1待用户反馈结果 2已反馈
*/
private
Integer
processingStatus
;
/**
* 申请来源
*/
private
Integer
applySource
;
public
static
ModifyPhoneNoResp
from
(
ModifyPhoneNo
modifyPhoneNo
){
ModifyPhoneNoResp
modifyPhoneNoResp
=
new
ModifyPhoneNoResp
();
modifyPhoneNoResp
.
setId
(
modifyPhoneNo
.
getId
());
modifyPhoneNoResp
.
setCreatedAt
(
modifyPhoneNo
.
getCreatedAt
());
modifyPhoneNoResp
.
setUpdatedAt
(
modifyPhoneNo
.
getUpdatedAt
());
modifyPhoneNoResp
.
setUserId
(
modifyPhoneNo
.
getUserId
());
modifyPhoneNoResp
.
setName
(
modifyPhoneNo
.
getName
());
modifyPhoneNoResp
.
setIdCard
(
modifyPhoneNo
.
getIdCard
());
modifyPhoneNoResp
.
setPrevPhoneNo
(
modifyPhoneNo
.
getPrevPhoneNo
());
modifyPhoneNoResp
.
setCurPhoneNo
(
modifyPhoneNo
.
getCurPhoneNo
());
modifyPhoneNoResp
.
setIdCardFaceUrl
(
modifyPhoneNo
.
getIdCardFaceUrl
());
modifyPhoneNoResp
.
setIdCardRearUrl
(
modifyPhoneNo
.
getIdCardRearUrl
());
modifyPhoneNoResp
.
setIdCardHoldUrl
(
modifyPhoneNo
.
getIdCardHoldUrl
());
modifyPhoneNoResp
.
setApplyStatus
(
modifyPhoneNo
.
getApplyStatus
());
modifyPhoneNoResp
.
setApplyStatusReason
(
modifyPhoneNo
.
getApplyStatusReason
());
modifyPhoneNoResp
.
setProcessingStatus
(
modifyPhoneNo
.
getProcessingStatus
());
modifyPhoneNoResp
.
setApplySource
(
modifyPhoneNo
.
getApplySource
().
ordinal
());
return
modifyPhoneNoResp
;
}
}
src/main/java/cn/quantgroup/xyqb/controller/modifyphoneno/resp/UserModifyPhoneRecordResp.java
View file @
be7bc113
package
cn
.
quantgroup
.
xyqb
.
controller
.
modifyphoneno
.
resp
;
import
cn.quantgroup.xyqb.entity.enums.ApplySource
;
import
cn.quantgroup.xyqb.entity.enums.Reason
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
javax.persistence.Column
;
import
lombok.Data
;
import
java.sql.Timestamp
;
...
...
@@ -23,7 +26,18 @@ public class UserModifyPhoneRecordResp {
private
String
financialResponse
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Timestamp
createdAt
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Timestamp
updatedAt
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Timestamp
operationAt
;
private
ApplySource
applySource
;
private
Integer
applyStatus
;
private
String
applyStatusReason
;
}
src/main/java/cn/quantgroup/xyqb/entity/ModifyPhoneNo.java
View file @
be7bc113
package
cn
.
quantgroup
.
xyqb
.
entity
;
import
cn.quantgroup.xyqb.entity.enums.ApplySource
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
java.io.Serializable
;
import
javax.persistence.Column
;
...
...
@@ -85,4 +86,10 @@ public class ModifyPhoneNo extends BaseEntity implements Serializable {
*/
@Column
(
name
=
"processing_status"
)
private
Integer
processingStatus
;
/**
* 申请来源
*/
@Column
(
name
=
"apply_source"
)
private
ApplySource
applySource
;
}
src/main/java/cn/quantgroup/xyqb/entity/UserModifyPhoneRecord.java
View file @
be7bc113
package
cn
.
quantgroup
.
xyqb
.
entity
;
import
cn.quantgroup.xyqb.entity.enums.ApplySource
;
import
cn.quantgroup.xyqb.entity.enums.Reason
;
import
cn.quantgroup.xyqb.util.encrypt.CryptConverter
;
import
javax.persistence.Convert
;
...
...
@@ -40,4 +41,22 @@ public class UserModifyPhoneRecord extends BaseEntity implements Serializable {
@Column
(
name
=
"financial_response"
)
private
String
financialResponse
;
/**
* 申请来源
*/
@Column
(
name
=
"apply_source"
)
private
ApplySource
applySource
;
/**
* 申请状态 0处理中; 1修改完成; 2不允许修改;
*/
@Column
(
name
=
"apply_status"
)
private
Integer
applyStatus
;
/**
* 申请状态补充原因
*/
@Column
(
name
=
"apply_status_reason"
)
private
String
applyStatusReason
;
}
src/main/java/cn/quantgroup/xyqb/entity/enums/ApplySource.java
0 → 100644
View file @
be7bc113
package
cn
.
quantgroup
.
xyqb
.
entity
.
enums
;
public
enum
ApplySource
{
CLIENT
(
"用户端"
),
BACKGROUND
(
"客服后台"
),
FINANCE_CLIENT
(
"金融用户端"
),
FINANCE_BACKGROUND
(
"金融客服后台"
),
;
private
final
String
name
;
ApplySource
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getName
()
{
return
name
;
}
@Override
public
String
toString
()
{
return
name
;
}
}
src/main/java/cn/quantgroup/xyqb/model/sms/SmsMerchant.java
View file @
be7bc113
...
...
@@ -31,7 +31,11 @@ public enum SmsMerchant {
CIRCULATION_QUOTA
(
17
,
1
,
"外部循环额度"
),
FLYING_COW_TO_BORROW
(
18
,
5033
,
"飞牛贷"
),
VCC
(
20
,
5108
,
"VCC-真享花,vcc-talos"
),
ZXH
(
20
,
5337
,
"信用钱包马甲包"
);
ZXH
(
20
,
5337
,
"信用钱包马甲包"
),
STMS
(
22
,
5641
,
"stms短信"
)
;
private
int
merchantId
;
private
int
contentId
;
...
...
src/main/java/cn/quantgroup/xyqb/repository/IModifyPhoneRecordRepository.java
View file @
be7bc113
...
...
@@ -3,7 +3,18 @@ package cn.quantgroup.xyqb.repository;
import
cn.quantgroup.xyqb.entity.UserModifyPhoneRecord
;
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
IModifyPhoneRecordRepository
extends
JpaRepository
<
UserModifyPhoneRecord
,
Long
>,
JpaSpecificationExecutor
<
UserModifyPhoneRecord
>
{
@Query
(
nativeQuery
=
true
,
value
=
"select * from user_modify_phone_record "
+
"where user_id = :userId "
+
"order by created_at desc limit 1"
)
UserModifyPhoneRecord
findLastRecord
(
@Param
(
"userId"
)
Long
userId
);
@Query
(
nativeQuery
=
true
,
value
=
"select * from user_modify_phone_record "
+
"where prev_phone_no = :prevPhoneNo "
+
"order by created_at desc limit 1"
)
UserModifyPhoneRecord
modifyRecord
(
@Param
(
"prevPhoneNo"
)
String
prevPhoneNo
);
}
src/main/java/cn/quantgroup/xyqb/service/user/IModifyPhoneNoService.java
View file @
be7bc113
...
...
@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.user;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.*
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.ProgressResp
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.UserModifyPhoneRecordResp
;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
import
cn.quantgroup.xyqb.entity.UserModifyPhoneRecord
;
import
org.springframework.data.domain.Page
;
...
...
@@ -37,4 +38,12 @@ public interface IModifyPhoneNoService {
void
financialSubmitModify
(
ModifyPhoneRecord
modifyPhoneRecord
);
Page
<
UserModifyPhoneRecord
>
query
(
Long
userId
,
int
pageNo
,
int
pageSize
);
void
clientSubmitModify
(
ModifyPhoneRecord
modifyPhoneRecord
);
UserModifyPhoneRecordResp
getLastRecord
(
Long
userId
);
void
saveRejectReason
(
ModifyRejectRecord
modifyRejectRecord
);
UserModifyPhoneRecordResp
modifyRecord
(
String
prevPhoneNo
);
}
src/main/java/cn/quantgroup/xyqb/service/user/impl/ModifyPhoneNoServiceImpl.java
View file @
be7bc113
...
...
@@ -4,9 +4,11 @@ import cn.quantgroup.kms.qiniu.QiniuAuth;
import
cn.quantgroup.xyqb.aspect.limit.AccessLimit
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.req.*
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.ProgressResp
;
import
cn.quantgroup.xyqb.controller.modifyphoneno.resp.UserModifyPhoneRecordResp
;
import
cn.quantgroup.xyqb.entity.ModifyPhoneNo
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserModifyPhoneRecord
;
import
cn.quantgroup.xyqb.entity.enums.ApplySource
;
import
cn.quantgroup.xyqb.entity.enums.Reason
;
import
cn.quantgroup.xyqb.exception.AppletException
;
import
cn.quantgroup.xyqb.exception.DataException
;
...
...
@@ -22,6 +24,7 @@ import cn.quantgroup.xyqb.service.session.ISessionService;
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.AESUtils
;
import
cn.quantgroup.xyqb.util.DateUtils
;
import
cn.quantgroup.xyqb.util.RedisLock
;
import
cn.quantgroup.xyqb.util.TenantUtil
;
...
...
@@ -130,6 +133,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
modifyPhoneNo
.
setIdCardFaceUrl
(
step2Req
.
getIdCardFaceUrl
());
modifyPhoneNo
.
setIdCardRearUrl
(
step2Req
.
getIdCardRearUrl
());
modifyPhoneNo
.
setIdCardHoldUrl
(
step2Req
.
getIdCardHoldUrl
());
modifyPhoneNo
.
setApplySource
(
ApplySource
.
CLIENT
);
modifyPhoneNo
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
INIT
.
ordinal
());
modifyPhoneNo
.
setProcessingStatus
(
ModifyPhoneNoProcessingStatusEnum
.
INIT
.
ordinal
());
}
...
...
@@ -272,6 +276,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
public
void
submitModify
(
ModifyPhoneRecord
modifyPhoneRecord
)
{
String
lockKey
=
"modifyPhone:"
.
concat
(
modifyPhoneRecord
.
getCurPhoneNo
());
RedisLock
lock
=
new
RedisLock
(
redisTemplate
,
lockKey
);
modifyPhoneRecord
.
setApplySource
(
ApplySource
.
BACKGROUND
);
try
{
if
(
lock
.
lock
())
{
if
(
modifyPhoneRecord
.
getCurPhoneNo
().
equals
(
modifyPhoneRecord
.
getPrevPhoneNo
()))
{
...
...
@@ -302,19 +307,24 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
parameters
.
put
(
"changeRecord"
,
modifyPhoneRecord
.
getReason
().
toString
());
String
resultStr
=
httpService
.
postJson
(
userHost
+
"/api/finance-gateway/finance-user/shop/notify/changePhoneNo"
,
headers
,
parameters
);
JsonResult
resultStrJson
=
JSONObject
.
parseObject
(
resultStr
,
JsonResult
.
class
);
UserModifyPhoneRecord
record
=
new
UserModifyPhoneRecord
();
BeanUtils
.
copyProperties
(
modifyPhoneRecord
,
record
);
// 如果有返回值
if
(
"0000"
.
equals
(
resultStrJson
.
getBusinessCode
())
||
"4014"
.
equals
(
resultStrJson
.
getBusinessCode
()))
{
// 同步金融修改电商
userService
.
submitModifyPhone
(
modifyPhoneRecord
.
getPrevPhoneNo
(),
modifyPhoneRecord
.
getCurPhoneNo
());
UserModifyPhoneRecord
record
=
new
UserModifyPhoneRecord
();
BeanUtils
.
copyProperties
(
modifyPhoneRecord
,
record
);
record
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
DONE
.
ordinal
());
record
.
setFinancialResponse
(
JSONObject
.
toJSONString
(
resultStrJson
));
modifyPhoneRecordRepository
.
saveAndFlush
(
record
);
//登出此用户
sessionService
.
deleteByUserId
(
user
.
getId
());
}
else
{
String
msg
=
resultStrJson
.
getMsg
();
throw
new
DataException
(
"金融返回失败"
+
(
StringUtils
.
isNotBlank
(
msg
)
?
":"
+
msg
:
""
));
String
msg
=
"金融返回失败"
+
(
StringUtils
.
isNotBlank
(
resultStrJson
.
getMsg
())
?
":"
+
resultStrJson
.
getMsg
()
:
""
);
record
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
NO_ALLOW
.
ordinal
());
record
.
setFinancialResponse
(
JSONObject
.
toJSONString
(
resultStrJson
));
record
.
setApplyStatusReason
(
msg
);
modifyPhoneRecordRepository
.
saveAndFlush
(
record
);
throw
new
DataException
(
msg
);
}
}
...
...
@@ -350,6 +360,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
userService
.
submitModifyPhone
(
modifyPhoneRecord
.
getPrevPhoneNo
(),
modifyPhoneRecord
.
getCurPhoneNo
());
UserModifyPhoneRecord
record
=
new
UserModifyPhoneRecord
();
BeanUtils
.
copyProperties
(
modifyPhoneRecord
,
record
);
record
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
DONE
.
ordinal
());
record
.
setUserId
(
user
.
getId
());
modifyPhoneRecordRepository
.
saveAndFlush
(
record
);
//登出此用户
...
...
@@ -378,6 +389,134 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
return
userModifyPhoneRecord
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
clientSubmitModify
(
ModifyPhoneRecord
modifyPhoneRecord
)
{
String
lockKey
=
"modifyPhone:"
.
concat
(
modifyPhoneRecord
.
getCurPhoneNo
());
RedisLock
lock
=
new
RedisLock
(
redisTemplate
,
lockKey
);
try
{
if
(
lock
.
lock
())
{
if
(
modifyPhoneRecord
.
getCurPhoneNo
().
equals
(
modifyPhoneRecord
.
getPrevPhoneNo
()))
{
throw
new
DataException
(
"新手机号与原手机号相同"
);
}
User
userByCurPhoneNo
=
userService
.
findByPhoneInDb
(
modifyPhoneRecord
.
getCurPhoneNo
());
if
(
Objects
.
nonNull
(
userByCurPhoneNo
)){
throw
new
DataException
(
"新手机号已存在,不支持更换"
);
}
User
user
=
userService
.
findByPhoneInDb
(
modifyPhoneRecord
.
getPrevPhoneNo
());
if
(
user
==
null
)
{
throw
new
AppletException
(
"用户不存在"
,
"1001"
);
}
if
(!
modifyPhoneRecord
.
getPrevPhoneNo
().
equals
(
user
.
getPhoneNo
())
&&
!
modifyPhoneRecord
.
getPrevPhoneNo
().
equals
(
user
.
getEncryptedPhoneNo
()))
{
throw
new
DataException
(
"原手机号填写不符"
);
}
// 请求其他系统信息
HashMap
<
String
,
String
>
parameters
=
new
HashMap
<>();
HashMap
<
String
,
String
>
headers
=
new
HashMap
<>();
headers
.
put
(
"qg-tenant-id"
,
TenantUtil
.
TENANT_DEFAULT
.
toString
());
parameters
.
put
(
"oldPhoneNo"
,
modifyPhoneRecord
.
getPrevPhoneNo
());
parameters
.
put
(
"phoneNo"
,
modifyPhoneRecord
.
getCurPhoneNo
());
parameters
.
put
(
"exUserId"
,
String
.
valueOf
(
modifyPhoneRecord
.
getUserId
()));
parameters
.
put
(
"remark"
,
modifyPhoneRecord
.
getRemark
());
parameters
.
put
(
"changeRecord"
,
Reason
.
SYNCHRONOUSCHANGE
.
toString
());
String
resultStr
=
httpService
.
postJson
(
userHost
+
"/api/finance-gateway/finance-user/shop/notify/changePhoneNo"
,
headers
,
parameters
);
JsonResult
resultStrJson
=
JSONObject
.
parseObject
(
resultStr
,
JsonResult
.
class
);
UserModifyPhoneRecord
record
=
new
UserModifyPhoneRecord
();
BeanUtils
.
copyProperties
(
modifyPhoneRecord
,
record
);
record
.
setApplySource
(
ApplySource
.
CLIENT
);
record
.
setReason
(
Reason
.
ABANDONED
);
record
.
setOperator
(
String
.
valueOf
(
user
.
getId
()));
// 如果有返回值
if
(
"0000"
.
equals
(
resultStrJson
.
getBusinessCode
())
||
"4014"
.
equals
(
resultStrJson
.
getBusinessCode
()))
{
// 同步金融修改电商
userService
.
submitModifyPhone
(
modifyPhoneRecord
.
getPrevPhoneNo
(),
modifyPhoneRecord
.
getCurPhoneNo
());
record
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
DONE
.
ordinal
());
record
.
setFinancialResponse
(
JSONObject
.
toJSONString
(
resultStrJson
));
modifyPhoneRecordRepository
.
saveAndFlush
(
record
);
//登出此用户
sessionService
.
deleteByUserId
(
user
.
getId
());
}
else
{
String
msg
=
"金融返回失败"
+
(
StringUtils
.
isNotBlank
(
resultStrJson
.
getMsg
())
?
":"
+
resultStrJson
.
getMsg
()
:
""
);
record
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
NO_ALLOW
.
ordinal
());
record
.
setFinancialResponse
(
JSONObject
.
toJSONString
(
resultStrJson
));
record
.
setApplyStatusReason
(
msg
);
modifyPhoneRecordRepository
.
saveAndFlush
(
record
);
throw
new
DataException
(
msg
);
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"用户端修改手机号失败--{}, 原因:---"
,
JSONObject
.
toJSONString
(
modifyPhoneRecord
),
e
);
String
failString
=
String
.
format
(
"用户端修改手机号失败--%s"
,
e
.
getMessage
());
throw
new
DataException
(
failString
);
}
finally
{
lock
.
unlock
();
}
}
@Override
public
UserModifyPhoneRecordResp
getLastRecord
(
Long
userId
)
{
UserModifyPhoneRecord
lastRecord
=
modifyPhoneRecordRepository
.
findLastRecord
(
userId
);
if
(
Objects
.
nonNull
(
lastRecord
))
{
UserModifyPhoneRecordResp
userModifyPhoneRecordResp
=
new
UserModifyPhoneRecordResp
();
userModifyPhoneRecordResp
.
setId
(
lastRecord
.
getId
());
userModifyPhoneRecordResp
.
setUserId
(
lastRecord
.
getUserId
());
userModifyPhoneRecordResp
.
setPrevPhoneNo
(
lastRecord
.
getPrevPhoneNo
());
userModifyPhoneRecordResp
.
setCurPhoneNo
(
lastRecord
.
getCurPhoneNo
());
userModifyPhoneRecordResp
.
setReason
(
lastRecord
.
getReason
().
name
());
userModifyPhoneRecordResp
.
setRemark
(
lastRecord
.
getRemark
());
userModifyPhoneRecordResp
.
setOperationAt
(
lastRecord
.
getCreatedAt
());
return
userModifyPhoneRecordResp
;
}
else
{
return
null
;
}
}
@Override
public
void
saveRejectReason
(
ModifyRejectRecord
modifyRejectRecord
)
{
User
user
=
userService
.
findById
(
modifyRejectRecord
.
getUserId
());
if
(
user
==
null
)
{
throw
new
AppletException
(
"用户不存在"
,
"1001"
);
}
UserModifyPhoneRecord
record
=
new
UserModifyPhoneRecord
();
record
.
setUserId
(
modifyRejectRecord
.
getUserId
());
record
.
setReason
(
Reason
.
ORTHER
);
record
.
setRemark
(
modifyRejectRecord
.
getRemark
());
record
.
setPrevPhoneNo
(
modifyRejectRecord
.
getPrevPhoneNo
());
record
.
setCurPhoneNo
(
modifyRejectRecord
.
getCurPhoneNo
());
record
.
setApplyStatus
(
ModifyPhoneNoApplyStatusEnum
.
NO_ALLOW
.
ordinal
());
if
(
Objects
.
isNull
(
record
.
getApplySource
()))
{
record
.
setApplySource
(
ApplySource
.
CLIENT
);
}
record
.
setOperator
(
"外部系统"
);
record
.
setApplyStatusReason
(
modifyRejectRecord
.
getRejectReason
());
modifyPhoneRecordRepository
.
saveAndFlush
(
record
);
}
@Override
public
UserModifyPhoneRecordResp
modifyRecord
(
String
prevPhoneNo
)
{
String
ciphertext
=
AESUtils
.
encryptV2
(
prevPhoneNo
);
UserModifyPhoneRecord
userModifyPhoneRecord
=
modifyPhoneRecordRepository
.
modifyRecord
(
ciphertext
);
if
(
Objects
.
nonNull
(
userModifyPhoneRecord
))
{
UserModifyPhoneRecordResp
userModifyPhoneRecordResp
=
new
UserModifyPhoneRecordResp
();
userModifyPhoneRecordResp
.
setId
(
userModifyPhoneRecord
.
getId
());
userModifyPhoneRecordResp
.
setUserId
(
userModifyPhoneRecord
.
getUserId
());
userModifyPhoneRecordResp
.
setPrevPhoneNo
(
userModifyPhoneRecord
.
getPrevPhoneNo
());
userModifyPhoneRecordResp
.
setCurPhoneNo
(
userModifyPhoneRecord
.
getCurPhoneNo
());
userModifyPhoneRecordResp
.
setReason
(
userModifyPhoneRecord
.
getReason
().
name
());
userModifyPhoneRecordResp
.
setRemark
(
userModifyPhoneRecord
.
getRemark
());
userModifyPhoneRecordResp
.
setCreatedAt
(
userModifyPhoneRecord
.
getCreatedAt
());
userModifyPhoneRecordResp
.
setApplySource
(
userModifyPhoneRecord
.
getApplySource
());
userModifyPhoneRecordResp
.
setApplyStatus
(
userModifyPhoneRecord
.
getApplyStatus
());
userModifyPhoneRecordResp
.
setApplyStatusReason
(
userModifyPhoneRecord
.
getApplyStatusReason
());
return
userModifyPhoneRecordResp
;
}
else
{
return
null
;
}
}
private
Pageable
getPageable
(
int
currentPage
,
int
pageSize
)
{
return
new
PageRequest
(
currentPage
-
1
,
pageSize
,
new
Sort
(
Sort
.
Direction
.
DESC
,
"id"
));
}
...
...
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