mirror of
https://gitcode.com/java-xiaoxin/RuoYi-Vue-Flowable-Tenant.git
synced 2025-12-30 03:52:25 +00:00
校验租户账号数量
This commit is contained in:
70
README.md
70
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 @@
|
||||
## 演示图
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://www.helloimg.com/i/2025/01/08/677de3f452c1b.png"/></td>
|
||||
<td><img src="https://www.helloimg.com/i/2025/01/08/677de4063c722.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://www.helloimg.com/i/2024/12/30/67725bc908c48.png"/></td>
|
||||
<td><img src="https://www.helloimg.com/i/2024/12/30/67725c037a705.png"/></td>
|
||||
@@ -105,6 +112,7 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
## 推荐
|
||||
|
||||
大家在使用本项目时,推荐结合贺波老师的书 [《深入Flowable流程引擎:核心原理与高阶实战》](https://gitee.com/link?target=https%3A%2F%2Fitem.jd.com%2F14804836.html)学习。这本书得到了Flowable创始人Tijs Rademakers亲笔作序推荐,对系统学习和深入掌握Flowable的用法非常有帮助。 
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -168,4 +168,11 @@ public interface SysUserMapper {
|
||||
* @return 结果
|
||||
*/
|
||||
int resetTenantPwd(SysUser user);
|
||||
|
||||
/**
|
||||
* 获取用户总数
|
||||
*
|
||||
* @return 用户总数
|
||||
*/
|
||||
int selectUserCount();
|
||||
}
|
||||
|
||||
@@ -252,4 +252,11 @@ public interface ISysUserService {
|
||||
* @return 结果
|
||||
*/
|
||||
int resetTenantPwd(SysUser user);
|
||||
|
||||
/**
|
||||
* 获取用户总数
|
||||
*
|
||||
* @return 用户总数
|
||||
*/
|
||||
int selectUserCount();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,6 +214,10 @@
|
||||
where u.user_id = #{userId} and u.tenant_id = #{tenantId}
|
||||
</select>
|
||||
|
||||
<select id="selectUserCount" resultType="java.lang.Integer">
|
||||
select count(1) from sys_user u where u.del_flag = '0'
|
||||
</select>
|
||||
|
||||
<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
|
||||
insert into sys_user(
|
||||
<if test="userId != null and userId != 0">user_id,</if>
|
||||
|
||||
Reference in New Issue
Block a user