fix 添加租户
parent
2d71b0126b
commit
b5db785c53
|
@ -67,4 +67,7 @@ public interface ISysMenuData extends ICommonData<SysMenu, Long> {
|
||||||
boolean checkMenuNameUnique(SysMenu menu);
|
boolean checkMenuNameUnique(SysMenu menu);
|
||||||
|
|
||||||
|
|
||||||
|
List<Long> selectParentIdByMenuIds(List<Long> menuIds);
|
||||||
|
|
||||||
|
List<Long> findByMenuIdListAndNotParentIdList(List<Long> menuIds, List<Long> parentIds);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,8 +35,11 @@ import cc.iotkit.data.model.TbSysMenu;
|
||||||
import cc.iotkit.data.system.ISysMenuData;
|
import cc.iotkit.data.system.ISysMenuData;
|
||||||
import cc.iotkit.data.util.PredicateBuilder;
|
import cc.iotkit.data.util.PredicateBuilder;
|
||||||
import cc.iotkit.model.system.SysMenu;
|
import cc.iotkit.model.system.SysMenu;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.querydsl.core.types.Predicate;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.jpa.impl.JPAQuery;
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
|
@ -229,4 +232,18 @@ public class SysMenuDataImpl implements ISysMenuData, IJPACommData<SysMenu, Long
|
||||||
.build()).fetchOne();
|
.build()).fetchOne();
|
||||||
return Objects.isNull(tbSysMenu);
|
return Objects.isNull(tbSysMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> selectParentIdByMenuIds(List<Long> menuIds) {
|
||||||
|
return jpaQueryFactory.select(tbSysMenu.parentId).from(tbSysMenu).where(tbSysMenu.id.in(menuIds)).fetch();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> findByMenuIdListAndNotParentIdList(List<Long> menuIds, List<Long> parentIds) {
|
||||||
|
Predicate build = PredicateBuilder.instance()
|
||||||
|
.and(tbSysMenu.id.in(menuIds))
|
||||||
|
.and(CollectionUtil.isNotEmpty(parentIds), () -> tbSysMenu.id.notIn(parentIds)).build();
|
||||||
|
return jpaQueryFactory.select(tbSysMenu.id).from(tbSysMenu).where(build).fetch();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
package cc.iotkit.data.service;
|
package cc.iotkit.data.service;
|
||||||
|
|
||||||
|
import cc.iotkit.common.tenant.dao.TenantAware;
|
||||||
|
import cc.iotkit.common.tenant.helper.TenantHelper;
|
||||||
import cc.iotkit.common.utils.MapstructUtils;
|
import cc.iotkit.common.utils.MapstructUtils;
|
||||||
import cc.iotkit.common.utils.StringUtils;
|
import cc.iotkit.common.utils.StringUtils;
|
||||||
import cc.iotkit.data.dao.IJPACommData;
|
import cc.iotkit.data.dao.IJPACommData;
|
||||||
|
@ -30,7 +32,10 @@ import cc.iotkit.data.dao.SysTenantRepository;
|
||||||
import cc.iotkit.data.model.TbSysTenant;
|
import cc.iotkit.data.model.TbSysTenant;
|
||||||
import cc.iotkit.data.system.ISysTenantData;
|
import cc.iotkit.data.system.ISysTenantData;
|
||||||
import cc.iotkit.data.util.PredicateBuilder;
|
import cc.iotkit.data.util.PredicateBuilder;
|
||||||
|
import cc.iotkit.model.TenantModel;
|
||||||
import cc.iotkit.model.system.SysTenant;
|
import cc.iotkit.model.system.SysTenant;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.bean.copier.CopyOptions;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
@ -40,6 +45,7 @@ import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import static cc.iotkit.data.model.QTbSysTenant.tbSysTenant;
|
import static cc.iotkit.data.model.QTbSysTenant.tbSysTenant;
|
||||||
|
|
||||||
|
@ -100,4 +106,20 @@ public class SysTenantDataImpl implements ISysTenantData, IJPACommData<SysTenant
|
||||||
.build()).fetchOne();
|
.build()).fetchOne();
|
||||||
return Objects.isNull(ret);
|
return Objects.isNull(ret);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public SysTenant save(SysTenant data) {
|
||||||
|
Long id = data.getId();
|
||||||
|
Object tbData = MapstructUtils.convert(data, getJpaRepositoryClass());
|
||||||
|
Optional byId = id == null ? Optional.empty() : getBaseRepository().findById(id);
|
||||||
|
if (byId.isPresent()) {
|
||||||
|
Object dbObj = byId.get();
|
||||||
|
//只更新不为空的字段
|
||||||
|
BeanUtil.copyProperties(tbData, dbObj, CopyOptions.create().ignoreNullValue());
|
||||||
|
tbData = dbObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object o = getBaseRepository().save(tbData);
|
||||||
|
return (SysTenant) MapstructUtils.convert(o, getTClass());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,6 +176,22 @@ public class SysMenuController extends BaseController {
|
||||||
menuService.updateMenu(menu);
|
menuService.updateMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载对应租户套餐菜单列表树
|
||||||
|
*
|
||||||
|
* @param packageId 租户套餐ID
|
||||||
|
*/
|
||||||
|
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
|
||||||
|
@SaCheckPermission("system:menu:query")
|
||||||
|
@PostMapping(value = "/tenantPackageMenuTreeselect")
|
||||||
|
public MenuTreeSelectVo tenantPackageMenuTreeselect(@Validated @RequestBody Request<Long> bo) {
|
||||||
|
List<SysMenuVo> menus = menuService.selectMenuList(LoginHelper.getUserId());
|
||||||
|
MenuTreeSelectVo selectVo = new MenuTreeSelectVo();
|
||||||
|
selectVo.setCheckedKeys(menuService.selectMenuListByPackageId(bo.getData()));
|
||||||
|
selectVo.setMenus(menuService.buildMenuTreeSelect(menus));
|
||||||
|
return selectVo;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 删除菜单
|
* 删除菜单
|
||||||
*
|
*
|
||||||
|
|
|
@ -114,7 +114,7 @@ public class SysTenantController extends BaseController {
|
||||||
if (!tenantService.checkCompanyNameUnique(data)) {
|
if (!tenantService.checkCompanyNameUnique(data)) {
|
||||||
fail("新增租户'" + data.getCompanyName() + "'失败,企业名称已存在");
|
fail("新增租户'" + data.getCompanyName() + "'失败,企业名称已存在");
|
||||||
}
|
}
|
||||||
tenantService.insertByBo(data);
|
TenantHelper.ignore(()->tenantService.insertByBo(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -131,7 +131,7 @@ public class SysTenantController extends BaseController {
|
||||||
if (!tenantService.checkCompanyNameUnique(data)) {
|
if (!tenantService.checkCompanyNameUnique(data)) {
|
||||||
fail("修改租户'" + data.getCompanyName() + "'失败,公司名称已存在");
|
fail("修改租户'" + data.getCompanyName() + "'失败,公司名称已存在");
|
||||||
}
|
}
|
||||||
tenantService.updateByBo(data);
|
TenantHelper.ignore(()->tenantService.updateByBo(data)); ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -99,15 +99,14 @@ public class SysTenantPackageController extends BaseController {
|
||||||
/**
|
/**
|
||||||
* 获取租户套餐详细信息
|
* 获取租户套餐详细信息
|
||||||
*
|
*
|
||||||
* @param packageId 主键
|
* @param 主键
|
||||||
*/
|
*/
|
||||||
@ApiOperation("获取租户套餐详细信息")
|
@ApiOperation("获取租户套餐详细信息")
|
||||||
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
|
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
|
||||||
@SaCheckPermission("system:tenantPackage:query")
|
@SaCheckPermission("system:tenantPackage:query")
|
||||||
@PostMapping("/getInfo")
|
@PostMapping("/getInfo")
|
||||||
public SysTenantPackageVo getInfo(@NotNull(message = "主键不能为空")
|
public SysTenantPackageVo getInfo(@RequestBody @Validated Request<Long> bo) {
|
||||||
@PathVariable Long packageId) {
|
return tenantPackageService.queryById(bo.getData());
|
||||||
return tenantPackageService.queryById(packageId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -149,15 +148,13 @@ public class SysTenantPackageController extends BaseController {
|
||||||
/**
|
/**
|
||||||
* 删除租户套餐
|
* 删除租户套餐
|
||||||
*
|
*
|
||||||
* @param packageIds 主键串
|
|
||||||
*/
|
*/
|
||||||
@ApiOperation("删除租户套餐")
|
@ApiOperation("删除租户套餐")
|
||||||
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
|
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
|
||||||
@SaCheckPermission("system:tenantPackage:remove")
|
@SaCheckPermission("system:tenantPackage:remove")
|
||||||
@Log(title = "租户套餐", businessType = BusinessType.DELETE)
|
@Log(title = "租户套餐", businessType = BusinessType.DELETE)
|
||||||
@PostMapping("/delete")
|
@PostMapping("/delete")
|
||||||
public void remove(@NotEmpty(message = "主键不能为空")
|
public void remove(@RequestBody Request<List<Long>> bo) {
|
||||||
@PathVariable Long[] packageIds) {
|
tenantPackageService.deleteWithValidByIds(bo.getData(), true);
|
||||||
tenantPackageService.deleteWithValidByIds(List.of(packageIds), true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
package cc.iotkit.system.dto.bo;
|
package cc.iotkit.system.dto.bo;
|
||||||
|
|
||||||
import cc.iotkit.common.api.BaseDto;
|
import cc.iotkit.common.api.BaseDto;
|
||||||
|
import cc.iotkit.common.utils.DateUtils;
|
||||||
import cc.iotkit.common.validate.AddGroup;
|
import cc.iotkit.common.validate.AddGroup;
|
||||||
import cc.iotkit.common.validate.EditGroup;
|
import cc.iotkit.common.validate.EditGroup;
|
||||||
import cc.iotkit.model.system.SysTenant;
|
import cc.iotkit.model.system.SysTenant;
|
||||||
|
@ -32,7 +33,9 @@ import org.hibernate.validator.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -120,6 +123,7 @@ public class SysTenantBo extends BaseDto {
|
||||||
/**
|
/**
|
||||||
* 过期时间
|
* 过期时间
|
||||||
*/
|
*/
|
||||||
|
@DateTimeFormat(pattern = DateUtils.YYYY_MM_DD_HH_MM_SS)
|
||||||
private Date expireTime;
|
private Date expireTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -159,4 +159,6 @@ public interface ISysMenuService {
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
boolean checkMenuNameUnique(SysMenuBo menu);
|
boolean checkMenuNameUnique(SysMenuBo menu);
|
||||||
|
|
||||||
|
List<Long> selectMenuListByPackageId(Long data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,23 +30,34 @@ import cc.iotkit.common.utils.MapstructUtils;
|
||||||
import cc.iotkit.common.utils.StreamUtils;
|
import cc.iotkit.common.utils.StreamUtils;
|
||||||
import cc.iotkit.common.utils.StringUtils;
|
import cc.iotkit.common.utils.StringUtils;
|
||||||
import cc.iotkit.common.utils.TreeBuildUtils;
|
import cc.iotkit.common.utils.TreeBuildUtils;
|
||||||
|
import cc.iotkit.data.dao.SysTenantPackageRepository;
|
||||||
import cc.iotkit.data.system.ISysMenuData;
|
import cc.iotkit.data.system.ISysMenuData;
|
||||||
import cc.iotkit.data.system.ISysRoleData;
|
import cc.iotkit.data.system.ISysRoleData;
|
||||||
import cc.iotkit.data.system.ISysRoleMenuData;
|
import cc.iotkit.data.system.ISysRoleMenuData;
|
||||||
|
import cc.iotkit.data.system.ISysTenantPackageData;
|
||||||
|
import cc.iotkit.data.util.PredicateBuilder;
|
||||||
import cc.iotkit.model.system.SysMenu;
|
import cc.iotkit.model.system.SysMenu;
|
||||||
import cc.iotkit.model.system.SysRole;
|
import cc.iotkit.model.system.SysRole;
|
||||||
|
import cc.iotkit.model.system.SysTenantPackage;
|
||||||
import cc.iotkit.system.dto.bo.SysMenuBo;
|
import cc.iotkit.system.dto.bo.SysMenuBo;
|
||||||
import cc.iotkit.system.dto.vo.MetaVo;
|
import cc.iotkit.system.dto.vo.MetaVo;
|
||||||
import cc.iotkit.system.dto.vo.RouterVo;
|
import cc.iotkit.system.dto.vo.RouterVo;
|
||||||
import cc.iotkit.system.dto.vo.SysMenuVo;
|
import cc.iotkit.system.dto.vo.SysMenuVo;
|
||||||
import cc.iotkit.system.service.ISysMenuService;
|
import cc.iotkit.system.service.ISysMenuService;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.lang.tree.Tree;
|
import cn.hutool.core.lang.tree.Tree;
|
||||||
|
import com.querydsl.core.types.Predicate;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static cc.iotkit.data.model.QTbSysConfig.tbSysConfig;
|
||||||
|
import static cc.iotkit.data.model.QTbSysMenu.tbSysMenu;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单 业务层处理
|
* 菜单 业务层处理
|
||||||
*
|
*
|
||||||
|
@ -60,6 +71,9 @@ public class SysMenuServiceImpl implements ISysMenuService {
|
||||||
private final ISysRoleData sysRoleData;
|
private final ISysRoleData sysRoleData;
|
||||||
private final ISysRoleMenuData iSysRoleMenuData;
|
private final ISysRoleMenuData iSysRoleMenuData;
|
||||||
|
|
||||||
|
|
||||||
|
private final ISysTenantPackageData iSysTenantPackageData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据用户查询系统菜单列表
|
* 根据用户查询系统菜单列表
|
||||||
*
|
*
|
||||||
|
@ -383,6 +397,23 @@ public class SysMenuServiceImpl implements ISysMenuService {
|
||||||
return sysMenuData.checkMenuNameUnique(bo.to(SysMenu.class));
|
return sysMenuData.checkMenuNameUnique(bo.to(SysMenu.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> selectMenuListByPackageId(Long packageId) {
|
||||||
|
SysTenantPackage tenantPackage = iSysTenantPackageData.findById(packageId);
|
||||||
|
List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong);
|
||||||
|
if (CollUtil.isEmpty(menuIds)) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
List<Long> parentIds;
|
||||||
|
if (Objects.equals(tenantPackage.getMenuCheckStrictly(),true)) {
|
||||||
|
parentIds = sysMenuData.selectParentIdByMenuIds(menuIds);
|
||||||
|
} else {
|
||||||
|
parentIds = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sysMenuData.findByMenuIdListAndNotParentIdList(menuIds, parentIds);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据父节点的ID获取所有子节点
|
* 根据父节点的ID获取所有子节点
|
||||||
*
|
*
|
||||||
|
|
|
@ -111,7 +111,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void insertByBo(SysTenantBo bo) {
|
public void insertByBo(SysTenantBo bo) {
|
||||||
bo.setTenantId(YitIdHelper.nextId());
|
long tenantId = YitIdHelper.nextId();
|
||||||
|
bo.setId(tenantId);
|
||||||
|
bo.setTenantId(tenantId);
|
||||||
SysTenant sysTenant=sysTenantData.save(bo.to(SysTenant.class));
|
SysTenant sysTenant=sysTenantData.save(bo.to(SysTenant.class));
|
||||||
// 根据套餐创建角色
|
// 根据套餐创建角色
|
||||||
Long roleId = createTenantRole(sysTenant.getTenantId(), bo.getPackageId());
|
Long roleId = createTenantRole(sysTenant.getTenantId(), bo.getPackageId());
|
||||||
|
@ -131,6 +133,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
|
||||||
SysRoleDept roleDept = new SysRoleDept();
|
SysRoleDept roleDept = new SysRoleDept();
|
||||||
roleDept.setRoleId(roleId);
|
roleDept.setRoleId(roleId);
|
||||||
roleDept.setDeptId(deptId);
|
roleDept.setDeptId(deptId);
|
||||||
|
roleDept.setTenantId(tenantId);
|
||||||
sysRoleDeptData.save(roleDept);
|
sysRoleDeptData.save(roleDept);
|
||||||
|
|
||||||
// 创建系统用户
|
// 创建系统用户
|
||||||
|
@ -155,6 +158,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
|
||||||
SysUserRole userRole = new SysUserRole();
|
SysUserRole userRole = new SysUserRole();
|
||||||
userRole.setUserId(retUser.getId());
|
userRole.setUserId(retUser.getId());
|
||||||
userRole.setRoleId(roleId);
|
userRole.setRoleId(roleId);
|
||||||
|
userRole.setTenantId(tenantId);
|
||||||
sysUserRoleData.save(userRole);
|
sysUserRoleData.save(userRole);
|
||||||
|
|
||||||
Long defaultTenantId = TenantConstants.DEFAULT_TENANT_ID;
|
Long defaultTenantId = TenantConstants.DEFAULT_TENANT_ID;
|
||||||
|
|
Loading…
Reference in New Issue