MaterialUsageRecordActivity - 物料使用记录
概述
MaterialUsageRecordActivity 是一个 MES 专用的物料使用记录节点,用于在产品出站时记录物料使用情况并执行物料扣减。该节点基于追溯数据中的物料参数,自动扣减对应的物料库存。
基本信息
| 属性 | 值 |
|---|---|
| 显示名称 | 物料使用记录 |
| 类名 | MaterialUsageRecordActivity |
| 命名空间 | CMS.Plugin.MesSuite.Activitys |
| 基类 | ActionActivity |
| 分类 | 工序步骤 |
| 排序 | 29 |
| 发布 | 是 |
配置说明
配置属性
| 属性名 | 显示名称 | 类型 | 默认 值 | 说明 |
|---|---|---|---|---|
| ExecuteImmediately | 是否立即执行 | bool | false | 是否同步执行扣减,false 时异步执行 |
输入变量
| 变量名 | 常量 | 类型 | 说明 |
|---|---|---|---|
| ApplicationData | FlowItemCollection.ApplicationData | ProcessModel | 工艺模型 |
| ProductModel | FlowItemCollection.ProductModel | AssociationProductModel | 产品型号 |
| TraceModel | FlowItemCollection.TraceModel | TraceModel | 追溯模型 |
| ParameterCollectData | FlowItemCollection.ParameterCollectData | IReadOnlyDictionary | 参数采集数据 |
业务逻辑
执行流程
┌─────────────────────────────────────────────────────────────┐
│ MaterialUsageRecordActivity │
├─────────────────────────────────────────────────────────────┤
│ ExecuteActionAsync - 执行阶段 │
│ ├─ 获取工艺模型、产品模型、追溯模型 │
│ ├─ 验证必要数据是否存在 │
│ └─ 执行物料扣减 │
│ ├─ ExecuteImmediately = true → 同步执行 │
│ └─ ExecuteImmediately = false → 异步执行 │
├─────────────────────────────────────────────────────────────┤
│ DecreaseMaterialAsync - 扣减处理 │
│ ├─ 遍历工艺配置的物料参数 │
│ ├─ 从追溯数据获取物料条码 │
│ ├─ 检查是否有独立的扣减流程 │
│ │ └─ 有触发信号配置 → 跳过(由扣减流程处理) │
│ ├─ 获取使用量(设备模式时从参数读取) │
│ └─ 调用物料服务执行扣减 │
└─────────────────────────────────────────────────────────────┘
扣减逻辑
-
遍历物料参数
- 从工艺配置的
MaterialParameters获取物料列表 - 跳过名称为空的物料
- 从工艺配置的
-
获取物料条码
- 从追溯模型的
MaterialParams中获取对应物料的条码
- 从追溯模型的
-
检查扣减流程
- 如果工序配置了独立的物料扣减流程(Type = 10008)
- 且物料配置了触发信号,则跳过(由
MaterialDeductionActivity处理)
-
获取使用量
- 设备模式:从参数采集数据中读取使用量变量
- 其他模式:使用系统默认用量
-
执行扣减
- 调用
IMaterialProvider.DeductionAsync执行扣减
- 调用
执行模式
| 模式 | 说明 |
|---|---|
| 同步执行 | ExecuteImmediately = true,等待扣减完成后继续流程 |
| 异步执行 | ExecuteImmediately = false,后台执行扣减,不阻塞流程 |
使用示例
基本配置
{
"Name": "物料使用记录",
"Type": "MaterialUsageRecordActivity",
"ExecuteImmediately": false
}
同步执行配置
{
"Name": "物料使用记录",
"Type": "MaterialUsageRecordActivity",
"ExecuteImmediately": true
}
典型出站流程
┌──────────────────┐
│OutboundInitialize│
│ 出站初始化 │
└────────┬─────────┘
│
▼
┌──────────────────┐
│QualificationJudgment│
│ 质量判定 │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ParameterCollect │
│ 参数采集 │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 追溯记录保存 │
└────────┬─────────┘
│
▼
┌──────────────────┐
│MaterialUsageRecordActivity│ ← 物料使用记录
│ 物料使用记录 │
└──────────────────┘
与物料扣减流程的配合
┌─────────────────────────────────────────────────────────────┐
│ 物料扣减方式选择 │
├─────────────────────────────────────────────────────────────┤
│ 方式一:实时扣减(MaterialDeductionActivity) │
│ ├─ 配置扣减触发信号 │
│ ├─ 实时监听信号变化 │
│ └─ 立即执行扣减 │
├─────────────────────────────────────────────────────────────┤
│ 方式二:出站扣减(MaterialUsageRecordActivity) │
│ ├─ 不配置扣减触发信号 │
│ ├─ 在出站时统一扣减 │
│ └─ 基于追溯数据扣减 │
└─────────────────────────────────────────────────────────────┘
错误处理
| 错误场景 | 处理方式 |
|---|---|
| 工艺模型为空 | 不执行扣减 |
| 产品模型为空 | 不执行扣减 |
| 追溯模型为空 | 不执行扣减 |
| 扣减异常 | 记录错误日志,不中断流程 |
依赖服务
| 服务接口 | 说明 |
|---|---|
| IMaterialProvider | 物料服务,执行扣减操作 |
注意事项
- 数据依赖:需要工艺模型、产品模型和追溯模型都存在才会执行
- 执行时机:通常在追溯记录保存之后执行
- 扣减冲突:如果物料配置了触发信号,会跳过(避免重复扣减)
- 异步执行:默认异步执行,不会阻塞出站流程
- 错误处理:扣减异常不会中断流程,只记录日志
- 追溯数据:物料条码从追溯数据中获取
相关节点
- ActionActivity - 动作节点基类
- MaterialDeductionActivity - 物料扣减节点
- MaterialDetectionActivity - 物料检测节点
- ParameterCollectActivity - 参数采集节点
- OutboundInitializeActivity - 出站初始化节点
最后更新时间: 2025-11-28