chore(docs): 移除过时的需求文档与测试报告

- 删除字段映射与导出校验规则文档
- 移除MarketingSystemDataTool需求与测试点详细文档
- 清理易码通直充卡密订单导出客户名称去重测试报告
- 减少项目冗余文档,便于维护和更新
This commit is contained in:
zhouyonggao 2025-12-17 09:14:47 +08:00
parent f541a7a30b
commit ec3f890d7e
4 changed files with 0 additions and 180 deletions

View File

@ -1,15 +0,0 @@
# 字段映射与导出校验规则
- 模板字段按保存顺序导出,严格保持数量与顺序一致。
- YMT 物理表名 `order_info.*` 在模板保存时可使用,导出阶段统一标准化为逻辑 `order.*`
- 营销系统立减金批次别名:`order_voucher.channel_batch_no` 标准化为 `order_voucher.channel_activity_id`
- 白名单校验:所有字段必须在白名单中(见 `server/internal/schema/fields.go`),否则导出拒绝并提示具体字段列表。
- 不做自动去重:如模板包含同名或同义字段,将按模板原样导出。
- SQL 构建使用列别名 `AS \`table.field\``,表头通过 `FieldLabels()` 映射中文名。
## 失败返回
- 若模板字段不在白名单HTTP 400`模板字段不在白名单: <列表>`。
- 若字段数量不一致,将在日志记录 `field_count_mismatch` 事件供排查。
## 测试
- 单元测试 `server/internal/exporter/sqlbuilder_test.go` 验证别名数量与模板字段数量一致。

View File

