Files
ProductionCycleCheck/reference_docs/产品需求与技术规格文档 (PRD & Tech Spec).md
Misaka_Company 88b85c47cf Add reference documentation
Add product requirement and technical specification documents,
and BLDI pressure gauge product selection catalog.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 16:57:58 +08:00

172 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
**项目名称**:布莱迪压力表型号自动分类助手
**版本号**V1.4 (Final Revised for Sanitary-Spray)
**文档日期**2026-02-11
## 1. 业务需求部分
### 1.1. 核心目标
通过VBA程序读取Excel中的选型代码解析字符串结构输出对应的8大产品分类。
### 1.2. 关键业务逻辑修正
- **数据结构差异**
- **普通法兰表**`表头 | ... | 法兰隔膜` (喷涂标记 `P` 在法兰段末尾,如 `FBP`)。
- **卫生型表**`表头 | ...` (无独立法兰段,型号 `F6A/F6B` 位于表头)。
- **卫生型喷涂规则**:由于卫生型没有独立的法兰段,其喷涂标记 `P` 会直接附着在卫生型代码上(即 `F6AP``F6BP`),出现在 **表头** 中。
### 1.3. 目标分类与优先级(逻辑判定漏斗)
程序必须严格按照以下顺序1 -> 9进行判断。
| **优先级** | **分类名称** | **判定逻辑 (Business Rules)** | **备注** |
| ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| **1** | **喷涂产品** | **复合条件判断(满足任一即属于喷涂)**<br><br> <br><br>1. **法兰段判定**:若存在法兰隔膜段(通常是最后一段),且该段代码**后缀**为 `P`(如 `FBP`)。<br><br> <br><br>2. **表头段判定**:表头中包含 `F6AP``F6BP`即卫生型代码后带P。 | **最高优先级**。<br><br> <br><br>确保无论是普通法兰还是卫生型,只要带喷涂工艺,均归为此类。 |
| **2** | **卫生型隔膜表** | **检查对象**Head (表头部分)。<br><br> <br><br>**规则**:包含子字符串 `F6A``F6B`。<br><br> <br><br>**逻辑**:因 `F6AP/BP` 已在第1步被截获此处只会捕获**非喷涂**的卫生型。 | 无法兰段结构。 |
| **3** | **隔膜表** | **检查对象**Head (表头部分)的主型号。<br><br> <br><br>**规则**:主型号以 `P` 开头。<br><br> <br><br>**示例**`PYTHN...``PYX...`。 | 优先于电接点。`PYX` 归为此类。 |
| **4** | **差压表** | **检查对象**Head (表头部分)的主型号。<br><br> <br><br>**规则**:主型号以 `YC` 开头。 | |
| **5** | **膜盒压力表** | **检查对象**Head (表头部分)的主型号。<br><br> <br><br>**规则**:主型号以 `YE` 开头。 | |
| **6** | **精密压力表** | **检查对象**Head (表头部分)的主型号。<br><br> <br><br>**规则**:主型号以 `YB` 开头。 | |
| **7** | **电接点压力表** | **检查对象**Head (表头部分)的主型号。<br><br> <br><br>**规则**:主型号以 `YX` 开头。 | 此时已排除 `PYX`。 |
| **8** | **常规表** | **检查对象**Head (表头部分)的主型号。<br><br> <br><br>**规则**:主型号以 `Y` 开头,且不匹配上述 YC/YE/YB/YX。 | |
| **9** | **其他** | **规则**:不满足以上任何条件(含 `B` 开头的膜片表)。 | |
---
## 2. 技术规格说明 (Technical Specifications)
### 2.1. 架构设计原则
- **解耦 (Decoupling)**将“Excel操作”与“业务分类逻辑”完全分离。
- **Excel操作层**:负责读取数据、写入数据、界面交互。
- **业务逻辑层**纯VBA类不依赖任何 `Range``Worksheet` 对象,只接收字符串,返回分类结果。
- **性能优化 (Performance)**
- 禁止在循环中读写单元格。
- 使用 `Variant` 数组一次性读取所有数据 (`Range.Value2`)。
- 在内存中进行数组循环处理。
- 一次性将结果数组写回 Excel (`Range.Resize(...).Value = resultArr`)。
### 2.2. 项目目录结构
```
Project Root
├── VBA
│ ├── Modules
│ │ ├── MainModule.bas ' 入口模块:负责调用、数组读写、性能计时
│ │ └── TestModule.bas ' 测试模块:负责对逻辑类进行单元测试
│ └── ClassModules
│ └── GaugeClassifier.cls ' 核心业务类:封装所有判定逻辑
```
### 2.3. 接口定义 (Interface Specifications)
#### A. 类模块:`GaugeClassifier`
该类只负责“给一个字符串,还一个分类名称”。
**Method: `Classify(modelString As String) As String`**
- **功能**:输入单个型号字符串,根据业务规则返回分类名称。
- **输入**
- `modelString` (String): 完整的选型代码 (例如 `"PYTH-100...|..."`)。
- **输出**
- (String): 分类名称 (例如 `"喷涂产品"`, `"常规表"` 等)。
- **内部逻辑**:实现上述 1-9 的判定漏斗。
- **辅助私有函数 (Private Helper Functions)**
- `GetHead(fullString)`: 提取表头。
- `GetFlange(fullString)`: 提取法兰部分。
- `IdentifySpray(flangeString)`: 判定是否喷涂。
- `IdentifySanitary(headString)`: 判定是否卫生型。
#### B. 标准模块:`MainModule`
该模块负责与Excel交互。
**Sub: `RunClassification()`**
- **功能**:用户点击按钮后的主入口。
- **流程**
1. 确定数据范围(假设数据在活动工作表的 A 列,从 A2 开始)。
2. 读取 `Range("A2:A" & lastRow).Value2` 到内存数组 `DataArr`
3. 创建 `GaugeClassifier` 类的实例。
4. 声明结果数组 `ResultArr`
5. **循环**遍历 `DataArr`
- 调用 `GaugeClassifier.Classify(DataArr(i, 1))`
- 将返回值存入 `ResultArr`
6.`ResultArr` 一次性写入 B 列。
7. 提示完成。
#### C. 标准模块:`TestModule`
该模块用于开发阶段的验证。
**Sub: `TestClassifierLogic()`**
- **功能**不打开Excel也能验证逻辑是否正确。
- **实现**
- 构造一组典型的测试用例Dictionary 或 Array包含【输入字符串】和【期望分类】。
- `TestCase 1`: 输入 `"PYTH...F6B...|FBP..."`, 期望 `"喷涂产品"` (验证优先级)。
- `TestCase 2`: 输入 `"PYTH...F6B..."`, 期望 `"卫生型隔膜表"`
- `TestCase 3`: 输入 `"BF-100..."`, 期望 `"其他"`
- `Assert` 实际输出是否等于期望输出,打印测试报告到立即窗口 (Immediate Window)。
---
### 3. 开发测试用例 (Test Cases)
```
输入型号 预期分类
PYTH-100.A0.531.M201.M02|BP-088.2312.M02.0A3|FBP-251040.RF1.049.13.M20F.B.DPA 喷涂产品
PYTH-063.A0.513.M05.U38.F6A.K15.1.1|BP-058.1509.M05.BB2.F6 卫生型隔膜表
PYTH-063.A0.513.M05.U38.F6BP.K15.1.1|BP-058.1509.M05.BB2.F6 喷涂产品
PYTH-063.A0.513.M201.M09|BP-058.1509.M09.0A2|FC-1520.RF1.033.1.M20F.B.DPA 隔膜表
PYXHN-100.A0.531.M201.M09.H4|BP-088.2518.M09.0A3.YXH|F5.M42M.M20F.030.3.033.1.B 隔膜表
YCSH-100.A0.531.M201.M07|BP-088.2312.M07.0A3.YCS 差压表
YE-070.A0.204.G144.K21|BP-058.1509.K21.0A2 膜盒压力表
YB-120.A0.407.Z144.M23|BP-110.5250.P60.0A5 精密压力表
YX-100.A0.200.M204.M16.H4|BP-098.0088.M16.0A3.YX 电接点压力表
Y-040.Z0.200.M104.M07|BP-037.1007.M07.0A2 常规表
Y-100.BT.200.M204.M12|BP-098.0088.B17.PA3 常规表
```