From 5337871276dafccc830993b98d487cc0028278e0 Mon Sep 17 00:00:00 2001
From: fengcheng <2929004360@qq.com>
Date: Wed, 8 Jan 2025 10:48:28 +0800
Subject: [PATCH] =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=A7=9F=E6=88=B7=E8=B4=A6?=
=?UTF-8?q?=E5=8F=B7=E6=95=B0=E9=87=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 70 +++++++++++--------
.../controller/system/SysUserController.java | 15 ++--
.../ruoyi/system/mapper/SysUserMapper.java | 7 ++
.../ruoyi/system/service/ISysUserService.java | 7 ++
.../service/impl/SysUserServiceImpl.java | 10 +++
.../resources/mapper/system/SysUserMapper.xml | 4 ++
6 files changed, 78 insertions(+), 35 deletions(-)
diff --git a/README.md b/README.md
index db9fe3b..a044505 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
## 平台简介
-基于RuoYi-Vue + Flowable一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
+基于RuoYi-Vue + Flowable一套全部开源多租户快速开发平台,毫无保留给个人及企业免费使用。
* 前端采用Vue、Element UI。
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
@@ -14,36 +14,39 @@
## 内置功能
-1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
-2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
-3. 岗位管理:配置系统用户所属担任职务。
-4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
-5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
-6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
-7. 参数管理:对系统动态配置常用参数。
-8. 通知公告:系统通知公告信息发布维护。
-9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
-10. 登录日志:系统登录日志记录查询包含登录异常。
-11. 在线用户:当前系统中活跃用户状态监控。
-12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
-13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
-14. 系统接口:根据业务代码自动生成相关的api接口文档。
-15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
-16. 缓存监控:对系统的缓存信息查询,命令统计等。
-17. 在线构建器:拖动表单元素生成相应的HTML代码。
-18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
-19. 流程分类:流程的分类
-20. 流程菜单:菜单关联流程
-21. 表单配置:在线表单设计
-22. 模型模板:实现流程模板,进行统一管理
-23. 流程模型:在线流程设计
-24. 部署管理:流程的版本的切换等
-25. 发起流程:发起指定流程
-26. 我的流程:查看自己发起的流程
-27. 代办任务:获取审批的任务
-28. 代签任务:任务的接收
-29. 已办任务:获取自己审批过的流程
-30. 抄送我的:流程的抄送
+1. 套餐管理:系统内租户所能使用的套餐管理 如:套餐内所包含的菜单等
+2. 租户管理:系统内租户的管理 如:租户套餐、过期时间、用户数量、企业信息等
+3. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
+4. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
+5. 岗位管理:配置系统用户所属担任职务。
+6. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
+7. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
+8. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
+9. 参数管理:对系统动态配置常用参数。
+10. 通知公告:系统通知公告信息发布维护。
+11. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
+12. 登录日志:系统登录日志记录查询包含登录异常。
+13. 在线用户:当前系统中活跃用户状态监控。
+14. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
+15. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
+16. 系统接口:根据业务代码自动生成相关的api接口文档。
+17. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
+18. 缓存监控:对系统的缓存信息查询,命令统计等。
+19. 在线构建器:拖动表单元素生成相应的HTML代码。
+20. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
+21. 流程分类:流程的分类
+22. 流程菜单:菜单关联流程
+23. 表单配置:在线表单设计
+24. 模型模板:实现流程模板,进行统一管理
+25. 流程模型:在线流程设计
+26. 部署管理:流程的版本的切换等
+27. 发起流程:发起指定流程
+28. 我的流程:查看自己发起的流程
+29. 代办任务:获取审批的任务
+30. 代签任务:任务的接收
+31. 已办任务:获取自己审批过的流程
+32. 抄送我的:别人抄送给我流程
+33. 我的抄送:我抄送流程
## 在线体验
@@ -75,6 +78,10 @@
## 演示图
+
+  |
+  |
+
 |
 |
@@ -105,6 +112,7 @@
+
## 推荐
大家在使用本项目时,推荐结合贺波老师的书 [《深入Flowable流程引擎:核心原理与高阶实战》](https://gitee.com/link?target=https%3A%2F%2Fitem.jd.com%2F14804836.html)学习。这本书得到了Flowable创始人Tijs Rademakers亲笔作序推荐,对系统学习和深入掌握Flowable的用法非常有帮助。 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index bee6f01..f28aa70 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -12,10 +12,8 @@ import com.ruoyi.common.enums.CommonWhether;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.system.service.ISysDeptService;
-import com.ruoyi.system.service.ISysPostService;
-import com.ruoyi.system.service.ISysRoleService;
-import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.domain.SysTenant;
+import com.ruoyi.system.service.*;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -47,6 +45,9 @@ public class SysUserController extends BaseController {
@Autowired
private ISysPostService postService;
+ @Autowired
+ private ISysTenantService sysTenantService;
+
/**
* 获取用户列表
*/
@@ -132,6 +133,12 @@ public class SysUserController extends BaseController {
public AjaxResult add(@Validated @RequestBody SysUser user) {
deptService.checkDeptDataScope(user.getDeptId());
roleService.checkRoleDataScope(user.getRoleIds());
+
+ // 判断租户是否超过用户数量 (-1不限制)
+ if(sysTenantService.selectSysTenantByTenantId(SecurityUtils.getLoginUser().getTenantId()).getAccountCount() <= userService.selectUserCount()){
+ return error("新增用户'" + user.getUserName() + "'失败,租户用户数量已达到上限");
+ }
+
if (!userService.checkUserNameUnique(user)) {
return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index 99bad78..40f1fad 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -168,4 +168,11 @@ public interface SysUserMapper {
* @return 结果
*/
int resetTenantPwd(SysUser user);
+
+ /**
+ * 获取用户总数
+ *
+ * @return 用户总数
+ */
+ int selectUserCount();
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index d9e0037..fee7ba4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -252,4 +252,11 @@ public interface ISysUserService {
* @return 结果
*/
int resetTenantPwd(SysUser user);
+
+ /**
+ * 获取用户总数
+ *
+ * @return 用户总数
+ */
+ int selectUserCount();
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index d96a57d..1170c39 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -566,4 +566,14 @@ public class SysUserServiceImpl implements ISysUserService {
public int resetTenantPwd(SysUser user) {
return userMapper.resetTenantPwd(user);
}
+
+ /**
+ * 获取用户总数
+ *
+ * @return 用户总数
+ */
+ @Override
+ public int selectUserCount() {
+ return userMapper.selectUserCount();
+ }
}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 0cf9962..bb74074 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -214,6 +214,10 @@
where u.user_id = #{userId} and u.tenant_id = #{tenantId}
+
+
insert into sys_user(
user_id,