fix 添加租户

V0.5.x
jay 2024-06-14 18:19:36 +08:00
parent 2d71b0126b
commit b5db785c53
10 changed files with 107 additions and 11 deletions

View File

@ -67,4 +67,7 @@ public interface ISysMenuData extends ICommonData<SysMenu, Long> {
boolean checkMenuNameUnique(SysMenu menu);
List<Long> selectParentIdByMenuIds(List<Long> menuIds);
List<Long> findByMenuIdListAndNotParentIdList(List<Long> menuIds, List<Long> parentIds);
}

View File

@ -35,8 +35,11 @@ import cc.iotkit.data.model.TbSysMenu;
import cc.iotkit.data.system.ISysMenuData;
import cc.iotkit.data.util.PredicateBuilder;
import cc.iotkit.model.system.SysMenu;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Primary;
@ -229,4 +232,18 @@ public class SysMenuDataImpl implements ISysMenuData, IJPACommData<SysMenu, Long
.build()).fetchOne();
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();
}
}

View File

@ -23,6 +23,8 @@
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.StringUtils;
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.system.ISysTenantData;
import cc.iotkit.data.util.PredicateBuilder;
import cc.iotkit.model.TenantModel;
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 com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
@ -40,6 +45,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import static cc.iotkit.data.model.QTbSysTenant.tbSysTenant;
@ -100,4 +106,20 @@ public class SysTenantDataImpl implements ISysTenantData, IJPACommData<SysTenant
.build()).fetchOne();
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());
}
}

View File

@ -176,6 +176,22 @@ public class SysMenuController extends BaseController {
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;
}
/**
*
*

View File

@ -114,7 +114,7 @@ public class SysTenantController extends BaseController {
if (!tenantService.checkCompanyNameUnique(data)) {
fail("新增租户'" + data.getCompanyName() + "'失败,企业名称已存在");
}
tenantService.insertByBo(data);
TenantHelper.ignore(()->tenantService.insertByBo(data));
}
/**
@ -131,7 +131,7 @@ public class SysTenantController extends BaseController {
if (!tenantService.checkCompanyNameUnique(data)) {
fail("修改租户'" + data.getCompanyName() + "'失败,公司名称已存在");
}
tenantService.updateByBo(data);
TenantHelper.ignore(()->tenantService.updateByBo(data)); ;
}
/**

View File

@ -99,15 +99,14 @@ public class SysTenantPackageController extends BaseController {
/**
*
*
* @param packageId
* @param
*/
@ApiOperation("获取租户套餐详细信息")
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
@SaCheckPermission("system:tenantPackage:query")
@PostMapping("/getInfo")
public SysTenantPackageVo getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long packageId) {
return tenantPackageService.queryById(packageId);
public SysTenantPackageVo getInfo(@RequestBody @Validated Request<Long> bo) {
return tenantPackageService.queryById(bo.getData());
}
/**
@ -149,15 +148,13 @@ public class SysTenantPackageController extends BaseController {
/**
*
*
* @param packageIds
*/
@ApiOperation("删除租户套餐")
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
@SaCheckPermission("system:tenantPackage:remove")
@Log(title = "租户套餐", businessType = BusinessType.DELETE)
@PostMapping("/delete")
public void remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] packageIds) {
tenantPackageService.deleteWithValidByIds(List.of(packageIds), true);
public void remove(@RequestBody Request<List<Long>> bo) {
tenantPackageService.deleteWithValidByIds(bo.getData(), true);
}
}

View File

@ -24,6 +24,7 @@
package cc.iotkit.system.dto.bo;
import cc.iotkit.common.api.BaseDto;
import cc.iotkit.common.utils.DateUtils;
import cc.iotkit.common.validate.AddGroup;
import cc.iotkit.common.validate.EditGroup;
import cc.iotkit.model.system.SysTenant;
@ -32,7 +33,9 @@ import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
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;
/**

View File

@ -159,4 +159,6 @@ public interface ISysMenuService {
* @return
*/
boolean checkMenuNameUnique(SysMenuBo menu);
List<Long> selectMenuListByPackageId(Long data);
}

View File

@ -30,23 +30,34 @@ import cc.iotkit.common.utils.MapstructUtils;
import cc.iotkit.common.utils.StreamUtils;
import cc.iotkit.common.utils.StringUtils;
import cc.iotkit.common.utils.TreeBuildUtils;
import cc.iotkit.data.dao.SysTenantPackageRepository;
import cc.iotkit.data.system.ISysMenuData;
import cc.iotkit.data.system.ISysRoleData;
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.SysRole;
import cc.iotkit.model.system.SysTenantPackage;
import cc.iotkit.system.dto.bo.SysMenuBo;
import cc.iotkit.system.dto.vo.MetaVo;
import cc.iotkit.system.dto.vo.RouterVo;
import cc.iotkit.system.dto.vo.SysMenuVo;
import cc.iotkit.system.service.ISysMenuService;
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 com.querydsl.core.types.Predicate;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
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 ISysRoleMenuData iSysRoleMenuData;
private final ISysTenantPackageData iSysTenantPackageData;
/**
*
*
@ -383,6 +397,23 @@ public class SysMenuServiceImpl implements ISysMenuService {
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
*

View File

@ -111,7 +111,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
@Override
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));
// 根据套餐创建角色
Long roleId = createTenantRole(sysTenant.getTenantId(), bo.getPackageId());
@ -131,6 +133,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
SysRoleDept roleDept = new SysRoleDept();
roleDept.setRoleId(roleId);
roleDept.setDeptId(deptId);
roleDept.setTenantId(tenantId);
sysRoleDeptData.save(roleDept);
// 创建系统用户
@ -155,6 +158,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(retUser.getId());
userRole.setRoleId(roleId);
userRole.setTenantId(tenantId);
sysUserRoleData.save(userRole);
Long defaultTenantId = TenantConstants.DEFAULT_TENANT_ID;