diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java index bfd901bac..9b94d10da 100755 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java @@ -18,6 +18,7 @@ package com.pig4cloud.pigx.admin.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.CharUtil; +import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,6 +35,8 @@ import com.pig4cloud.pigx.common.data.datascope.DataScopeTypeEnum; import com.pig4cloud.pigx.common.data.resolver.ParamResolver; import com.pig4cloud.pigx.common.data.tenant.TenantBroker; import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.SneakyThrows; import org.springframework.beans.BeanUtils; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CacheEvict; @@ -43,11 +46,9 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.lang.reflect.Field; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -115,14 +116,7 @@ public class SysTenantServiceImpl extends ServiceImpl dictList = new ArrayList<>(32); List dictIdList = new ArrayList<>(32); @@ -131,7 +125,7 @@ public class SysTenantServiceImpl extends ServiceImpl clientDetailsList = new ArrayList<>(16); List publicParamList = new ArrayList<>(64); - TenantBroker.runAs(defaultId, (id) -> { + TenantBroker.runAs(tenantDefault.getTenantDefaultId(), (id) -> { // 查询系统内置字典 dictList.addAll(dictService.list()); // 查询系统内置字典项目 @@ -152,28 +146,28 @@ public class SysTenantServiceImpl extends ServiceImpl { // 插入部门 SysDept dept = new SysDept(); - dept.setName(defaultDeptName); + dept.setName(tenantDefault.getTenantDefaultDeptname()); dept.setParentId(0L); deptService.save(dept); // 构造初始化用户 SysUser user = new SysUser(); - user.setUsername(defaultUsername); + user.setUsername(tenantDefault.getTenantDefaultUsername()); user.setPasswordModifyTime(LocalDateTime.now()); - user.setPassword(ENCODER.encode(defaultPassword)); + user.setPassword(ENCODER.encode(tenantDefault.getTenantDefaultPassword())); user.setDeptId(dept.getDeptId()); userService.save(user); // 构造普通用户角色 SysRole roleDefault = new SysRole(); - roleDefault.setRoleCode(userDefaultRoleCode); - roleDefault.setRoleName(userDefaultRoleName); + roleDefault.setRoleCode(tenantDefault.getTenantDefaultRolecode()); + roleDefault.setRoleName(tenantDefault.getTenantDefaultRolename()); roleDefault.setDsType(DataScopeTypeEnum.SELF_LEVEL.getType()); roleService.save(roleDefault); // 构造新角色 管理员角色 SysRole role = new SysRole(); - role.setRoleCode(defaultRoleCode); - role.setRoleName(defaultRoleName); + role.setRoleCode(tenantDefault.getTenantDefaultRolecode()); + role.setRoleName(tenantDefault.getTenantDefaultRolename()); role.setDsType(DataScopeTypeEnum.ALL.getType()); roleService.save(role); // 用户角色关系 @@ -238,9 +232,9 @@ public class SysTenantServiceImpl extends ServiceImpl sysMenuList = TenantBroker.applyAs(defaultId, id -> menuService.list()); - if (defaultId.equals(tenantDTO.getId())) { + TenantDefaultConfig tenantDefault = new TenantDefaultConfig(); + List sysMenuList = TenantBroker.applyAs(tenantDefault.getTenantDefaultId(), id -> menuService.list()); + if (tenantDefault.getTenantDefaultId().equals(tenantDTO.getId())) { return Boolean.TRUE; } @@ -252,30 +246,32 @@ public class SysTenantServiceImpl extends ServiceImpl disjunctionList = CollUtil.disjunction(newMenuIdList, oldMenuIdList); // 1. 如果旧套餐包含差集元素则删除 - CollUtil.intersection(oldMenuIdList, disjunctionList).forEach(menuId -> TenantBroker.runAs(tenantDTO.getId(), (tenantId -> { - //查询租户菜单元信息 - SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId)); + CollUtil.intersection(oldMenuIdList, disjunctionList) + .forEach(menuId -> TenantBroker.runAs(tenantDTO.getId(), (tenantId -> { + // 查询租户菜单元信息 + SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId)); - // 根据path 或者 permisson 删除目标租户菜单 - menuService.remove(Wrappers.lambdaQuery() - .eq(StrUtil.isNotBlank(menu.getPath()), SysMenu::getPath, menu.getPath()) - .or() - .eq(StrUtil.isNotBlank(menu.getPermission()), SysMenu::getPermission, menu.getPermission()) - ); - }))); + // 根据path 或者 permisson 删除目标租户菜单 + menuService.remove(Wrappers.lambdaQuery() + .eq(StrUtil.isNotBlank(menu.getPath()), SysMenu::getPath, menu.getPath()) + .or() + .eq(StrUtil.isNotBlank(menu.getPermission()), SysMenu::getPermission, menu.getPermission())); + }))); // 2. 如果旧套餐不包含差集元素则新增 - List newTenantMenuIdList = CollUtil.subtract(disjunctionList, oldMenuIdList).stream().map(menuId -> TenantBroker.applyAs(tenantDTO.getId(), (tenantId -> { - //查询租户菜单元信息 - SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId)); - - // 新增租户菜单,但未维护上下级关系 - SysMenu newMenu = new SysMenu(); - BeanUtils.copyProperties(menu, newMenu, SysMenu.Fields.menuId); - menuService.save(newMenu); - return newMenu; - }))).collect(Collectors.toList()); + List newTenantMenuIdList = CollUtil.subtract(disjunctionList, oldMenuIdList) + .stream() + .map(menuId -> TenantBroker.applyAs(tenantDTO.getId(), (tenantId -> { + // 查询租户菜单元信息 + SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId)); + // 新增租户菜单,但未维护上下级关系 + SysMenu newMenu = new SysMenu(); + BeanUtils.copyProperties(menu, newMenu, SysMenu.Fields.menuId); + menuService.save(newMenu); + return newMenu; + }))) + .toList(); // 3. 更新新增菜单上下级关系 for (SysMenu tenantMenu : newTenantMenuIdList) { @@ -291,9 +287,11 @@ public class SysTenantServiceImpl extends ServiceImpllambdaQuery() - .eq(StrUtil.isNotBlank(parentMenu.getPath()), SysMenu::getPath, parentMenu.getPath()) - .or() - .eq(StrUtil.isNotBlank(parentMenu.getPermission()), SysMenu::getPermission, parentMenu.getPermission()), false); + .eq(StrUtil.isNotBlank(parentMenu.getPath()), SysMenu::getPath, parentMenu.getPath()) + .or() + .eq(StrUtil.isNotBlank(parentMenu.getPermission()), SysMenu::getPermission, + parentMenu.getPermission()), + false); tenantMenu.setParentId(tenantParentMenu.getMenuId()); menuService.updateById(tenantMenu); @@ -305,7 +303,6 @@ public class SysTenantServiceImpl extends ServiceImpl args = Arrays.stream(ReflectUtil.getFields(this.getClass())) + .map(Field::getName).map(StrUtil::toUnderlineCase).map(String::toUpperCase).toList(); + Map paramsMap = ParamResolver.getMap(args.toArray(new String[]{})); + for (Field field : ReflectUtil.getFields(this.getClass())) { + String key = StrUtil.toUnderlineCase(field.getName()).toUpperCase(); + if (paramsMap.containsKey(key)) { + field.set(this, paramsMap.get(key)); + } + } + } +}