diff --git a/LICENSE b/LICENSE index ef4e4de..1481eda 100644 --- a/LICENSE +++ b/LICENSE @@ -176,7 +176,7 @@ recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 smallchill + Copyright 2019 ZhuangQian (smallchill@163.com) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 44f2f65..d63e649 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,23 @@ * 官网地址:[https://bladex.vip](https://bladex.vip) ## 在线演示 -* 演示地址:[https://sword.bladex.vip](https://sword.bladex.vip) +* Sword演示地址:[https://sword.bladex.vip](https://sword.bladex.vip) +* Saber演示地址:[https://saber.avue.top](https://saber.avue.top) -## 项目地址 -* [github](https://github.com/chillzhuang/SpringBlade) -* [gitee](https://gitee.com/smallc/SpringBlade) +## 后端项目地址 +* [Gitee地址](https://gitee.com/smallc/SpringBlade) +* [Github地址](https://github.com/chillzhuang/SpringBlade) + +## 前端项目地址 +* [Sword--基于React](https://gitee.com/smallc/Sword) +* [Saber--基于Vue](https://gitee.com/smallc/Saber) ## 主要特性&&变化 -* 采用前后端分离的模式,前端单独开源出一个框架:[Sword](https://github.com/chillzhuang/Sword),主要选型技术为React、Ant Design、Umi、Dva -* 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:[BladeTool](https://github.com/chillzhuang/blade-tool.git) -* [BladeTool](https://github.com/chillzhuang/blade-tool.git)已推送至Maven中央库,直接引入即可,减少了工程的臃肿,也可更注重于业务开发 -* 集成Sentinel从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 +* 采用前后端分离的模式,前端开源出一个基于React的框架:[Sword](https://gitee.com/smallc/Sword),主要选型技术为React、Ant Design、Umi、Dva +* 采用前后端分离的模式,前端开源出一个基于Vue的框架:[Saber](https://gitee.com/smallc/Saber),主要选型技术为Vue、VueX、Avue、Element-UI +* 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:[BladeTool](https://github.com/chillzhuang/blade-tool) +* [BladeTool](https://github.com/chillzhuang/blade-tool)已推送至Maven中央库,直接引入即可,减少了工程的臃肿,也可更注重于业务开发 +* 集成Sentinel从流量控制、熔断降级、系统负载等多个维度保护服务的稳定性。 * 注册中心、配置中心选型Nacos,为工程瘦身的同时加强各模块之间的联动。 * 使用Traefik进行反向代理,监听后台变化自动化应用新的配置文件。 * 部署使用Docker或K8s + Jenkins @@ -31,6 +37,9 @@ ## 技术文档 * [SpringBlade开发手册](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade开发手册) +## 单工程SpringBoot版 +* [SpringBoot版](https://gitee.com/smallc/SpringBlade/tree/2.0-boot/) + ## 工程结构 ``` SpringBlade @@ -39,7 +48,7 @@ SpringBlade ├── blade-gateway -- Spring Cloud 网关 ├── blade-ops -- 运维中心 ├ ├── blade-admin -- spring-cloud后台管理 -├ ├── blade-codegen -- 代码生成 +├ ├── blade-develop -- 代码生成 ├── blade-service -- 业务模块 ├ ├── blade-desk -- 工作台模块 ├ ├── blade-log -- 日志模块 @@ -80,12 +89,14 @@ Apache Licence也是对商业应用友好的许可。使用者也可以在需要 注意:若禁止条款被发现有权追讨19999的授权费。 ## 注 -* SpringBlade前端UI项目地址:[Sword](https://gitee.com/smallc/Sword) -* SpringBlade核心框架项目地址:[Blade-Tool](https://github.com/chillzhuang/blade-tool.git) -* SpringBlade交流群:`477853168` +* 前端UI项目地址(基于React):[Sword](https://gitee.com/smallc/Sword) +* 前端UI项目地址(基于Vue):[Saber](https://gitee.com/smallc/Saber) +* 核心框架项目地址:[BladeTool](https://github.com/chillzhuang/blade-tool.git) +* 交流群:`477853168` -# 界面一览 +# 界面 +## 监控界面一览 @@ -111,6 +122,10 @@ Apache Licence也是对商业应用友好的许可。使用者也可以在需要 +
+ +## Sword界面一览 + @@ -131,4 +146,20 @@ Apache Licence也是对商业应用友好的许可。使用者也可以在需要 +
+ +## Saber界面一览 + + + + + + + + + + + + +
\ No newline at end of file diff --git a/blade-auth/src/main/java/org/springblade/auth/controller/AuthController.java b/blade-auth/src/main/java/org/springblade/auth/controller/AuthController.java index 21726e2..6678159 100644 --- a/blade-auth/src/main/java/org/springblade/auth/controller/AuthController.java +++ b/blade-auth/src/main/java/org/springblade/auth/controller/AuthController.java @@ -62,7 +62,7 @@ public class AuthController { User user = res.getData().getUser(); //验证用户 - if (user == null) { + if (user == null || Func.isEmpty(user.getId())) { return R.fail("用户名或密码不正确"); } diff --git a/blade-ops/blade-develop/pom.xml b/blade-ops/blade-develop/pom.xml index 6019cb3..8df2e6f 100644 --- a/blade-ops/blade-develop/pom.xml +++ b/blade-ops/blade-develop/pom.xml @@ -23,6 +23,11 @@ blade-core-boot ${blade.tool.version} + + org.springblade + blade-common + ${blade.project.version} + com.baomidou mybatis-plus-generator diff --git a/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java b/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java index d39c2d1..a262b53 100644 --- a/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java +++ b/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java @@ -248,7 +248,7 @@ public class BladeGenerator { */ private Properties getProperties() { // 读取配置文件 - Resource resource = new ClassPathResource("generator.properties"); + Resource resource = new ClassPathResource("/templates/props/generator.properties"); Properties props = new Properties(); try { props = PropertiesLoaderUtils.loadProperties(resource); diff --git a/blade-ops/blade-develop/src/main/resources/generator.properties b/blade-ops/blade-develop/src/main/resources/templates/props/generator.properties similarity index 100% rename from blade-ops/blade-develop/src/main/resources/generator.properties rename to blade-ops/blade-develop/src/main/resources/templates/props/generator.properties diff --git a/blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm b/blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm index 0f985db..7ad0005 100644 --- a/blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm +++ b/blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm @@ -30,7 +30,7 @@ class $!{entity}View extends PureComponent { params: { id }, }, } = this.props; - router.push(`/$!{cfg.servicePackage}/$!{table.entityPath}/edit/${id}`); + router.push(`/$!{cfg.servicePackage}/$!{table.entityPath}/edit/$!{id}`); }; render() { diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java index f74b185..f38af6d 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java @@ -23,7 +23,6 @@ import org.springblade.core.secure.BladeUser; import org.springblade.core.tool.api.R; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.Func; -import org.springblade.system.dto.MenuDTO; import org.springblade.system.entity.Menu; import org.springblade.system.feign.IDictClient; import org.springblade.system.service.IMenuService; @@ -33,7 +32,6 @@ import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -154,10 +152,7 @@ public class MenuController extends BladeController { @GetMapping("auth-routes") @ApiOperation(value = "菜单的角色权限", position = 8) public R> authRoutes(BladeUser user) { - List list = new ArrayList<>(); - List routes = menuService.authRoutes(Func.toIntList(user.getRoleId())); - routes.forEach(route -> list.add(Kv.init().set(route.getPath(), Kv.init().set("authority", Func.toStrArray(route.getAlias()))))); - return R.data(list); + return R.data(menuService.authRoutes(user)); } } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java index f1d120d..e4075bb 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java @@ -17,7 +17,8 @@ package org.springblade.system.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import org.springblade.system.dto.MenuDTO; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.tool.support.Kv; import org.springblade.system.entity.Menu; import org.springblade.system.vo.MenuVO; @@ -80,9 +81,9 @@ public interface IMenuService extends IService { /** * 获取配置的角色权限 - * @param roleIds + * @param user * @return */ - List authRoutes(List roleIds); + List authRoutes(BladeUser user); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java index 74aaecd..7cb16bc 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java @@ -19,7 +19,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; +import org.springblade.core.secure.BladeUser; import org.springblade.core.tool.node.ForestNodeMerger; +import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.Func; import org.springblade.system.dto.MenuDTO; import org.springblade.system.entity.Menu; @@ -31,10 +33,7 @@ import org.springblade.system.vo.MenuVO; import org.springblade.system.wrapper.MenuWrapper; import org.springframework.stereotype.Service; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -98,8 +97,14 @@ public class MenuServiceImpl extends ServiceImpl implements IM } @Override - public List authRoutes(List roleIds) { - return baseMapper.authRoutes(roleIds); + public List authRoutes(BladeUser user) { + if (Func.isEmpty(user)) { + return null; + } + List routes = baseMapper.authRoutes(Func.toIntList(user.getRoleId())); + List list = new ArrayList<>(); + routes.forEach(route -> list.add(Kv.init().set(route.getPath(), Kv.init().set("authority", Func.toStrArray(route.getAlias()))))); + return list; } } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java index 895a87d..87fdefc 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java @@ -69,8 +69,7 @@ public class RoleServiceImpl extends ServiceImpl implements IR roleMenus.add(roleMenu); })); // 新增配置 - roleMenuService.saveBatch(roleMenus); - return true; + return roleMenuService.saveBatch(roleMenus); } } diff --git a/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java b/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java index e94105a..a2ccb5d 100644 --- a/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java +++ b/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java @@ -30,6 +30,7 @@ import org.springblade.core.tool.utils.Func; import org.springblade.system.feign.IDictClient; import org.springblade.system.user.entity.User; import org.springblade.system.user.service.IUserService; +import org.springblade.system.user.vo.UserVO; import org.springblade.system.user.wrapper.UserWrapper; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -56,7 +57,7 @@ public class UserController { */ @ApiOperation(value = "查看详情", notes = "传入id", position = 1) @GetMapping("/detail") - public R detail(User user) { + public R detail(User user) { User detail = userService.getOne(Condition.getQueryWrapper(user)); UserWrapper userWrapper = new UserWrapper(userService, dictClient); return R.data(userWrapper.entityVO(detail)); @@ -71,9 +72,10 @@ public class UserController { @ApiImplicitParam(name = "realName", value = "姓名", paramType = "query", dataType = "string") }) @ApiOperation(value = "列表", notes = "传入account和realName", position = 2) - public R> list(@ApiIgnore @RequestParam Map user, Query query) { + public R> list(@ApiIgnore @RequestParam Map user, Query query) { IPage pages = userService.page(Condition.getPage(query), Condition.getQueryWrapper(user, User.class)); - return R.data(pages); + UserWrapper userWrapper = new UserWrapper(userService, dictClient); + return R.data(userWrapper.pageVO(pages)); } /** diff --git a/blade-service/pom.xml b/blade-service/pom.xml index 1e79f0c..8407746 100644 --- a/blade-service/pom.xml +++ b/blade-service/pom.xml @@ -4,18 +4,18 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - blade-service - ${project.artifactId} - 2.0.0 - pom - SpringBlade 微服务集合 - org.springblade SpringBlade 2.0.0 + blade-service + ${project.artifactId} + 2.0.0 + pom + SpringBlade 微服务集合 + blade-desk blade-log diff --git a/doc/nacos/blade.yaml b/doc/nacos/blade.yaml index ab14ff8..2f403f1 100644 --- a/doc/nacos/blade.yaml +++ b/doc/nacos/blade.yaml @@ -18,10 +18,10 @@ spring: #feign配置 feign: - #hystrix: - #enabled: true - sentinel: + hystrix: enabled: true + #sentinel: + #enabled: true okhttp: enabled: true httpclient: @@ -39,7 +39,7 @@ hystrix: execution: isolation: thread: - timeoutInMilliseconds: 720000 + timeoutInMilliseconds: 5000 #ribbon配置 ribbon: diff --git a/pic/saber-code.png b/pic/saber-code.png new file mode 100644 index 0000000..130579e Binary files /dev/null and b/pic/saber-code.png differ diff --git a/pic/saber-dict-select.png b/pic/saber-dict-select.png new file mode 100644 index 0000000..c2e3469 Binary files /dev/null and b/pic/saber-dict-select.png differ diff --git a/pic/saber-dict.png b/pic/saber-dict.png new file mode 100644 index 0000000..d3dcefa Binary files /dev/null and b/pic/saber-dict.png differ diff --git a/pic/saber-log.png b/pic/saber-log.png new file mode 100644 index 0000000..05bfc57 Binary files /dev/null and b/pic/saber-log.png differ diff --git a/pic/saber-role.png b/pic/saber-role.png new file mode 100644 index 0000000..b49bd03 Binary files /dev/null and b/pic/saber-role.png differ diff --git a/pic/saber-user.png b/pic/saber-user.png new file mode 100644 index 0000000..78756da Binary files /dev/null and b/pic/saber-user.png differ diff --git a/pom.xml b/pom.xml index c8efc15..687755f 100644 --- a/pom.xml +++ b/pom.xml @@ -9,13 +9,13 @@ pom - 2.0.0 + 2.0.6 2.0.0 1.8 2.9.2 1.5.21 - 1.8.8 + 1.8.9 3.0.7.1 4.0.1 1.6.0 @@ -25,7 +25,7 @@ 2.0.8.RELEASE Finchley.SR2 - Cairo-SR5 + Cairo-SR7 192.168.186.129 @@ -79,16 +79,6 @@ spring-boot-devtools true - - org.springframework.cloud - spring-cloud-starter-netflix-hystrix - - - commons-logging - commons-logging - - -