refactor(hwmom-workflow): 优化 COUNT 查询的 SQL 生成

- 为 COUNT 查询创建专门的查询包装器,不包含 ORDER BY 条件
- 解决了在 SQL Server 中因 ORDER BY 导致的查询错误问题
- 避免了不必要的排序操作
master
zangchenhao 3 days ago
parent 1b6ac13b51
commit 0e1b79c29e

@ -822,7 +822,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
@Override
public Long countTaskWaitByCurrentUser() {
FlowTaskBo flowTaskBo = new FlowTaskBo();
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
// 为COUNT查询创建不包含ORDER BY的查询包装器
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapperForCount(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.processed_by", SpringUtils.getBean(WorkflowPermissionHandler.class).permissions());
queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
@ -837,9 +838,30 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
@Override
public Long countTaskCopyByCurrentUser() {
FlowTaskBo flowTaskBo = new FlowTaskBo();
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
// 为COUNT查询创建不包含ORDER BY的查询包装器
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapperForCount(flowTaskBo);
queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
return flwTaskMapper.countTaskCopy(queryWrapper);
}
/**
* COUNTORDER BY
*
* @param flowTaskBo
* @return
*/
private QueryWrapper<FlowTaskBo> buildQueryWrapperForCount(FlowTaskBo flowTaskBo) {
QueryWrapper<FlowTaskBo> wrapper = Wrappers.query();
wrapper.like(StringUtils.isNotBlank(flowTaskBo.getNodeName()), "t.node_name", flowTaskBo.getNodeName());
wrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowName()), "t.flow_name", flowTaskBo.getFlowName());
wrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowCode()), "t.flow_code", flowTaskBo.getFlowCode());
wrapper.in(CollUtil.isNotEmpty(flowTaskBo.getCreateByIds()), "t.create_by", flowTaskBo.getCreateByIds());
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr));
}
// 注意COUNT查询不添加ORDER BY条件因为在SQL Server中会导致错误
return wrapper;
}
}

Loading…
Cancel
Save