update 忽略租户在controller层,移除service包含

This commit is contained in:
yixiaco 2023-04-21 00:46:02 +08:00
parent 716d7e7435
commit 9782e8680f
3 changed files with 102 additions and 102 deletions

View File

@ -15,7 +15,6 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
/** /**
@ -57,10 +56,10 @@ public class TenantHelper {
* *
* @param handle 处理执行方法 * @param handle 处理执行方法
*/ */
public static void ignore(Consumer<Void> handle) { public static void ignore(Runnable handle) {
enableIgnore(); enableIgnore();
try { try {
handle.accept(null); handle.run();
} finally { } finally {
disableIgnore(); disableIgnore();
} }

View File

@ -3,6 +3,11 @@ package org.dromara.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaCheckRole;
import com.baomidou.lock.annotation.Lock4j; import com.baomidou.lock.annotation.Lock4j;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
@ -18,13 +23,15 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.service.ISysTenantService; import org.dromara.system.service.ISysTenantService;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@ -72,7 +79,7 @@ public class SysTenantController extends BaseController {
@SaCheckPermission("system:tenant:query") @SaCheckPermission("system:tenant:query")
@GetMapping("/{id}") @GetMapping("/{id}")
public R<SysTenantVo> getInfo(@NotNull(message = "主键不能为空") public R<SysTenantVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) { @PathVariable Long id) {
return R.ok(tenantService.queryById(id)); return R.ok(tenantService.queryById(id));
} }
@ -89,7 +96,7 @@ public class SysTenantController extends BaseController {
if (!tenantService.checkCompanyNameUnique(bo)) { if (!tenantService.checkCompanyNameUnique(bo)) {
return R.fail("新增租户'" + bo.getCompanyName() + "'失败,企业名称已存在"); return R.fail("新增租户'" + bo.getCompanyName() + "'失败,企业名称已存在");
} }
return toAjax(tenantService.insertByBo(bo)); return toAjax(TenantHelper.ignore(() -> tenantService.insertByBo(bo)));
} }
/** /**
@ -168,7 +175,7 @@ public class SysTenantController extends BaseController {
@Log(title = "租户", businessType = BusinessType.UPDATE) @Log(title = "租户", businessType = BusinessType.UPDATE)
@GetMapping("/syncTenantPackage") @GetMapping("/syncTenantPackage")
public R<Void> syncTenantPackage(@NotBlank(message = "租户ID不能为空") String tenantId, @NotBlank(message = "套餐ID不能为空") String packageId) { public R<Void> syncTenantPackage(@NotBlank(message = "租户ID不能为空") String tenantId, @NotBlank(message = "套餐ID不能为空") String packageId) {
return toAjax(tenantService.syncTenantPackage(tenantId, packageId)); return toAjax(TenantHelper.ignore(() -> tenantService.syncTenantPackage(tenantId, packageId)));
} }
} }

View File

@ -17,7 +17,6 @@ import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.*; import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysTenantVo;
@ -113,79 +112,76 @@ public class SysTenantServiceImpl implements ISysTenantService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(SysTenantBo bo) { public Boolean insertByBo(SysTenantBo bo) {
TenantHelper.ignore(unused -> { SysTenant add = MapstructUtils.convert(bo, SysTenant.class);
SysTenant add = MapstructUtils.convert(bo, SysTenant.class); // 获取所有租户编号
List<String> tenantIds = baseMapper.selectObjs(
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), Convert::toStr);
String tenantId = generateTenantId(tenantIds);
add.setTenantId(tenantId);
boolean flag = baseMapper.insert(add) > 0;
if (!flag) {
throw new ServiceException("创建租户失败");
}
bo.setId(add.getId());
// 获取所有租户编号 // 根据套餐创建角色
List<String> tenantIds = baseMapper.selectObjs( Long roleId = createTenantRole(tenantId, bo.getPackageId());
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), Convert::toStr);
String tenantId = generateTenantId(tenantIds);
add.setTenantId(tenantId);
boolean flag = baseMapper.insert(add) > 0;
if (!flag) {
throw new ServiceException("创建租户失败");
}
bo.setId(add.getId());
// 根据套餐创建角色 // 创建部门: 公司名是部门名称
Long roleId = createTenantRole(tenantId, bo.getPackageId()); SysDept dept = new SysDept();
dept.setTenantId(tenantId);
dept.setDeptName(bo.getCompanyName());
dept.setLeader(bo.getUsername());
dept.setParentId(Constants.TOP_PARENT_ID);
dept.setAncestors(Constants.TOP_PARENT_ID.toString());
deptMapper.insert(dept);
Long deptId = dept.getDeptId();
// 创建部门: 公司名是部门名称 // 角色和部门关联表
SysDept dept = new SysDept(); SysRoleDept roleDept = new SysRoleDept();
dept.setTenantId(tenantId); roleDept.setRoleId(roleId);
dept.setDeptName(bo.getCompanyName()); roleDept.setDeptId(deptId);
dept.setLeader(bo.getUsername()); roleDeptMapper.insert(roleDept);
dept.setParentId(Constants.TOP_PARENT_ID);
dept.setAncestors(Constants.TOP_PARENT_ID.toString());
deptMapper.insert(dept);
Long deptId = dept.getDeptId();
// 角色和部门关联表 // 创建系统用户
SysRoleDept roleDept = new SysRoleDept(); SysUser user = new SysUser();
roleDept.setRoleId(roleId); user.setTenantId(tenantId);
roleDept.setDeptId(deptId); user.setUserName(bo.getUsername());
roleDeptMapper.insert(roleDept); user.setNickName(bo.getUsername());
user.setPassword(BCrypt.hashpw(bo.getPassword()));
user.setDeptId(deptId);
userMapper.insert(user);
// 创建系统用户 // 用户和角色关联表
SysUser user = new SysUser(); SysUserRole userRole = new SysUserRole();
user.setTenantId(tenantId); userRole.setUserId(user.getUserId());
user.setUserName(bo.getUsername()); userRole.setRoleId(roleId);
user.setNickName(bo.getUsername()); userRoleMapper.insert(userRole);
user.setPassword(BCrypt.hashpw(bo.getPassword()));
user.setDeptId(deptId);
userMapper.insert(user);
// 用户和角色关联表 String defaultTenantId = TenantConstants.DEFAULT_TENANT_ID;
SysUserRole userRole = new SysUserRole(); List<SysDictType> dictTypeList = dictTypeMapper.selectList(
userRole.setUserId(user.getUserId()); new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getTenantId, defaultTenantId));
userRole.setRoleId(roleId); List<SysDictData> dictDataList = dictDataMapper.selectList(
userRoleMapper.insert(userRole); new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getTenantId, defaultTenantId));
for (SysDictType dictType : dictTypeList) {
dictType.setDictId(null);
dictType.setTenantId(tenantId);
}
for (SysDictData dictData : dictDataList) {
dictData.setDictCode(null);
dictData.setTenantId(tenantId);
}
dictTypeMapper.insertBatch(dictTypeList);
dictDataMapper.insertBatch(dictDataList);
String defaultTenantId = TenantConstants.DEFAULT_TENANT_ID; List<SysConfig> sysConfigList = configMapper.selectList(
List<SysDictType> dictTypeList = dictTypeMapper.selectList( new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getTenantId, defaultTenantId));
new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getTenantId, defaultTenantId)); for (SysConfig config : sysConfigList) {
List<SysDictData> dictDataList = dictDataMapper.selectList( config.setConfigId(null);
new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getTenantId, defaultTenantId)); config.setTenantId(tenantId);
for (SysDictType dictType : dictTypeList) { }
dictType.setDictId(null); configMapper.insertBatch(sysConfigList);
dictType.setTenantId(tenantId);
}
for (SysDictData dictData : dictDataList) {
dictData.setDictCode(null);
dictData.setTenantId(tenantId);
}
dictTypeMapper.insertBatch(dictTypeList);
dictDataMapper.insertBatch(dictDataList);
List<SysConfig> sysConfigList = configMapper.selectList(
new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getTenantId, defaultTenantId));
for (SysConfig config : sysConfigList) {
config.setConfigId(null);
config.setTenantId(tenantId);
}
configMapper.insertBatch(sysConfigList);
});
return true; return true;
} }
@ -342,32 +338,30 @@ public class SysTenantServiceImpl implements ISysTenantService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean syncTenantPackage(String tenantId, String packageId) { public Boolean syncTenantPackage(String tenantId, String packageId) {
TenantHelper.ignore(unused -> { SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId);
SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId); List<SysRole> roles = roleMapper.selectList(
List<SysRole> roles = roleMapper.selectList( new LambdaQueryWrapper<SysRole>().eq(SysRole::getTenantId, tenantId));
new LambdaQueryWrapper<SysRole>().eq(SysRole::getTenantId, tenantId)); List<Long> roleIds = new ArrayList<>(roles.size() - 1);
List<Long> roleIds = new ArrayList<>(roles.size() - 1); List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong);
List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong); roles.forEach(item -> {
roles.forEach(item -> { if (TenantConstants.TENANT_ADMIN_ROLE_KEY.equals(item.getRoleKey())) {
if (TenantConstants.TENANT_ADMIN_ROLE_KEY.equals(item.getRoleKey())) { List<SysRoleMenu> roleMenus = new ArrayList<>(menuIds.size());
List<SysRoleMenu> roleMenus = new ArrayList<>(menuIds.size()); menuIds.forEach(menuId -> {
menuIds.forEach(menuId -> { SysRoleMenu roleMenu = new SysRoleMenu();
SysRoleMenu roleMenu = new SysRoleMenu(); roleMenu.setRoleId(item.getRoleId());
roleMenu.setRoleId(item.getRoleId()); roleMenu.setMenuId(menuId);
roleMenu.setMenuId(menuId); roleMenus.add(roleMenu);
roleMenus.add(roleMenu); });
}); roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, item.getRoleId()));
roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, item.getRoleId())); roleMenuMapper.insertBatch(roleMenus);
roleMenuMapper.insertBatch(roleMenus); } else {
} else { roleIds.add(item.getRoleId());
roleIds.add(item.getRoleId());
}
});
if (!roleIds.isEmpty()) {
roleMenuMapper.delete(
new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds));
} }
}); });
if (!roleIds.isEmpty()) {
roleMenuMapper.delete(
new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds));
}
return true; return true;
} }
} }