Bläddra i källkod

Merge branch 'dev/2024/0717/update-app-Y' of Harper/feifan-backend-zx-app into master

添加银行账号和支付宝账号的校验
Yangzw 8 månader sedan
förälder
incheckning
2288ce724d

+ 7 - 0
feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/enums/DictTypeConstants.java

@@ -1,5 +1,7 @@
 package cn.newfeifan.mall.module.member.enums;
 
+import java.util.regex.Pattern;
+
 /**
  * Member 字典类型的枚举类
  *
@@ -20,4 +22,9 @@ public interface DictTypeConstants {
 
     Long MOBILE_REGISTER_MAX = 10L;
 
+    Pattern PHONE_NUMBER_PATTERN = Pattern.compile("^1[3-9]\\d{9}$");
+
+    String EMAIL_PATTERN = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";
+    Pattern PATTERN = Pattern.compile(EMAIL_PATTERN, Pattern.CASE_INSENSITIVE);
+
 }

+ 14 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/user/AppMemberUserController.java

@@ -57,6 +57,20 @@ public class AppMemberUserController {
         return success(true);
     }
 
+    @PutMapping("/updateByAlipayAccount")
+    @Operation(summary = "修改用户支付宝账号")
+    public CommonResult<Boolean> updateUserByAlipayAccount(@RequestBody @Valid AppMemberUserUpdateAlipayAccountReqVO reqVO) {
+        userService.updateUserByAlipayAccount(getLoginUserId(), reqVO);
+        return success(true);
+    }
+
+    @PutMapping("/updateByBankAccount")
+    @Operation(summary = "修改用户银行账号")
+    public CommonResult<Boolean> updateByBankAccount(@RequestBody @Valid AppMemberUserUpdateBankAccountReqVO reqVO) {
+        userService.updateUserByBankAccount(getLoginUserId(), reqVO);
+        return success(true);
+    }
+
     @PutMapping("/update-mobile")
     @Operation(summary = "修改用户手机")
     @PreAuthenticated

+ 23 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/user/vo/AppMemberUserUpdateAlipayAccountReqVO.java

@@ -0,0 +1,23 @@
+package cn.newfeifan.mall.module.member.controller.app.user.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "用户 APP - 修改支付宝账号 Request VO")
+@Data
+public class AppMemberUserUpdateAlipayAccountReqVO {
+
+    @Schema(description = "支付宝认证名称")
+    @NotNull(message = "支付宝认证名称不能为空")
+    @NotEmpty(message = "支付宝认证名称不能为空")
+    private String alipayName;
+
+    @Schema(description = "支付宝账号")
+    @NotNull(message = "支付宝账号不能为空")
+    @NotEmpty(message = "支付宝账号不能为空")
+    private String alipayAccount;
+
+}

+ 28 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/user/vo/AppMemberUserUpdateBankAccountReqVO.java

@@ -0,0 +1,28 @@
+package cn.newfeifan.mall.module.member.controller.app.user.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "用户 APP - 修改支付宝账号 Request VO")
+@Data
+public class AppMemberUserUpdateBankAccountReqVO {
+
+    @Schema(description = "开户行名称")
+    @NotNull(message = "开户行名称不能为空")
+    @NotEmpty(message = "开户行名称不能为空")
+    private String bankName;
+
+    @Schema(description = "开户名")
+    @NotNull(message = "开户名不能为空")
+    @NotEmpty(message = "开户名不能为空")
+    private String accountName;
+
+    @Schema(description = "银行账号")
+    @NotNull(message = "银行账号不能为空")
+    @NotEmpty(message = "银行账号不能为空")
+    private String bankAccount;
+
+}

+ 14 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserService.java

@@ -228,4 +228,18 @@ public interface MemberUserService {
      * @return 用户
      */
     MemberUserDO getUserByMobile(String mobile, Long userId);
+
+    /**
+     * 更新用户支付宝账号
+     * @param loginUserId 用户编号
+     * @param reqVO 请求信息
+     */
+    void updateUserByAlipayAccount(Long loginUserId, AppMemberUserUpdateAlipayAccountReqVO reqVO);
+
+    /**
+     * 更新用户支付宝账号
+     * @param loginUserId 用户编号
+     * @param reqVO 请求信息
+     */
+    void updateUserByBankAccount(Long loginUserId, AppMemberUserUpdateBankAccountReqVO reqVO);
 }

+ 56 - 1
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.*;
 import cn.newfeifan.mall.framework.common.enums.CommonStatusEnum;
 import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
+import cn.newfeifan.mall.framework.common.exception.ErrorCode;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 import cn.newfeifan.mall.module.member.controller.admin.user.vo.MemberUserPageReqVO;
@@ -30,6 +31,8 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.regex.Matcher;
+
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.time.LocalDateTime;
@@ -38,7 +41,7 @@ import java.util.List;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.framework.common.util.servlet.ServletUtils.getClientIP;
-import static cn.newfeifan.mall.module.member.enums.DictTypeConstants.MOBILE_REGISTER_MAX;
+import static cn.newfeifan.mall.module.member.enums.DictTypeConstants.*;
 import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.*;
 
 /**
@@ -401,4 +404,56 @@ public class MemberUserServiceImpl implements MemberUserService {
         return memberUserMapper.selectOne(MemberUserDO::getMobile, mobile, MemberUserDO::getId,userId);
     }
 
+    @Override
+    public void updateUserByAlipayAccount(Long loginUserId, AppMemberUserUpdateAlipayAccountReqVO reqVO) {
+        if(isValidPhoneNumber(reqVO.getAlipayAccount()) || validateEmail(reqVO.getAlipayAccount())){
+            MemberUserDO user = BeanUtils.toBean(reqVO, MemberUserDO.class);
+            user.setId(loginUserId);
+            memberUserMapper.updateById(user);
+        }else{
+            ErrorCode ALIPAY_ACCOUNT_ERROR = new ErrorCode(1_004_001_000, "支付宝账号格式错误");
+            throw exception(ALIPAY_ACCOUNT_ERROR);
+        }
+    }
+
+    @Override
+    public void updateUserByBankAccount(Long loginUserId, AppMemberUserUpdateBankAccountReqVO reqVO) {
+        if(!isAccountFormatValid(reqVO.getBankAccount())){
+            ErrorCode BANK_COUNT_ERROR = new ErrorCode(1_004_001_000, "银行账号格式错误");
+            throw exception(BANK_COUNT_ERROR);
+        }
+
+        MemberUserDO user = BeanUtils.toBean(reqVO, MemberUserDO.class);
+        user.setId(loginUserId);
+        memberUserMapper.updateById(user);
+    }
+
+    /**
+     * 校验手机号码
+     * @param phoneNumber 手机号
+     * @return 是否合法
+     */
+    private boolean isValidPhoneNumber(String phoneNumber) {
+        return PHONE_NUMBER_PATTERN.matcher(phoneNumber).matches();
+    }
+
+    /**
+     * 校验邮箱
+     * @param email 邮箱
+     * @return 是否合法
+     */
+    private boolean validateEmail(String email) {
+        Matcher matcher = PATTERN.matcher(email);
+        return matcher.find();
+    }
+
+    /**
+     * 校验银行账号
+     * @param accountNumber 银行账号
+     * @return 是否合法
+     */
+    private boolean isAccountFormatValid(String accountNumber) {
+        return accountNumber.matches("^\\d{9,18}$");
+    }
+
 }