提交 4b4d5c01 authored 作者: hzh's avatar hzh

用户注册登录功能实现

上级 7260db1e
......@@ -191,10 +191,15 @@ public class TokenController {
/**
* 登录页面租户下拉框
*
* @param request 请求
* @param virtual 是否虚拟租户,默认为false
* @param phone 手机号
* @return 租户列表
*/
@GetMapping("/tenant/list")
public R<LoginTenantVo> tenantList(HttpServletRequest request, @RequestParam(value = "phone", required = false) String phone) throws Exception {
public R<LoginTenantVo> tenantList(HttpServletRequest request,
@RequestParam(value = "virtual", defaultValue = "false") Boolean virtual,
@RequestParam(value = "phone", required = false) String phone) throws Exception {
// 返回对象
LoginTenantVo result = new LoginTenantVo();
boolean enable = TenantHelper.isEnable();
......
package org.dromara.auth.form;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.constant.RegexConstants;
import org.dromara.common.core.domain.model.LoginBody;
import org.hibernate.validator.constraints.Length;
......@@ -27,10 +29,15 @@ public class RegisterBody extends LoginBody {
/**
* 用户密码
*/
@NotBlank(message = "{user.password.not.blank}")
@Length(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
private String password;
/**
* 用户手机号
*/
@NotBlank(message = "{user.phone.not.blank}")
@Pattern(regexp = RegexConstants.MOBILE, message = "{user.phone.length.valid}")
private String phone;
/**
* 用户类型
*/
......
package org.dromara.auth.service;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
......@@ -138,7 +137,9 @@ public class SysLoginService {
public void register(RegisterBody registerBody) {
String tenantId = registerBody.getTenantId();
String username = registerBody.getUsername();
String password = registerBody.getPassword();
String phone = registerBody.getPhone();
// 校验用户类型是否存在
String userType = UserType.getUserType(registerBody.getUserType()).getUserType();
......@@ -151,15 +152,19 @@ public class SysLoginService {
// 注册用户信息
RemoteUserBo remoteUserBo = new RemoteUserBo();
remoteUserBo.setTenantId(tenantId);
remoteUserBo.setUserName(username);
remoteUserBo.setUserName(StringUtils.isNotEmpty(phone) ? phone : username);
remoteUserBo.setNickName(username);
remoteUserBo.setPassword(BCrypt.hashpw(password));
remoteUserBo.setPassword(password);
remoteUserBo.setUserType(userType);
remoteUserBo.setPhonenumber(phone);
boolean regFlag = remoteUserService.registerUserInfo(remoteUserBo);
if (!regFlag) {
throw new UserException("user.register.error");
}
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
}
......
package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
......@@ -34,6 +35,11 @@ public class SysTenant extends BaseEntity {
*/
private String tenantId;
/**
* 企业码
*/
private String companyCode;
/**
* 联系人
*/
......@@ -99,6 +105,12 @@ public class SysTenant extends BaseEntity {
*/
private Long accountCount;
/**
* 是否虚拟租户(0否 1是)
*/
@TableField(value = "`virtual`")
private Boolean virtual;
/**
* 租户状态(0正常 1停用)
*/
......
......@@ -34,6 +34,11 @@ public class SysTenantBo extends BaseEntity {
*/
private String tenantId;
/**
* 企业码
*/
private String companyCode;
/**
* 联系人
*/
......@@ -99,6 +104,12 @@ public class SysTenantBo extends BaseEntity {
*/
private String remark;
/**
* 是否虚拟租户(0否 1是)
*/
@NotNull(message = "是否虚拟租户不能为空", groups = { AddGroup.class })
private Boolean virtual;
/**
* 租户套餐编号
*/
......
......@@ -125,5 +125,11 @@ public class SysTenantVo implements Serializable {
@ExcelDictFormat(readConverterExp = "0=正常,1=停用")
private String status;
/**
* 是否虚拟租户(0否 1是)
*/
@ExcelProperty(value = "是否虚拟租户", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "false=否,true=是")
private Boolean virtual;
}
package org.dromara.system.dubbo;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Opt;
import cn.hutool.core.util.ObjectUtil;
......@@ -15,6 +16,7 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.helper.DataPermissionHelper;
import org.dromara.common.tenant.helper.TenantHelper;
......@@ -194,6 +196,11 @@ public class RemoteUserServiceImpl implements RemoteUserService {
*/
@Override
public Boolean registerUserInfo(RemoteUserBo remoteUserBo) throws UserException, ServiceException {
//密码为空使用初始化密码
String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
String password = StringUtils.isEmpty(remoteUserBo.getPassword()) ? initPassword : remoteUserBo.getPassword();
remoteUserBo.setPassword(BCrypt.hashpw(password));
SysUserBo sysUserBo = MapstructUtils.convert(remoteUserBo, SysUserBo.class);
String username = sysUserBo.getUserName();
boolean exist = TenantHelper.dynamic(remoteUserBo.getTenantId(), () -> {
......
......@@ -112,6 +112,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
lqw.eq(StringUtils.isNotBlank(bo.getAddress()), SysTenant::getAddress, bo.getAddress());
lqw.eq(StringUtils.isNotBlank(bo.getIntro()), SysTenant::getIntro, bo.getIntro());
lqw.like(StringUtils.isNotBlank(bo.getDomain()), SysTenant::getDomain, bo.getDomain());
lqw.eq(bo.getVirtual() != null, SysTenant::getVirtual, bo.getVirtual());
lqw.eq(bo.getPackageId() != null, SysTenant::getPackageId, bo.getPackageId());
lqw.eq(bo.getExpireTime() != null, SysTenant::getExpireTime, bo.getExpireTime());
lqw.eq(bo.getAccountCount() != null, SysTenant::getAccountCount, bo.getAccountCount());
......@@ -130,9 +131,18 @@ public class SysTenantServiceImpl implements ISysTenantService {
// 获取所有租户编号
List<String> tenantIds = baseMapper.selectObjs(
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), x -> {return Convert.toStr(x);});
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), x -> {
return Convert.toStr(x);
});
//获取所有租户公司码
List<String> companyCodes = baseMapper.selectObjs(
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getCompanyCode), x -> {
return Convert.toStr(x);
});
String tenantId = generateTenantId(tenantIds);
String companyCode = generateTenantId(companyCodes);
add.setTenantId(tenantId);
add.setCompanyCode(companyCode);
boolean flag = baseMapper.insert(add) > 0;
if (!flag) {
throw new ServiceException("创建租户失败");
......@@ -278,6 +288,8 @@ public class SysTenantServiceImpl implements ISysTenantService {
SysTenant tenant = MapstructUtils.convert(bo, SysTenant.class);
tenant.setTenantId(null);
tenant.setPackageId(null);
tenant.setCompanyCode(null);
tenant.setVirtual(null);
return baseMapper.updateById(tenant) > 0;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论