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

8.6 KiB
Raw Blame History

项目名称:布莱迪压力表型号自动分类助手

版本号V1.4 (Final Revised for Sanitary-Spray)

文档日期2026-02-11

1. 业务需求部分

1.1. 核心目标

通过VBA程序读取Excel中的选型代码解析字符串结构输出对应的8大产品分类。

1.2. 关键业务逻辑修正

  • 数据结构差异

    • 普通法兰表表头 | ... | 法兰隔膜 (喷涂标记 P 在法兰段末尾,如 FBP)。

    • 卫生型表表头 | ... (无独立法兰段,型号 F6A/F6B 位于表头)。

  • 卫生型喷涂规则:由于卫生型没有独立的法兰段,其喷涂标记 P 会直接附着在卫生型代码上(即 F6APF6BP),出现在 表头 中。

1.3. 目标分类与优先级(逻辑判定漏斗)

程序必须严格按照以下顺序1 -> 9进行判断。

优先级 分类名称 判定逻辑 (Business Rules) 备注
1 喷涂产品 复合条件判断(满足任一即属于喷涂)



1. 法兰段判定:若存在法兰隔膜段(通常是最后一段),且该段代码后缀P(如 FBP)。



2. 表头段判定:表头中包含 F6APF6BP即卫生型代码后带P
最高优先级



确保无论是普通法兰还是卫生型,只要带喷涂工艺,均归为此类。
2 卫生型隔膜表 检查对象Head (表头部分)。



规则:包含子字符串 F6AF6B



逻辑:因 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类不依赖任何 RangeWorksheet 对象,只接收字符串,返回分类结果。

  • 性能优化 (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	常规表