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