Redis-2-queryFormat()方法

查询排版状态方法

方法用于查询当前用户排版过的所有文件及其排版结果。它的主要功能是从 Redis 中获取用户的历史排版记录,并过滤掉不需要展示的状态(如已导出或已丢弃的文件),最终返回一个排版结果列表。

queryFormat :获取当前用户排版过的所有原文件 sourceNodeIds(根据userId) -- 获取该原文件的所有排版结果 resultNodeIds(根据sourceNodeId) -- 获取每个排版结果的详情itemJson(根据resultNodeId) -- 过滤
详细:从 Redis 的 format:user:{userId} 键中获取用户排版过的原文件 sourceNodeId 列表;遍历每个原文件,通过 format:source:{userId}:{sourceNodeId} 获取其对应的排版结果 resultNodeId;从 format:item:{resultNodeId} 中读取排版结果详情,并反序列化为 FormatResultItem 对象;最终返回过滤后的排版结果列表。

分析:

java 复制代码
String itemJson = stringRedisTemplate.opsForValue().get(FORMAT_ITEM_KEY_PREFIX + resultNodeId);
FormatResultItem item = objectMapper.readValue(itemJson, FormatResultItem.class);

这行代码的作用是从 Redis 中获取的 JSON 字符串 itemJson 反序列化为 FormatResultItem 对象。这个对象包含了排版任务的相关信息,最终会作为排版结果的一部分返回给前端。信息包括:

  1. 排版状态 (status):表示当前排版任务的状态(如排版中、已完成、失败等);
  2. 文件类型 (type):排版后的文件类型(如 PDF、Word 等);
  3. 结果文件 ID (nodeId):排版生成的文件在系统中的唯一标识;
  4. 源文件 ID (sourceNodeId):原始文件的唯一标识;
  5. 文件名 (fileName):排版后文件的名称。
    这些信息会被封装到 FormatResultItem 对象中,并通过 queryFormat 接口返回给前端,供用户查看排版任务的进度和结果。

1. FormatService中:queryFormat()

java 复制代码
public List<FormatResultItem> queryFormat(QueryFormatRequest request) {
        Long userId = SecurityUtils.getCurrentUserId();

        // 1. 获取当前用户排版过的所有原文件 nodeId
        String userKey = FORMAT_USER_KEY_PREFIX + userId;
        Set<String> sourceNodeIds = stringRedisTemplate.opsForSet().members(userKey);
        if (CollectionUtils.isEmpty(sourceNodeIds)) {
            log.info("FormatService##queryFormat-1,当前用户没有排版过的文件,userId={},userKey={}", userId,userKey);
            return new ArrayList<>();
        }

        // 2. 遍历每个原文件,获取其排版结果
        List<FormatResultItem> resultItems = new ArrayList<>();
        for (String sourceNodeId : sourceNodeIds) {
            // 获取该原文件的所有排版结果 nodeId
            String sourceKey = FORMAT_SOURCE_KEY_PREFIX + userId + ":" + sourceNodeId;
            Set<String> resultNodeIds = stringRedisTemplate.opsForSet().members(sourceKey);
            if (CollectionUtils.isEmpty(resultNodeIds)) {
                log.info("FormatService##queryFormat-2,当前用户没有排版过的文件,userId={},sourceNodeId={},sourceKey={}", userId, sourceNodeId, sourceKey);
                continue;
            }

            // 获取每个排版结果的详情
            for (String resultNodeId : resultNodeIds) {
                String itemKey = FORMAT_ITEM_KEY_PREFIX + resultNodeId;
                String itemJson = stringRedisTemplate.opsForValue().get(itemKey);
                if (StringUtils.hasText(itemJson)) {
                    try {
                        FormatResultItem item = objectMapper.readValue(itemJson, FormatResultItem.class);
                        resultItems.add(item);
                    } catch (JsonProcessingException e) {
                        log.error("解析排版结果项失败,resultNodeId={}, itemJson={}", resultNodeId, itemJson, e);
                    }
                }
            }
        }

        // 3. 过滤掉状态为2(导出)和3(丢弃)的数据
        return resultItems.stream()
                .filter(item -> !FormatStatus.shouldFilter(item.getStatus()))
                .collect(Collectors.toList());
    }
相关推荐
这个DBA有点耶12 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB12 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB12 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB12 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
这个DBA有点耶14 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768918 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!18 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网18 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿18 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构