From 4997288259cd0470dd32e7c8075c59d9901173f8 Mon Sep 17 00:00:00 2001 From: gxwebsoft Date: Sun, 28 Apr 2024 22:59:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E9=80=A0=E7=A7=9F=E6=88=B7=E5=88=9B?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/CompanyController.java | 20 +- .../system/controller/MainController.java | 521 +--------------- .../common/system/entity/Company.java | 5 + .../common/system/entity/Tenant.java | 3 + .../common/system/service/TenantService.java | 2 + .../service/impl/TenantServiceImpl.java | 559 +++++++++++++++++- 6 files changed, 587 insertions(+), 523 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/CompanyController.java b/src/main/java/com/gxwebsoft/common/system/controller/CompanyController.java index 8301c8d..dafc3b8 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/CompanyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/CompanyController.java @@ -4,8 +4,10 @@ import cn.hutool.core.lang.Validator; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.exception.BusinessException; +import com.gxwebsoft.common.core.utils.CommonUtil; import com.gxwebsoft.common.core.web.*; 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.UserCollection; import com.gxwebsoft.common.system.mapper.CompanyMapper; @@ -17,6 +19,8 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.ibatis.annotations.Param; 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.web.bind.annotation.*; @@ -98,18 +102,28 @@ public class CompanyController extends BaseController { return success(companyService.getByIdRel(id)); } + @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.SERIALIZABLE) @PreAuthorize("hasAuthority('sys:company:save')") - @OperationLog @ApiOperation("添加企业信息") @PostMapping() public ApiResult save(@RequestBody Company company) { + Tenant tenant = new Tenant(); // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { company.setUserId(loginUser.getUserId()); + tenant.setUserId(loginUser.getUserId()); } - if (companyService.save(company)) { - return success("添加成功"); + 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 fail("添加失败"); } diff --git a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java index c2be3d2..b2b51f3 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java @@ -455,524 +455,13 @@ public class MainController extends BaseController { tenant.setTenantCode(CommonUtil.randomUUID16()); 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(); - company.setTenantId(tenant.getTenantId()); - company.setShortName(tenantName); - 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.setEmail(email); + company.setPassword(password); company.setTid(tenant.getTenantId()); - company.setCompanyType("企业"); - company.setEmail(user.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(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); + company.setTenantId(tenant.getTenantId()); + tenantService.initialization(company); return success("注册成功", tenant.getTenantId()); } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/Company.java b/src/main/java/com/gxwebsoft/common/system/entity/Company.java index faa960a..33ed7b1 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/Company.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/Company.java @@ -233,6 +233,11 @@ public class Company implements Serializable { private Object config; @ApiModelProperty(value = "是否已收藏") + @TableField(exist = false) private Boolean collection; + @ApiModelProperty(value = "新注册的密码") + @TableField(exist = false) + private String password; + } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/Tenant.java b/src/main/java/com/gxwebsoft/common/system/entity/Tenant.java index c70d1a9..6da817a 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/Tenant.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/Tenant.java @@ -42,6 +42,9 @@ public class Tenant implements Serializable { @ApiModelProperty(value = "排序号") private Integer sortNumber; + @ApiModelProperty(value = "用户ID") + private Integer userId; + @ApiModelProperty(value = "是否删除, 0否, 1是") @TableLogic private Integer deleted; diff --git a/src/main/java/com/gxwebsoft/common/system/service/TenantService.java b/src/main/java/com/gxwebsoft/common/system/service/TenantService.java index 42614a4..5c2aedc 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/TenantService.java +++ b/src/main/java/com/gxwebsoft/common/system/service/TenantService.java @@ -2,6 +2,7 @@ package com.gxwebsoft.common.system.service; import com.baomidou.mybatisplus.extension.service.IService; 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.param.TenantParam; @@ -39,4 +40,5 @@ public interface TenantService extends IService { */ Tenant getByIdRel(Integer tenantId); + boolean initialization(Company company); } diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/TenantServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/TenantServiceImpl.java index ac844fe..dbbe011 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/impl/TenantServiceImpl.java +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/TenantServiceImpl.java @@ -1,12 +1,14 @@ 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.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.service.CompanyService; -import com.gxwebsoft.common.system.service.TenantService; -import com.gxwebsoft.common.system.entity.Tenant; +import com.gxwebsoft.common.system.service.*; import com.gxwebsoft.common.system.param.TenantParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; @@ -26,6 +28,22 @@ public class TenantServiceImpl extends ServiceImpl impleme @Resource 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 public PageResult pageRel(TenantParam param) { @@ -50,4 +68,537 @@ public class TenantServiceImpl extends ServiceImpl impleme 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); + } + }