diff --git a/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java index be7606697..5f7910999 100644 --- a/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java +++ b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java @@ -46,7 +46,22 @@ public enum CustomerExceptionEnum implements AbstractExceptionEnum { /** * 用户状态异常 */ - CUSTOMER_STATUS_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "02", "用户被禁用,请联系管理员!{}"); + CUSTOMER_STATUS_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "02", "用户被禁用,请联系管理员!{}"), + + /** + * 用户未激活 + */ + CUSTOMER_NOT_VERIFIED(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "03", "用户未激活,请查阅注册邮箱中的激活邮件并点击链接!"), + + /** + * 账号重复,请更换账号 + */ + ACCOUNT_REPEAT(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "04", "账号重复,请更换账号"), + + /** + * 邮箱重复,请更换邮箱 + */ + EMAIL_REPEAT(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "05", "邮箱重复,请更换邮箱"); /** * 错误编码 diff --git a/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/expander/CustomerConfigExpander.java b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/expander/CustomerConfigExpander.java index 18b2895f4..b7fcda572 100644 --- a/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/expander/CustomerConfigExpander.java +++ b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/expander/CustomerConfigExpander.java @@ -28,7 +28,7 @@ public class CustomerConfigExpander { * @date 2021/6/7 15:42 */ public static String getRegMailContent() { - return ConfigContext.me().getSysConfigValueWithDefault("CUSTOMER_REG_EMAIL_CONTENT", String.class, "感谢您注册Guns官方论坛,请点击此激活链接激活您的账户:https://localhost:8080/customer/active?verifyCode={}"); + return ConfigContext.me().getSysConfigValueWithDefault("CUSTOMER_REG_EMAIL_CONTENT", String.class, "感谢您注册Guns官方论坛,请点击此激活链接激活您的账户:http://localhost:8080/customer/active?verifyCode={} "); } } diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java index 9180d5d0d..d9d0b9dae 100644 --- a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java @@ -2,7 +2,6 @@ package cn.stylefeng.roses.kernel.customer.modular.request; import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; -import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue; import lombok.Data; import lombok.EqualsAndHashCode; @@ -31,12 +30,6 @@ public class CustomerRequest extends BaseRequest { */ @ChineseDescription("账号") @NotBlank(message = "账号不能为空", groups = {add.class, edit.class, reg.class}) - @TableUniqueValue( - message = "账号存在重复,请从新输入账号", - groups = reg.class, - tableName = "toc_customer", - columnName = "account", - idFieldName = "customer_id") private String account; /** @@ -60,12 +53,6 @@ public class CustomerRequest extends BaseRequest { */ @ChineseDescription("邮箱") @NotBlank(message = "邮箱不能为空", groups = {reg.class}) - @TableUniqueValue( - message = "邮箱存在重复,请从新输入邮箱", - groups = reg.class, - tableName = "toc_customer", - columnName = "email", - idFieldName = "customer_id") private String email; /** diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java index 1b743c89c..683a3b3d5 100644 --- a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java @@ -55,6 +55,11 @@ public class CustomerServiceImpl extends ServiceImpl i */ private static final Object SESSION_OPERATE_LOCK = new Object(); + /** + * 用于注册用户时候的加锁 + */ + private static final Object REG_LOCK = new Object(); + @Resource private MailSenderApi mailSenderApi; @@ -70,16 +75,20 @@ public class CustomerServiceImpl extends ServiceImpl i @Override @Transactional(rollbackFor = Exception.class) public void reg(CustomerRequest customerRequest) { + synchronized (REG_LOCK) { + // 校验邮箱和账号是否重复 + validateRepeat(customerRequest); - // 创建C端用户 - Customer regCustomer = CustomerFactory.createRegCustomer(customerRequest); + // 创建C端用户 + Customer regCustomer = CustomerFactory.createRegCustomer(customerRequest); - // 保存用户 - this.save(regCustomer); + // 保存用户 + this.save(regCustomer); - // 发送邮箱验证码 - SendMailParam regEmailParam = CustomerFactory.createRegEmailParam(regCustomer.getEmail(), regCustomer.getVerifyCode()); - mailSenderApi.sendMail(regEmailParam); + // 发送邮箱验证码 + SendMailParam regEmailParam = CustomerFactory.createRegEmailParam(regCustomer.getEmail(), regCustomer.getVerifyCode()); + mailSenderApi.sendMailHtml(regEmailParam); + } } @Override @@ -120,6 +129,11 @@ public class CustomerServiceImpl extends ServiceImpl i throw new CustomerException(CustomerExceptionEnum.CUSTOMER_STATUS_ERROR, customer.getStatusFlag()); } + // 校验用户是否激活 + if (!YesOrNotEnum.Y.getCode().equals(customer.getVerifiedFlag())) { + throw new CustomerException(CustomerExceptionEnum.CUSTOMER_NOT_VERIFIED); + } + // 获取LoginUser,用于用户的缓存 LoginUser loginUser = CustomerFactory.createLoginUser(customer); @@ -236,4 +250,27 @@ public class CustomerServiceImpl extends ServiceImpl i return queryWrapper; } + /** + * 校验是否存在重复的账号和邮箱 + * + * @author fengshuonan + * @date 2021/6/7 21:43 + */ + private void validateRepeat(CustomerRequest customerRequest) { + + LambdaQueryWrapper accountWrapper = new LambdaQueryWrapper<>(); + accountWrapper.eq(Customer::getAccount, customerRequest.getAccount()); + int count = this.count(accountWrapper); + if (count > 0) { + throw new CustomerException(CustomerExceptionEnum.ACCOUNT_REPEAT); + } + + LambdaQueryWrapper emailWrapper = new LambdaQueryWrapper<>(); + emailWrapper.eq(Customer::getEmail, customerRequest.getEmail()); + int emailCount = this.count(emailWrapper); + if (emailCount > 0) { + throw new CustomerException(CustomerExceptionEnum.EMAIL_REPEAT); + } + } + } \ No newline at end of file