lishuangjiang@potevio.com 2 anos atrás
pai
commit
428339b82c

+ 3 - 0
iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysTenantPackageData.java

@@ -3,10 +3,13 @@ package cc.iotkit.data.system;
 import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.system.SysTenantPackage;
 
+import java.util.List;
+
 /**
  * 操作日志数据接口
  *
  * @author sjg
  */
 public interface ISysTenantPackageData extends ICommonData<SysTenantPackage, Long> {
+    List<Long> selectMenuListByPackageId(Long packageId, boolean b);
 }

+ 39 - 0
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysTenantPackageDataImpl.java

@@ -2,16 +2,28 @@ package cc.iotkit.data.service;
 
 import cc.iotkit.data.dao.IJPACommData;
 import cc.iotkit.data.dao.SysTenantPackageRepository;
+import cc.iotkit.data.model.QTbSysTenantPackage;
 import cc.iotkit.data.model.TbSysTenantPackage;
 import cc.iotkit.data.system.ISysTenantPackageData;
+import cc.iotkit.data.util.PredicateBuilder;
 import cc.iotkit.model.system.SysTenantPackage;
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import lombok.RequiredArgsConstructor;
+import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Primary;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static cc.iotkit.data.model.QTbSysMenu.tbSysMenu;
+import static cc.iotkit.data.model.QTbSysRoleMenu.tbSysRoleMenu;
+
 /**
  * @Author:tfd
  * @Date:2023/5/30 13:43
@@ -43,4 +55,31 @@ public class SysTenantPackageDataImpl implements ISysTenantPackageData, IJPAComm
     }
 
 
+    @Override
+    public List<Long> selectMenuListByPackageId(Long packageId, boolean menuCheckStrictly) {
+
+          String menus = jpaQueryFactory.select(QTbSysTenantPackage.tbSysTenantPackage.menuIds)
+                .from(QTbSysTenantPackage.tbSysTenantPackage).where(QTbSysTenantPackage.tbSysTenantPackage.id.eq(packageId)).fetchOne();
+          if(Strings.isNotEmpty(menus)){
+              List<Long> menuIds = Arrays.stream(menus.split(",")).map(item->Long.parseLong(item)).collect(Collectors.toList());
+              PredicateBuilder predicateBuilder = PredicateBuilder.instance()
+                      .and(tbSysMenu.id.in(menuIds));
+
+              if (menuCheckStrictly) {
+                  List<Long> roleIds = jpaQueryFactory.select(tbSysMenu.parentId)
+                          .from(tbSysMenu)
+                          .where(tbSysMenu.id.in(menuIds))
+                          .fetch();
+                  predicateBuilder.and(tbSysMenu.id.notIn(roleIds));
+              }
+
+              return jpaQueryFactory.select( tbSysMenu.id)
+                      .from(tbSysMenu)
+                      .where(predicateBuilder.build())
+                      .orderBy(tbSysMenu.parentId.asc(), tbSysMenu.orderNum.asc()).fetch();
+          }else{
+              return Collections.emptyList();
+
+          }
+    }
 }

+ 20 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysMenuController.java

@@ -116,6 +116,26 @@ public class SysMenuController extends BaseController {
         return selectVo;
     }
 
+    /**
+     * 加载对应租户套餐菜单列表树
+     *
+     */
+    @ApiOperation("加载对应租户套餐菜单列表树")
+    @SaCheckRole(value = {
+            TenantConstants.SUPER_ADMIN_ROLE_KEY,
+            TenantConstants.TENANT_ADMIN_ROLE_KEY
+    }, mode = SaMode.OR)
+    @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;
+    }
+
+
     /**
      * 新增菜单
      */

+ 3 - 4
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantPackageController.java

@@ -81,7 +81,7 @@ public class SysTenantPackageController extends BaseController {
     @ApiOperation("获取租户套餐详细信息")
     @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
     @SaCheckPermission("system:tenantPackage:query")
-    @PostMapping("/getInfo")
+    @PostMapping("/getInfo/{packageId}")
     public SysTenantPackageVo getInfo(@NotNull(message = "主键不能为空")
                                       @PathVariable Long packageId) {
         return tenantPackageService.queryById(packageId);
@@ -133,8 +133,7 @@ public class SysTenantPackageController extends BaseController {
     @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(@Validated @RequestBody Request<Long[]> packageIds) {
+        tenantPackageService.deleteWithValidByIds(List.of(packageIds.getData()), true);
     }
 }

+ 2 - 1
iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysTenantPackageBo.java

@@ -22,11 +22,12 @@ import lombok.EqualsAndHashCode;
 @AutoMapper(target = SysTenantPackage.class, reverseConvertGenerate = false)
 public class SysTenantPackageBo extends BaseDto {
 
+
     /**
      * 租户套餐id
      */
     @NotNull(message = "租户套餐id不能为空", groups = {EditGroup.class})
-    private Long packageId;
+    private Long id;
 
     /**
      * 套餐名称

+ 2 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/service/ISysMenuService.java

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

+ 15 - 1
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysMenuServiceImpl.java

@@ -10,8 +10,10 @@ import cc.iotkit.common.utils.TreeBuildUtils;
 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.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;
@@ -36,6 +38,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
     private final ISysMenuData sysMenuData;
     private final ISysRoleData sysRoleData;
     private final ISysRoleMenuData iSysRoleMenuData;
+    private final ISysTenantPackageData sysTenantPackageData;
 
     /**
      * 根据用户查询系统菜单列表
@@ -129,6 +132,18 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return sysRoleData.selectMenuListByRoleId(roleId, flag != null && flag);
     }
 
+    /**
+     * 根据租户套餐Id查询菜单树信息
+     * @param packageId 租户套餐ID
+     * @return
+     */
+    @Override
+    public List<Long> selectMenuListByPackageId(Long packageId) {
+        SysTenantPackage tenantPackage = sysTenantPackageData.findById(packageId);
+        Boolean flag = tenantPackage.getMenuCheckStrictly();
+        return sysTenantPackageData.selectMenuListByPackageId(packageId,flag != null && flag);
+    }
+
     /**
      * 构建前端路由所需要的菜单
      *
@@ -401,5 +416,4 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, "."},
                 new String[]{"", "", "", "/"});
     }
-
 }