diff --git a/opsli-api/src/main/java/org/opsli/api/web/gentest/carinfo/TestCarRestApi.java b/opsli-api/src/main/java/org/opsli/api/web/gentest/carinfo/TestCarRestApi.java index eb6a26fa..7809ca25 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/gentest/carinfo/TestCarRestApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/gentest/carinfo/TestCarRestApi.java @@ -44,7 +44,9 @@ import org.opsli.api.wrapper.gentest.carinfo.TestCarModel; public interface TestCarRestApi { /** 标题 */ - String TITLE = "汽车信息"; + String TITLE = "汽车信息管理"; + /** 子标题 */ + String SUB_TITLE = "汽车信息"; /** * 汽车信息 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/gentest/user/TestUserRestApi.java b/opsli-api/src/main/java/org/opsli/api/web/gentest/user/TestUserRestApi.java index 4013c8c5..f20b3a15 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/gentest/user/TestUserRestApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/gentest/user/TestUserRestApi.java @@ -44,7 +44,9 @@ import org.opsli.api.wrapper.gentest.user.TestUserModel; public interface TestUserRestApi { /** 标题 */ - String TITLE = "用户"; + String TITLE = "测试某系统用户管理"; + /** 子标题 */ + String SUB_TITLE = "测试用户"; /** * 某系统用户 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/area/SysAreaRestApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/area/SysAreaRestApi.java index 197bdd38..30ce18dd 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/area/SysAreaRestApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/area/SysAreaRestApi.java @@ -44,7 +44,9 @@ import javax.servlet.http.HttpServletResponse; public interface SysAreaRestApi { /** 标题 */ - String TITLE = "地域"; + String TITLE = "地域管理"; + /** 子标题 */ + String SUB_TITLE = "地域"; /** * 组织机构表 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictApi.java index f3a5f066..5fa91d67 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictApi.java @@ -44,7 +44,9 @@ import javax.servlet.http.HttpServletResponse; public interface DictApi { /** 标题 */ - String TITLE = "数据字典"; + String TITLE = "数据字典管理"; + /** 子标题 */ + String SUB_TITLE = "数据字典"; /** * 数据字典 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictDetailApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictDetailApi.java index bb170d01..e3aef90a 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictDetailApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/dict/DictDetailApi.java @@ -44,7 +44,10 @@ import java.util.List; */ public interface DictDetailApi { - String TITLE = "数据字典明细"; + /** 标题 */ + String TITLE = "数据字典明细管理"; + /** 子标题 */ + String SUB_TITLE = "数据字典明细"; /** * 数据字典 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/logs/LogsApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/logs/LogsApi.java index e6a80e21..6398df5c 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/logs/LogsApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/logs/LogsApi.java @@ -43,7 +43,9 @@ import javax.servlet.http.HttpServletRequest; public interface LogsApi { /** 标题 */ - String TITLE = "日志"; + String TITLE = "日志管理"; + /** 子标题 */ + String SUB_TITLE = "日志"; /** * 日志 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java index 0ebb1e96..49d3b620 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java @@ -45,7 +45,9 @@ import java.util.List; public interface MenuApi { /** 标题 */ - String TITLE = "菜单"; + String TITLE = "菜单管理"; + /** 子标题 */ + String SUB_TITLE = "菜单"; /** diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/options/OptionsApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/options/OptionsApi.java index 3226b3d9..524b77c5 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/options/OptionsApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/options/OptionsApi.java @@ -52,7 +52,10 @@ import java.util.Map; public interface OptionsApi { /** 标题 */ - String TITLE = "系统参数"; + String TITLE = "系统参数管理"; + /** 子标题 */ + String SUB_TITLE = "系统参数"; + /** * 系统参数 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/org/SysOrgRestApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/org/SysOrgRestApi.java index e33c5804..8e7544bf 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/org/SysOrgRestApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/org/SysOrgRestApi.java @@ -44,7 +44,9 @@ import org.opsli.api.wrapper.system.org.SysOrgModel; public interface SysOrgRestApi { /** 标题 */ - String TITLE = "组织机构"; + String TITLE = "组织机构管理"; + /** 子标题 */ + String SUB_TITLE = "组织机构"; @GetMapping("/findTreeLazyByUser") diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleApi.java index 0dcfa598..8a9919d8 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleApi.java @@ -44,7 +44,9 @@ import javax.servlet.http.HttpServletResponse; public interface RoleApi { /** 标题 */ - String TITLE = "角色"; + String TITLE = "角色管理"; + /** 子标题 */ + String SUB_TITLE = "角色"; /** * 角色 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java index 2bb4e232..a7c48967 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java @@ -45,7 +45,9 @@ import javax.servlet.http.HttpServletResponse; public interface RoleMenuRefApi { /** 标题 */ - String TITLE = "角色权限"; + String TITLE = "角色权限管理"; + /** 子标题 */ + String SUB_TITLE = "角色权限"; /** * 获得当前已有权限 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/tenant/TenantApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/tenant/TenantApi.java index 1569b52f..54f6a147 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/tenant/TenantApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/tenant/TenantApi.java @@ -44,7 +44,9 @@ import javax.servlet.http.HttpServletResponse; public interface TenantApi { /** 标题 */ - String TITLE = "租户"; + String TITLE = "租户管理"; + /** 子标题 */ + String SUB_TITLE = "租户"; /** * 租户 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/user/UserApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/user/UserApi.java index dbd29f74..1df76cc7 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/user/UserApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/user/UserApi.java @@ -49,7 +49,9 @@ import java.util.List; public interface UserApi { /** 标题 */ - String TITLE = "用户信息"; + String TITLE = "用户管理"; + /** 子标题 */ + String SUB_TITLE = "用户"; /** * 当前登陆用户信息 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/user/UserOrgRefApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/user/UserOrgRefApi.java index 847da002..abb08af2 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/user/UserOrgRefApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/user/UserOrgRefApi.java @@ -38,7 +38,9 @@ import org.springframework.web.bind.annotation.RequestBody; public interface UserOrgRefApi { /** 标题 */ - String TITLE = "组织机构"; + String TITLE = "用户组织管理"; + /** 子标题 */ + String SUB_TITLE = "用户组织"; /** diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/user/UserRoleRefApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/user/UserRoleRefApi.java index 44fb67a8..86b329b2 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/user/UserRoleRefApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/user/UserRoleRefApi.java @@ -40,7 +40,9 @@ import org.springframework.web.bind.annotation.RequestBody; public interface UserRoleRefApi { /** 标题 */ - String TITLE = "用户角色"; + String TITLE = "用户角色管理"; + /** 子标题 */ + String SUB_TITLE = "用户角色"; /** diff --git a/opsli-api/src/main/java/org/opsli/api/web/test/TestRestApi.java b/opsli-api/src/main/java/org/opsli/api/web/test/TestRestApi.java index 26d4e8a4..51ac958f 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/test/TestRestApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/test/TestRestApi.java @@ -44,7 +44,9 @@ import javax.servlet.http.HttpServletResponse; public interface TestRestApi { /** 标题 */ - String TITLE = "测试"; + String TITLE = "测试类管理"; + /** 子标题 */ + String SUB_TITLE = "测试类"; /** * 测试 查一条 diff --git a/opsli-api/src/main/java/org/opsli/api/wrapper/system/org/SysOrgModel.java b/opsli-api/src/main/java/org/opsli/api/wrapper/system/org/SysOrgModel.java index 1baeb92c..fff9a418 100644 --- a/opsli-api/src/main/java/org/opsli/api/wrapper/system/org/SysOrgModel.java +++ b/opsli-api/src/main/java/org/opsli/api/wrapper/system/org/SysOrgModel.java @@ -15,7 +15,6 @@ */ package org.opsli.api.wrapper.system.org; -import java.util.Date; import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; @@ -27,8 +26,6 @@ import org.opsli.common.annotation.validation.ValidationArgs; import org.opsli.common.annotation.validation.ValidationArgsLenMax; import org.opsli.common.enums.ValiArgsType; import org.opsli.plugins.excel.annotation.ExcelInfo; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; /** * @BelongsProject: opsli-boot diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/api/CreaterLogsApi.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/api/CreaterLogsApi.java index fa82749e..c52a23f5 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/api/CreaterLogsApi.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/api/CreaterLogsApi.java @@ -43,7 +43,9 @@ import javax.servlet.http.HttpServletResponse; public interface CreaterLogsApi { /** 标题 */ - String TITLE = "代码生成器 - 生成记录"; + String TITLE = "代码生成器-日志"; + /** 子标题 */ + String SUB_TITLE = "代码生成器-日志"; /** * 生成记录 查一条 diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java index 8d1266a0..64a4e042 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java @@ -37,7 +37,7 @@ import javax.servlet.http.HttpServletResponse; * @CreateTime: 2020-09-13 17:40 * @Description: 代码生成器日志 */ -@Api(tags = "代码生成器-日志") +@Api(tags = CreaterLogsApi.TITLE) @Slf4j @ApiRestController("/creater/logs") public class CreaterLogsRestController extends BaseRestController diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/api/TableApi.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/api/TableApi.java index adb582a7..fbeb78e5 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/api/TableApi.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/api/TableApi.java @@ -46,7 +46,9 @@ import javax.servlet.http.HttpServletResponse; public interface TableApi { /** 标题 */ - String TITLE = "代码生成器 - 表"; + String TITLE = "代码生成器-表"; + /** 子标题 */ + String SUB_TITLE = "代码生成器-表"; /** * 表 查一条 diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java index 6de89d1c..6d20ecb9 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java @@ -53,7 +53,7 @@ import java.util.List; * @CreateTime: 2020-09-13 17:40 * @Description: 代码生成器 - 表 */ -@Api(tags = "代码生成器-表") +@Api(tags = TableApi.TITLE) @Slf4j @ApiRestController("/creater/table") public class TableRestController extends BaseRestController diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/api/TemplateRestApi.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/api/TemplateRestApi.html index 1ccfe698..98485f82 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/api/TemplateRestApi.html +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/api/TemplateRestApi.html @@ -56,7 +56,9 @@ import #(apiPath).wrapper.#(data.moduleName).#(data.model.tableName)Model; public interface #(data.model.tableName)RestApi { /** 标题 */ - String TITLE = "#(data.codeTitleBrief)"; + String TITLE = "#(data.codeTitle)"; + /** 子标题 */ + String SUB_TITLE = "#(data.codeTitleBrief)"; /** * #(data.codeTitle) 查一条 diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html index 426143e7..f86065b5 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html @@ -62,7 +62,7 @@ import #(apiPath).web.#(data.moduleName).#(data.model.tableName)RestApi; * @CreateTime: #(currTime) * @Description: #(data.codeTitle) Controller */ -@Api(tags = "#(data.codeTitle)") +@Api(tags = #(data.model.tableName)RestApi.TITLE) @Slf4j #if(data.subModuleName != null && data.subModuleName != "") @ApiRestController("/#(data.moduleName)/#(data.subModuleName)") @@ -220,7 +220,7 @@ public class #(data.model.tableName)RestController extends BaseRestController<#( // 当前方法 Method method = ReflectUtil.getMethodByName(this.getClass(), "exportExcel"); QueryBuilder<#(data.model.tableName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(#(data.model.tableName)RestApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(#(data.model.tableName)RestApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -256,7 +256,7 @@ public class #(data.model.tableName)RestController extends BaseRestController<#( public void importTemplate(HttpServletResponse response) { // 当前方法 Method method = ReflectUtil.getMethodByName(this.getClass(), "importTemplate"); - super.importTemplate(#(data.model.tableName)RestApi.TITLE, response, method); + super.importTemplate(#(data.model.tableName)RestApi.SUB_TITLE, response, method); } } diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java index b9bfc03d..dee42758 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java @@ -15,6 +15,7 @@ */ package org.opsli.modulars.system.area.web; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; @@ -48,6 +49,7 @@ import org.opsli.core.base.entity.HasChildren; import org.opsli.core.persistence.querybuilder.GenQueryBuilder; import org.opsli.core.persistence.querybuilder.QueryBuilder; import org.opsli.core.persistence.querybuilder.WebQueryBuilder; +import org.opsli.core.utils.TreeBuildUtil; import org.opsli.modulars.system.area.entity.SysArea; import org.opsli.modulars.system.area.service.ISysAreaService; import org.springframework.core.io.ClassPathResource; @@ -69,12 +71,16 @@ import java.util.Set; * @CreateTime: 2020-11-28 18:59:59 * @Description: 地域表 Controller */ -@Api(tags = "地域管理") +@Api(tags = SysAreaRestApi.TITLE) @Slf4j @ApiRestController("/sys/area") public class SysAreaRestController extends BaseRestController implements SysAreaRestApi { + /** 是否包含子集 */ + private static final String HAS_CHILDREN = "hasChildren"; + /** 排序字段 */ + private static final String SORT_FIELD = "sortNo"; /** * 地域 查一条 @@ -101,64 +107,25 @@ public class SysAreaRestController extends BaseRestController findTree(String parentId) { - QueryBuilder queryBuilder = new GenQueryBuilder<>(); - QueryWrapper wrapper = queryBuilder.build(); + QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq(HumpUtil.humpToUnderline(MyBatisConstants.FIELD_PARENT_ID), parentId); + List dataList = IService.findList(wrapper); - // 获得用户 对应地域 - List dataList = IService.findList(wrapper); + // 获得BeanMapList + List> beanMapList = this.getBeanMapList(dataList); //配置 TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); // 自定义属性名 都要默认值的 - treeNodeConfig.setWeightKey("sortNo"); - treeNodeConfig.setNameKey("areaName"); - // 最大递归深度 最多支持4层菜单 + treeNodeConfig.setWeightKey(SORT_FIELD); + // 最大递归深度 最多支持1层 treeNodeConfig.setDeep(1); - List> treeNodes = TreeUtil.build(dataList, parentId, treeNodeConfig, - (treeNode, tree) -> { + //转换器 + List> treeNodes = TreeBuildUtil.INSTANCE.build(beanMapList, parentId, treeNodeConfig); - String areaCode = treeNode.getAreaCode(); - int sort = 0; - if(StringUtils.isNotEmpty(areaCode)){ - try { - sort = Integer.parseInt(areaCode); - }catch (Exception ignored){} - } - - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(sort); - tree.setName(treeNode.getAreaName()); - // 扩展属性 ... - // 不是外链 则处理组件 - tree.putExtra("areaCode", areaCode); - tree.putExtra("version", treeNode.getVersion()); - }); - - Set parentIds = Sets.newHashSet(); - for (Tree treeNode : treeNodes) { - parentIds.add(treeNode.getId()); - } - - // 数据排查是否存在下级 - List hasChildrenList = IService.hasChildren(parentIds); - if(CollUtil.isNotEmpty(hasChildrenList)){ - Map tmp = Maps.newHashMap(); - for (HasChildren hasChildren : hasChildrenList) { - if(hasChildren.getCount() != null && hasChildren.getCount() > 0){ - tmp.put(hasChildren.getParentId(), true); - } - } - - for (Tree treeNode : treeNodes) { - Boolean tmpFlag = tmp.get(treeNode.getId()); - if(tmpFlag != null && tmpFlag){ - treeNode.putExtra("hasChildren", true); - } - } - } + // 处理是否包含子集 + this.handleTreeHasChildren(treeNodes); return ResultVo.success(treeNodes); } @@ -178,58 +145,21 @@ public class SysAreaRestController extends BaseRestController dataList = IService.findList(new QueryWrapper<>()); + // 获得BeanMapList + List> beanMapList = this.getBeanMapList(dataList); //配置 TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); // 自定义属性名 都要默认值的 - treeNodeConfig.setWeightKey("sortNo"); - treeNodeConfig.setNameKey("areaName"); - // 最大递归深度 + treeNodeConfig.setWeightKey(SORT_FIELD); + // 最大递归深度 最多支持1层 treeNodeConfig.setDeep(deep); - List> treeNodes = TreeUtil.build(dataList, "0", treeNodeConfig, - (treeNode, tree) -> { + //转换器 + List> treeNodes = TreeBuildUtil.INSTANCE.build(beanMapList, treeNodeConfig); - String areaCode = treeNode.getAreaCode(); - int sort = 0; - if(StringUtils.isNotEmpty(areaCode)){ - try { - sort = Integer.parseInt(areaCode); - }catch (Exception ignored){} - } - - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(sort); - tree.setName(treeNode.getAreaName()); - // 扩展属性 ... - // 不是外链 则处理组件 - tree.putExtra("areaCode", areaCode); - tree.putExtra("version", treeNode.getVersion()); - }); - - Set parentIds = Sets.newHashSet(); - for (Tree treeNode : treeNodes) { - parentIds.add(treeNode.getId()); - } - - // 数据排查是否存在下级 - List hasChildrenList = IService.hasChildren(parentIds); - if(CollUtil.isNotEmpty(hasChildrenList)){ - Map tmp = Maps.newHashMap(); - for (HasChildren hasChildren : hasChildrenList) { - if(hasChildren.getCount() != null && hasChildren.getCount() > 0){ - tmp.put(hasChildren.getParentId(), true); - } - } - - for (Tree treeNode : treeNodes) { - Boolean tmpFlag = tmp.get(treeNode.getId()); - if(tmpFlag != null && tmpFlag){ - treeNode.putExtra("hasChildren", true); - } - } - } + // 处理是否包含子集 + this.handleTreeHasChildren(treeNodes); return ResultVo.success(treeNodes); } @@ -322,7 +252,7 @@ public class SysAreaRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(SysAreaRestApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(SysAreaRestApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -349,9 +279,75 @@ public class SysAreaRestController extends BaseRestController> getBeanMapList(List dataList) { + List> beanMapList = Lists.newArrayList(); + if(CollUtil.isEmpty(dataList)){ + return beanMapList; + } + + // 转化为 BeanMap 处理数据 + for (SysArea sysArea : dataList) { + Map beanToMap = BeanUtil.beanToMap(sysArea); + + // 获得排序 + String areaCode = sysArea.getAreaCode(); + int sort = 0; + if(StringUtils.isNotEmpty(areaCode)){ + try { + sort = Integer.parseInt(areaCode); + }catch (Exception ignored){} + } + beanToMap.put(SORT_FIELD, sort); + + beanMapList.add(beanToMap); + } + return beanMapList; + } + + /** + * 处理是否包含子集 + * @param treeNodes 树节点 + */ + private void handleTreeHasChildren(List> treeNodes) { + if(CollUtil.isEmpty(treeNodes)){ + return; + } + + Set parentIds = Sets.newHashSet(); + for (Tree treeNode : treeNodes) { + parentIds.add(Convert.toStr(treeNode.getId())); + } + + // 数据排查是否存在下级 + List hasChildrenList = IService.hasChildren(parentIds); + if (CollUtil.isNotEmpty(hasChildrenList)) { + Map tmp = Maps.newHashMap(); + for (HasChildren hasChildren : hasChildrenList) { + if (hasChildren.getCount() != null && hasChildren.getCount() > 0) { + tmp.put(hasChildren.getParentId(), true); + } + } + + for (Tree treeNode : treeNodes) { + Boolean tmpFlag = tmp.get(Convert.toStr(treeNode.getId())); + if (tmpFlag != null && tmpFlag) { + treeNode.putExtra(HAS_CHILDREN, true); + } + } + } } + /** * 导入数据 */ diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java index 290bce63..31b9c933 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java @@ -56,7 +56,7 @@ import java.util.List; * @CreateTime: 2020-09-13 17:40 * @Description: 数据字典明细 */ -@Api(tags = "数据字典明细") +@Api(tags = DictDetailApi.TITLE) @Slf4j @ApiRestController("/sys/dict/detail") public class DictDetailRestController extends BaseRestController @@ -218,7 +218,7 @@ public class DictDetailRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(DictDetailApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(DictDetailApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -245,7 +245,7 @@ public class DictDetailRestController extends BaseRestController @@ -219,7 +219,7 @@ public class DictRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(DictApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(DictApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -246,7 +246,7 @@ public class DictRestController extends BaseRestController diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java index 7b876f36..b3f0dae2 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java @@ -15,13 +15,16 @@ */ package org.opsli.modulars.system.menu.web; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.ReflectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -44,6 +47,7 @@ import org.opsli.core.persistence.Page; import org.opsli.core.persistence.querybuilder.GenQueryBuilder; import org.opsli.core.persistence.querybuilder.QueryBuilder; import org.opsli.core.persistence.querybuilder.WebQueryBuilder; +import org.opsli.core.utils.TreeBuildUtil; import org.opsli.core.utils.UserUtil; import org.opsli.modulars.system.SystemMsg; import org.opsli.modulars.system.menu.entity.SysMenu; @@ -64,12 +68,21 @@ import java.util.Map; * @CreateTime: 2020-09-13 17:40 * @Description: 菜单管理 */ -@Api(tags = "菜单管理") +@Api(tags = MenuApi.TITLE) @Slf4j @ApiRestController("/sys/menu") public class MenuRestController extends BaseRestController implements MenuApi { + private static final String SORT_FIELD = "order"; + + /** 菜单排除字段 */ + private static final String[] EXCLUSION_FIELDS = { + "createBy", "createTime", "updateBy", "updateTime", + "deleted", "menuCode", "menuName", "ts", "encryptData", + "hidden", "version", "sortNo", "url", "icon" + }; + /** * 根据 获得用户 菜单 - 权限 * 判断是否是超级管理员,如果是 则显示全部菜单 否则显示有权限菜单 @@ -107,39 +120,8 @@ public class MenuRestController extends BaseRestController> treeNodes = TreeUtil.build(menuModelList, "0", treeNodeConfig, - (treeNode, tree) -> { - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(treeNode.getSortNo()); - tree.setName(treeNode.getMenuName()); - // 扩展属性 ... - // 不是外链 则处理组件 - if(!MenuConstants.EXTERNAL.equals(treeNode.getType())){ - tree.putExtra("component", treeNode.getComponent()); - } - tree.putExtra("type", treeNode.getType()); - tree.putExtra("path", treeNode.getUrl()); - tree.putExtra("redirect", treeNode.getRedirect()); - // 处理 meta - Map metaMap = Maps.newHashMapWithExpectedSize(3); - metaMap.put("title", treeNode.getMenuName()); - metaMap.put("icon", treeNode.getIcon()); - // 外链处理 - if(MenuConstants.EXTERNAL.equals(treeNode.getType())){ - metaMap.put("target", "_blank"); - metaMap.put("badge", "New"); - } - tree.putExtra("meta", metaMap); - }); + // 获得菜单树 + List> treeNodes = getMenuTrees(menuModelList); return ResultVo.success(treeNodes); } @@ -157,60 +139,22 @@ public class MenuRestController extends BaseRestController menuList = UserUtil.getMenuListByUserId(user.getId()); - if(CollUtil.isEmpty(menuList)){ + List menuModelList = UserUtil.getMenuListByUserId(user.getId()); + if(CollUtil.isEmpty(menuModelList)){ // 用户暂无角色菜单,请设置后登录 throw new ServiceException(SystemMsg.EXCEPTION_USER_MENU_NOT_NULL); } // 这里有坑 如果 为 菜单数据 且 组件(Component)地址为空 不会跳转到主页 也不报错 // 修复菜单问题导致无法跳转主页 - menuList.removeIf(menuModel -> MenuConstants.MENU.equals(menuModel.getType()) && + menuModelList.removeIf(menuModel -> MenuConstants.MENU.equals(menuModel.getType()) && (StringUtils.isEmpty(menuModel.getComponent()) || StringUtils.isEmpty(menuModel.getMenuCode()) || StringUtils.isEmpty(menuModel.getUrl()) )); - //配置 - TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); - // 自定义属性名 都要默认值的 - treeNodeConfig.setWeightKey("order"); - // 最大递归深度 最多支持4层菜单 - treeNodeConfig.setDeep(4); - - //转换器 - List> treeNodes = TreeUtil.build(menuList, "0", treeNodeConfig, - (treeNode, tree) -> { - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(treeNode.getSortNo()); - tree.setName(treeNode.getMenuCode()); - // 扩展属性 ... - // 不是外链 则处理组件 - if(!MenuConstants.EXTERNAL.equals(treeNode.getType())){ - tree.putExtra("component", treeNode.getComponent()); - }else{ - // 如果是外链 则判断是否存在 BASE_PATH - // 设置BASE_PATH - if(StringUtils.isNotEmpty(treeNode.getUrl())){ - treeNode.setUrl(treeNode.getUrl().replace("${BASE_PATH}", - StartPrint.getInstance().getBasePath() - )); - } - } - tree.putExtra("path", treeNode.getUrl()); - tree.putExtra("type", treeNode.getType()); - tree.putExtra("redirect", treeNode.getRedirect()); - // 处理 meta - Map metaMap = Maps.newHashMapWithExpectedSize(3); - metaMap.put("title", treeNode.getMenuName()); - metaMap.put("icon", treeNode.getIcon()); - // 外链处理 - if(MenuConstants.EXTERNAL.equals(treeNode.getType())){ - metaMap.put("target", "_blank"); - } - tree.putExtra("meta", metaMap); - }); + // 获得菜单树 + List> treeNodes = getMenuTrees(menuModelList, EXCLUSION_FIELDS); return ResultVo.success(treeNodes); } @@ -230,33 +174,10 @@ public class MenuRestController extends BaseRestController menuList = IService.findList(queryBuilder.build()); + List menuModelList = WrapperUtil.transformInstance(menuList, MenuModel.class); - //配置 - TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); - // 自定义属性名 都要默认值的 - treeNodeConfig.setWeightKey("sortNo"); - treeNodeConfig.setNameKey("menuName"); - // 最大递归深度 最多支持4层菜单 - treeNodeConfig.setDeep(4); - - //转换器 - List> treeNodes = TreeUtil.build(menuList, "0", treeNodeConfig, - (treeNode, tree) -> { - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(treeNode.getSortNo()); - tree.setName(treeNode.getMenuName()); - // 扩展属性 ... - // 不是外链 则处理组件 - tree.putExtra("menuCode", treeNode.getMenuCode()); - tree.putExtra("component", treeNode.getComponent()); - tree.putExtra("type", treeNode.getType()); - tree.putExtra("url", treeNode.getUrl()); - tree.putExtra("redirect", treeNode.getRedirect()); - tree.putExtra("icon", treeNode.getIcon()); - tree.putExtra("hidden", treeNode.getHidden()); - tree.putExtra("version", treeNode.getVersion()); - }); + // 获得菜单树 + List> treeNodes = getMenuTrees(menuModelList); return ResultVo.success(treeNodes); } @@ -401,7 +322,7 @@ public class MenuRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(MenuApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(MenuApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -429,7 +350,7 @@ public class MenuRestController extends BaseRestController> getBeanMapList(List dataList, String[] exclusionFields) { + List> beanMapList = Lists.newArrayList(); + if(CollUtil.isEmpty(dataList)){ + return beanMapList; + } + + // 转化为 BeanMap 处理数据 + for (MenuModel model : dataList) { + Map beanToMap = BeanUtil.beanToMap(model); + // 排除字段 + if(exclusionFields != null && exclusionFields.length > 0){ + for (String exclusionField : exclusionFields) { + beanToMap.remove(exclusionField); + } + } + + + // 扩展属性 ... + // 不是外链 则处理组件 + if(!MenuConstants.EXTERNAL.equals(model.getType())){ + beanToMap.put("component", model.getComponent()); + }else{ + // 如果是外链 则判断是否存在 BASE_PATH + // 设置BASE_PATH + if(StringUtils.isNotEmpty(model.getUrl())){ + model.setUrl(model.getUrl().replace("${BASE_PATH}", + StartPrint.getInstance().getBasePath() + )); + } + } + + beanToMap.put(SORT_FIELD, model.getSortNo()); + beanToMap.put("path", model.getUrl()); + beanToMap.put("name", model.getMenuName()); + + // 处理 meta + Map metaMap = Maps.newHashMapWithExpectedSize(3); + metaMap.put("title", model.getMenuName()); + metaMap.put("icon", model.getIcon()); + // 外链处理 + if(MenuConstants.EXTERNAL.equals(model.getType())){ + metaMap.put("target", "_blank"); + } + + beanToMap.put("meta", metaMap); + beanMapList.add(beanToMap); + } + + return beanMapList; + } + + + /** + * 获得菜单树 + * @param menuList 菜单集合 + * @return List + */ + private List> getMenuTrees(List menuList) { + //转换器 + return this.getMenuTrees(menuList, null); + } + + /** + * 获得菜单树 + * @param menuList 菜单集合 + * @param exclusionFields 排除字段 + * @return List + */ + private List> getMenuTrees(List menuList, String[] exclusionFields) { + if(CollUtil.isEmpty(menuList)){ + return ListUtil.empty(); + } + + + // 获得BeanMapList + List> beanMapList = this.getBeanMapList(menuList, exclusionFields); + + //配置 + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + // 自定义属性名 都要默认值的 + treeNodeConfig.setWeightKey(SORT_FIELD); + // 最大递归深度 最多支持4层菜单 + treeNodeConfig.setDeep(4); + + //转换器 + return TreeBuildUtil.INSTANCE.build(beanMapList, treeNodeConfig); + } + } diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/options/web/SysOptionsRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/options/web/SysOptionsRestController.java index 1f2cf64f..186e9d9b 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/options/web/SysOptionsRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/options/web/SysOptionsRestController.java @@ -57,7 +57,7 @@ import java.util.Map; * * @author Parker */ -@Api(tags = "系统参数") +@Api(tags = OptionsApi.TITLE) @Slf4j @ApiRestController("/sys/options") public class SysOptionsRestController extends BaseRestController @@ -213,7 +213,7 @@ public class SysOptionsRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(OptionsApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(OptionsApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -241,7 +241,7 @@ public class SysOptionsRestController extends BaseRestController @@ -74,6 +75,10 @@ public class SysOrgRestController extends BaseRestController dataList = IService.findList(wrapper); List orgModelList = WrapperUtil.transformInstance(dataList, modelClazz); - // 0 为初始值 - if(PARENT_ID.equals(parentId)){ - // 显示全部 - SysOrgModel orgAll = new SysOrgModel(); - orgAll.setId(ORG_ALL); - orgAll.setOrgCode("-2"); - orgAll.setOrgName("全部"); - orgAll.setOrgType("-2"); - orgAll.setParentId("0"); - orgAll.setSortNo(-2); - orgModelList.add(orgAll); - - // 未分组 - SysOrgModel orgNull = new SysOrgModel(); - orgNull.setId(ORG_NULL); - orgNull.setOrgCode("-1"); - orgNull.setOrgName("未分组"); - orgNull.setOrgType("-1"); - orgNull.setParentId("0"); - orgNull.setSortNo(-1); - orgModelList.add(orgNull); - } + // 处理展示节点 + this.handleShowNodes(parentId, orgModelList); //配置 TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); // 自定义属性名 都要默认值的 - treeNodeConfig.setWeightKey("sortNo"); - treeNodeConfig.setNameKey("orgName"); + treeNodeConfig.setWeightKey(SORT_FIELD); // 最大递归深度 最多支持4层菜单 treeNodeConfig.setDeep(3); //转换器 - List> treeNodes = TreeUtil.build(orgModelList, parentId, treeNodeConfig, - (treeNode, tree) -> { - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(treeNode.getSortNo()); - tree.setName(treeNode.getOrgName()); - // 扩展属性 ... - // 不是外链 则处理组件 - tree.putExtra("orgCode", treeNode.getOrgCode()); - tree.putExtra("orgType", treeNode.getOrgType()); - tree.putExtra("version", treeNode.getVersion()); - tree.putExtra("tenantId", treeNode.getTenantId()); - }); - - Set parentIds = Sets.newHashSet(); - for (Tree treeNode : treeNodes) { - parentIds.add(treeNode.getId()); - } + List> treeNodes = TreeBuildUtil.INSTANCE.build(orgModelList, parentId, treeNodeConfig); - // 数据排查是否存在下级 - List hasChildrenList = IService.hasChildren(parentIds); - if(CollUtil.isNotEmpty(hasChildrenList)){ - Map tmp = Maps.newHashMap(); - for (HasChildren hasChildren : hasChildrenList) { - if(hasChildren.getCount() != null && hasChildren.getCount() > 0){ - tmp.put(hasChildren.getParentId(), true); - } - } - - for (Tree treeNode : treeNodes) { - Boolean tmpFlag = tmp.get(treeNode.getId()); - if(tmpFlag != null && tmpFlag){ - treeNode.putExtra("hasChildren", true); - } - } - } + // 处理是否包含子集 + this.handleTreeHasChildren(treeNodes); return ResultVo.success(treeNodes); } + + /** * 获得组织树 懒加载 * @return ResultVo @@ -184,48 +138,15 @@ public class SysOrgRestController extends BaseRestController> treeNodes = TreeUtil.build(orgModelList, parentId, treeNodeConfig, - (treeNode, tree) -> { - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(treeNode.getSortNo()); - tree.setName(treeNode.getOrgName()); - // 扩展属性 ... - // 不是外链 则处理组件 - tree.putExtra("orgCode", treeNode.getOrgCode()); - tree.putExtra("orgType", treeNode.getOrgType()); - tree.putExtra("version", treeNode.getVersion()); - tree.putExtra("tenantId", treeNode.getTenantId()); - }); + List> treeNodes = TreeBuildUtil.INSTANCE.build(orgModelList, parentId, treeNodeConfig); - Set parentIds = Sets.newHashSet(); - for (Tree treeNode : treeNodes) { - parentIds.add(treeNode.getId()); - } - - // 数据排查是否存在下级 - List hasChildrenList = IService.hasChildren(parentIds); - if(CollUtil.isNotEmpty(hasChildrenList)){ - Map tmp = Maps.newHashMap(); - for (HasChildren hasChildren : hasChildrenList) { - if(hasChildren.getCount() != null && hasChildren.getCount() > 0){ - tmp.put(hasChildren.getParentId(), true); - } - } - - for (Tree treeNode : treeNodes) { - Boolean tmpFlag = tmp.get(treeNode.getId()); - if(tmpFlag != null && tmpFlag){ - treeNode.putExtra("hasChildren", true); - } - } - } + // 处理是否包含子集 + this.handleTreeHasChildren(treeNodes); return ResultVo.success(treeNodes); } @@ -250,25 +171,12 @@ public class SysOrgRestController extends BaseRestController> treeNodes = TreeUtil.build(orgModelList, parentId, treeNodeConfig, - (treeNode, tree) -> { - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(treeNode.getSortNo()); - tree.setName(treeNode.getOrgName()); - // 扩展属性 ... - // 不是外链 则处理组件 - tree.putExtra("orgCode", treeNode.getOrgCode()); - tree.putExtra("orgType", treeNode.getOrgType()); - tree.putExtra("version", treeNode.getVersion()); - tree.putExtra("tenantId", treeNode.getTenantId()); - }); + List> treeNodes = TreeBuildUtil.INSTANCE.build(orgModelList, parentId, treeNodeConfig); return ResultVo.success(treeNodes); } @@ -310,25 +218,12 @@ public class SysOrgRestController extends BaseRestController> treeNodes = TreeUtil.build(dataList, "0", treeNodeConfig, - (treeNode, tree) -> { - tree.setId(treeNode.getId()); - tree.setParentId(treeNode.getParentId()); - tree.setWeight(treeNode.getSortNo()); - tree.setName(treeNode.getOrgName()); - // 扩展属性 ... - // 不是外链 则处理组件 - tree.putExtra("orgCode", treeNode.getOrgCode()); - tree.putExtra("orgType", treeNode.getOrgType()); - tree.putExtra("version", treeNode.getVersion()); - tree.putExtra("tenantId", treeNode.getTenantId()); - }); + List> treeNodes = TreeBuildUtil.INSTANCE.build(dataList, treeNodeConfig); return ResultVo.success(treeNodes); } @@ -421,7 +316,7 @@ public class SysOrgRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(SysOrgRestApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(SysOrgRestApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -448,7 +343,73 @@ public class SysOrgRestController extends BaseRestController orgModelList) { + // 0 为初始值 + if(PARENT_ID.equals(parentId)){ + // 显示全部 + SysOrgModel orgAll = new SysOrgModel(); + orgAll.setId(ORG_ALL); + orgAll.setOrgCode("-2"); + orgAll.setOrgName("全部"); + orgAll.setOrgType("-2"); + orgAll.setParentId("0"); + orgAll.setSortNo(-2); + orgModelList.add(orgAll); + + // 未分组 + SysOrgModel orgNull = new SysOrgModel(); + orgNull.setId(ORG_NULL); + orgNull.setOrgCode("-1"); + orgNull.setOrgName("未分组"); + orgNull.setOrgType("-1"); + orgNull.setParentId("0"); + orgNull.setSortNo(-1); + orgModelList.add(orgNull); + } + } + + /** + * 处理是否包含子集 + * @param treeNodes 树节点 + */ + private void handleTreeHasChildren(List> treeNodes) { + if(CollUtil.isEmpty(treeNodes)){ + return; + } + + Set parentIds = Sets.newHashSet(); + for (Tree treeNode : treeNodes) { + parentIds.add(Convert.toStr(treeNode.getId())); + } + + // 数据排查是否存在下级 + List hasChildrenList = IService.hasChildren(parentIds); + if (CollUtil.isNotEmpty(hasChildrenList)) { + Map tmp = Maps.newHashMap(); + for (HasChildren hasChildren : hasChildrenList) { + if (hasChildren.getCount() != null && hasChildren.getCount() > 0) { + tmp.put(hasChildren.getParentId(), true); + } + } + + for (Tree treeNode : treeNodes) { + Boolean tmpFlag = tmp.get(Convert.toStr(treeNode.getId())); + if (tmpFlag != null && tmpFlag) { + treeNode.putExtra(HAS_CHILDREN, true); + } + } + } } } diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java index f3abf2c5..cb133765 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java @@ -49,7 +49,7 @@ import java.util.stream.Collectors; * @CreateTime: 2020-09-13 17:40 * @Description: 角色权限 */ -@Api(tags = "角色权限") +@Api(tags = RoleMenuRefApi.TITLE) @Slf4j @ApiRestController("/sys/role/perms") public class RoleMenuRefRestController implements RoleMenuRefApi { diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java index 6eddbef1..b57b0357 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java @@ -226,7 +226,7 @@ public class RoleRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(RoleApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(RoleApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -254,7 +254,7 @@ public class RoleRestController extends BaseRestController @@ -179,7 +179,7 @@ public class TenantRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(RoleApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(TenantApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -206,7 +206,7 @@ public class TenantRestController extends BaseRestController @@ -458,7 +458,7 @@ public class UserRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(UserApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(UserApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -484,7 +484,7 @@ public class UserRestController extends BaseRestController @@ -173,7 +173,7 @@ public class TestCarRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(TestCarRestApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(TestCarRestApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -202,7 +202,7 @@ public class TestCarRestController extends BaseRestController @@ -166,7 +166,7 @@ public class TestUserRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(TestUserRestApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(TestUserRestApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -195,7 +195,7 @@ public class TestUserRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(TestRestApi.TITLE, queryBuilder.build(), response, method); + super.excelExport(TestRestApi.SUB_TITLE, queryBuilder.build(), response, method); } /** @@ -177,7 +177,7 @@ public class TestRestController extends BaseRestController