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的用法非常有帮助。 ![img](https://foruda.gitee.com/images/1727432593738798662/46c08088_2042292.png) 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,