diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 248bff5..0391822 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -30,20 +30,20 @@ module.exports = { // sidebarDepth: 0, //0读取1级标题 1读取1级和2级标题 2读取1级、2级、3级标题 // 设置侧边栏内容 sidebar: [ - { - title: '本文档使用教程', - collapsable: false, - children: [ - '/document/', - // { - // title: '侧边栏组合', - // // collapsable: true, - // children: [ - // '/second/child/' - // ] - // } - ] - }, + // { + // title: '本文档使用教程', + // collapsable: false, + // children: [ + // '/document/', + // // { + // // title: '侧边栏组合', + // // // collapsable: true, + // // children: [ + // // '/second/child/' + // // ] + // // } + // ] + // }, { title: '文档', collapsable: false, @@ -52,6 +52,18 @@ module.exports = { '/wiki/back-build/' ] // 根据自己的需求来订,对应自己在docs下的文件夹名,默认首页是README.md }, + { + title: '模块介绍', + collapsable: false, + children: [ + '/module/', + '/module/common/', + '/module/gateway/', + '/module/auth/', + '/module/umps/', + '/module/visual/', + ] // 根据自己的需求来订,对应自己在docs下的文件夹名,默认首页是README.md + }, { title: '功能使用', collapsable: false, @@ -66,19 +78,6 @@ module.exports = { '/util/tree-util/', ] // 根据自己的需求来订,对应自己在docs下的文件夹名,默认首页是README.md }, - - // { - // title: '模块介绍', - // collapsable: false, - // children: [ - // '/module/', - // '/module/gateway/', - // '/module/auth/', - // '/module/umps/', - // '/module/common/', - // '/module/visual/', - // ] // 根据自己的需求来订,对应自己在docs下的文件夹名,默认首页是README.md - // }, { title: 'CI/CD', collapsable: false, diff --git a/docs/module/README.md b/docs/module/README.md index 42c38a4..79b0672 100644 --- a/docs/module/README.md +++ b/docs/module/README.md @@ -11,11 +11,16 @@ security-cloud ├── common-security -- 安全工具类 ├── common-swagger -- 接口文档 ├── common-feign -- feign 扩展封装 + ├── common-oss -- 阿里云oss封装 └── common-log -- 系统日志记录 └── upms -- 通用用户权限管理模块 - └── upms-api -- 通用用户权限管理系统公共api模块 + ├── upms-api -- 通用用户权限管理系统公共api模块 └── upms-biz -- 通用用户权限管理系统业务处理模块[4000] └── visual -- 图形化管理模块 - └── monitor -- 服务监控 - └── codegen -- 图形化代码生成 + ├── code-gen -- 分布式可视化代码生成 + ├── custom-query -- 自定义查询 + ├── flowable -- workflow工作流模块 + ├── monitor -- 服务监控 + ├── sentinel-dashboard -- sentinel监控面板 + └── sentinel-dashboard-pro -- sentinel监控面板,配置规则同步到nacos管理 ``` diff --git a/docs/module/auth/README.md b/docs/module/auth/README.md index 23487ad..c356f9e 100644 --- a/docs/module/auth/README.md +++ b/docs/module/auth/README.md @@ -1 +1,2 @@ # 授权服务模块 +为整个集群提供授权登录服务,先阶段实现账号密码登录,后续可以扩展实现微信登录,微信扫码登录,QQ等第三方登录方式 diff --git a/docs/module/common/README.md b/docs/module/common/README.md index b76ecb2..ca40ea4 100644 --- a/docs/module/common/README.md +++ b/docs/module/common/README.md @@ -1 +1,105 @@ # 系统公共模块 +系统公共模块主要对集群中的基础公共工具进行封装,现阶段对如需模块进行封装: + +## common-core 基础核心组件 +对系统中的基础服务实体进行定义,基础的工具类进行定义.例如: + +### TreeUtil +自定义树形结构实体转换,可以将A对象结构具有树形关系的list转换成B对象的树形结构, 可以自定义A B两个对象之间的映射关系例如: + +将Dept映射到OptionTree对象: +```javascript +//Dept 类 +public class Dept extends BaseEntity { + private Long deptId; + private Long parentId; + private String ancestors; + @NotBlank(message = "部门名称不能为空!") + private String deptName; + @NotBlank(message = "显示顺序不能为空!") + private String orderNum; + @NotBlank(message = "负责人不能为空!") + private String leader; + @NotNull(message = "负责人id不能为空!") + private Long leaderId; +} + +//OptionTree 目标对象 +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OptionTree implements Serializable { + /** + * 节点ID + */ + private Object value; + /** + * 节点名称 + */ + private String label; + /** + * 子节点 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; +} + +//转换代码 +List optionTreeList = TreeUtil.build(deptList,OptionTree.class,(config)->{ + config.setIdField("deptId"); + config.setOption("deptId","deptName"); +}); + +``` + +并且TreeUtil可以通过config进行自定义配置,配置项如下: +- 是否启用BeanUtils.copyProperties方法进行字段的copy(默认为ture) +- 父级关系字段名称定义 +- id字段定义 +- tree子级字段定义 +- mapper其余字段关系映射 +- exclude排除字段 + +## common-feign +对openfeign进行基础的配置,比如让OpenFeign 使用 OkHttp 配置类,以及Ribbon做rpc的负载均衡 + +## common-log +自定义操作日志模块,完成使用自定义注解实现操作日志的记录 +```javascript + @ApiOperation("新增部门") + @PostMapping + @PreAuthorize("@ss.hasPermission('admin:dept:add')") + @Log(title = "新增部门",businessType = BusinessType.INSERT) + public Result add(@RequestBody @Validated Dept dept){ + if (UserConstants.DEPT_DISABLE.equals(deptService.checkDeptNameUnique(dept))){ + return Result.error("新增部门: "+ dept.getDeptName() +"'失败,部门名称以存在!"); + } + deptService.saveDept(dept); + return Result.ok(); + } +``` +通过LogAspect实现当前注解的apo切面,切面中将操作的日志封装成一个操作日志对象,然后使用spring的事件发布机制发布这个日志操作对象,再使用OperationLogListener异步监听到发布的事件,再通过rpc远程调用到umps中的日志存储接口,将当前对象落地到数据库 + +## common-mybatis +对mybatis的基本分页功能进行封装 + +## common-oss +对接阿里云的oos分布式对象储存服务, + +## common-redis +使redis使用FastJson序列化,对RedisTemplate进行进一步的函数封装 + +## common-security +集群中最核心的部分,spring security 安全校验封装,自定义PermissionService实现spring security自定校验方法,实现自定义校验逻辑,使用Inner注解实现集群内rpc远程调用接口的区分 + +## common-swagger +swagger接口文档配置,通过SwaggerConfig类从nacos中获取到当前服务对应的swagger配置信息,生成当前服务的swagger接口文档数据,配合gateway swagger聚合生成集群的swagger聚合文档 + + + + + + + + + diff --git a/docs/module/gateway/README.md b/docs/module/gateway/README.md index 909247e..ffb3c8c 100644 --- a/docs/module/gateway/README.md +++ b/docs/module/gateway/README.md @@ -1,7 +1,87 @@ # 网关服务模块 -security-cloud使用spring官方的网关主键,spring gateway。 +在集群环境中,gateway将会是集群网络的唯一出入口,是系统安全的重要节点,同时gateway承担Sentinel限流,服务分发负载均衡和提供swagger文档等工作。 + +## 文件结构 +```lua +gateway + +└── java + ├── config -- 配置包 + ├── controller -- swagger聚合需要使用的到的接口 + ├── filter -- 全局过滤器 + ├── handler -- 异常处理 + ├── util -- 工具 + └── GatewayApplication.java -- 启动类 +└── resources + ├── bootstrap.yml -- 配置文件 + └── logback-spring.xml -- 日志记录文件 +``` + +## 配置文件 +```yaml +# Tomcat +server: + port: 5000 + +# Spring +spring: + application: + # 应用名称 + name: monitor + profiles: + # 环境配置 + active: local + security: + user: + name: root + password: password + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.101.108:8848 + username: nacos + password: nacos + namespace: ${spring.profiles.active} + metadata: + management: + context-path: /actuator + config: + # 配置中心地址 + server-addr: ${spring.cloud.nacos.discovery.server-addr} + file-extension: yaml + namespace: ${spring.profiles.active} + shared-configs: + - ${spring.application.name}-${spring.profiles.active}.yml +``` +配置文件相当简洁,主要为设置运行端口,active的环境以及注册到nacos,并从nacos读取到gateway自身的配置文件 + +属于gateway的配置文件: + +```yaml +spring: + cloud: + gateway: + discovery: + locator: + # gateway 能够进行服务发现 + enabled: true + routes: + # 认证中心 + - id: auth + uri: lb://auth + predicates: + - Path=/auth/** +``` + +## 路由分发 +路由分发是gateway的一个重要功能,当gateway启动后会向nacos发起注册,并从nacos cconfig中心获取到gateway的那一份配置文件,gateway再将文件加载到自己的路由中,当又接口请求到后,gateway则可以根据路由表对请求进行分发。 + + + + + -## 路由配置 diff --git a/docs/module/umps/README.md b/docs/module/umps/README.md index b4a67c0..5816117 100644 --- a/docs/module/umps/README.md +++ b/docs/module/umps/README.md @@ -1 +1,8 @@ # 通用用户权限管理模块 +通用用户权限管理模块主要集成用户管理,角色管理,菜单管理,部门管理,岗位管理,字典管理,字典类型配置,在线用户管理等 + +## umps-api rpc api服务模块 +为集群远程rpc 实体对象和fegin 的远程接口调用 + +## umps-biz 业务服务模块 +提供真实的业务需求,对用户管理,角色管理,菜单管理,部门管理,岗位管理,字典管理,字典类型配置,在线用户管理等服务的具体实现 diff --git a/docs/module/visual/README.md b/docs/module/visual/README.md index 8f8a08f..7750804 100644 --- a/docs/module/visual/README.md +++ b/docs/module/visual/README.md @@ -1 +1,32 @@ # 图形化管理模块 +主要实现集群中的一些扩展功能: +- code-gen -- 分布式可视化代码生成 +- custom-query -- 自定义查询 +- flowable -- workflow工作流模块 +- monitor -- 服务监控 +- sentinel-dashboard -- sentinel监控面板 +- sentinel-dashboard-pro -- sentinel监控面板,配置规则同步到nacos管理 + +## code-gen(正在开发) +提供数据库数据源的配置,支持mysql,MariaDB,以及oracle三种数据库 + +支持可视化的代码生成配置,并且根据数据源不同生成对应数据库的标准curd代码 + +## custom-query(正在规划) +将ebts中的自定义查询和er可视化查询集群化,ebts网站:https://demo.ebts.top/ + +## flowable(开发中) +使用flowable实现workflow的开发,新阶段实现了json转bnpm,流程发布,流程流转,流程流转的位置等 + +demo(访问时提示无权限时请刷新,刷新后正常使用): http://workflow.mytwins.top/ + +## sentinel-dashboard +sentinel的控制面板 + +## sentinel-dashboard-pro +实现了sentinel配置规则落地到nacos中 + + + + + diff --git a/docs/wiki/introduce/README.md b/docs/wiki/introduce/README.md index d702cf9..bfd470d 100644 --- a/docs/wiki/introduce/README.md +++ b/docs/wiki/introduce/README.md @@ -1,50 +1 @@ # 介绍 -## 它是如何工作的? -**卡拉兹(Callatz)猜想**: -对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展…… -我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1? - -**输入格式**: - -每个测试输入包含1个测试用例,即给出自然数n的值。 - -**输出格式**: - -输出从 n 计算到1需要的步数。 - -**输入样例**: - -~~~ bash -3 -~~~ - -**输出样例**: - -~~~ bash -5 -~~~ - - - -代码实现: - -~~~ java -//java代码: -import java.util.Scanner; -public class Main { - public static void main(String[] args) { - Scanner scanner =new Scanner(System.in); - int N = scanner.nextInt(); - int steps =0; - while (N !=1) { - if (N %2 ==0) { - N = N /2; - } else { - N = (3 * N +1) / 2; - } - steps++; - } - System.out.println(steps); - } -} -~~~