13.2第2集注册手机号唯一性保证方案和作业-分库分表下的思考
package net.xdclass.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.xdclass.controller.request.AccountRegisterRequest;
import net.xdclass.enums.AuthTypeEnum;
import net.xdclass.enums.BizCodeEnum;
import net.xdclass.enums.SendCodeEnum;
import net.xdclass.manager.AccountManager;
import net.xdclass.model.AccountDO;
import net.xdclass.service.AccountService;
import net.xdclass.service.NotifyService;
import net.xdclass.util.CommonUtil;
import net.xdclass.util.JsonData;
import org.apache.commons.codec.digest.Md5Crypt;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class AccountServiceImpl implements AccountService {
@Autowired
private NotifyService notifyService;
@Autowired
private AccountManager accountManager;
/**
* 手机验证码验证
* 密码加密(TODO)
* 账号唯一性检查(TODO)
* 插入数据库
* 新注册用户福利发放(TODO)
* @param registerRequest
* @return
*/
@Override
public JsonData register(AccountRegisterRequest registerRequest) {
boolean checkCode = false;
//判断验证码
if(StringUtils.isNotBlank(registerRequest.getPhone())){
checkCode = notifyService.checkCode(SendCodeEnum.USER_REGISTER,registerRequest.getPhone(),registerRequest.getCode());
}
if(!checkCode){
return JsonData.buildResult(BizCodeEnum.CODE_ERROR);
}
AccountDO accountDO = new AccountDO();
BeanUtils.copyProperties(registerRequest,accountDO);
//认证级别
accountDO.setAuth(AuthTypeEnum.DEFAULT.name());
//生成唯一的账号 TODO
accountDO.setAccountNo(CommonUtil.getCurrentTimestamp());
//设置密码 密钥 盐
accountDO.setSecret("$1$"+ CommonUtil.getStringNumRandom(8));
String cryptPwd = Md5Crypt.md5Crypt(registerRequest.getPwd().getBytes(),accountDO.getSecret());
accountDO.setPwd(cryptPwd);
int rows = accountManager.insert(accountDO);
log.info("rows:{},注册成功:{}",rows,accountDO);
//用户注册成功,发放福利
userRegisterInitTask(accountDO);
return JsonData.buildSuccess();
}
/**
* 用户初始化,发放福利:流量包(TODO)
* @param accountDO
*/
private void userRegisterInitTask(AccountDO accountDO) {
}
}