详细设计与部署指南(附源代码))
本项目站内资源源代码下载地址1. 概述1.1 说明Excel 项目数据自动化分析系统是一套面向企业项目数据处理场景的全栈 Web 应用。用户上传多个 Excel 文件后系统自动完成数据合并、清洗、去重、类型转换与分组聚合并支持 AI 驱动的深度数据洞察最终一键导出格式化 Excel 报表。将数小时的手工处理工作压缩至数分钟。1.2 核心能力能力模块功能描述批量读取glob 模式匹配文件夹下 .xlsx / .xls / .xlsm 文件自动合并多 Sheet数据清洗fillna 缺失值填充、drop_duplicates 去重、astype 类型统一分组汇总groupby 按指定列分组支持 sum / count / mean / max / min 聚合AI 分析接入 LLM 对处理结果进行综合分析、质量评估、趋势预测、风险识别结果导出多 Sheet Excel 输出含格式化表头和冻结首行等美化处理配置管理处理规则和 AI 配置的增删改查支持多套预设与快速切换1.3 系统边界输入: 用户上传的一个或多个 Excel 文件.xlsx/.xls/.xlsm或系统自动生成的示例数据处理: 服务端通过 Python 子进程调用 pandas / openpyxl 执行数据管道输出: 清洗后的数据预览、分组聚合图表、AI 分析报告、可下载的 Excel 报表存储: SQLite 数据库Prisma ORM本地文件系统存储上传文件和导出结果2. 架构设计2.1 整体架构┌──────────────────────────────────────────────────────────┐ │ 用户浏览器 │ │ ┌──────────┬──────────┬──────────┬──────────┬─────────┐ │ │ │ 上传页面 │ 配置编辑 │ AI 配置 │ 结果展示 │ 历史记录 │ │ │ └──────────┴──────────┴──────────┴──────────┴─────────┘ │ └───────────────────────┬──────────────────────────────────┘ │ HTTP / REST API ┌───────────────────────▼──────────────────────────────────┐ │ Caddy (反向代理 :81) │ │ reverse_proxy → localhost:3000 │ └───────────────────────┬──────────────────────────────────┘ │ ┌───────────────────────▼──────────────────────────────────┐ │ Next.js 16 Server (Bun Runtime) │ │ ┌────────────────────────────────────────────────────┐ │ │ │ API Routes │ │ │ │ /api/upload /api/process /api/config │ │ │ │ /api/jobs /api/export /api/ai/config │ │ │ │ /api/ai/analyze │ │ │ └────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌────────────────────▼───────────────────────────────┐ │ │ │ Python Processor │ │ │ │ scripts/processor.py (child_process.execFile) │ │ │ │ pandas openpyxl 数据处理 │ │ │ └────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌────────────────────▼───────────────────────────────┐ │ │ │ Prisma Client SQLite │ │ │ │ db/custom.db │ │ │ └────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────┘2.2 请求处理流程用户上传 Excel 文件 → POST /api/upload → 保存至 upload/{uuid}/ 目录 → 前端跳转至「处理配置」页 用户配置处理规则点击「开始处理」 → POST /api/process { uploadDir, configOverride } → 创建 ProcessingJob (statusprocessing) → 立即返回 jobId 后台异步执行 → child_process.execFile → python3 scripts/processor.py → 输出 JSON 结果 → 更新 ProcessingJob (statuscompleted/failed) → 写入 ProcessingResult 前端轮询 (2s 间隔) → GET /api/jobs?id{jobId} → 展示 stats、chart、data tables 用户触发 AI 分析 → POST /api/ai/analyze { jobId, analysisType } → LLM 生成分析报告 → 写入 ProcessingResult.aiAnalysis → 渲染 Markdown 用户点击导出 → GET /api/export/{jobId} → 返回 result_{jobId}.xlsx3. 技术栈3.1 前端技术版本用途Next.js16.1.1React 全栈框架App RouterReact19.0.0UI 组件库TypeScript5.x类型安全Tailwind CSS4.x原子化 CSS 框架shadcn/ui—Radix UI Tailwind 组件库Zustand5.0.6轻量级状态管理Recharts2.15.4柱状图可视化React Markdown10.1.0Markdown 渲染 AI 分析结果Framer Motion12.23.2动画效果Sonner2.0.6Toast 通知3.2 后端API Routes技术版本用途Bun1.3.xJavaScript 运行时Prisma6.11.1ORM数据库访问层SQLite—嵌入式关系型数据库z-ai-web-dev-sdk0.0.18AI LLM 集成 SDKZod4.0.2运行时类型校验uuid11.1.0UUID 生成3.3 数据处理管道技术版本用途Python3.12数据处理脚本运行环境pandas2.x数据读取、合并、清洗、聚合openpyxl—Excel 读写与格式化美化NumPy2.4.6pandas 底层依赖3.4 运行环境组件说明Caddy反向代理网关监听 81 端口支持动态端口转发虚拟环境Python 3.12 venv位于.venv/构建产物Next.js standalone 输出 静态资源 数据库4. 数据库设计本系统使用 SQLite 数据库通过 Prisma ORM 进行访问。数据库文件路径为db/custom.db。4.1 ER 图┌──────────────────┐ ┌──────────────────┐ │ ProcessingConfig │ │ AIConfig │ │──────────────────│ │──────────────────│ │ id (PK) │ │ id (PK) │ │ name │ │ name │ │ fillnaRules │ │ url │ │ dedupColumns │ │ apiKey │ │ typeMappings │ │ modelId │ │ groupbyColumn │ │ enabled │ │ groupbyAgg │ │ systemPrompt │ │ isDefault │ │ isDefault │ │ createdAt │ │ createdAt │ │ updatedAt │ │ updatedAt │ └───────┬──────────┘ └──────────────────┘ │ 1:N │ ┌───────▼──────────┐ │ ProcessingJob │ │──────────────────│ │ id (PK) │ │ configFileId (FK)│ │ status │ │ fileNames │ │ totalRows │ │ totalColumns │ │ cleanedRows │ │ dedupedRows │ │ resultSummary │ │ errorMessage │ │ createdAt │ │ updatedAt │ └───────┬──────────┘ │ 1:N │ ┌───────▼──────────┐ │ ProcessingResult │ │──────────────────│ │ id (PK) │ │ jobId (FK) │ │ sheetName │ │ rawData │ │ cleanedData │ │ aggData │ │ aiAnalysis │ │ createdAt │ └──────────────────┘4.2 模型说明ProcessingConfig处理配置存储用户自定义的数据处理规则支持多套配置并存isDefault 标记默认配置。字段类型说明默认值idString (CUID)主键自动生成nameString配置名称“默认配置”fillnaRulesString (JSON)缺失值填充规则{}dedupColumnsString (JSON)去重参照列[]typeMappingsString (JSON)类型转换映射{}groupbyColumnString分组列名“项目类型”groupbyAggString (JSON)聚合函数映射{}isDefaultBoolean是否默认配置falseProcessingJob处理任务记录每次数据处理任务的执行状态与统计信息。字段类型说明默认值idString (CUID)主键自动生成statusStringpending / processing / completed / failed“pending”fileNamesString (JSON)上传文件名列表[]configFileIdString?关联配置 IDnulltotalRowsInt原始数据总行数0totalColumnsInt原始数据列数0cleanedRowsInt清洗后行数0dedupedRowsInt去重删除行数0resultSummaryString (JSON)聚合摘要{}errorMessageString?错误信息nullProcessingResult处理结果保存单次处理的数据预览和 AI 分析内容最多存储 200 行预览数据。字段类型说明默认值idString (CUID)主键自动生成jobIdString (FK)关联任务 ID—sheetNameStringSheet 名称“合并数据”rawDataString (JSON)原始数据预览[]cleanedDataString (JSON)清洗后数据预览[]aggDataString (JSON)聚合数据[]aiAnalysisStringAI 分析 Markdown 内容AIConfigAI 配置存储 AI 服务的连接信息和行为参数。字段类型说明默认值idString (CUID)主键自动生成nameString配置名称“默认AI配置”urlStringAPI 端点地址apiKeyStringAPI 密钥modelIdString模型标识符enabledBoolean是否启用truesystemPromptString系统提示词isDefaultBoolean是否默认配置trueJSON 字段采用 String 存储在 API 层通过JSON.parse/JSON.stringify进行转换。这种设计兼容了 SQLite 对 JSON 的原生支持和 Prisma 的序列化需求。5. API 接口设计所有接口均位于 Next.js App Router 的/src/app/api/目录下遵循 RESTful 风格。5.1 文件上传POST /api/uploadContent-Type:multipart/form-data参数:files(File[], 必填)支持 .xlsx / .xls / .xlsm逻辑: 生成 UUID 子目录 → 写入文件 → 返回目录路径返回:{ success: true, uploadDir, fileNames, message }POST /api/upload?generate-sampletrue参数: 无 Body逻辑: 调用 Pythonprocessor.py --generate-sample生成演示数据返回:{ success: true, uploadDir, fileNames, message }5.2 数据处理POST /api/processContent-Type:application/json请求体:{uploadDir:string (必填),configId:string?,configOverride:{fillnaRules:{列名:填充值},dedupColumns:[列名],typeMappings:{列名:float64|int64|str},groupbyColumn:分组列,groupbyAgg:{列名:sum|count|mean|max|min}}}逻辑:解析配置DB 配置 configOverride 内置默认值创建 ProcessingJobstatusprocessing异步启动 Python 子进程timeout 120s, maxBuffer 10MB解析 Python 输出的 JSON 结果更新 Job 状态和 Result返回:{ success: true, jobId, status: processing, message }5.3 处理配置GET /api/config— 获取所有配置列表含jobCountPOST /api/config— 创建新配置支持 isDefault 互斥PUT /api/config?idxxx— 更新指定配置DELETE /api/config?idxxx— 删除指定配置5.4 任务管理GET /api/jobs— 获取最近任务列表含结果和配置摘要GET /api/jobs?idxxx— 获取单个任务详情含完整数据和 AI 分析5.5 结果导出GET /api/export/{jobId}校验任务存在且 statuscompleted返回: Excel 二进制流Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet文件名:分析结果_{原文件名}_{日期}.xlsx5.6 AI 配置GET /api/ai/config— 获取 AI 配置列表或指定配置?idxxxPOST /api/ai/config— 创建 AI 配置PUT /api/ai/config?idxxx— 更新 AI 配置DELETE /api/ai/config?idxxx— 删除 AI 配置5.7 AI 分析POST /api/ai/analyze请求体:{jobId:string (必填),analysisType:comprehensive|quality|trend|risk|suggestion|custom,customQuestion:string?}逻辑:校验 job 状态仅 completed 可分析读取启用的 AI 配置构建分析上下文数据概况 清洗结果 聚合摘要根据 analysisType 生成 system prompt user prompt调用z-ai-web-dev-sdk获取 LLM 响应写入ProcessingResult.aiAnalysis返回:{ success: true, analysis: ..., analysisType }分析类型类型英文标识描述综合分析comprehensive全面分析数据特征和规律数据质量评估quality评估数据完整性和准确性趋势分析trend识别变化趋势和模式风险提示risk识别潜在风险和异常优化建议suggestion提供配置调整和优化建议自定义提问custom用户自定义问题6. 前端设计6.1 页面结构系统采用单页应用SPA布局顶部固定导航栏通过 shadcn/ui Tabs 组件切换 5 个功能面板┌─────────────────────────────────────────────┐ │ Header: Logo 系统标题 状态徽章 │ │ [上传] [处理配置] [AI配置] [分析结果] [历史]│ ├─────────────────────────────────────────────┤ │ │ │ Tab 内容区max-w-6xl, 居中 │ │ │ ├─────────────────────────────────────────────┤ │ Footer: 系统信息 技术栈标识 │ └─────────────────────────────────────────────┘6.2 组件树page.tsx (主页面) ├── FileUpload (上传组件) │ ├── 拖拽上传区域 (Drag Drop) │ ├── 待上传文件列表 (含大小/格式/删除) │ ├── 上传进度条 │ ├── 已上传文件列表 │ └── 操作按钮上传/生成示例/开始分析 ├── ConfigEditor (处理配置编辑器) │ ├── 配置名称 保存/加载/开始处理 │ ├── 填充缺失值编辑器动态 key-value │ ├── 去重规则编辑器动态列表 │ ├── 类型转换编辑器列→类型下拉 │ └── 分组汇总编辑器分组列 聚合规则 ├── AIConfigEditor (AI 配置编辑器) │ ├── 启用/禁用状态横幅 │ ├── 连接设置URL API Key Model ID │ ├── 系统提示词编辑 │ └── 默认配置开关 连接测试 ├── ResultsViewer (结果查看器) │ ├── 处理状态展示 │ │ ├── Loading 动画 (处理中) │ │ ├── Error 展示 (失败) │ │ └── Empty 状态 (未选择) │ ├── 统计卡片 (总行数/清洗后/去重/列数) │ ├── 柱状图 (Recharts BarChart) │ ├── AIAnalysisPanel (AI 分析面板) │ │ ├── 分析类型选择6 种 │ │ ├── 自定义问题输入 │ │ ├── 分析结果 Markdown 渲染 │ │ └── 加载/重新分析状态 │ └── 数据表 Tabs (原始/清洗/汇总) └── HistoryList (历史记录列表) ├── 任务卡片列表 ├── 状态徽章 (pending/processing/completed/failed) ├── 时间戳相对时间格式 └── 操作按钮查看结果/导出6.3 状态管理Zustand Store使用 Zustand 实现全局状态管理/src/lib/store.ts包含以下核心状态状态域字段类型说明上传uploadedFilesstring[]已上传文件名列表上传uploadDirstring?文件存储目录上传isUploadingboolean上传进行中配置currentConfigProcessingConfigType?当前处理配置AI 配置aiConfigAIConfigType?当前 AI 配置处理isProcessingboolean处理进行中处理currentJobIdstring?当前任务 IDAI 分析aiAnalysisstring?AI 分析内容AI 分析isAnalyzingbooleanAI 分析进行中导航activeTabstring当前活动标签6.4 UI 设计要点配色: 以 Emerald翠绿为主色调Teal 为 AI 相关辅色各功能区使用差异化色系Amber清洗、Violet转换、Blue去重、Rose导出响应式: 所有组件支持移动端通过sm:/lg:断点适配暗色模式: 全面支持 Tailwinddark:类交互反馈: Sonner Toast 通知所有操作结果处理中显示动画加载状态轮询机制: 结果页 2s 间隔轮询历史页 10s 间隔轮询仅在有活跃任务时7. 数据处理管道7.1 Python 脚本结构scripts/processor.py是实现核心数据逻辑的独立 Python 脚本通过child_process.execFile由 Node.js 端调用。脚本采用命令行参数驱动设计python3 processor.py --input-dir ./upload/{uuid}/ --output ./download/result_{jobId}.xlsx --config {fillnaRules:{项目金额:0},dedupColumns:[项目编号],...}7.2 处理管道步骤┌─────────────────────────────────────────────┐ │ Step 1: batch_read_excel(input_dir) │ │ - glob 扫描 *.xlsx, *.xls, *.xlsm │ │ - 逐文件读取所有 Sheet │ │ - 添加 __来源文件__, __来源Sheet__ 标记列 │ │ - pd.concat 合并 │ ├─────────────────────────────────────────────┤ │ Step 2: clean_data(df, config) │ │ - fillna: 按 fillnaRules 填充指定列缺失值 │ │ - drop_duplicates: 按 dedupColumns 去重 │ │ - astype: 按 typeMappings 转换列类型 │ │ - 返回 (cleaned_df, stats) │ ├─────────────────────────────────────────────┤ │ Step 3: aggregate_data(df, config) │ │ - groupby(groupbyColumn) │ │ - agg(groupbyAgg) │ │ - 生成分组摘要 │ ├─────────────────────────────────────────────┤ │ Step 4: export_to_excel(output_path, ...) │ │ - Sheet 1: 清洗后数据 │ │ - Sheet 2: 汇总分析 │ │ - Sheet 3: 处理统计 │ │ - openpyxl 美化表头字体/颜色/边框/冻结/列宽 │ ├─────────────────────────────────────────────┤ │ 输出: JSON 结果到 stdout │ │ { success, stats, summary, preview, columns }│ └─────────────────────────────────────────────┘7.3 数据转换规则配置项Python 实现说明fillnaRulesdf[col].fillna(value)支持数值和字符串填充dedupColumnsdf.drop_duplicates(subsetcols)keep‘first’typeMappings (float64)pd.to_numeric(col, errorscoerce)失败值用 fillna 规则填充typeMappings (int64)pd.to_numeric(col).astype(Int64)支持空值 IntegertypeMappings (str)df[col].astype(str)—groupbyAggdf.groupby(col).agg(dict)支持 sum/count/mean/max/min7.4 错误处理文件读取异常: 打印警告至 stderr跳过该文件继续处理类型转换异常: 打印警告继续执行配置 JSON 解析失败: 退出并返回 error 信息整体异常: 通过 traceback 捕获以结构化 JSON 返回8. AI 智能分析模块8.1 集成架构ResultsViewer (前端) → POST /api/ai/analyze { jobId, analysisType, customQuestion } → 读取 AIConfig (默认/enabled) → 构建分析上下文 (data_stats config preview_data) → 构建 Prompt (system user) → ZAI SDK → LLM API ← Markdown 分析结果 → 写入 ProcessingResult.aiAnalysis → 前端 ReactMarkdown 渲染8.2 Prompt 设计System Prompt用户可自定义覆盖:你是一位资深的项目数据分析师专注于 Excel 项目数据的分析与优化建议。你需要基于提供的数据处理结果给出专业、可操作的分析结论和调整建议。分析应包含数据质量评估关键发现趋势分析风险提示优化建议分析上下文由buildAnalysisContext构建:## 数据处理概况 - 分析文件: [文件名列表] - 原始数据总行数/列数/清洗后行数/删除重复行数 ## 处理配置 { fillnaRules, dedupColumns, typeMappings, groupbyColumn, groupbyAgg } ## 清洗后数据预览 (前10行) [JSON 数据] ## 汇总分析结果 [JSON 聚合数据] ## 处理统计摘要 [JSON 统计信息]8.3 分析类型 Prompt 映射类型User Prompt 前缀comprehensive请对以下项目数据进行全面深入的分析…quality请重点分析数据质量评估完整性和可靠性…trend请重点分析数据趋势和模式…risk请重点识别风险和异常…suggestion请重点给出处理配置的优化建议…custom用户自定义问题9. 构建与部署9.1 开发环境前置要求:Bun 1.3.xPython 3.12 venv系统依赖: 无额外要求启动步骤:# 1. 安装 Node.js 依赖buninstall# 2. 生成 Prisma Client 并推送数据库bun run db:push bun run db:generate# 3. 安装 Python 依赖如首次运行python3-mvenv .venvsource.venv/bin/activate pipinstallpandas openpyxl --break-system-packages# 4. 启动开发服务器bun run dev# 访问 http://localhost:30009.2 生产构建# 方式一标准化构建脚本sh.zscripts/build.sh# 方式二手动构建bun run build构建脚本流程:bun install— 安装依赖bun run build— Next.js standalone 构建复制.next/standalone.next/staticpublic→next-service-dist/复制并推送数据库至构建产物打包为.tar.gz构建产物结构:/tmp/build_fullstack_{BUILD_ID}/ ├── next-service-dist/ # Next.js standalone 输出 │ ├── server.js │ ├── .next/static/ │ └── public/ ├── db/ │ └── custom.db # 生产数据库 ├── Caddyfile # 反向代理配置 ├── start.sh # 启动脚本 └── mini-services-start.sh (可选)9.3 生产部署启动服务:# 解压构建包tarxzf build_fullstack_{BUILD_ID}.tar.gz-C/app/cd/app# 启动所有服务Next.js Caddyshstart.shstart.sh行为:设置环境变量NODE_ENVproduction,PORT3000,DATABASE_URL后台启动bun server.jsNext.js standalone前台启动caddy run --config Caddyfile作为主进程9.4 反向代理配置Caddyfile:81 { transform_port_query { query XTransformPort* } handle transform_port_query { reverse_proxy localhost:{query.XTransformPort} } handle { reverse_proxy localhost:3000 } }默认将 81 端口请求代理到 localhost:3000支持通过?XTransformPortxxxx动态转发至其他端口便于与其他微服务共存9.5 环境变量变量说明默认值DATABASE_URLSQLite 数据库路径file:/home/z/my-project/db/custom.dbPORTNext.js 服务端口3000HOSTNAME绑定地址0.0.0.0NODE_ENV运行环境production生产9.6 目录权限与数据持久化upload/: 上传文件临时存储按 UUID 子目录隔离download/: 导出 Excel 结果存储按 jobId 命名db/custom.db: SQLite 数据库需确保读写权限生产部署时upload/和download/建议挂载持久化存储或定期清理10. 目录结构project-root/ ├── .env # 环境变量DATABASE_URL ├── .gitignore # Git 忽略规则 ├── .zscripts/ # 构建与启动脚本 │ ├── build.sh # 生产构建脚本 │ ├── start.sh # 生产启动脚本 │ ├── dev.sh # 开发环境启动 │ ├── mini-services-build.sh # 微服务构建 │ ├── mini-services-install.sh # 微服务依赖安装 │ └── mini-services-start.sh # 微服务启动 ├── Caddyfile # Caddy 反向代理配置 ├── next.config.ts # Next.js 配置standalone 输出 ├── package.json # 项目依赖与脚本 ├── tsconfig.json # TypeScript 配置 ├── tailwind.config.ts # Tailwind CSS 配置 ├── components.json # shadcn/ui 配置 ├── bun.lock # Bun 依赖锁文件 ├── eslint.config.mjs # ESLint 配置 ├── postcss.config.mjs # PostCSS 配置 ├── prisma/ │ └── schema.prisma # Prisma 数据模型定义 ├── scripts/ │ └── processor.py # Python 数据处理管道 ├── db/ │ └── custom.db # SQLite 数据库文件 ├── upload/ # 上传文件存储按 UUID 子目录 ├── download/ # 导出 Excel 结果存储 ├── public/ # 静态资源 │ ├── logo.svg │ └── robots.txt ├── agent-ctx/ # AI Agent 上下文文件 │ ├── 5-backend-api-builder.md │ ├── 7-a-file-upload-component-builder.md │ ├── 7-c-results-viewer-builder.md │ ├── 7-d-history-list-builder.md │ └── 8-ai-config-editor-builder.md ├── src/ │ ├── app/ │ │ ├── layout.tsx # 根布局 │ │ ├── page.tsx # 主页面 │ │ ├── globals.css # 全局样式 │ │ └── api/ │ │ ├── route.ts # 健康检查 │ │ ├── upload/route.ts # 文件上传 API │ │ ├── process/route.ts # 数据处理 API │ │ ├── config/route.ts # 配置 CRUD API │ │ ├── jobs/route.ts # 任务查询 API │ │ ├── export/ │ │ │ └── [jobId]/ │ │ │ └── route.ts # 结果导出 API │ │ └── ai/ │ │ ├── config/ │ │ │ └── route.ts # AI 配置 CRUD API │ │ └── analyze/ │ │ └── route.ts # AI 分析 API │ ├── components/ │ │ ├── file-upload.tsx # 文件上传组件 │ │ ├── config-editor.tsx # 处理配置编辑器 │ │ ├── ai-config-editor.tsx # AI 配置编辑器 │ │ ├── results-viewer.tsx # 结果查看器含 AI 面板 │ │ ├── history-list.tsx # 历史记录列表 │ │ └── ui/ # shadcn/ui 组件库 │ │ ├── button.tsx, card.tsx, table.tsx, tabs.tsx │ │ ├── input.tsx, select.tsx, textarea.tsx │ │ ├── badge.tsx, progress.tsx, separator.tsx │ │ ├── dialog.tsx, dropdown-menu.tsx │ │ ├── switch.tsx, toggle.tsx │ │ ├── chart.tsx, scroll-area.tsx, accordion.tsx │ │ └── ... (40 组件) │ ├── lib/ │ │ ├── db.ts # Prisma Client 单例 │ │ ├── store.ts # Zustand 全局状态 │ │ └── utils.ts # 工具函数 │ └── hooks/ │ ├── use-mobile.ts # 移动端检测 │ └── use-toast.ts # Toast Hook ├── examples/ │ └── websocket/ # WebSocket 示例 │ ├── frontend.tsx │ └── server.ts ├── tool-results/ # 构建工具输出 └── worklog.md # 开发工作记录附录A. Python 脚本命令行参考# 生成示例数据python3 scripts/processor.py --generate-sample --sample-dir ./upload/demo/# 执行数据处理python3 scripts/processor.py\--input-dir ./upload/demo/\--output./download/result.xlsx\--config{fillnaRules:{项目金额:0},dedupColumns:[项目编号],typeMappings:{项目金额:float64},groupbyColumn:项目类型,groupbyAgg:{项目金额:sum,项目编号:count}}