Commit 979438b9 authored by 赵浩琳's avatar 赵浩琳

用户端修改手机号

parent 67ce7215
...@@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; 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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -83,6 +84,11 @@ public class SmsController implements IBaseController { ...@@ -83,6 +84,11 @@ public class SmsController implements IBaseController {
return sendVerificationCode2(phoneNo, randomCode, appName, smsMerchant); 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));
}
/** /**
* 短信验证码 : 重置密码 * 短信验证码 : 重置密码
* *
......
...@@ -206,13 +206,13 @@ public class InnerController implements IBaseController { ...@@ -206,13 +206,13 @@ public class InnerController implements IBaseController {
public JsonResult findByPhoneNo(String phoneNo, Integer tenantId) { public JsonResult findByPhoneNo(String phoneNo, Integer tenantId) {
User user = userService.findByPhoneInDb(phoneNo); User user = userService.findByPhoneInDb(phoneNo);
if (user == null) { if (user == null) {
return JsonResult.buildErrorStateResult("查无此人", null); return JsonResult.buildErrorStateResult("查无此人", null, 4L);
} }
if (tenantId != null && !TenantUtil.TENANT_DEFAULT.equals(tenantId)) { if (tenantId != null && !TenantUtil.TENANT_DEFAULT.equals(tenantId)) {
// userId 查询对应productLogin 获取手机号和customerId // userId 查询对应productLogin 获取手机号和customerId
user = tenantService.getTenantUser(user, tenantId); user = tenantService.getTenantUser(user, tenantId);
if (user == null) { if (user == null) {
return JsonResult.buildErrorStateResult("查无此人", null); return JsonResult.buildErrorStateResult("查无此人", null, 4L);
} }
} }
UserRet userRet = new UserRet(user); UserRet userRet = new UserRet(user);
......
...@@ -133,6 +133,17 @@ public class ModifyPhoneNoController implements IBaseController { ...@@ -133,6 +133,17 @@ public class ModifyPhoneNoController implements IBaseController {
return JsonResult.buildSuccessResult(); return JsonResult.buildSuccessResult();
} }
/**
* 用户端修改手机号
* @param modifyPhoneRecord
* @return
*/
@PostMapping("/client/submitModify")
public JsonResult clientSubmitModify(@Valid @RequestBody ModifyPhoneRecord modifyPhoneRecord) {
modifyPhoneNoService.clientSubmitModify(modifyPhoneRecord);
return JsonResult.buildSuccessResult();
}
@PostMapping( "/modifyPhoneNolist") @PostMapping( "/modifyPhoneNolist")
public JsonResult getModifyPhoneNolist(@RequestParam("userId") Long userId, public JsonResult getModifyPhoneNolist(@RequestParam("userId") Long userId,
@RequestParam(value = "pageNo", defaultValue = "1", required = false) int pageNo, @RequestParam(value = "pageNo", defaultValue = "1", required = false) int pageNo,
...@@ -147,4 +158,15 @@ public class ModifyPhoneNoController implements IBaseController { ...@@ -147,4 +158,15 @@ public class ModifyPhoneNoController implements IBaseController {
return JsonResult.buildSuccessResult("修改手机号列表", pageData); 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(){
//
// }
} }
package cn.quantgroup.xyqb.controller.modifyphoneno.req; 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.entity.enums.Reason;
import cn.quantgroup.xyqb.util.ValidationUtil; import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.Data; import lombok.Data;
...@@ -32,4 +33,9 @@ public class ModifyPhoneRecord implements Serializable { ...@@ -32,4 +33,9 @@ public class ModifyPhoneRecord implements Serializable {
// @NotBlank(message = "备注不能为空") // @NotBlank(message = "备注不能为空")
private String remark; private String remark;
/**
* 申请来源
*/
private ApplySource applySource;
} }
package cn.quantgroup.xyqb.controller.modifyphoneno.resp; package cn.quantgroup.xyqb.controller.modifyphoneno.resp;
import cn.quantgroup.xyqb.entity.enums.ApplySource;
import cn.quantgroup.xyqb.entity.enums.Reason; import cn.quantgroup.xyqb.entity.enums.Reason;
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.Column;
import lombok.Data; import lombok.Data;
import java.sql.Timestamp; import java.sql.Timestamp;
...@@ -26,4 +29,13 @@ public class UserModifyPhoneRecordResp { ...@@ -26,4 +29,13 @@ public class UserModifyPhoneRecordResp {
private Timestamp createdAt; private Timestamp createdAt;
private Timestamp updatedAt; 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;
} }
package cn.quantgroup.xyqb.entity; package cn.quantgroup.xyqb.entity;
import cn.quantgroup.xyqb.entity.enums.ApplySource;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable; import java.io.Serializable;
import javax.persistence.Column; import javax.persistence.Column;
...@@ -85,4 +86,10 @@ public class ModifyPhoneNo extends BaseEntity implements Serializable { ...@@ -85,4 +86,10 @@ public class ModifyPhoneNo extends BaseEntity implements Serializable {
*/ */
@Column(name = "processing_status") @Column(name = "processing_status")
private Integer processingStatus; private Integer processingStatus;
/**
* 申请来源
*/
@Column(name = "apply_source")
private ApplySource applySource;
} }
package cn.quantgroup.xyqb.entity; package cn.quantgroup.xyqb.entity;
import cn.quantgroup.xyqb.entity.enums.ApplySource;
import cn.quantgroup.xyqb.entity.enums.Reason; import cn.quantgroup.xyqb.entity.enums.Reason;
import cn.quantgroup.xyqb.util.encrypt.CryptConverter; import cn.quantgroup.xyqb.util.encrypt.CryptConverter;
import javax.persistence.Convert; import javax.persistence.Convert;
...@@ -40,4 +41,22 @@ public class UserModifyPhoneRecord extends BaseEntity implements Serializable { ...@@ -40,4 +41,22 @@ public class UserModifyPhoneRecord extends BaseEntity implements Serializable {
@Column(name = "financial_response") @Column(name = "financial_response")
private String financialResponse; 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;
} }
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;
}
}
...@@ -3,7 +3,13 @@ package cn.quantgroup.xyqb.repository; ...@@ -3,7 +3,13 @@ package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.UserModifyPhoneRecord; import cn.quantgroup.xyqb.entity.UserModifyPhoneRecord;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 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> { 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);
} }
...@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.user; ...@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.controller.modifyphoneno.req.*; import cn.quantgroup.xyqb.controller.modifyphoneno.req.*;
import cn.quantgroup.xyqb.controller.modifyphoneno.resp.ProgressResp; 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.ModifyPhoneNo;
import cn.quantgroup.xyqb.entity.UserModifyPhoneRecord; import cn.quantgroup.xyqb.entity.UserModifyPhoneRecord;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
...@@ -37,4 +38,8 @@ public interface IModifyPhoneNoService { ...@@ -37,4 +38,8 @@ public interface IModifyPhoneNoService {
void financialSubmitModify(ModifyPhoneRecord modifyPhoneRecord); void financialSubmitModify(ModifyPhoneRecord modifyPhoneRecord);
Page<UserModifyPhoneRecord> query(Long userId, int pageNo, int pageSize); Page<UserModifyPhoneRecord> query(Long userId, int pageNo, int pageSize);
void clientSubmitModify(ModifyPhoneRecord modifyPhoneRecord);
UserModifyPhoneRecordResp getLastRecord(Long userId);
} }
...@@ -4,9 +4,11 @@ import cn.quantgroup.kms.qiniu.QiniuAuth; ...@@ -4,9 +4,11 @@ import cn.quantgroup.kms.qiniu.QiniuAuth;
import cn.quantgroup.xyqb.aspect.limit.AccessLimit; import cn.quantgroup.xyqb.aspect.limit.AccessLimit;
import cn.quantgroup.xyqb.controller.modifyphoneno.req.*; import cn.quantgroup.xyqb.controller.modifyphoneno.req.*;
import cn.quantgroup.xyqb.controller.modifyphoneno.resp.ProgressResp; 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.ModifyPhoneNo;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserModifyPhoneRecord; import cn.quantgroup.xyqb.entity.UserModifyPhoneRecord;
import cn.quantgroup.xyqb.entity.enums.ApplySource;
import cn.quantgroup.xyqb.entity.enums.Reason; import cn.quantgroup.xyqb.entity.enums.Reason;
import cn.quantgroup.xyqb.exception.AppletException; import cn.quantgroup.xyqb.exception.AppletException;
import cn.quantgroup.xyqb.exception.DataException; import cn.quantgroup.xyqb.exception.DataException;
...@@ -130,6 +132,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService { ...@@ -130,6 +132,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
modifyPhoneNo.setIdCardFaceUrl(step2Req.getIdCardFaceUrl()); modifyPhoneNo.setIdCardFaceUrl(step2Req.getIdCardFaceUrl());
modifyPhoneNo.setIdCardRearUrl(step2Req.getIdCardRearUrl()); modifyPhoneNo.setIdCardRearUrl(step2Req.getIdCardRearUrl());
modifyPhoneNo.setIdCardHoldUrl(step2Req.getIdCardHoldUrl()); modifyPhoneNo.setIdCardHoldUrl(step2Req.getIdCardHoldUrl());
modifyPhoneNo.setApplySource(ApplySource.CLIENT);
modifyPhoneNo.setApplyStatus(ModifyPhoneNoApplyStatusEnum.INIT.ordinal()); modifyPhoneNo.setApplyStatus(ModifyPhoneNoApplyStatusEnum.INIT.ordinal());
modifyPhoneNo.setProcessingStatus(ModifyPhoneNoProcessingStatusEnum.INIT.ordinal()); modifyPhoneNo.setProcessingStatus(ModifyPhoneNoProcessingStatusEnum.INIT.ordinal());
} }
...@@ -272,6 +275,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService { ...@@ -272,6 +275,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
public void submitModify(ModifyPhoneRecord modifyPhoneRecord) { public void submitModify(ModifyPhoneRecord modifyPhoneRecord) {
String lockKey = "modifyPhone:".concat(modifyPhoneRecord.getCurPhoneNo()); String lockKey = "modifyPhone:".concat(modifyPhoneRecord.getCurPhoneNo());
RedisLock lock = new RedisLock(redisTemplate, lockKey); RedisLock lock = new RedisLock(redisTemplate, lockKey);
modifyPhoneRecord.setApplySource(ApplySource.BACKGROUND);
try { try {
if (lock.lock()) { if (lock.lock()) {
if (modifyPhoneRecord.getCurPhoneNo().equals(modifyPhoneRecord.getPrevPhoneNo())) { if (modifyPhoneRecord.getCurPhoneNo().equals(modifyPhoneRecord.getPrevPhoneNo())) {
...@@ -302,19 +306,24 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService { ...@@ -302,19 +306,24 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
parameters.put("changeRecord", modifyPhoneRecord.getReason().toString()); parameters.put("changeRecord", modifyPhoneRecord.getReason().toString());
String resultStr = httpService.postJson(userHost + "/api/finance-gateway/finance-user/shop/notify/changePhoneNo", headers, parameters); String resultStr = httpService.postJson(userHost + "/api/finance-gateway/finance-user/shop/notify/changePhoneNo", headers, parameters);
JsonResult resultStrJson = JSONObject.parseObject(resultStr, JsonResult.class); JsonResult resultStrJson = JSONObject.parseObject(resultStr, JsonResult.class);
UserModifyPhoneRecord record = new UserModifyPhoneRecord();
BeanUtils.copyProperties(modifyPhoneRecord, record);
// 如果有返回值 // 如果有返回值
if ("0000".equals(resultStrJson.getBusinessCode()) || "4014".equals(resultStrJson.getBusinessCode())) { if ("0000".equals(resultStrJson.getBusinessCode()) || "4014".equals(resultStrJson.getBusinessCode())) {
// 同步金融修改电商 // 同步金融修改电商
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo()); userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo());
UserModifyPhoneRecord record = new UserModifyPhoneRecord(); record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.DONE.ordinal());
BeanUtils.copyProperties(modifyPhoneRecord, record);
record.setFinancialResponse(JSONObject.toJSONString(resultStrJson)); record.setFinancialResponse(JSONObject.toJSONString(resultStrJson));
modifyPhoneRecordRepository.saveAndFlush(record); modifyPhoneRecordRepository.saveAndFlush(record);
//登出此用户 //登出此用户
sessionService.deleteByUserId(user.getId()); sessionService.deleteByUserId(user.getId());
} else { } else {
String msg = resultStrJson.getMsg(); String msg = "金融返回失败" + (StringUtils.isNotBlank(resultStrJson.getMsg()) ? ":" + resultStrJson.getMsg() : "");
throw new DataException("金融返回失败" + (StringUtils.isNotBlank(msg) ? ":" + msg : "")); record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.NO_ALLOW.ordinal());
record.setFinancialResponse(JSONObject.toJSONString(resultStrJson));
record.setApplyStatusReason(msg);
modifyPhoneRecordRepository.saveAndFlush(record);
throw new DataException(msg);
} }
} }
...@@ -350,6 +359,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService { ...@@ -350,6 +359,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo()); userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo());
UserModifyPhoneRecord record = new UserModifyPhoneRecord(); UserModifyPhoneRecord record = new UserModifyPhoneRecord();
BeanUtils.copyProperties(modifyPhoneRecord, record); BeanUtils.copyProperties(modifyPhoneRecord, record);
record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.DONE.ordinal());
record.setUserId(user.getId()); record.setUserId(user.getId());
modifyPhoneRecordRepository.saveAndFlush(record); modifyPhoneRecordRepository.saveAndFlush(record);
//登出此用户 //登出此用户
...@@ -378,6 +388,57 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService { ...@@ -378,6 +388,57 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
return userModifyPhoneRecord; 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 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("原手机号填写不符");
}
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo());
UserModifyPhoneRecord record = new UserModifyPhoneRecord();
BeanUtils.copyProperties(modifyPhoneRecord, record);
record.setUserId(user.getId());
record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.DONE.ordinal());
record.setApplySource(ApplySource.CLIENT);
modifyPhoneRecordRepository.saveAndFlush(record);
//登出此用户
sessionService.deleteByUserId(user.getId());
}
} 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);
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;
}
private Pageable getPageable(int currentPage, int pageSize) { private Pageable getPageable(int currentPage, int pageSize) {
return new PageRequest(currentPage - 1, pageSize, new Sort(Sort.Direction.DESC, "id")); return new PageRequest(currentPage - 1, pageSize, new Sort(Sort.Direction.DESC, "id"));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment