feat(workflow): 优化待办工作项查询逻辑
- 使用角色权限关联查询替代简单的用户ID匹配 - 添加通过用户角色获取节点ID列表的功能 - 实现子查询获取用户所属角色的流程节点权限 - 改进待办事项查询为基于角色权限的左连接查询 - 提升查询性能通过只选择必要字段减少数据传输 - 修复原有基于HandlerId的简单过滤限制main
parent
56f8f85cc2
commit
e9cdd3b400
|
|
@ -333,13 +333,26 @@ public class WorkflowEngineApp : SqlSugarBaseApp<SysCategoryType, SugarDbContext
|
|||
pageQueryDto = pageQueryDto ?? new PageQueryRequestDto();
|
||||
var pageIndex = pageQueryDto.PageIndex < 1 ? 1 : pageQueryDto.PageIndex;
|
||||
var pageSize = pageQueryDto.PageSize < 1 ? 10 : pageQueryDto.PageSize;
|
||||
|
||||
// 待办逻辑:工作项状态为"ToDo"、处理人ID为当前用户
|
||||
// todo 这种分页不行,这是内存分页要改
|
||||
var toDoQuery = _sqlSugar.Queryable<ZyFlowWorkitem>()
|
||||
.Where(w => w.HandlerId == userId && w.Status == "ToDo")
|
||||
var nodeIdList = _sqlSugar.Queryable<ZyFlowNode>()
|
||||
// 核心:In(主表字段, 子查询Lambda表达式)
|
||||
.In(
|
||||
zy => zy.RoleId, // 主表 zy_flow_node 的 role_id 字段
|
||||
// 子查询:从 sys_userrole 中查询 UserId=2 的 RoleId
|
||||
_sqlSugar.Queryable<SysUserRole>()
|
||||
.Where(ur => ur.UserId == userId) // 条件:UserId=2(注意:这里直接用数值,避免字符串拼接)
|
||||
.Select(ur => ur.RoleId) // 子查询只返回 RoleId 字段
|
||||
)
|
||||
// 主查询只返回 node_id 字段(提升查询性能,避免查询全表字段)
|
||||
.Select(zy => zy.NodeId)
|
||||
// 执行查询,返回 List<long> 结果
|
||||
.ToList();
|
||||
var toDoQuery = _sqlSugar
|
||||
.Queryable<ZyFlowWorkitem>()
|
||||
.LeftJoin<ZyFlowNode>((w, n) => w.NodeId == n.NodeId)
|
||||
.Where((w, n) => nodeIdList.Contains(w.NodeId) && w.Status == "ToDo")
|
||||
.OrderByDescending(w => w.ReceiveTime);
|
||||
|
||||
// 分页查询
|
||||
var totalCount = toDoQuery.Count();
|
||||
var toDoWorkitems = toDoQuery
|
||||
|
|
|
|||
Loading…
Reference in New Issue