需求: 通过后台生成的树形结构,返回给前台用于动态生成表格标题,并将对应标题下面的信息对应起来

1. 如图所以,完成以下内容对应

在这里插入图片描述

2. 代码示例如下, 动态生成树形结构列名称,并将表格中存在的值与其对应起来

  /**
     * 查询资源计划列表
     *
     * @param resourcePlan 资源计划
     * @return 资源计划
     */
    @Override
    public Map<String, Object> selectResourcePlanList(ResourcePlan resourcePlan) {
        // 1. 获取多级表头数据(树形结构)
        List<ResourceDictTreeResponse> levelTreeByTwo = relationService.getLevelTreeByTwo();

        // 2. 获取资源计划数据
        List<ResourcePlan> resourcePlans = resourcePlanMapper.selectResourcePlanList(resourcePlan);

        // 3. 为树形结构生成 column 列名(column1, column2...)
        Map<String, String> columnMap = new HashMap<>();  // dictLabel -> column 名称映射
        AtomicInteger columnIndex = new AtomicInteger(1);  // 列名计数器
        generateColumnMappings(levelTreeByTwo, columnMap, columnIndex);

        // 4. 构建返回结果
        Map<String, Object> result = new HashMap<>();
        result.put("treeData", levelTreeByTwo);  // 返回处理后的树形结构
        result.put("planList", processPlansToRows(resourcePlans, columnMap));  // 返回计划列表数据

        return result;
    }

    // 为树形结构生成 column1, column2...的列名
    private void generateColumnMappings(List<ResourceDictTreeResponse> treeData, Map<String, String> columnMap, AtomicInteger columnIndex) {
        for (ResourceDictTreeResponse node : treeData) {
            String columnName = "column" + columnIndex.getAndIncrement();
            columnMap.put(node.getDictLabel(), columnName);  // 将 dictLabel 映射为 column 名称
            node.setKey(columnName);  // 设置节点的 key 为 column 名称

            // 递归处理子节点
            if (node.getChild() != null && !node.getChild().isEmpty()) {
                generateColumnMappings(node.getChild(), columnMap, columnIndex);
            }
        }
    }

    // 将资源计划数据映射到动态生成的列
    private List<Map<String, Object>> processPlansToRows(List<ResourcePlan> resourcePlans, Map<String, String> columnMap) {
        List<Map<String, Object>> rows = new ArrayList<>();

        // 遍历所有资源计划
        for (ResourcePlan plan : resourcePlans) {
            Map<String, Object> row = new HashMap<>();

            // 1. 填充计划表中的固定字段
            row.put("id", plan.getId()); // 计划主键id
            row.put("planStartTime", plan.getPlanStartTime());  // 计划开始时间
            row.put("planEndTime", plan.getPlanEndTime());      // 计划结束时间
            row.put("projectId", plan.getProjectId());          // 项目ID
            row.put("projectName", plan.getProjectName());      // 项目名称
            row.put("taskId", plan.getTaskId());                // 任务ID
            row.put("taskName", plan.getTaskName());            // 任务名称
            row.put("workContent", plan.getWorkContent());      // 工作内容

            // 2. 动态填充角色工时到生成的 column 列
            String dictLabel = plan.getDictLabel();
            if (dictLabel != null && columnMap.containsKey(dictLabel)) {
                String column = columnMap.get(dictLabel);  // 获取对应的 column 名称
                row.put(column, plan.getPlanPersonDay());  // 填充工时或其他数据
            }

            // 3. 将该行数据加入到 rows 列表中
            rows.add(row);
        }

        return rows;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值