@ -1,144 +0,0 @@
# MarketingSystemDataTool 需求文档与测试点
## 背景与目标
- 为营销系统与易码通系统提供统一、可配置的数据导出能力CSV/XLSX以模板化方式生成安全、可控的查询与导出文件。
- 支持模板管理、EXPLAIN 评估、分批与时间分片执行、进度追踪与文件下载,满足运营与数据分析的批量导出场景。
## 范围
- 后端Go 单服务HTTP API连接两套 MySQL营销、易码通不含消息队列与缓存。
- 前端Vue 3 + Element PlusCDN单页工具页面模板维护与导出发起、任务查看与下载。
- 存储:本地 `storage/export/` 目录生成分片文件与最终 zip导出记录与模板元数据存库。
## 系统架构
- 路由注册:`server/internal/api/router.go:11`、`server/internal/api/router.go:13`、`server/internal/api/router.go:15`、`server/internal/api/router.go:16-27`;静态文件:`server/internal/api/router.go:40`。
- 启动入口:`server/cmd/server/main.go:15-46`,加载配置、初始化日志、连接 MySQL、启动 HTTP Server。
- 配置加载:`server/internal/config/config.go:31-69`YAML + 环境变量DSN 组合:`server/internal/config/config.go:94-99`。
- 响应封装与中间件:`server/internal/api/response.go:18-36`、`server/internal/api/middleware.go:18-31`TraceID/CORS/访问日志)。
- SQL 构建与评估:`server/internal/exporter/sqlbuilder.go`、`server/internal/exporter/explain.go`、`server/internal/exporter/evaluate.go`、`server/internal/exporter/writer.go`。
- Schema 映射与白名单:`server/internal/schema/*.go`;字段标签:`server/internal/api/templates.go:315-317`。
- 前端页面与逻辑:`web/index.html`、`web/main.js`。
## 功能需求
### 模板管理
- 新增模板:`POST /api/templates`,字段包含名称、数据源、场景主表、字段集合、默认筛选、输出格式、可见性、归属人。
- 列表与详情:`GET /api/templates`、`GET /api/templates/{id}`,支持 `userId` 过滤公共/个人模板;展示字段数、执行次数、最近校验。
- 编辑模板:`PATCH /api/templates/{id}`,支持名称、数据源、主表、字段、筛选、格式、可见性、启用状态变更。
- 删除模板:`DELETE /api/templates/{id}`,若存在任务引用禁止删除。
- 模板校验:`POST /api/templates/{id}/validate`,生成 SQL、执行 EXPLAIN、评分与索引建议写回模板。
### 导出执行
- 发起导出:`POST /api/exports`,加载模板→构建 SQL→EXPLAIN 评分(阈值 60→估算行数→入库任务→异步执行。
- 进度与列表:`GET /api/exports` 分页返回任务,含评估摘要与行数;`GET /api/exports/{id}` 返回详细信息与文件列表。
- SQL 查看:`GET /api/exports/{id}/sql` 返回参数化 SQL 与最终展开 SQL。
- 取消与下载:`POST /api/exports/{id}/cancel`、`GET /api/exports/{id}/download` 下载最新 zip。
### 元数据与辅助
- 字段元数据:`GET /api/metadata/fields?datasource&order_type`,返回表与字段、推荐字段集合。
- 选择项:营销侧 `GET /api/creators`、`GET /api/resellers?creator`、`GET /api/plans?reseller`;易码通 `GET /api/ymt/users`、`GET /api/ymt/merchants?user_id`、`GET /api/ymt/activities?merchant_id`。
- Key 解析工具:`GET /api/utils/decode_key?v=...`。
### 权限与安全
- 强制权限条件:营销库必须提供 `creator_in``create_time_between`;易码通通过 `creator_in`(映射为 `user_id`)。
- 字段白名单:禁用 `SELECT *` 与非白名单字段;模板字段、过滤项统一白名单校验。
- 参数化查询:所有筛选采用预编译参数;禁止字符串拼接。
- 敏感字段处理:`order.key` 在易码通解密(`SM4``YMT_KEY_DECRYPT_KEY_B64`),营销系统做逆编码;下载统一 `zip`
### 文件生成与存储
- 输出格式:`csv` 与 `xlsx`;首行写列名;统一 UTF-8。
- 分批与分片:每批查询 `1000` 行;单文件上限 `300000` 行自动切片支持按时间范围10 天步长)拆分执行。
- 记录文件:每个分片与最终 zip 写入 `export_job_files`,保留行数与大小。
### 前端交互
- 模板管理与执行:`web/index.html`、`web/main.js`;通过 `userId` 透传归属过滤Cascader 选择场景字段;对话框尺寸可调整。
- 执行表单:必填时间范围;营销侧创建者/分销商/计划级联;易码通用户/客户/活动级联;订单类型附加筛选。
- 任务列表:每秒轮询;展示评估状态、行数、进度百分比、下载与 SQL 分析。
## 非功能需求
- 性能EXPLAIN 评分达标≥60避免 `ALL`、`Using temporary/filesort`;优先覆盖权限与时间索引。
- 稳定性:分批拉取与时间分片;进度每 50 行刷新;失败/取消状态管理;磁盘 I/O 控制。
- 安全:仅白名单字段;敏感信息通过环境变量注入;日志不打印明文密码与完整 DSN。
- 监控与日志:统一结构化访问日志、错误日志携带 TraceID 与 SQL任务与模板操作记录。
## 接口规范(摘要)
- `POST /api/templates`
- 请求:`{ name, datasource, main_table, fields: string[], filters: object, file_format, visibility, owner_id }`
- 响应:`201 ok`
- `GET /api/templates[?userId]` → 列表;`GET /api/templates/{id}` → 详情
- `PATCH /api/templates/{id}` → 部分更新
- `DELETE /api/templates/{id}` → 模板未被引用时允许删除
- `POST /api/templates/{id}/validate``{ score, suggestions[] }`
- `POST /api/exports`
- 请求:`{ template_id, requested_by, permission, options, file_format, filters, datasource }`
- 响应:`{ id }`(任务 ID
- `GET /api/exports[?template_id&page&page_size&userId]``{ items, total, page, page_size }`
- `GET /api/exports/{id}` → 任务详情与文件列表
- `GET /api/exports/{id}/sql``{ sql, final_sql }`
- `POST /api/exports/{id}/cancel`、`GET /api/exports/{id}/download`
- `GET /api/metadata/fields?datasource&order_type``{ tables[], recommended[] }`
## 配置与环境
- YAML`server/config.yaml`(或根 `config.yaml`),示例端口 `8077`;两套 DB 连接参数与易码通密钥。
- 环境变量覆盖:`MARKETING_DB_*`、`YMT_DB_*`、`YMT_KEY_DECRYPT_KEY_B64`;支持 `.env.local` 注入。
- DSN 模板:`<user>:<password>@tcp(<host>:<port>)/<dbname>?parseTime=True&loc=Local&charset=utf8mb4`。
## 数据与字段(摘要)
- 主表:营销 `order`;易码通主表映射 `order_info`
- 常用过滤:`creator_in`、`create_time_between`、`type_eq`、`out_trade_no_eq`、`plan_id_eq`、`reseller_id_eq` 等。
- 关联表:营销(`order_detail`、`order_cash`、`order_voucher`、`plan`、`key_batch`、`code_batch`、`voucher`、`voucher_batch`、`merchant_key_send`);易码通(`order_cash`、`order_voucher`、`order_digit`、`goods_voucher_batch`、`goods_voucher_subject_config`、`merchant`、`activity`)。
## 关键流程(文字版)
1. 前端创建模板或选择已有模板,选择数据源、场景与字段,设置默认订单类型。
2. 发起导出:前端提交必填的时间范围与权限范围(创建者等),后端生成 SQL → EXPLAIN → 阈值校验。
3. 任务入库与异步执行:分批分页查询,每 1000 行拉取,单文件 `300k` 行分片,时间范围大时按 10 天拆分。
4. 行写入:写 CSV/XLSX特定字段转换`order.key` 解密/逆编码);定期更新进度。
5. 完成:汇总分片为 zip写文件记录任务置为 `completed`,提供下载与 SQL 分析。
## 边界与限制
- 仅支持订单主表(营销 `order`,易码通 `order_info`),不支持自由主表选择。
- 必须包含权限与时间过滤;否则构建器报错或评估不通过。
- 单文件分片上限 `300k` 行;极大数据量建议按时间拆分或筛选范围收窄。
## 测试点
### 单元测试
- SQL 构建器(`server/internal/exporter/sqlbuilder.go`
- 字段白名单与非法字段拒绝。
- 主表校验:仅 `order` / `order_info`
- 过滤解析:`creator_in`(多类型数组)、`create_time_between`(长度=2、其他等值过滤。
- 易码通字段映射与特殊枚举列(`type/status/pay_status` CASE 逻辑)。
- JOIN 选择与避免笛卡尔积(不同过滤与字段组合)。
- EXPLAIN 评估(`server/internal/exporter/explain.go`、`evaluate.go`
- 出现 `ALL`/高 `rows`/`Using temporary/filesort` 的扣分逻辑与建议生成。
- 评分阈值判定与错误分支(禁止执行)。
- 写入器(`server/internal/exporter/writer.go`
- CSV/XLSX 写列名与行;`Close` 返回路径与大小;异常路径处理。
- 行转换(`server/internal/api/exports.go:868-887`
- `order.key` 解密/逆编码:易码通 SM4密钥为空与有效、营销逆编码后长度与字符集校验。
- 时间分片(`server/internal/api/exports.go:731-751`
- 输入合法性与步长切分边界;起止相等、跨天与不足步长。
### 集成测试
- 模板生命周期:创建→校验→编辑→列表/详情→删除(被引用场景拒绝)。
- 导出端到端:发起(营销与易码通各 1 套→下载→SQL 分析;大窗口下分片与 zip 生成验证。
- 列表分页与过滤:`/api/exports` `page/page_size/template_id/userId` 组合下返回一致性。
- 前端交互:字段级联选择、对话框动态尺寸、`userId` 透传与权限限制(编辑/删除按钮显隐)。
### 性能测试
- EXPLAIN 评分边界:构造不同索引覆盖与过滤条件,验证评分变化与建议内容。
- 大数据量导出:行数 10 万/30 万/100 万分批写入,评估速度、文件大小与 zip 打包时间;进度刷新频率与准确性。
### 安全测试
- 非白名单字段与非法主表拒绝SQL 注入尝试(字符串拼接禁止)。
- 敏感信息:`order.key` 转换正确且日志不泄漏;配置与环境变量加载不写入日志明文密码。
- 下载鉴权:仅通过最新文件下载 API404 场景与异常路径。
### 前端测试
- 表单校验:模板创建必填项、导出必填时间范围与权限范围。
- 选择项联动:创建者→分销商→计划(营销);用户→客户→活动(易码通)。
- 任务轮询进度计算、完成后下载按钮显隐SQL 查看正确展示最终 SQL。
## 验收标准
- 模板创建、校验、编辑、删除流程完整可用;字段白名单生效。
- 导出任务在营销与易码通数据源下均可成功执行EXPLAIN 评分≥60能生成 zip 文件并下载。
- 在大窗口与分片场景下保持稳定,进度与行数统计准确;日志与响应携带 TraceID。
- 前端交互顺畅必填项校验与权限控制符合预期SQL 分析与下载功能可用。

View File

@ -1,21 +0,0 @@
# 易码通直充卡密订单导出客户名称去重测试报告
## 场景与用例
- 单客户订单导出:选择单一 `merchant_id`,包含多笔订单
- 批量客户订单导出:选择多个 `merchant_id`
- 相同客户多笔订单:同一 `merchant_id` 在时间窗口内多笔订单
## 验证点
- 导出文件格式:列头正确、编码 `UTF-8`、首行表头
- 客户名称列:每行仅出现一次且来源为 `merchant.name`
- 其他订单信息:金额、时间、订单编号等字段完整无误
## 结果摘要
- 前端:仅在立减金场景显示“立减金批次号”,直充卡密不显示
- 后端YMT 直充卡密过滤 `order_voucher/*` 与去重 `order.merchant_name`
- SQL 构建:包含 `LEFT JOIN merchant`,输出列使用 `merchant.name`
## 兼容性与影响
- YMT 立减金与营销立减金不受影响,仍支持“立减金批次号”筛选与列输出
- 直充卡密模板示例更新为使用 `merchant.name`

0
docs/需求文档.md Normal file
View File