feat: add azxs and bkxs condition extraction
Added two new extraction rules to clsConditionExtractor: - azxs (安装形式): Extract installation form code from InstallForm field - bkxs (表壳形式): Extract shell form code from ShellForm field Examples: - azxs: A0 (径向无边), Z0 (中轴向无边) - bkxs: 532 (53=304外壳+安装式, 2=外卡式) These new conditions can now be used in material selection expressions. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,15 @@ Private Sub InitializeRules()
|
|||||||
' 从 RangeCode 中直接提取
|
' 从 RangeCode 中直接提取
|
||||||
m_ExtractionRules("lcfw") = Array("RangeCode", "Direct")
|
m_ExtractionRules("lcfw") = Array("RangeCode", "Direct")
|
||||||
|
|
||||||
|
' 规则4: 安装形式 (azxs)
|
||||||
|
' 从 InstallForm 中直接提取(例如:A0=径向无边, Z0=中轴向无边)
|
||||||
|
m_ExtractionRules("azxs") = Array("InstallForm", "Direct")
|
||||||
|
|
||||||
|
' 规则5: 表壳形式 (bkxs)
|
||||||
|
' 从 ShellForm 中直接提取(3位代码:前2位表壳类型+后1位罩壳类型)
|
||||||
|
' 例如:532 = 53(304外壳、安装式) + 2(外卡式)
|
||||||
|
m_ExtractionRules("bkxs") = Array("ShellForm", "Direct")
|
||||||
|
|
||||||
' 未来可以在这里添加更多提取规则...
|
' 未来可以在这里添加更多提取规则...
|
||||||
' 例如:
|
' 例如:
|
||||||
' m_ExtractionRules("bplx") = Array("DialCode", "Direct") ' 表盘类型
|
' m_ExtractionRules("bplx") = Array("DialCode", "Direct") ' 表盘类型
|
||||||
|
|||||||
276
新增条件提取计划.md
Normal file
276
新增条件提取计划.md
Normal file
@@ -0,0 +1,276 @@
|
|||||||
|
# 新增条件提取功能实现计划
|
||||||
|
|
||||||
|
## 一、需求概述
|
||||||
|
|
||||||
|
需要向 `clsConditionExtractor.cls` 类增加两个新的条件提取:
|
||||||
|
|
||||||
|
1. **安装形式 (azxs)** - 从型号中提取安装形式代码
|
||||||
|
2. **表壳形式 (bkxs)** - 从型号中提取表壳形式代码
|
||||||
|
|
||||||
|
### 示例说明
|
||||||
|
|
||||||
|
以型号 `YTHN-100.A0.532.M203.M17.Y3|BP-095.2312.M17.P3` 为例:
|
||||||
|
|
||||||
|
- **A0** = 安装形式代码(径向无边)
|
||||||
|
- **532** = 表壳形式代码,其中:
|
||||||
|
- `53` = 表壳类型(304外壳、安装式、可充油)
|
||||||
|
- `2` = 罩壳类型(外卡式)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、参考文档依据
|
||||||
|
|
||||||
|
根据 `布莱迪公司压力表产品选型大表.md` 文档:
|
||||||
|
|
||||||
|
### 2.1 安装形式代码(第159-204行)
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| A0 | 径向无边 |
|
||||||
|
| AT | 径向前边 |
|
||||||
|
| AH | 径向后边 |
|
||||||
|
| AM | 膜片式径向 |
|
||||||
|
| Z0 | 中轴向无边 |
|
||||||
|
| B0 | 下轴向无边 |
|
||||||
|
| ... | (共20多种安装形式) |
|
||||||
|
|
||||||
|
**提取规则**:直接提取2位代码(字母+数字组合)
|
||||||
|
|
||||||
|
### 2.2 表壳形式代码(第207-266行)
|
||||||
|
|
||||||
|
表壳形式由两部分组成:**表壳类型(2位) + 罩壳类型(1位)**
|
||||||
|
|
||||||
|
#### 表壳类型示例:
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 00 | 特殊型 |
|
||||||
|
| 10 | 塑料表壳 |
|
||||||
|
| 20-24 | 碳钢喷塑外壳系列 |
|
||||||
|
| 30 | 坚固安全型 |
|
||||||
|
| 40 | 压铸铝喷塑外壳 |
|
||||||
|
| 50-55 | 304外壳系列 |
|
||||||
|
| 60-65 | 316L外壳系列 |
|
||||||
|
|
||||||
|
#### 罩壳类型示例:
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 0 | 螺钉上紧式 |
|
||||||
|
| 1 | 内卡式 |
|
||||||
|
| 2 | 外卡式 |
|
||||||
|
| 3 | 滚边式 |
|
||||||
|
| 4-9 | (其他6种罩壳类型) |
|
||||||
|
|
||||||
|
**提取规则**:
|
||||||
|
- 整体提取3位代码(如:532)
|
||||||
|
- 如果需要细分,可以拆分为:
|
||||||
|
- 前2位:表壳类型(如:53)
|
||||||
|
- 后1位:罩壳类型(如:2)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、技术实现方案
|
||||||
|
|
||||||
|
### 3.1 代码检查
|
||||||
|
|
||||||
|
检查 `clsModelParser` 类是否已包含以下属性:
|
||||||
|
- ✅ `InstallForm` - 安装形式代码
|
||||||
|
- ✅ `ShellForm` - 表壳形式代码
|
||||||
|
|
||||||
|
**说明**:根据 `clsConditionExtractor.cls` 第113-116行显示,解析器已经支持这些字段。
|
||||||
|
|
||||||
|
### 3.2 提取规则设计
|
||||||
|
|
||||||
|
#### 规则1:安装形式 (azxs)
|
||||||
|
```vba
|
||||||
|
m_ExtractionRules("azxs") = Array("InstallForm", "Direct")
|
||||||
|
```
|
||||||
|
- **源字段**:`InstallForm`
|
||||||
|
- **提取方法**:`Direct`(直接使用)
|
||||||
|
|
||||||
|
#### 规则2:表壳形式 (bkxs)
|
||||||
|
```vba
|
||||||
|
m_ExtractionRules("bkxs") = Array("ShellForm", "Direct")
|
||||||
|
```
|
||||||
|
- **源字段**:`ShellForm`
|
||||||
|
- **提取方法**:`Direct`(直接使用)
|
||||||
|
|
||||||
|
### 3.3 修改位置
|
||||||
|
|
||||||
|
在 `clsConditionExtractor.cls` 的 `InitializeRules()` 方法中添加上述两条规则。
|
||||||
|
|
||||||
|
**修改位置**:第29-47行(InitializeRules 方法内部)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、实现步骤
|
||||||
|
|
||||||
|
### 步骤1:修改 clsConditionExtractor.cls
|
||||||
|
|
||||||
|
在 `InitializeRules()` 方法中添加两个新的提取规则:
|
||||||
|
|
||||||
|
```vba
|
||||||
|
Private Sub InitializeRules()
|
||||||
|
' 规则格式: Dictionary(变量名) = Array(源字段, 提取方法)
|
||||||
|
|
||||||
|
' 规则1: 过程连接 (gclj)
|
||||||
|
m_ExtractionRules("gclj") = Array("ConnectionCode", "RemoveLastDigit")
|
||||||
|
|
||||||
|
' 规则2: 接液材质 (jycz)
|
||||||
|
m_ExtractionRules("jycz") = Array("ConnectionCode", "GetLastDigit")
|
||||||
|
|
||||||
|
' 规则3: 量程范围 (lcfw)
|
||||||
|
m_ExtractionRules("lcfw") = Array("RangeCode", "Direct")
|
||||||
|
|
||||||
|
' === 新增规则 ===
|
||||||
|
' 规则4: 安装形式 (azxs)
|
||||||
|
m_ExtractionRules("azxs") = Array("InstallForm", "Direct")
|
||||||
|
|
||||||
|
' 规则5: 表壳形式 (bkxs)
|
||||||
|
m_ExtractionRules("bkxs") = Array("ShellForm", "Direct")
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
### 步骤2:验证 ExtractValue 方法
|
||||||
|
|
||||||
|
检查 `ExtractValue` 方法(第98-157行)是否已支持 `InstallForm` 和 `ShellForm` 源字段。
|
||||||
|
|
||||||
|
**确认点**:
|
||||||
|
- 第113-114行:`Case "InstallForm"` ✅ 已存在
|
||||||
|
- 第115-116行:`Case "ShellForm"` ✅ 已存在
|
||||||
|
|
||||||
|
**结论**:无需修改 `ExtractValue` 方法,它已经支持所需的源字段。
|
||||||
|
|
||||||
|
### 步骤3:测试验证
|
||||||
|
|
||||||
|
创建或更新测试用例,验证提取功能:
|
||||||
|
|
||||||
|
```vba
|
||||||
|
' 测试用例
|
||||||
|
Dim parser As New clsModelParser
|
||||||
|
Dim extractor As New clsConditionExtractor
|
||||||
|
Dim conditions As Object
|
||||||
|
|
||||||
|
' 解析型号
|
||||||
|
parser.Parse "YTHN-100.A0.532.M203.M17.Y3|BP-095.2312.M17.P3"
|
||||||
|
|
||||||
|
' 提取条件
|
||||||
|
Set conditions = extractor.ExtractConditions(parser)
|
||||||
|
|
||||||
|
' 验证结果
|
||||||
|
Debug.Print "安装形式(azxs): " & conditions("azxs") ' 应输出: A0
|
||||||
|
Debug.Print "表壳形式(bkxs): " & conditions("bkxs") ' 应输出: 532
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、影响范围评估
|
||||||
|
|
||||||
|
### 5.1 影响的文件
|
||||||
|
|
||||||
|
| 文件 | 修改类型 | 说明 |
|
||||||
|
|------|----------|------|
|
||||||
|
| `VBA/ClassModules/clsConditionExtractor.cls` | 修改 | 添加2条提取规则 |
|
||||||
|
|
||||||
|
### 5.2 兼容性
|
||||||
|
|
||||||
|
- ✅ **向后兼容**:新增规则不影响现有条件(gclj、jycz、lcfw)的提取
|
||||||
|
- ✅ **现有测试**:无需修改现有测试用例
|
||||||
|
- ⚠️ **物料匹配**:如需在物料选择条件中使用这些新条件,需在Excel表格的"选择条件"列中使用新变量名(azxs、bkxs)
|
||||||
|
|
||||||
|
### 5.3 使用场景
|
||||||
|
|
||||||
|
新增的条件可以在以下场景中使用:
|
||||||
|
|
||||||
|
1. **物料选择条件表达式**
|
||||||
|
```
|
||||||
|
azxs=A0 AND bkxs=532
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **BOM完整性检查**
|
||||||
|
- 检查是否缺少特定安装形式的物料
|
||||||
|
- 检查是否缺少特定表壳形式的物料
|
||||||
|
|
||||||
|
3. **数据分析和统计**
|
||||||
|
- 按安装形式统计物料需求
|
||||||
|
- 按表壳形式统计物料需求
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、可选增强功能(未来扩展)
|
||||||
|
|
||||||
|
### 6.1 表壳形式细分提取
|
||||||
|
|
||||||
|
如果需要将表壳形式细分为表壳类型和罩壳类型,可以添加:
|
||||||
|
|
||||||
|
```vba
|
||||||
|
' 表壳类型(前2位)
|
||||||
|
m_ExtractionRules("bklx") = Array("ShellForm", "GetFirstTwoDigits")
|
||||||
|
|
||||||
|
' 罩壳类型(后1位)
|
||||||
|
m_ExtractionRules("zklx") = Array("ShellForm", "GetLastDigit")
|
||||||
|
```
|
||||||
|
|
||||||
|
同时需要在 `ExtractValue` 方法中添加新的提取方法:
|
||||||
|
- `GetFirstTwoDigits`:取前2位字符
|
||||||
|
- `GetLastDigit`:已存在,直接复用
|
||||||
|
|
||||||
|
### 6.2 条件验证
|
||||||
|
|
||||||
|
可以添加条件值验证功能,确保提取的值在合法范围内:
|
||||||
|
|
||||||
|
```vba
|
||||||
|
Public Function ValidateCondition(varName As String, value As String) As Boolean
|
||||||
|
' 验证安装形式是否合法
|
||||||
|
' 验证表壳形式是否合法
|
||||||
|
End Function
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、实施清单
|
||||||
|
|
||||||
|
- [ ] 1. 备份 `clsConditionExtractor.cls` 文件
|
||||||
|
- [ ] 2. 在 `InitializeRules()` 方法中添加 azxs 提取规则
|
||||||
|
- [ ] 3. 在 `InitializeRules()` 方法中添加 bkxs 提取规则
|
||||||
|
- [ ] 4. 更新代码注释,说明新增规则的用途
|
||||||
|
- [ ] 5. 创建测试用例验证提取功能
|
||||||
|
- [ ] 6. 运行现有测试套件,确保无回归问题
|
||||||
|
- [ ] 7. 更新相关文档(如需要)
|
||||||
|
- [ ] 8. 提交代码变更
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、预期结果
|
||||||
|
|
||||||
|
实现完成后,系统将能够:
|
||||||
|
|
||||||
|
1. ✅ 从产品型号中自动提取安装形式代码(azxs)
|
||||||
|
2. ✅ 从产品型号中自动提取表壳形式代码(bkxs)
|
||||||
|
3. ✅ 在物料选择条件表达式中使用这两个新变量
|
||||||
|
4. ✅ 保持向后兼容,不影响现有功能
|
||||||
|
|
||||||
|
**测试验证示例**:
|
||||||
|
|
||||||
|
输入型号:`YTHN-100.A0.532.M203.M17.Y3`
|
||||||
|
|
||||||
|
提取结果:
|
||||||
|
- `gclj` = M20
|
||||||
|
- `jycz` = 3
|
||||||
|
- `lcfw` = M17
|
||||||
|
- **`azxs` = A0** ⬅️ 新增
|
||||||
|
- **`bkxs` = 532** ⬅️ 新增
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、备注
|
||||||
|
|
||||||
|
1. 本计划遵循现有代码的设计模式和命名规范
|
||||||
|
2. 所有新增代码将包含中文注释,便于维护
|
||||||
|
3. 修改完成后将更新 VBA 模块元数据(如需要)
|
||||||
|
4. 建议在Excel开发环境中先进行手动测试,确保功能正常
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**文档版本**: 1.0
|
||||||
|
**创建日期**: 2026-01-27
|
||||||
|
**作者**: Claude Code
|
||||||
Reference in New Issue
Block a user