chore: initialize migration workspace

This commit is contained in:
2026-07-02 10:38:13 +08:00
commit 705aec6ab2
44 changed files with 5988 additions and 0 deletions

View File

@@ -0,0 +1,266 @@
# 01-项目功能内容
## 1. 项目目标
建设一个替代当前 `MES_Manage/submit/MESCommonBase.ashx` 的通用 WebAPI 服务,运行在 Linux 操作系统上,面向前台提供统一接口,并支持以下数据库:
- SQL Server
- PostgreSQL
- MySQL
新项目不是简单把 `ashx` 改成 WebAPI而是把旧项目中“前台通过 `Type/Name/Param` 驱动 SQL 和存储过程”的模式改造成:
```text
前台调用 WebAPI
-> 后端按 actionId 或 legacy type 找白名单
-> Provider 层选择 SQL Server / PostgreSQL / MySQL
-> 统一参数、统一鉴权、统一响应、统一日志
```
### 1.1 目标 SDK 与目录基线
- 新项目目标 SDK 固定为 `.NET 10`
- 新项目目标 `TargetFramework` 固定为 `net10.0`
- 新代码根目录固定为 `MesUniversalApi/`
- `working/` 仅保留分析资料,`working1/` 仅保留项目管理文档。
-`.NET 10 SDK` 安装到位前,只进行文档、目录、资产盘点和接口梳理,不以 `net9.0` 临时创建正式项目。
## 2. 旧系统核心能力
旧系统入口:
```text
MES_Manage/submit/MESCommonBase.ashx
```
旧系统主要能力:
| 能力 | 旧 Type | 说明 |
| --- | --- | --- |
| Excel 导出 | `2001` | 调用 `MESDownloadExcel.ExcelWebCall.ExcelFile` |
| PDF 导出 | `2002` | 调用 `ExcelWebCall.ExcelFilePdf` |
| Excel 图片或指定扩展名导出 | `2003` | 读取 Form 第一项,生成下载文件 |
| 数据库文件下载 | `2004` | 调用 `DataLink.ExePROCEDURE_Type2004` |
| 文件上传 | `15` | 读取 `Request.Files[0]`,调用 `ExePROCEDURE_Type15` |
| 数据库文件下载 | `16` | 调用 `ExePROCEDURE_Type16` |
| IP 查询 | `4000` | 返回请求 IP |
| 通用 SQL/存储过程调用 | default | 调用 `DataLink.SqlWebCall(type,jsonData,dataobj)` |
`SqlWebCall` 的二次分发能力:
| 能力 | 旧 Type |
| --- | --- |
| 加密、注册、登录 | `8888/5001/5002` |
| 旧协议存储过程 | `1/2/5` |
| 新协议存储过程 | `11/111/12/13/21` |
| 直接 SQL 查询或执行 | `3/4/22/1001/1002/3001` |
| 动态建表导入 | `7` |
## 3. 新项目功能范围
### 3.1 WebAPI 基础能力
新项目必须提供:
- HTTP JSON API。
- OpenAPI/Swagger 文档。
- JWT 鉴权。
- CORS 配置。
- 健康检查接口。
- 统一异常处理中间件。
- 统一响应结构。
- 结构化日志和审计日志。
- Linux 部署能力。
### 3.2 多数据库执行能力
新项目必须支持:
- SQL Server 连接和执行。
- PostgreSQL 连接和执行。
- MySQL 连接和执行。
- 参数绑定。
- 查询返回动态结果集。
- 非查询执行。
- 存储过程或函数调用。
- 分页查询。
- 文件二进制上传和下载。
数据库访问不允许散落在 Controller 中,必须通过 Provider 抽象:
```text
IDatabaseProvider
|-- SqlServerProvider
|-- PostgreSqlProvider
|-- MySqlProvider
```
### 3.3 旧协议兼容能力
新项目应提供短期兼容接口:
```http
POST /api/v1/legacy/execute
```
兼容字段:
- `type`
- `name`
- `param`
- `token`
- `pageSize`
- `pageList`
- `Pagination`
兼容原则:
- 兼容不等于完全放开。
- `name` 必须命中白名单。
- 高风险 Type 默认不开放。
- 旧接口只作为迁移过渡,不作为长期推荐接口。
### 3.4 新 actionId 接口
新业务推荐使用:
```http
POST /api/v1/actions/{actionId}/execute
```
例如:
```http
POST /api/v1/actions/quality.line.query/execute
```
好处:
- 前台不再传 SQL。
- 前台不再传存储过程名。
- 后端可按 actionId 做权限、参数、数据库命令和审计控制。
### 3.5 文件接口
上传:
```http
POST /api/v1/files/{actionId}/upload
```
下载:
```http
GET /api/v1/files/{actionId}/download
```
文件功能要求:
- 支持 multipart 上传。
- 支持文件大小限制。
- 支持扩展名白名单。
- 支持下载文件名 UTF-8 编码。
- 支持跨域读取 `Content-Disposition`
- 支持数据库 BLOB 或外部文件存储。
### 3.6 报表导出
`2001/2002/2003` 迁移为报表 action。
建议接口:
```http
POST /api/v1/reports/{reportId}/export
```
输出格式:
- Excel
- PDF
- 后续可扩展 CSV
## 4. 不在首期范围内的内容
首期不建议做:
- 一次性把所有 SQL Server 存储过程自动翻译成 MySQL/PostgreSQL。
- 继续开放任意 SQL 执行给前台。
- 重写全部前端。
- 重写所有 Excel 模板。
- 建立复杂低代码平台。
首期重点应是:
```text
WebAPI 化 + SQL Server 兼容 + 白名单治理 + Provider 抽象
```
## 5. 旧 Type 到新功能映射
| 旧 Type | 新项目目标功能 | 首期策略 |
| --- | --- | --- |
| `2001` | Excel 导出 | 转报表 action |
| `2002` | PDF 导出 | 转报表 action |
| `2003` | 扩展导出 | 评估后转报表 action |
| `2004` | 文件下载 | 转文件下载 action |
| `15` | 文件上传 | 转文件上传 action |
| `16` | 文件下载 | 转文件下载 action |
| `4000` | IP 查询 | 独立诊断接口 |
| `1/2/5` | 旧协议存储过程 | 兼容但必须白名单 |
| `11/111/12/13/21` | 新协议存储过程 | 优先兼容 |
| `8888/5001/5002` | 加密、注册、登录 | 迁移到 Auth API |
| `3/4/7/22/1001/1002/3001` | 直接 SQL 或建表 | 默认禁用或仅管理端审计开放 |
## 6. 目标质量属性
### 6.1 安全
- 所有执行业务接口默认要求登录。
- action 必须白名单。
- 参数必须按定义校验。
- 禁止前台任意传 SQL。
- 文件上传必须校验大小和类型。
- 连接字符串不进入代码仓库。
### 6.2 可移植
- 运行在 Linux。
- 支持 Docker。
- 支持 systemd。
- 不依赖 IIS。
- 不依赖 .NET Framework。
### 6.3 可观测
- 每次执行有 traceId。
- 每个 action 记录耗时。
- 记录数据库类型和数据源。
- 记录错误摘要。
- 支持健康检查。
### 6.4 可维护
- Controller 只负责 HTTP 协议。
- 业务编排在 Application 层。
- 数据库差异在 Infrastructure Provider 层。
- 任务推进受 `04-任务矩阵.md` 控制。
### 6.5 目录边界
- 不在 `MES_Manage/``02DataLinkMesWork/` 中直接展开新 WebAPI 开发。
- 不把新项目证据散落到旧项目目录。
- 新项目代码、测试、部署、工具和附件统一进入 `MesUniversalApi/`
- `working1/05-验收证据.md` 负责证据索引,原始附件优先放到 `MesUniversalApi/evidence/`
## 7. 首批验收目标
首批可验收功能:
1. WebAPI 项目可在 Linux 启动。
2. Swagger 可打开。
3. JWT 登录和鉴权可用。
4. SQL Server Provider 可执行旧 `Type=11` 查询。
5. Legacy 接口可接收旧格式请求。
6. actionId 接口可执行一个白名单查询。
7. 文件下载可返回正确文件名和二进制。
8. 审计日志可记录用户、action、数据库、耗时、结果。