diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/constants/SystemConstants.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/constants/SystemConstants.java index ec5ba030a..83e158d9b 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/constants/SystemConstants.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/constants/SystemConstants.java @@ -48,4 +48,9 @@ public interface SystemConstants { */ Boolean DEFAULT_CAPTCHA_OPEN = false; + /** + * 默认的系统的名称 + */ + String DEFAULT_SYSTEM_NAME = "Guns快速开发平台"; + } \ No newline at end of file diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/expander/SystemConfigExpander.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/expander/SystemConfigExpander.java index 3233a7cb0..55065acc2 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/expander/SystemConfigExpander.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/expander/SystemConfigExpander.java @@ -41,4 +41,14 @@ public class SystemConfigExpander { return ConfigContext.me().getSysConfigValueWithDefault("SYS_CAPTCHA_OPEN", Boolean.class, SystemConstants.DEFAULT_CAPTCHA_OPEN); } + /** + * 获取系统名称 + * + * @author fengshuonan + * @date 2020/12/27 17:22 + */ + public static String getSystemName() { + return ConfigContext.me().getSysConfigValueWithDefault("SYS_SYSTEM_NAME", String.class, SystemConstants.DEFAULT_SYSTEM_NAME); + } + } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiAppIndexMenus.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiAppIndexMenus.java new file mode 100644 index 000000000..aa1e6c685 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiAppIndexMenus.java @@ -0,0 +1,26 @@ +package cn.stylefeng.roses.kernel.system.pojo.menu.layui; + +import lombok.Data; + +import java.util.List; + +/** + * Layui用于首页渲染菜单的实体 + * + * @author fengshuonan + * @date 2020/12/27 18:39 + */ +@Data +public class LayuiAppIndexMenus { + + /** + * 应用的编码 + */ + private String appCode; + + /** + * 该应用对应的菜单树 + */ + private List layuiIndexMenuTreeNodes; + +} diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiIndexMenuTreeNode.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiIndexMenuTreeNode.java new file mode 100644 index 000000000..b97758c6d --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiIndexMenuTreeNode.java @@ -0,0 +1,67 @@ +package cn.stylefeng.roses.kernel.system.pojo.menu.layui; + +import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode; +import lombok.Data; + +import java.util.List; + +/** + * Layui首页菜单的节点 + * + * @author fengshuonan + * @date 2020/12/27 18:36 + */ +@Data +public class LayuiIndexMenuTreeNode implements AbstractTreeNode { + + /** + * 应用编码 + */ + private String appCode; + + /** + * 节点id + */ + private Long menuId; + + /** + * 父节点 + */ + private Long menuParentId; + + /** + * 菜单名称 + */ + private String menuName; + + /** + * 节点的url + */ + private String router; + + /** + * 节点图标 + */ + private String icon; + + /** + * 子节点的集合 + */ + private List children; + + @Override + public String getNodeId() { + return this.menuId.toString(); + } + + @Override + public String getNodeParentId() { + return this.menuParentId.toString(); + } + + @Override + public void setChildrenNodes(List childrenNodes) { + this.children = childrenNodes; + } + +} diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/MenuFactory.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/AntdMenusFactory.java similarity index 97% rename from kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/MenuFactory.java rename to kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/AntdMenusFactory.java index be56cb9c7..cc0bc7407 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/MenuFactory.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/AntdMenusFactory.java @@ -10,12 +10,12 @@ import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode; import java.util.List; /** - * 菜单pojo的组装 + * 针对于antd前端的菜单的组装 * * @author fengshuonan * @date 2020/11/23 21:58 */ -public class MenuFactory { +public class AntdMenusFactory { /** * menu实体转化为菜单树节点 diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/LayuiMenusFactory.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/LayuiMenusFactory.java new file mode 100644 index 000000000..2e870b35e --- /dev/null +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/factory/LayuiMenusFactory.java @@ -0,0 +1,70 @@ +package cn.stylefeng.roses.kernel.menu.modular.factory; + +import cn.hutool.core.bean.BeanUtil; +import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu; +import cn.stylefeng.roses.kernel.rule.factory.DefaultTreeBuildFactory; +import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus; +import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiIndexMenuTreeNode; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 针对于layui前端的菜单的组装 + * + * @author fengshuonan + * @date 2020/12/27 18:53 + */ +public class LayuiMenusFactory { + + /** + * 创建layui前端首页需要的菜单列表 + * + * @author fengshuonan + * @date 2020/12/27 19:07 + */ + public static List createLayuiAppIndexMenus(List sysMenuList) { + + ArrayList resultList = new ArrayList<>(); + + // 找出用户有多少个应用的菜单 + Set appCodes = new HashSet<>(); + for (SysMenu currentUserMenu : sysMenuList) { + String appCode = currentUserMenu.getAppCode(); + appCodes.add(appCode); + } + + // 找出每个应用下的所有菜单 + for (String appCode : appCodes) { + + + // 找出这个应用下的菜单 + List appMenus = sysMenuList.stream() + .filter(i -> i.getAppCode().equals(appCode)) + .collect(Collectors.toList()); + + // 菜单实体 转化为 layui节点 + ArrayList layuiIndexMenuTreeNodes = new ArrayList<>(); + for (SysMenu appMenu : appMenus) { + LayuiIndexMenuTreeNode layuiIndexMenuTreeNode = new LayuiIndexMenuTreeNode(); + BeanUtil.copyProperties(appMenu, layuiIndexMenuTreeNode); + layuiIndexMenuTreeNodes.add(layuiIndexMenuTreeNode); + } + + // 将这些菜单组合成树 + List layuiIndexMenuTreeNodeList = new DefaultTreeBuildFactory().doTreeBuild(layuiIndexMenuTreeNodes); + + // 将appCode和对应的树包装为实体 + LayuiAppIndexMenus layuiAppIndexMenus = new LayuiAppIndexMenus(); + layuiAppIndexMenus.setAppCode(appCode); + layuiAppIndexMenus.setLayuiIndexMenuTreeNodes(layuiIndexMenuTreeNodeList); + resultList.add(layuiAppIndexMenus); + } + + return resultList; + } + +} diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java index 2763a92b7..a1e2ea902 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java @@ -27,6 +27,7 @@ package cn.stylefeng.roses.kernel.menu.modular.service; import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu; import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode; +import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus; import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode; import com.baomidou.mybatisplus.extension.service.IService; @@ -104,6 +105,14 @@ public interface SysMenuService extends IService { */ List getCurrentUserMenus(String appCode); + /** + * 获取当前用户首页所有菜单(对应Layui前端的) + * + * @author fengshuonan + * @date 2020/12/27 18:48 + */ + List getLayuiIndexMenus(); + /** * 获取某个应用的菜单,用于系统顶部切换菜单(AntDesign前端框架) * diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java index c1765035a..2bbfe5a6d 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java @@ -33,7 +33,8 @@ import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; import cn.stylefeng.roses.kernel.db.api.DbOperatorApi; import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu; -import cn.stylefeng.roses.kernel.menu.modular.factory.MenuFactory; +import cn.stylefeng.roses.kernel.menu.modular.factory.AntdMenusFactory; +import cn.stylefeng.roses.kernel.menu.modular.factory.LayuiMenusFactory; import cn.stylefeng.roses.kernel.menu.modular.mapper.SysMenuMapper; import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuService; import cn.stylefeng.roses.kernel.rule.enums.StatusEnum; @@ -49,6 +50,7 @@ import cn.stylefeng.roses.kernel.system.exception.enums.SysMenuExceptionEnum; import cn.stylefeng.roses.kernel.system.exception.enums.SysUserExceptionEnum; import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode; +import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus; import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -179,6 +181,16 @@ public class SysMenuServiceImpl extends ServiceImpl impl return this.list(queryWrapper); } + @Override + public List getLayuiIndexMenus() { + + // 获取当前用户所有菜单 + List currentUserMenus = this.getCurrentUserMenus(); + + // 组装每个应用的菜单树 + return LayuiMenusFactory.createLayuiAppIndexMenus(currentUserMenus); + } + @Override public List getAppMenusAntDesign(String appCode) { @@ -186,7 +198,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl List currentUserMenus = this.getCurrentUserMenus(appCode); // 转换成登录菜单格式 - return MenuFactory.convertSysMenuToLoginMenu(currentUserMenus); + return AntdMenusFactory.convertSysMenuToLoginMenu(currentUserMenus); } @Override @@ -195,7 +207,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl LambdaQueryWrapper wrapper = createWrapper(sysMenuRequest); this.list(wrapper).forEach(sysMenu -> { - MenuSelectTreeNode menuTreeNode = MenuFactory.parseMenuBaseTreeNode(sysMenu); + MenuSelectTreeNode menuTreeNode = AntdMenusFactory.parseMenuBaseTreeNode(sysMenu); menuTreeNodeList.add(menuTreeNode); }); @@ -218,7 +230,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl } this.list(wrapper).forEach(sysMenu -> { - MenuSelectTreeNode menuTreeNode = MenuFactory.parseMenuBaseTreeNode(sysMenu); + MenuSelectTreeNode menuTreeNode = AntdMenusFactory.parseMenuBaseTreeNode(sysMenu); menuTreeNodeList.add(menuTreeNode); }); diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserService.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserService.java index 5b9327d15..479aa92dd 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserService.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserService.java @@ -158,4 +158,13 @@ public interface SysUserService extends IService, UserServiceApi { */ SysUser getUserByAccount(String account); + /** + * 获取用户头像的url + * + * @param fileId 文件id + * @author fengshuonan + * @date 2020/12/27 19:13 + */ + String getUserAvatarUrl(Long fileId); + } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java index c1944f0a8..61f762ba8 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java @@ -7,6 +7,10 @@ import cn.stylefeng.roses.kernel.auth.api.expander.AuthConfigExpander; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.file.FileInfoApi; +import cn.stylefeng.roses.kernel.file.FileOperatorApi; +import cn.stylefeng.roses.kernel.file.expander.FileConfigExpander; +import cn.stylefeng.roses.kernel.file.pojo.response.SysFileInfoResponse; import cn.stylefeng.roses.kernel.office.api.OfficeExcelApi; import cn.stylefeng.roses.kernel.office.api.pojo.report.ExcelExportParam; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; @@ -82,6 +86,12 @@ public class SysUserServiceImpl extends ServiceImpl impl @Resource private ResourceServiceApi resourceServiceApi; + @Resource + private FileInfoApi fileInfoApi; + + @Resource + private FileOperatorApi fileOperatorApi; + @Override @Transactional(rollbackFor = Exception.class) public void add(SysUserRequest sysUserRequest) { @@ -350,6 +360,19 @@ public class SysUserServiceImpl extends ServiceImpl impl return list.get(0); } + @Override + public String getUserAvatarUrl(Long fileId) { + + // 获取头像文件详细信息 + SysFileInfoResponse fileInfoWithoutContent = fileInfoApi.getFileInfoWithoutContent(fileId); + + // 获取头像的访问地址 + return fileOperatorApi.getFileAuthUrl( + fileInfoWithoutContent.getFileBucket(), + fileInfoWithoutContent.getFileObjectName(), + FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000); + } + @Override public UserLoginInfoDTO getUserLoginInfo(String account) {