LMES 生成码流程处理逻辑
本文档详细描述了生成码环节(GenerateCodeActivity
)的处理逻辑,该环节负责根据一系列规则和输入生成唯一条码。
流程图
详细处理步骤
1. 启动与功能检查
当流程流转到“生成码”环节时,系统首先会从流程的上下文数据(ProcessModel
)中,判断 GenerateCode
功能是否处于**启用(Enable)**状态。
- 是:如果功能启用,流程继续执行。
- 否:如果功能禁用,系统会在流程变量中记录“生成码功能已禁用”的描述,并直接结束当前环节。
2. 读取上下文信息
系统会从流程数据(Flow.DataItems
)中读取以下关键信息,用于后续的条码生成:
- 产品识别码 (
GenerateCodeProductVariableValue
):用于唯一标识产品的代码,优先级最高。 - 客户名称 (
GenerateCodeCustomerNameVariableValue
):用于在某些场景下筛选特定的条码规则。 - 条码规则ID (
GenerateCodeBarcodeRule
):直接指定使用的条码生成规则的GUID。
3. 确定条码生成规则
系统会根据读取到的信息,按照以下优先级顺序来确定使用哪一个条码生成规则(barcodeId
):
3.1. 依据“产品识别码”
如果提供了产品识别码:
- 系统使用该识别码查询对应的产品型号(
ProductModel
)。 - 如果找不到产品型号,流程将记录错误信息并终止。
- 如果找到产品,系统将结合工段ID、产品ID,查询最匹配的条码生成规则。
3.2. 依据“条码规则ID” (隐藏功能,二开扩展)
如果未提供产品识别码,但直接指定了条码规则ID:
- 系统会尝试将该字符串解析为
GUID
。 - 如果解析失败,流程将记录错误信息并终止。
- 如果解析成功,则直接使用此
GUID
作为条码生成规则ID。
3.3. 依据当前上下文(工单/配方)
如果以上信息均未提供:
- 系统会调用
GetCurrentProduct
方法,尝试从当应用的配方(Formula) 、**工单(Order )或点检任务(Inspection Task)**中推断出当前正在生产的产品。 - 如果无法确定当前产品,流程将记录错误信息并终止。
- 如果成功获取到产品信息,系统将使用该产品ID和工序ID和可选的客户名称,来查询匹配的条码生成规则。
4. 生成条码
在成功确定条码生成规则ID(barcodeId
)后:
- 如果
barcodeId
为空(即未找到任何适用规则),流程将记录错误信息并终止。 - 系统调用条码服务(
IBarcodeProvider.GenerateAsync
),传入barcodeId
、工序ID和工位ID,请求生成新的条码。
5. 下发生成结果
条码生成服务的返回结果将决定流程的最终状态:
-
成功:
- 生成的条码字符串会被写入流程数据
GenerateCodeBarcodeVariableValue
中。 - 系统会记录一条包含生成码内容的成功日志。
- 生成的条码字符串会被写入流程数据
-
失败:
- 失败原因和相关的错误信息会被写入流程数据
GenerateCodeDescriptionValue
中。 - 系统会记录一条警告日志,包含详细的失败原因。
- 失败原因和相关的错误信息会被写入流程数据
6. 结束
完成结果下发后,GenerateCodeActivity
环节的逻辑执行完毕,流程将根据设计继续流转到下一个步骤。后续的信号复位、结果清空等操作由流程中的其他环节负责。