# sourceQ-cloud **Repository Path**: yqfly/sourceQ-cloud ## Basic Information - **Project Name**: sourceQ-cloud - **Description**: springCloud脚手架,基于若依框架的微服务定制开发 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-22 - **Last Updated**: 2024-07-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

SourceQ v1.0.0

基于 Vue/Element UI 和 Spring Boot/Spring Cloud & Alibaba 前后端分离的分布式微服务架构

## 平台简介 SourceQ v1.0.0是基于若依v3.6.3二次开发的脚手架,特别鸣谢若依框架。 * 采用前后端分离的模式,微服务版本前端(基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue))。 * 后端采用Spring Boot、Spring Cloud & Alibaba。 * 注册中心、配置中心选型Nacos,权限认证使用Redis。 * 流量控制框架选型Sentinel,分布式事务选型Seata。 ## 系统模块 ~~~ com.sourceQ ├── sourceQ-front-vue // 前端框架 [80] ├── sourceQ-gateway // 网关模块 [8080] ├── sourceQ-auth // 认证中心 [9200] ├── sourceQ-api // 接口模块 │ └── sourceQ-api-system // 系统接口 ├── sourceQ-common // 通用模块 │ └── sourceQ-common-core // 核心模块 │ └── sourceQ-common-datascope // 权限范围 │ └── sourceQ-common-datasource // 多数据源 │ └── sourceQ-common-log // 日志记录 │ └── sourceQ-common-redis // 缓存服务 │ └── sourceQ-common-seata // 分布式事务 │ └── sourceQ-common-security // 安全模块 │ └── sourceQ-common-swagger // 系统接口 │ └── sourceQ-common-mybatis-plus // 持久化增强 (新增) │ └── sourceQ-common-es // Elasticsearch搜索(待开发) │ └── sourceQ-common-mq // 消息中间件(MQ)(新增) │ └── sourceQ-common-sms // 手机短信(sms)(新增) │ └── sourceQ-common-test // 单元测试(test)(新增) │ └── sourceQ-common-workflow // 工作流(work-flow)(待开发) ├── sourceQ-modules // 业务模块 │ └── sourceQ-system // 系统模块 [9201] │ └── sourceQ-gen // 代码生成 [9202] │ └── sourceQ-job // 定时任务 [9203] │ └── sourceQ-file // 文件服务 [9300] ├── sourceQ-visual // 图形化管理模块 │ └── sourceQ-visual-monitor // 监控中心 [9100] ├──pom.xml // 公共依赖 ~~~ ## 架构图 ## 内置功能 1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3. 岗位管理:配置系统用户所属担任职务。 4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7. 参数管理:对系统动态配置常用参数。 8. 通知公告:系统通知公告信息发布维护。 9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 10. 登录日志:系统登录日志记录查询包含登录异常。 11. 在线用户:当前系统中活跃用户状态监控。 12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14. 系统接口:根据业务代码自动生成相关的api接口文档。 15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 16. 在线构建器:拖动表单元素生成相应的HTML代码。 17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 18. 多租户管理(新增):添加多租户隔离。 19. 邮件信息,短信信息集成(新增): ## 在线体验 - admin/admin123 - ## 版本记录 V1.0.0 初始化项目 ## 备忘录 @DataScope注解的使用 解释:数据权限注解 参数: deptAlias:部门表别名 userAlias用户表别名 permission:权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@RequiresPermissions获取,多个权限用逗号分隔开来 实现: 具体事项使用了切面做切入点,具体逻辑在 com.sourceQ.common.datascope.aspect.DataScopeAspect.class 中 MQ中间件,提供了Redis和rabbitMQ两种模式,但是Redis模式还需要集成Redisson分布式锁实现,暂未提供 权限实现 采用了菜单权限表做区分,使用字段隔离的形式,标识是菜单还是按钮 ### 运行环境 ``` JDK >= 1.8 (推荐1.8版本) Mysql >= 5.7.0 (推荐5.7版本) Redis >= 3.0 Maven >= 3.0 Node >= 12 nacos >= 2.0.4 (sourceQ-cloud < 3.0 需要下载nacos >= 1.4.x版本) sentinel >= 1.6.0 ``` ### 后端运行 1、创建数据库sourceQ-cloud,导入sql目录中的sql文件,创建并初始化sourceQ-config数据库 2、配置Nacos的持久化模式,改为指定数据库存储模式,例如MYSQL,修改Nacos中conf/application.properties文件。 ``` # db mysql spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/sourceQ-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=root db.password=password ``` *导入数据后需要修改各个应用的对应配置,由于采用了Nacos的配置管理模式,所以各个应用的配置都卸载数据库管理,也就是sourceQ-config库中的config_info表中。* 3、启动各个应用 应用启动前需先启动Nacos,如果是本地启动,需要调整nacos的启动方式为单机启动,nacos默认启动方式为集群 - SourceQGatewayApplication (网关模块 必须) - SourceQAuthApplication (认证模块 必须) - SourceQSystemApplication (系统模块 必须) - SourceQMonitorApplication (监控中心 可选) - SourceQGenApplication (代码生成 可选) - SourceQJobApplication (定时任务 可选) - SourceQFileApplication (文件服务 可选) 4、集成seata分布式事务(非必须,可选) 创建数据库`sourceQ-seata`并导入数据脚本`sourceQ_seata_2021xxxx.sql` ### 前端运行 ``` # 进入项目目录 cd ruoyi-ui # 安装依赖 npm install # 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。 npm install --registry=https://registry.npmmirror.com # 本地开发 启动项目 npm run dev ``` 6、运行成功 打开浏览器,输入:([http://localhost:80 (opens new window)](http://localhost/)) 默认账户/密码 `admin/admin123`) 若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功 swagger ### 项目部署 ### 项目二次定制开发 1、租户管理 设计实现 新增租户表,租户套餐表,由于使用的是字段隔离,所以需要再需要做数据隔离的表中都加入租户id 短信测试 key:696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859 apiSecret:SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67 ![image-20240328202745856](C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20240328202745856.png) **按租户id字段隔离租户** 架构设计实现多租户数据隔离的。采用共享数据空间设计模式实现 在每一个表空间中都增加一个必要字段租户id做租户数据维护,可以使用mybatis-plus+AOP模式设计做隐式添加租户id 特别注意 多租户 != 权限过滤,不要乱用,租户之间是完全隔离的!!! 启用多租户后所有执行的method的sql都会进行处理. ![image-20240328203150090](C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20240328203150090.png) 租户中的用户拥有的角色为租户套餐的角色,角色绑定了菜单。 1、不需要做隔离的表,需要再配置文件中指明。 2、需在用户登录时做租户校验,校验是否套餐过期 3、在修改租户套餐时,需对应修改租户的用户所拥有的角色 4、在修改套餐时,应注意套餐是否已用,如果套餐已用,需要注意控制用户的权限大小是否有变化