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

用户注册登录功能实现

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