package com.gxwebsoft.common.system.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.DesensitizedUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.common.core.utils.CommonUtil; import com.gxwebsoft.common.core.utils.DomainUtil; 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.*; import com.gxwebsoft.common.system.param.TenantParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; /** * 租户Service实现 * * @author 科技小王子 * @since 2023-07-17 17:49:53 */ @Service public class TenantServiceImpl extends ServiceImpl implements TenantService { @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) { PageParam page = new PageParam<>(param); page.setDefaultOrder("sort_number asc, create_time desc"); List list = baseMapper.selectPageRel(page, param); // if (param.getSceneType() != null && param.getSceneType().equals("plug")) { // final Set collectIds = list.stream().map(Tenant::getTenantId).collect(Collectors.toSet()); // System.out.println("collectIds = " + collectIds); // final List companyList = companyService.list(new LambdaUpdateWrapper().in(Company::getTenantId, collectIds)); // System.out.println("companyList = " + companyList); // final Map> collect = companyList.stream().collect(Collectors.groupingBy(Company::getTenantId)); // list.forEach(d -> { // final List companies = collect.get(d.getTenantId()); // if (!CollectionUtils.isEmpty(companies)) { // final Company c1 = companies.get(0); // final Company c2 = new Company(); // c2.setCompanyName(c1.getCompanyName()); // c2.setShortName(c1.getShortName()); // c2.setPhone(DesensitizedUtil.mobilePhone(c1.getPhone())); // d.setCompany(c2); // } // }); // } return new PageResult<>(list, page.getTotal()); } @Override public List listRel(TenantParam param) { List list = baseMapper.selectListRel(param); // 排序 PageParam page = new PageParam<>(); //page.setDefaultOrder("create_time desc"); return page.sortRecords(list); } @Override public Tenant getByIdRel(Integer tenantId) { TenantParam param = new TenantParam(); return param.getOne(baseMapper.selectListRel(param)); } @Override public Company 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.setIsAdmin(true); 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.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(DomainUtil.getAdminUrl(company.getTid().toString())); company.setWebsiteUrl(DomainUtil.getSiteUrl(company.getTid().toString())); // company.setH5Code("https://".concat("websoft.top")); // 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); role.setRoleName("商户管理员"); role.setRoleCode("merchant"); role.setComments("商户管理员/店长角色"); roleService.save(role); role.setRoleName("商户账号"); role.setRoleCode("merchantClerk"); role.setRoleName("管理人员/店员"); 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()); boolean resultUserRole = 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 appUrl = "\r\n应用地址:" + DomainUtil.getSiteUrl(company.getTid().toString()); String appName = "\r\n应用名称:" + company.getShortName(); String adminUrl = "\r\n后台管理:" + DomainUtil.getAdminUrl(company.getTid().toString()); String account = "\r\n账号:admin"; String password = "\r\n密码:" + company.getPassword(); String content = title + appUrl + appName + adminUrl + account + password; // 发送邮件通知 emailRecordService.sendEmail(title, content, company.getEmail()); return company; } // 缓存租户信息 private void saveRedis(Company tenant) { String key = "tenant:" + tenant.getTenantId(); if (StrUtil.isEmpty(tenant.getTenantCode())) { tenant.setTenantCode(CommonUtil.randomUUID16()); } redisUtil.set(key, tenant); } @Override public boolean destructionAll(Integer tenantId){ if (baseMapper.destructionAll(tenantId)) { return true; } return false; } }