diff --git a/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysMenuData.java b/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysMenuData.java index 915abf31..d6278e4e 100644 --- a/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysMenuData.java +++ b/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysMenuData.java @@ -67,4 +67,7 @@ public interface ISysMenuData extends ICommonData { boolean checkMenuNameUnique(SysMenu menu); + List selectParentIdByMenuIds(List menuIds); + + List findByMenuIdListAndNotParentIdList(List menuIds, List parentIds); } diff --git a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysMenuDataImpl.java b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysMenuDataImpl.java index 7b4c8c7b..d4fcfdb1 100644 --- a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysMenuDataImpl.java +++ b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysMenuDataImpl.java @@ -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 selectParentIdByMenuIds(List menuIds) { + return jpaQueryFactory.select(tbSysMenu.parentId).from(tbSysMenu).where(tbSysMenu.id.in(menuIds)).fetch(); + + } + + @Override + public List findByMenuIdListAndNotParentIdList(List menuIds, List 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(); + } } diff --git a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysTenantDataImpl.java b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysTenantDataImpl.java index f00dcb9d..7322218b 100644 --- a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysTenantDataImpl.java +++ b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysTenantDataImpl.java @@ -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 bo) { + List menus = menuService.selectMenuList(LoginHelper.getUserId()); + MenuTreeSelectVo selectVo = new MenuTreeSelectVo(); + selectVo.setCheckedKeys(menuService.selectMenuListByPackageId(bo.getData())); + selectVo.setMenus(menuService.buildMenuTreeSelect(menus)); + return selectVo; + } /** * 删除菜单 * diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantController.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantController.java index da521d64..1be24923 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantController.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantController.java @@ -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)); ; } /** diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantPackageController.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantPackageController.java index f18f978d..4d78a1f9 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantPackageController.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantPackageController.java @@ -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 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> bo) { + tenantPackageService.deleteWithValidByIds(bo.getData(), true); } } diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysTenantBo.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysTenantBo.java index 41f4fddc..78e58be4 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysTenantBo.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysTenantBo.java @@ -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; /** diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/ISysMenuService.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/ISysMenuService.java index 078199c1..c60a8995 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/ISysMenuService.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/ISysMenuService.java @@ -159,4 +159,6 @@ public interface ISysMenuService { * @return 结果 */ boolean checkMenuNameUnique(SysMenuBo menu); + + List selectMenuListByPackageId(Long data); } diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysMenuServiceImpl.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysMenuServiceImpl.java index 7f4e7ae0..6a148111 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysMenuServiceImpl.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysMenuServiceImpl.java @@ -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 selectMenuListByPackageId(Long packageId) { + SysTenantPackage tenantPackage = iSysTenantPackageData.findById(packageId); + List menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong); + if (CollUtil.isEmpty(menuIds)) { + return List.of(); + } + List parentIds; + if (Objects.equals(tenantPackage.getMenuCheckStrictly(),true)) { + parentIds = sysMenuData.selectParentIdByMenuIds(menuIds); + } else { + parentIds = null; + } + + return sysMenuData.findByMenuIdListAndNotParentIdList(menuIds, parentIds); + } + /** * 根据父节点的ID获取所有子节点 * diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysTenantServiceImpl.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysTenantServiceImpl.java index ffdd3134..0c7edbc5 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysTenantServiceImpl.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysTenantServiceImpl.java @@ -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;