Add product requirement and technical specification documents, and BLDI pressure gauge product selection catalog. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
8.6 KiB
项目名称:布莱迪压力表型号自动分类助手
版本号: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 | 喷涂产品 | 复合条件判断(满足任一即属于喷涂): 1. 法兰段判定:若存在法兰隔膜段(通常是最后一段),且该段代码后缀为 P(如 FBP)。2. 表头段判定:表头中包含 F6AP 或 F6BP(即卫生型代码后带P)。 |
最高优先级。 确保无论是普通法兰还是卫生型,只要带喷涂工艺,均归为此类。 |
| 2 | 卫生型隔膜表 | 检查对象:Head (表头部分)。 规则:包含子字符串 F6A 或 F6B。逻辑:因 F6AP/BP 已在第1步被截获,此处只会捕获非喷涂的卫生型。 |
无法兰段结构。 |
| 3 | 隔膜表 | 检查对象:Head (表头部分)的主型号。 规则:主型号以 P 开头。示例: PYTHN... 或 PYX...。 |
优先于电接点。PYX 归为此类。 |
| 4 | 差压表 | 检查对象:Head (表头部分)的主型号。 规则:主型号以 YC 开头。 |
|
| 5 | 膜盒压力表 | 检查对象:Head (表头部分)的主型号。 规则:主型号以 YE 开头。 |
|
| 6 | 精密压力表 | 检查对象:Head (表头部分)的主型号。 规则:主型号以 YB 开头。 |
|
| 7 | 电接点压力表 | 检查对象:Head (表头部分)的主型号。 规则:主型号以 YX 开头。 |
此时已排除 PYX。 |
| 8 | 常规表 | 检查对象:Head (表头部分)的主型号。 规则:主型号以 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): 分类名称 (例如
"喷涂产品","常规表"等)。
- (String): 分类名称 (例如
-
内部逻辑:实现上述 1-9 的判定漏斗。
-
辅助私有函数 (Private Helper Functions):
-
GetHead(fullString): 提取表头。 -
GetFlange(fullString): 提取法兰部分。 -
IdentifySpray(flangeString): 判定是否喷涂。 -
IdentifySanitary(headString): 判定是否卫生型。
-
B. 标准模块:MainModule
该模块负责与Excel交互。
Sub: RunClassification()
-
功能:用户点击按钮后的主入口。
-
流程:
-
确定数据范围(假设数据在活动工作表的 A 列,从 A2 开始)。
-
读取
Range("A2:A" & lastRow).Value2到内存数组DataArr。 -
创建
GaugeClassifier类的实例。 -
声明结果数组
ResultArr。 -
循环遍历
DataArr:-
调用
GaugeClassifier.Classify(DataArr(i, 1))。 -
将返回值存入
ResultArr。
-
-
将
ResultArr一次性写入 B 列。 -
提示完成。
-
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 常规表