改造租户创建

This commit is contained in:
gxwebsoft
2024-04-28 22:59:44 +08:00
parent 69891d133d
commit 4997288259
6 changed files with 587 additions and 523 deletions

View File

@@ -4,8 +4,10 @@ import cn.hutool.core.lang.Validator;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.core.exception.BusinessException;
import com.gxwebsoft.common.core.utils.CommonUtil;
import com.gxwebsoft.common.core.web.*; import com.gxwebsoft.common.core.web.*;
import com.gxwebsoft.common.system.entity.Company; import com.gxwebsoft.common.system.entity.Company;
import com.gxwebsoft.common.system.entity.Tenant;
import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.common.system.entity.UserCollection; import com.gxwebsoft.common.system.entity.UserCollection;
import com.gxwebsoft.common.system.mapper.CompanyMapper; import com.gxwebsoft.common.system.mapper.CompanyMapper;
@@ -17,6 +19,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -98,17 +102,27 @@ public class CompanyController extends BaseController {
return success(companyService.getByIdRel(id)); return success(companyService.getByIdRel(id));
} }
@Transactional(rollbackFor = {Exception.class}, isolation = Isolation.SERIALIZABLE)
@PreAuthorize("hasAuthority('sys:company:save')") @PreAuthorize("hasAuthority('sys:company:save')")
@OperationLog
@ApiOperation("添加企业信息") @ApiOperation("添加企业信息")
@PostMapping() @PostMapping()
public ApiResult<?> save(@RequestBody Company company) { public ApiResult<?> save(@RequestBody Company company) {
Tenant tenant = new Tenant();
// 记录当前登录用户id // 记录当前登录用户id
User loginUser = getLoginUser(); User loginUser = getLoginUser();
if (loginUser != null) { if (loginUser != null) {
company.setUserId(loginUser.getUserId()); company.setUserId(loginUser.getUserId());
tenant.setUserId(loginUser.getUserId());
} }
if (companyService.save(company)) { tenant.setTenantName(company.getShortName());
tenant.setTenantCode(CommonUtil.randomUUID16());
tenant.setComments(company.getComments());
tenantService.save(tenant);
company.setTenantId(tenant.getTenantId());
company.setTid(tenant.getTenantId());
company.setAuthoritative(true);
// 添加租户并初始化
if (tenantService.initialization(company)) {
return success("添加成功"); return success("添加成功");
} }
return fail("添加失败"); return fail("添加失败");

View File

@@ -455,524 +455,13 @@ public class MainController extends BaseController {
tenant.setTenantCode(CommonUtil.randomUUID16()); tenant.setTenantCode(CommonUtil.randomUUID16());
tenantService.save(tenant); tenantService.save(tenant);
// 添加默认字典 // 租户初始化
Dict dict = new Dict();
dict.setDictName("性别");
dict.setDictCode("sex");
dict.setTenantId(tenant.getTenantId());
dictService.save(dict);
DictData dictData = new DictData();
dictData.setDictId(dict.getDictId());
dictData.setDictDataName("");
dictData.setDictDataCode("1");
dictData.setSortNumber(100);
dictData.setTenantId(tenant.getTenantId());
dictDataService.save(dictData);
dictData.setDictDataName("");
dictData.setDictDataCode("2");
dictData.setTenantId(tenant.getTenantId());
dictDataService.save(dictData);
dict.setDictName("机构类型");
dict.setDictCode("organizationType");
dict.setTenantId(tenant.getTenantId());
dictService.save(dict);
dictData.setDictId(dict.getDictId());
dictData.setDictDataName("公司");
dictData.setDictDataCode("1");
dictData.setTenantId(tenant.getTenantId());
dictDataService.save(dictData);
dictData.setDictId(dict.getDictId());
dictData.setDictDataName("部门");
dictData.setDictDataCode("2");
dictData.setTenantId(tenant.getTenantId());
dictDataService.save(dictData);
// 添加超级管理员
User admin = new User();
admin.setUsername("admin");
admin.setNickname("超级管理员");
admin.setPhone(phone);
admin.setEmail(email);
admin.setRealName(tenantName);
admin.setCompanyName(tenantName);
admin.setPassword(userService.encodePassword(password));
admin.setTenantId(tenant.getTenantId());
boolean result = userService.save(admin);
Integer superAdminUserId = admin.getUserId();
// 企业资源配置
final Company company = new Company(); final Company company = new Company();
company.setTenantId(tenant.getTenantId()); company.setEmail(email);
company.setShortName(tenantName); company.setPassword(password);
company.setCompanyLogo("/logo.svg");
company.setPhone(phone);
company.setMembers(20);
company.setServerUrl("https://server.gxwebsoft.com");
company.setModulesUrl("https://modules.gxwebsoft.com");
company.setSocketUrl("wss://server.gxwebsoft.com");
company.setAdminUrl("http://".concat(tenant.getTenantId().toString()).concat(".adm.wsdns.cn"));
company.setMerchantUrl("http://".concat(tenant.getTenantId().toString()).concat(".m.wsdns.cn"));
company.setWebsiteUrl("http://".concat(tenant.getTenantId().toString()).concat(".wsdns.cn"));
company.setH5Code("http://".concat(tenant.getTenantId().toString()).concat(".h5.wsdns.cn"));
company.setAndroidUrl("http://".concat(tenant.getTenantId().toString()).concat(".android.wsdns.cn"));
company.setIosUrl("http://".concat(tenant.getTenantId().toString()).concat(".ios.wsdns.cn"));
company.setVersion(10);
company.setIndustryParent("");
company.setIndustryChild("");
company.setDepartments(10);
company.setDepartments(10);
company.setStorageMax(524288000L);
company.setAuthoritative(true);
company.setUsers(2);
company.setClicks(1L);
company.setLikes(0L);
company.setTid(tenant.getTenantId()); company.setTid(tenant.getTenantId());
company.setCompanyType("企业"); company.setTenantId(tenant.getTenantId());
company.setEmail(user.getEmail()); tenantService.initialization(company);
company.setUserId(admin.getUserId());
company.setExpirationTime(DateUtil.nextMonth());
companyService.save(company);
// 创建角色
if (result) {
Role role = new Role();
role.setRoleName("超级管理员");
role.setRoleCode("superAdmin");
role.setComments("超级管理员");
role.setTenantId(tenant.getTenantId());
roleService.save(role);
// 保存超级管理员角色ID
Integer superAdminRoleId = role.getRoleId();
role.setRoleName("注册用户");
role.setRoleCode("user");
role.setComments("普通注册用户");
roleService.save(role);
role.setRoleName("游客");
role.setRoleCode("guest");
role.setComments("用于未登录时的浏览权限");
roleService.save(role);
Integer guestRoleId = role.getRoleId();
// 添加游客账号
User www = new User();
www.setTenantId(tenant.getTenantId());
www.setUsername("www");
www.setNickname("游客");
www.setPassword(userService.encodePassword(CommonUtil.randomUUID16()));
userService.save(www);
// 添加超管用户角色
UserRole userRole = new UserRole();
userRole.setUserId(superAdminUserId);
userRole.setRoleId(superAdminRoleId);
userRole.setTenantId(tenant.getTenantId());
userRoleService.save(userRole);
// 添加游客用户角色
userRole.setUserId(www.getUserId());
userRole.setRoleId(guestRoleId);
boolean resultUserRole = userRoleService.save(userRole);
/// 添加系统菜单
if (resultUserRole) {
Menu menu = new Menu();
menu.setMenuType(0);
menu.setParentId(0);
menu.setHide(1);
menu.setTitle("扩展插件");
menu.setPath("/system/plug");
menu.setComponent("/system/plug");
menu.setIcon("AppstoreAddOutlined");
menu.setAuthority("sys:plug:list");
menu.setSortNumber(0);
menu.setTenantId(tenant.getTenantId());
menuService.save(menu);
// 10.系统管理
menu.setTitle("系统管理");
menu.setParentId(0);
menu.setPath("/system");
menu.setIcon("setting-outlined");
menu.setSortNumber(999);
menu.setHide(1);
menu.setTenantId(tenant.getTenantId());
menuService.save(menu);
Integer parentId = menu.getMenuId();
menu.setParentId(menu.getMenuId());
menu.setTitle("企业信息");
menu.setPath("/system/profile");
menu.setComponent("/system/profile");
menu.setIcon("AuditOutlined");
menu.setAuthority("sys:company:profile");
menu.setSortNumber(1);
menu.setHide(0);
menuService.save(menu);
menu.setTitle("用户管理");
menu.setPath("/system/user");
menu.setComponent("/system/user");
menu.setIcon("team-outlined");
menu.setSortNumber(4);
menuService.save(menu);
Integer userParentId = menu.getMenuId();
menu.setParentId(userParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setIcon("");
menu.setAuthority("sys:user:list");
menuService.save(menu);
menu.setParentId(userParentId);
menu.setTitle("添加");
menu.setAuthority("sys:user:save");
menuService.save(menu);
menu.setParentId(userParentId);
menu.setTitle("修改");
menu.setAuthority("sys:user:update");
menuService.save(menu);
menu.setParentId(userParentId);
menu.setTitle("删除");
menu.setAuthority("sys:user:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("部门管理");
menu.setPath("/system/organization");
menu.setComponent("/system/organization");
menu.setIcon("bank-outlined");
menu.setAuthority("");
menu.setSortNumber(2);
menuService.save(menu);
Integer orgParentId = menu.getMenuId();
menu.setParentId(orgParentId);
menu.setMenuType(1);
menu.setPath("");
menu.setComponent("");
menu.setIcon("");
menu.setTitle("查询");
menu.setAuthority("sys:org:list");
menuService.save(menu);
menu.setParentId(orgParentId);
menu.setTitle("添加");
menu.setAuthority("sys:org:save");
menuService.save(menu);
menu.setParentId(orgParentId);
menu.setTitle("修改");
menu.setAuthority("sys:org:update");
menuService.save(menu);
menu.setParentId(orgParentId);
menu.setTitle("删除");
menu.setAuthority("sys:org:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("角色管理");
menu.setPath("/system/role");
menu.setComponent("/system/role");
menu.setIcon("idcard-outlined");
menu.setAuthority("");
menu.setSortNumber(5);
menuService.save(menu);
Integer roleParentId = menu.getMenuId();
menu.setParentId(roleParentId);
menu.setMenuType(1);
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menu.setTitle("查询");
menu.setAuthority("sys:role:list");
menuService.save(menu);
menu.setParentId(roleParentId);
menu.setTitle("添加");
menu.setAuthority("sys:role:save");
menuService.save(menu);
menu.setParentId(roleParentId);
menu.setTitle("修改");
menu.setAuthority("sys:role:update");
menuService.save(menu);
menu.setParentId(roleParentId);
menu.setTitle("删除");
menu.setAuthority("sys:role:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("菜单管理");
menu.setPath("/system/menu");
menu.setComponent("/system/menu");
menu.setIcon("appstore-outlined");
menu.setAuthority("");
menu.setSortNumber(3);
menuService.save(menu);
Integer menuParentId = menu.getMenuId();
menu.setParentId(menuParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setAuthority("sys:menu:list");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(menuParentId);
menu.setTitle("添加");
menu.setAuthority("sys:menu:save");
menuService.save(menu);
menu.setParentId(menuParentId);
menu.setTitle("修改");
menu.setAuthority("sys:menu:update");
menuService.save(menu);
menu.setParentId(menuParentId);
menu.setTitle("删除");
menu.setAuthority("sys:menu:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("字典管理");
menu.setPath("/system/dict");
menu.setComponent("/system/dict");
menu.setIcon("profile-outlined");
menu.setAuthority("");
menu.setSortNumber(6);
menuService.save(menu);
Integer dictParentId = menu.getMenuId();
menu.setParentId(dictParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setAuthority("sys:dict:list");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(dictParentId);
menu.setTitle("添加");
menu.setAuthority("sys:dict:save");
menuService.save(menu);
menu.setParentId(dictParentId);
menu.setTitle("修改");
menu.setAuthority("sys:dict:update");
menuService.save(menu);
menu.setParentId(dictParentId);
menu.setTitle("删除");
menu.setAuthority("sys:dict:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("登录日志");
menu.setPath("/system/login-record");
menu.setComponent("/system/login-record");
menu.setIcon("calendar-outlined");
menu.setAuthority("sys:login-record:list");
menu.setSortNumber(7);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("模块管理");
menu.setPath("/system/modules");
menu.setComponent("/system/modules");
menu.setIcon("KeyOutlined");
menu.setAuthority("sys:modules:list");
menu.setSortNumber(7);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("秘钥管理");
menu.setPath("/system/access-key");
menu.setComponent("/system/access-key");
menu.setIcon("KeyOutlined");
menu.setAuthority("sys:accessKey:list");
menu.setSortNumber(8);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("文件管理");
menu.setPath("/system/file");
menu.setComponent("/system/file");
menu.setIcon("folder-outlined");
menu.setAuthority("");
menu.setSortNumber(6);
menuService.save(menu);
Integer fileParentId = menu.getMenuId();
menu.setParentId(fileParentId);
menu.setMenuType(1);
menu.setTitle("查看记录");
menu.setPath("");
menu.setComponent("");
menu.setIcon("");
menu.setAuthority("sys:file:list");
menuService.save(menu);
menu.setParentId(fileParentId);
menu.setTitle("上传文件");
menu.setAuthority("sys:file:upload");
menuService.save(menu);
menu.setParentId(fileParentId);
menu.setTitle("修改文件");
menu.setAuthority("sys:file:update");
menuService.save(menu);
menu.setParentId(fileParentId);
menu.setTitle("删除文件");
menu.setAuthority("sys:org:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("扩展插件");
menu.setPath("/system/plug");
menu.setComponent("/system/plug");
menu.setIcon("AppstoreAddOutlined");
menu.setAuthority("sys:plug:list");
menu.setSortNumber(9);
menuService.save(menu);
Integer plugParentId = menu.getMenuId();
menu.setParentId(plugParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setAuthority("sys:dict:list");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("发布插件");
menu.setAuthority("sys:plug:save");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("更新插件");
menu.setAuthority("sys:plug:update");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("删除插件");
menu.setAuthority("sys:plus:remove");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("安装插件");
menu.setAuthority("sys:plug:save");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("系统设置");
menu.setPath("/system/setting");
menu.setComponent("/system/setting");
menu.setIcon("setting-outlined");
menu.setAuthority("sys:setting:save");
menu.setSortNumber(10);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("用户信息");
menu.setPath("/system/user-info");
menu.setComponent("/system/user-info");
menu.setIcon("team-outlined");
menu.setAuthority("");
menu.setHide(1);
menu.setMenuType(0);
menu.setSortNumber(9);
menuService.save(menu);
Integer userInfoParentId = menu.getMenuId();
menu.setParentId(userInfoParentId);
menu.setMenuType(1);
menu.setTitle("修改个人密码");
menu.setAuthority("sys:auth:password");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(userInfoParentId);
menu.setTitle("修改个人资料");
menu.setAuthority("sys:auth:user");
menuService.save(menu);
// 1.控制台
// menu.setParentId(0);
// menu.setTitle("管理首页");
// menu.setPath("/dashboard");
// menu.setIcon("home-outlined");
// menu.setComponent("/dashboard/workplace");
// menu.setAuthority("");
// menu.setSortNumber(1);
// menu.setHide(0);
// menu.setMenuType(0);
// menuService.save(menu);
// 个人中心
menu.setParentId(0);
menu.setTitle("个人中心");
menu.setPath("/user-center");
menu.setIcon("UserOutlined");
menu.setComponent("");
menu.setAuthority("");
menu.setMenuType(0);
menu.setHide(1);
menu.setSortNumber(999);
menuService.save(menu);
Integer userCenterParentId = menu.getMenuId();
menu.setTitle("个人资料");
menu.setPath("/user/profile");
menu.setComponent("/user/profile");
menu.setIcon("IdcardOutlined");
menu.setParentId(userCenterParentId);
menu.setMenuType(0);
menu.setSortNumber(0);
menuService.save(menu);
Integer userProfileParentId = menu.getMenuId();
menu.setParentId(userProfileParentId);
menu.setMenuType(1);
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menu.setTitle("修改资料");
menu.setSortNumber(0);
menu.setAuthority("sys:auth:user");
menuService.save(menu);
menu.setTitle("修改密码");
menu.setAuthority("sys:auth:password");
menuService.save(menu);
menu.setTitle("上传头像");
menu.setAuthority("sys:file:upload");
menuService.save(menu);
menu.setTitle("预览头像");
menu.setAuthority("sys:file:list");
menuService.save(menu);
menu.setTitle("保存头像");
menu.setAuthority("sys:user:update");
menuService.save(menu);
menu.setTitle("我的消息");
menu.setPath("/user/notice");
menu.setComponent("/user/notice");
menu.setIcon("sound-outlined");
menu.setParentId(userCenterParentId);
menu.setMenuType(0);
menuService.save(menu);
Integer userNoticeParentId = menu.getMenuId();
menu.setParentId(userNoticeParentId);
menu.setTitle("列表");
menu.setAuthority("sys:notice:list");
menu.setSortNumber(0);
menu.setMenuType(1);
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setTitle("添加");
menu.setAuthority("sys:notice:save");
menuService.save(menu);
menu.setTitle("编辑");
menu.setAuthority("sys:notice:update");
menuService.save(menu);
menu.setTitle("删除");
menu.setAuthority("sys:notice:remove");
menuService.save(menu);
menu.setParentId(userCenterParentId);
menu.setTitle("用户注册");
menu.setAuthority("sys:user:save");
menuService.save(menu);
menu.setTitle("字典查询");
menu.setAuthority("sys:dict:list");
boolean resultMenu = menuService.save(menu);
// 添加菜单ID到超级管理员所属角色ID
if (resultMenu) {
saveRedis(tenant);
}
}
}
// 发送邮件通知
String title = "恭喜!您的账号已注册成功";
String content = "租户ID".concat(tenant.getTenantId().toString()).concat("\r\n名称" + tenantName).concat("\r\n账号" + phone).concat("\r\n密码" + password);
String adminUrl = "\r\n后台管理".concat("https://admin.gxwebsoft.com");
// 发送邮件通知
emailRecordService.sendEmail(title, content.concat(adminUrl), email);
return success("注册成功", tenant.getTenantId()); return success("注册成功", tenant.getTenantId());
} }

View File

@@ -233,6 +233,11 @@ public class Company implements Serializable {
private Object config; private Object config;
@ApiModelProperty(value = "是否已收藏") @ApiModelProperty(value = "是否已收藏")
@TableField(exist = false)
private Boolean collection; private Boolean collection;
@ApiModelProperty(value = "新注册的密码")
@TableField(exist = false)
private String password;
} }

View File

@@ -42,6 +42,9 @@ public class Tenant implements Serializable {
@ApiModelProperty(value = "排序号") @ApiModelProperty(value = "排序号")
private Integer sortNumber; private Integer sortNumber;
@ApiModelProperty(value = "用户ID")
private Integer userId;
@ApiModelProperty(value = "是否删除, 0否, 1是") @ApiModelProperty(value = "是否删除, 0否, 1是")
@TableLogic @TableLogic
private Integer deleted; private Integer deleted;

View File

@@ -2,6 +2,7 @@ package com.gxwebsoft.common.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.Company;
import com.gxwebsoft.common.system.entity.Tenant; import com.gxwebsoft.common.system.entity.Tenant;
import com.gxwebsoft.common.system.param.TenantParam; import com.gxwebsoft.common.system.param.TenantParam;
@@ -39,4 +40,5 @@ public interface TenantService extends IService<Tenant> {
*/ */
Tenant getByIdRel(Integer tenantId); Tenant getByIdRel(Integer tenantId);
boolean initialization(Company company);
} }

View File

@@ -1,12 +1,14 @@
package com.gxwebsoft.common.system.service.impl; package com.gxwebsoft.common.system.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxwebsoft.common.system.entity.Company; import com.gxwebsoft.common.core.utils.CommonUtil;
import com.gxwebsoft.common.core.utils.RedisUtil;
import com.gxwebsoft.common.system.entity.*;
import com.gxwebsoft.common.system.mapper.TenantMapper; import com.gxwebsoft.common.system.mapper.TenantMapper;
import com.gxwebsoft.common.system.service.CompanyService; import com.gxwebsoft.common.system.service.*;
import com.gxwebsoft.common.system.service.TenantService;
import com.gxwebsoft.common.system.entity.Tenant;
import com.gxwebsoft.common.system.param.TenantParam; import com.gxwebsoft.common.system.param.TenantParam;
import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageResult;
@@ -26,6 +28,22 @@ public class TenantServiceImpl extends ServiceImpl<TenantMapper, Tenant> impleme
@Resource @Resource
private CompanyService companyService; private CompanyService companyService;
@Resource
private MenuService menuService;
@Resource
private RoleService roleService;
@Resource
private UserRoleService userRoleService;
@Resource
private DictService dictService;
@Resource
private DictDataService dictDataService;
@Resource
private EmailRecordService emailRecordService;
@Resource
private UserService userService;
@Resource
private RedisUtil redisUtil;
@Override @Override
public PageResult<Tenant> pageRel(TenantParam param) { public PageResult<Tenant> pageRel(TenantParam param) {
@@ -50,4 +68,537 @@ public class TenantServiceImpl extends ServiceImpl<TenantMapper, Tenant> impleme
return param.getOne(baseMapper.selectListRel(param)); return param.getOne(baseMapper.selectListRel(param));
} }
@Override
public boolean initialization(Company company) {
// 添加默认字典
Dict dict = new Dict();
dict.setDictName("性别");
dict.setDictCode("sex");
dict.setTenantId(company.getTid());
dictService.save(dict);
DictData dictData = new DictData();
dictData.setDictId(dict.getDictId());
dictData.setDictDataName("");
dictData.setDictDataCode("1");
dictData.setSortNumber(100);
dictData.setTenantId(company.getTid());
dictDataService.save(dictData);
dictData.setDictDataName("");
dictData.setDictDataCode("2");
dictData.setTenantId(company.getTid());
dictDataService.save(dictData);
dict.setDictName("机构类型");
dict.setDictCode("organizationType");
dict.setTenantId(company.getTid());
dictService.save(dict);
dictData.setDictId(dict.getDictId());
dictData.setDictDataName("公司");
dictData.setDictDataCode("1");
dictData.setTenantId(company.getTid());
dictDataService.save(dictData);
dictData.setDictId(dict.getDictId());
dictData.setDictDataName("部门");
dictData.setDictDataCode("2");
dictData.setTenantId(company.getTid());
dictDataService.save(dictData);
// 添加超级管理员
User admin = new User();
admin.setUsername("admin");
admin.setNickname("超级管理员");
admin.setPhone(company.getPhone());
admin.setEmail(company.getEmail());
admin.setRealName(company.getBusinessEntity());
admin.setCompanyName(company.getShortName());
admin.setPassword(userService.encodePassword(company.getPassword()));
admin.setTenantId(company.getTid());
boolean result = userService.save(admin);
Integer superAdminUserId = admin.getUserId();
// 企业资源配置
company.setTenantId(company.getTid());
company.setShortName(company.getShortName());
company.setCompanyLogo("/logo.svg");
company.setPhone(company.getPhone());
company.setMembers(20);
company.setServerUrl("https://server.gxwebsoft.com");
company.setModulesUrl("https://modules.gxwebsoft.com");
company.setSocketUrl("wss://server.gxwebsoft.com");
company.setAdminUrl("http://".concat(company.getTid().toString()).concat(".adm.wsdns.cn"));
company.setMerchantUrl("http://".concat(company.getTid().toString()).concat(".m.wsdns.cn"));
company.setWebsiteUrl("http://".concat(company.getTid().toString()).concat(".wsdns.cn"));
company.setH5Code("http://".concat(company.getTid().toString()).concat(".h5.wsdns.cn"));
company.setAndroidUrl("http://".concat(company.getTid().toString()).concat(".android.wsdns.cn"));
company.setIosUrl("http://".concat(company.getTid().toString()).concat(".ios.wsdns.cn"));
company.setVersion(10);
company.setIndustryParent("");
company.setIndustryChild("");
company.setDepartments(10);
company.setDepartments(10);
company.setStorageMax(524288000L);
company.setAuthoritative(true);
company.setUsers(2);
company.setClicks(1L);
company.setLikes(0L);
company.setTid(company.getTid());
company.setCompanyType("企业");
company.setEmail(company.getEmail());
company.setUserId(admin.getUserId());
company.setExpirationTime(DateUtil.nextMonth());
companyService.save(company);
// 创建角色
if (result) {
Role role = new Role();
role.setRoleName("超级管理员");
role.setRoleCode("superAdmin");
role.setComments("超级管理员");
role.setTenantId(company.getTid());
roleService.save(role);
// 保存超级管理员角色ID
Integer superAdminRoleId = role.getRoleId();
role.setRoleName("注册用户");
role.setRoleCode("user");
role.setComments("普通注册用户");
roleService.save(role);
role.setRoleName("游客");
role.setRoleCode("guest");
role.setComments("用于未登录时的浏览权限");
roleService.save(role);
Integer guestRoleId = role.getRoleId();
// 添加游客账号
User www = new User();
www.setTenantId(company.getTid());
www.setUsername("www");
www.setNickname("游客");
www.setPassword(userService.encodePassword(CommonUtil.randomUUID16()));
userService.save(www);
// 添加超管用户角色
UserRole userRole = new UserRole();
userRole.setUserId(superAdminUserId);
userRole.setRoleId(superAdminRoleId);
userRole.setTenantId(company.getTid());
userRoleService.save(userRole);
// 添加游客用户角色
userRole.setUserId(www.getUserId());
userRole.setRoleId(guestRoleId);
boolean resultUserRole = userRoleService.save(userRole);
// 添加系统菜单
if (resultUserRole) {
Menu menu = new Menu();
menu.setMenuType(0);
menu.setParentId(0);
menu.setHide(1);
menu.setTitle("扩展插件");
menu.setPath("/system/plug");
menu.setComponent("/system/plug");
menu.setIcon("AppstoreAddOutlined");
menu.setAuthority("sys:plug:list");
menu.setSortNumber(0);
menu.setTenantId(company.getTid());
menuService.save(menu);
// 10.系统管理
menu.setTitle("系统管理");
menu.setParentId(0);
menu.setPath("/system");
menu.setIcon("setting-outlined");
menu.setSortNumber(999);
menu.setHide(1);
menu.setTenantId(company.getTid());
menuService.save(menu);
Integer parentId = menu.getMenuId();
menu.setParentId(menu.getMenuId());
menu.setTitle("企业信息");
menu.setPath("/system/profile");
menu.setComponent("/system/profile");
menu.setIcon("AuditOutlined");
menu.setAuthority("sys:company:profile");
menu.setSortNumber(1);
menu.setHide(0);
menuService.save(menu);
menu.setTitle("用户管理");
menu.setPath("/system/user");
menu.setComponent("/system/user");
menu.setIcon("team-outlined");
menu.setSortNumber(4);
menuService.save(menu);
Integer userParentId = menu.getMenuId();
menu.setParentId(userParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setIcon("");
menu.setAuthority("sys:user:list");
menuService.save(menu);
menu.setParentId(userParentId);
menu.setTitle("添加");
menu.setAuthority("sys:user:save");
menuService.save(menu);
menu.setParentId(userParentId);
menu.setTitle("修改");
menu.setAuthority("sys:user:update");
menuService.save(menu);
menu.setParentId(userParentId);
menu.setTitle("删除");
menu.setAuthority("sys:user:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("部门管理");
menu.setPath("/system/organization");
menu.setComponent("/system/organization");
menu.setIcon("bank-outlined");
menu.setAuthority("");
menu.setSortNumber(2);
menuService.save(menu);
Integer orgParentId = menu.getMenuId();
menu.setParentId(orgParentId);
menu.setMenuType(1);
menu.setPath("");
menu.setComponent("");
menu.setIcon("");
menu.setTitle("查询");
menu.setAuthority("sys:org:list");
menuService.save(menu);
menu.setParentId(orgParentId);
menu.setTitle("添加");
menu.setAuthority("sys:org:save");
menuService.save(menu);
menu.setParentId(orgParentId);
menu.setTitle("修改");
menu.setAuthority("sys:org:update");
menuService.save(menu);
menu.setParentId(orgParentId);
menu.setTitle("删除");
menu.setAuthority("sys:org:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("角色管理");
menu.setPath("/system/role");
menu.setComponent("/system/role");
menu.setIcon("idcard-outlined");
menu.setAuthority("");
menu.setSortNumber(5);
menuService.save(menu);
Integer roleParentId = menu.getMenuId();
menu.setParentId(roleParentId);
menu.setMenuType(1);
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menu.setTitle("查询");
menu.setAuthority("sys:role:list");
menuService.save(menu);
menu.setParentId(roleParentId);
menu.setTitle("添加");
menu.setAuthority("sys:role:save");
menuService.save(menu);
menu.setParentId(roleParentId);
menu.setTitle("修改");
menu.setAuthority("sys:role:update");
menuService.save(menu);
menu.setParentId(roleParentId);
menu.setTitle("删除");
menu.setAuthority("sys:role:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("菜单管理");
menu.setPath("/system/menu");
menu.setComponent("/system/menu");
menu.setIcon("appstore-outlined");
menu.setAuthority("");
menu.setSortNumber(3);
menuService.save(menu);
Integer menuParentId = menu.getMenuId();
menu.setParentId(menuParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setAuthority("sys:menu:list");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(menuParentId);
menu.setTitle("添加");
menu.setAuthority("sys:menu:save");
menuService.save(menu);
menu.setParentId(menuParentId);
menu.setTitle("修改");
menu.setAuthority("sys:menu:update");
menuService.save(menu);
menu.setParentId(menuParentId);
menu.setTitle("删除");
menu.setAuthority("sys:menu:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("字典管理");
menu.setPath("/system/dict");
menu.setComponent("/system/dict");
menu.setIcon("profile-outlined");
menu.setAuthority("");
menu.setSortNumber(6);
menuService.save(menu);
Integer dictParentId = menu.getMenuId();
menu.setParentId(dictParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setAuthority("sys:dict:list");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(dictParentId);
menu.setTitle("添加");
menu.setAuthority("sys:dict:save");
menuService.save(menu);
menu.setParentId(dictParentId);
menu.setTitle("修改");
menu.setAuthority("sys:dict:update");
menuService.save(menu);
menu.setParentId(dictParentId);
menu.setTitle("删除");
menu.setAuthority("sys:dict:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("登录日志");
menu.setPath("/system/login-record");
menu.setComponent("/system/login-record");
menu.setIcon("calendar-outlined");
menu.setAuthority("sys:login-record:list");
menu.setSortNumber(7);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("模块管理");
menu.setPath("/system/modules");
menu.setComponent("/system/modules");
menu.setIcon("KeyOutlined");
menu.setAuthority("sys:modules:list");
menu.setSortNumber(7);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("秘钥管理");
menu.setPath("/system/access-key");
menu.setComponent("/system/access-key");
menu.setIcon("KeyOutlined");
menu.setAuthority("sys:accessKey:list");
menu.setSortNumber(8);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("文件管理");
menu.setPath("/system/file");
menu.setComponent("/system/file");
menu.setIcon("folder-outlined");
menu.setAuthority("");
menu.setSortNumber(6);
menuService.save(menu);
Integer fileParentId = menu.getMenuId();
menu.setParentId(fileParentId);
menu.setMenuType(1);
menu.setTitle("查看记录");
menu.setPath("");
menu.setComponent("");
menu.setIcon("");
menu.setAuthority("sys:file:list");
menuService.save(menu);
menu.setParentId(fileParentId);
menu.setTitle("上传文件");
menu.setAuthority("sys:file:upload");
menuService.save(menu);
menu.setParentId(fileParentId);
menu.setTitle("修改文件");
menu.setAuthority("sys:file:update");
menuService.save(menu);
menu.setParentId(fileParentId);
menu.setTitle("删除文件");
menu.setAuthority("sys:org:remove");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("扩展插件");
menu.setPath("/system/plug");
menu.setComponent("/system/plug");
menu.setIcon("AppstoreAddOutlined");
menu.setAuthority("sys:plug:list");
menu.setSortNumber(9);
menuService.save(menu);
Integer plugParentId = menu.getMenuId();
menu.setParentId(plugParentId);
menu.setMenuType(1);
menu.setTitle("查询");
menu.setAuthority("sys:dict:list");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("发布插件");
menu.setAuthority("sys:plug:save");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("更新插件");
menu.setAuthority("sys:plug:update");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("删除插件");
menu.setAuthority("sys:plus:remove");
menuService.save(menu);
menu.setParentId(plugParentId);
menu.setTitle("安装插件");
menu.setAuthority("sys:plug:save");
menuService.save(menu);
menu.setMenuType(0);
menu.setParentId(parentId);
menu.setTitle("系统设置");
menu.setPath("/system/setting");
menu.setComponent("/system/setting");
menu.setIcon("setting-outlined");
menu.setAuthority("sys:setting:save");
menu.setSortNumber(10);
menuService.save(menu);
menu.setParentId(parentId);
menu.setTitle("用户信息");
menu.setPath("/system/user-info");
menu.setComponent("/system/user-info");
menu.setIcon("team-outlined");
menu.setAuthority("");
menu.setHide(1);
menu.setMenuType(0);
menu.setSortNumber(9);
menuService.save(menu);
Integer userInfoParentId = menu.getMenuId();
menu.setParentId(userInfoParentId);
menu.setMenuType(1);
menu.setTitle("修改个人密码");
menu.setAuthority("sys:auth:password");
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setParentId(userInfoParentId);
menu.setTitle("修改个人资料");
menu.setAuthority("sys:auth:user");
menuService.save(menu);
// 1.控制台
// menu.setParentId(0);
// menu.setTitle("管理首页");
// menu.setPath("/dashboard");
// menu.setIcon("home-outlined");
// menu.setComponent("/dashboard/workplace");
// menu.setAuthority("");
// menu.setSortNumber(1);
// menu.setHide(0);
// menu.setMenuType(0);
// menuService.save(menu);
// 个人中心
menu.setParentId(0);
menu.setTitle("个人中心");
menu.setPath("/user-center");
menu.setIcon("UserOutlined");
menu.setComponent("");
menu.setAuthority("");
menu.setMenuType(0);
menu.setHide(1);
menu.setSortNumber(999);
menuService.save(menu);
Integer userCenterParentId = menu.getMenuId();
menu.setTitle("个人资料");
menu.setPath("/user/profile");
menu.setComponent("/user/profile");
menu.setIcon("IdcardOutlined");
menu.setParentId(userCenterParentId);
menu.setMenuType(0);
menu.setSortNumber(0);
menuService.save(menu);
Integer userProfileParentId = menu.getMenuId();
menu.setParentId(userProfileParentId);
menu.setMenuType(1);
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menu.setTitle("修改资料");
menu.setSortNumber(0);
menu.setAuthority("sys:auth:user");
menuService.save(menu);
menu.setTitle("修改密码");
menu.setAuthority("sys:auth:password");
menuService.save(menu);
menu.setTitle("上传头像");
menu.setAuthority("sys:file:upload");
menuService.save(menu);
menu.setTitle("预览头像");
menu.setAuthority("sys:file:list");
menuService.save(menu);
menu.setTitle("保存头像");
menu.setAuthority("sys:user:update");
menuService.save(menu);
menu.setTitle("我的消息");
menu.setPath("/user/notice");
menu.setComponent("/user/notice");
menu.setIcon("sound-outlined");
menu.setParentId(userCenterParentId);
menu.setMenuType(0);
menuService.save(menu);
Integer userNoticeParentId = menu.getMenuId();
menu.setParentId(userNoticeParentId);
menu.setTitle("列表");
menu.setAuthority("sys:notice:list");
menu.setSortNumber(0);
menu.setMenuType(1);
menu.setIcon("");
menu.setPath("");
menu.setComponent("");
menuService.save(menu);
menu.setTitle("添加");
menu.setAuthority("sys:notice:save");
menuService.save(menu);
menu.setTitle("编辑");
menu.setAuthority("sys:notice:update");
menuService.save(menu);
menu.setTitle("删除");
menu.setAuthority("sys:notice:remove");
menuService.save(menu);
menu.setParentId(userCenterParentId);
menu.setTitle("用户注册");
menu.setAuthority("sys:user:save");
menuService.save(menu);
menu.setTitle("字典查询");
menu.setAuthority("sys:dict:list");
boolean resultMenu = menuService.save(menu);
// 添加菜单ID到超级管理员所属角色ID
if (resultMenu) {
saveRedis(company);
}
}
}
// 发送邮件通知
String title = "恭喜!您的账号已注册成功";
String content = "租户ID".concat(company.getTid().toString()).concat("\r\n名称" + company.getShortName()).concat("\r\n账号" + company.getPhone()).concat("\r\n密码" + company.getPassword());
String adminUrl = "\r\n后台管理".concat("https://admin.gxwebsoft.com");
// 发送邮件通知
emailRecordService.sendEmail(title, content.concat(adminUrl), company.getEmail());
return true;
}
// 缓存租户信息
private void saveRedis(Company tenant) {
String key = "tenant:" + tenant.getTenantId();
if (StrUtil.isEmpty(tenant.getTenantCode())) {
tenant.setTenantCode(CommonUtil.randomUUID16());
}
redisUtil.set(key, tenant);
}
} }