From f5203715d15d5dbe2e0eff85db626cffff3ba5ff Mon Sep 17 00:00:00 2001
From: XingCheng3 <1773407212@qq.com>
Date: Fri, 29 May 2026 17:23:08 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E7=89=A9=E6=96=99=E6=89=AB=E7=A0=81?=
=?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=8B=86=E5=88=866=E6=AE=B5=E5=B9=B6?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=AE=B5=E6=95=B0=E5=BC=82=E5=B8=B8=E6=97=A5?=
=?UTF-8?q?=E5=BF=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../14MisDataFunctionDB/MisDataFun.DB.cs | 24 +++++++---
.../Function1051/OpcServer/MaterialsVerify.cs | 47 ++++++++++++++++++-
.../Function1052/OpcServer/MaterialsVerify.cs | 47 ++++++++++++++++++-
.../Function1053/OpcServer/MaterialsVerify.cs | 47 ++++++++++++++++++-
4 files changed, 156 insertions(+), 9 deletions(-)
diff --git a/Common/09MesDataFunction/MesDataFunction/14MisDataFunctionDB/MisDataFun.DB.cs b/Common/09MesDataFunction/MesDataFunction/14MisDataFunctionDB/MisDataFun.DB.cs
index a57f39a..6047738 100644
--- a/Common/09MesDataFunction/MesDataFunction/14MisDataFunctionDB/MisDataFun.DB.cs
+++ b/Common/09MesDataFunction/MesDataFunction/14MisDataFunctionDB/MisDataFun.DB.cs
@@ -1747,15 +1747,27 @@ namespace MisDataFunDll
}
- public static DataTable XD_MaterialsVerify(string opName, string engineID, string materialsCode, int MaterialsTypeCode)
+ ///
+ /// PLC物料扫码校验(含原始码与解析后的 6 段信息)
+ /// 码格式:采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号
+ ///
+ public static DataTable XD_MaterialsVerify(string opName, string engineID, string materialsCode, int MaterialsTypeCode,
+ string purchaseOrderNo = "", string purchaseLineNo = "", string materialCode = "",
+ string materialBatchNo = "", string materialSerialNo = "", string drawingNo = "")
{
DataTable dt = new DataTable();
string produceName = "XD_物料记录_增加";
- SqlParameter[] thisParms = new SqlParameter[4];
- thisParms[0] = new System.Data.SqlClient.SqlParameter("@工件编号", engineID);
- thisParms[1] = new System.Data.SqlClient.SqlParameter("@物料编码", materialsCode);
- thisParms[2] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
- thisParms[3] = new System.Data.SqlClient.SqlParameter("@物料类型编号", MaterialsTypeCode);
+ SqlParameter[] thisParms = new SqlParameter[10];
+ thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
+ thisParms[1] = new System.Data.SqlClient.SqlParameter("@工件编号", engineID);
+ thisParms[2] = new System.Data.SqlClient.SqlParameter("@物料类型编号", MaterialsTypeCode);
+ thisParms[3] = new System.Data.SqlClient.SqlParameter("@码值", materialsCode ?? "");
+ thisParms[4] = new System.Data.SqlClient.SqlParameter("@采购订单号", purchaseOrderNo ?? "");
+ thisParms[5] = new System.Data.SqlClient.SqlParameter("@采购行号", purchaseLineNo ?? "");
+ thisParms[6] = new System.Data.SqlClient.SqlParameter("@物料代码", materialCode ?? "");
+ thisParms[7] = new System.Data.SqlClient.SqlParameter("@物料批次号", materialBatchNo ?? "");
+ thisParms[8] = new System.Data.SqlClient.SqlParameter("@物料流水号", materialSerialNo ?? "");
+ thisParms[9] = new System.Data.SqlClient.SqlParameter("@图号", drawingNo ?? "");
DataAccess.ExecuteStoredProcedure(produceName, ref thisParms, out dt);
return dt;
}
diff --git a/MisDataFunction/Function1051/OpcServer/MaterialsVerify.cs b/MisDataFunction/Function1051/OpcServer/MaterialsVerify.cs
index 32ee5dd..51130ff 100644
--- a/MisDataFunction/Function1051/OpcServer/MaterialsVerify.cs
+++ b/MisDataFunction/Function1051/OpcServer/MaterialsVerify.cs
@@ -12,6 +12,8 @@ namespace MesServerFunctions
{
///
/// PLC物料扫码校验
+ /// 扫码内容格式:采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号
+ /// 示例:GDD030226032500001|10|123800510000065|20260326|00001|8KA.510.10074
///
///
public void MaterialsVerify(object e)
@@ -35,7 +37,21 @@ namespace MesServerFunctions
int MaterialsTypeCode = Convert.ToInt32(MIS_BASE.ReadPLC(201, OpName));
string MaterialsCode = MIS_BASE.ReadPLC(40, OpName).ToString();
- DataTable dt = MisDataFun.XD_MaterialsVerify(OpName, EngineID, MaterialsCode, MaterialsTypeCode);
+ string purchaseOrderNo = "";
+ string purchaseLineNo = "";
+ string materialCode = "";
+ string materialBatchNo = "";
+ string materialSerialNo = "";
+ string drawingNo = "";
+ int segmentCount = ParseMaterialsCode(MaterialsCode, out purchaseOrderNo, out purchaseLineNo, out materialCode, out materialBatchNo, out materialSerialNo, out drawingNo);
+ if (segmentCount != 6)
+ {
+ string warnMsg = $"【{OpName}】产品:{EngineID} | 物料码:{MaterialsCode} | 物料类型:{MaterialsTypeCode.ToString()} 物料码段数异常({segmentCount}),预期6段(采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号)!";
+ MisDataSaveDate.Helper.ApiLogHelper.SaveMesLog(OpName, "MaterialsVerify " + warnMsg, MisDataSaveDate.Helper.MesLogType.ERROR);
+ }
+
+ DataTable dt = MisDataFun.XD_MaterialsVerify(OpName, EngineID, MaterialsCode, MaterialsTypeCode,
+ purchaseOrderNo, purchaseLineNo, materialCode, materialBatchNo, materialSerialNo, drawingNo);
int result = Convert.ToInt32(dt.Rows[0]["result"]);
if (result == 1)
{
@@ -58,5 +74,34 @@ namespace MesServerFunctions
////ApplicationLog.WriteLog(err, "Function08:EngineTypeGetOver_PLC");
}
}
+
+ ///
+ /// 解析物料扫码内容
+ /// 格式:采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号
+ /// 段数不足时,剩余字段保持为空字符串。
+ ///
+ /// 实际拆分得到的段数
+ private static int ParseMaterialsCode(string code,
+ out string purchaseOrderNo, out string purchaseLineNo, out string materialCode,
+ out string materialBatchNo, out string materialSerialNo, out string drawingNo)
+ {
+ purchaseOrderNo = "";
+ purchaseLineNo = "";
+ materialCode = "";
+ materialBatchNo = "";
+ materialSerialNo = "";
+ drawingNo = "";
+
+ if (string.IsNullOrEmpty(code)) return 0;
+
+ string[] parts = code.Split('|');
+ if (parts.Length > 0) purchaseOrderNo = parts[0].Trim();
+ if (parts.Length > 1) purchaseLineNo = parts[1].Trim();
+ if (parts.Length > 2) materialCode = parts[2].Trim();
+ if (parts.Length > 3) materialBatchNo = parts[3].Trim();
+ if (parts.Length > 4) materialSerialNo = parts[4].Trim();
+ if (parts.Length > 5) drawingNo = parts[5].Trim();
+ return parts.Length;
+ }
}
}
diff --git a/MisDataFunction/Function1052/OpcServer/MaterialsVerify.cs b/MisDataFunction/Function1052/OpcServer/MaterialsVerify.cs
index 32ee5dd..51130ff 100644
--- a/MisDataFunction/Function1052/OpcServer/MaterialsVerify.cs
+++ b/MisDataFunction/Function1052/OpcServer/MaterialsVerify.cs
@@ -12,6 +12,8 @@ namespace MesServerFunctions
{
///
/// PLC物料扫码校验
+ /// 扫码内容格式:采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号
+ /// 示例:GDD030226032500001|10|123800510000065|20260326|00001|8KA.510.10074
///
///
public void MaterialsVerify(object e)
@@ -35,7 +37,21 @@ namespace MesServerFunctions
int MaterialsTypeCode = Convert.ToInt32(MIS_BASE.ReadPLC(201, OpName));
string MaterialsCode = MIS_BASE.ReadPLC(40, OpName).ToString();
- DataTable dt = MisDataFun.XD_MaterialsVerify(OpName, EngineID, MaterialsCode, MaterialsTypeCode);
+ string purchaseOrderNo = "";
+ string purchaseLineNo = "";
+ string materialCode = "";
+ string materialBatchNo = "";
+ string materialSerialNo = "";
+ string drawingNo = "";
+ int segmentCount = ParseMaterialsCode(MaterialsCode, out purchaseOrderNo, out purchaseLineNo, out materialCode, out materialBatchNo, out materialSerialNo, out drawingNo);
+ if (segmentCount != 6)
+ {
+ string warnMsg = $"【{OpName}】产品:{EngineID} | 物料码:{MaterialsCode} | 物料类型:{MaterialsTypeCode.ToString()} 物料码段数异常({segmentCount}),预期6段(采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号)!";
+ MisDataSaveDate.Helper.ApiLogHelper.SaveMesLog(OpName, "MaterialsVerify " + warnMsg, MisDataSaveDate.Helper.MesLogType.ERROR);
+ }
+
+ DataTable dt = MisDataFun.XD_MaterialsVerify(OpName, EngineID, MaterialsCode, MaterialsTypeCode,
+ purchaseOrderNo, purchaseLineNo, materialCode, materialBatchNo, materialSerialNo, drawingNo);
int result = Convert.ToInt32(dt.Rows[0]["result"]);
if (result == 1)
{
@@ -58,5 +74,34 @@ namespace MesServerFunctions
////ApplicationLog.WriteLog(err, "Function08:EngineTypeGetOver_PLC");
}
}
+
+ ///
+ /// 解析物料扫码内容
+ /// 格式:采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号
+ /// 段数不足时,剩余字段保持为空字符串。
+ ///
+ /// 实际拆分得到的段数
+ private static int ParseMaterialsCode(string code,
+ out string purchaseOrderNo, out string purchaseLineNo, out string materialCode,
+ out string materialBatchNo, out string materialSerialNo, out string drawingNo)
+ {
+ purchaseOrderNo = "";
+ purchaseLineNo = "";
+ materialCode = "";
+ materialBatchNo = "";
+ materialSerialNo = "";
+ drawingNo = "";
+
+ if (string.IsNullOrEmpty(code)) return 0;
+
+ string[] parts = code.Split('|');
+ if (parts.Length > 0) purchaseOrderNo = parts[0].Trim();
+ if (parts.Length > 1) purchaseLineNo = parts[1].Trim();
+ if (parts.Length > 2) materialCode = parts[2].Trim();
+ if (parts.Length > 3) materialBatchNo = parts[3].Trim();
+ if (parts.Length > 4) materialSerialNo = parts[4].Trim();
+ if (parts.Length > 5) drawingNo = parts[5].Trim();
+ return parts.Length;
+ }
}
}
diff --git a/MisDataFunction/Function1053/OpcServer/MaterialsVerify.cs b/MisDataFunction/Function1053/OpcServer/MaterialsVerify.cs
index 32ee5dd..51130ff 100644
--- a/MisDataFunction/Function1053/OpcServer/MaterialsVerify.cs
+++ b/MisDataFunction/Function1053/OpcServer/MaterialsVerify.cs
@@ -12,6 +12,8 @@ namespace MesServerFunctions
{
///
/// PLC物料扫码校验
+ /// 扫码内容格式:采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号
+ /// 示例:GDD030226032500001|10|123800510000065|20260326|00001|8KA.510.10074
///
///
public void MaterialsVerify(object e)
@@ -35,7 +37,21 @@ namespace MesServerFunctions
int MaterialsTypeCode = Convert.ToInt32(MIS_BASE.ReadPLC(201, OpName));
string MaterialsCode = MIS_BASE.ReadPLC(40, OpName).ToString();
- DataTable dt = MisDataFun.XD_MaterialsVerify(OpName, EngineID, MaterialsCode, MaterialsTypeCode);
+ string purchaseOrderNo = "";
+ string purchaseLineNo = "";
+ string materialCode = "";
+ string materialBatchNo = "";
+ string materialSerialNo = "";
+ string drawingNo = "";
+ int segmentCount = ParseMaterialsCode(MaterialsCode, out purchaseOrderNo, out purchaseLineNo, out materialCode, out materialBatchNo, out materialSerialNo, out drawingNo);
+ if (segmentCount != 6)
+ {
+ string warnMsg = $"【{OpName}】产品:{EngineID} | 物料码:{MaterialsCode} | 物料类型:{MaterialsTypeCode.ToString()} 物料码段数异常({segmentCount}),预期6段(采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号)!";
+ MisDataSaveDate.Helper.ApiLogHelper.SaveMesLog(OpName, "MaterialsVerify " + warnMsg, MisDataSaveDate.Helper.MesLogType.ERROR);
+ }
+
+ DataTable dt = MisDataFun.XD_MaterialsVerify(OpName, EngineID, MaterialsCode, MaterialsTypeCode,
+ purchaseOrderNo, purchaseLineNo, materialCode, materialBatchNo, materialSerialNo, drawingNo);
int result = Convert.ToInt32(dt.Rows[0]["result"]);
if (result == 1)
{
@@ -58,5 +74,34 @@ namespace MesServerFunctions
////ApplicationLog.WriteLog(err, "Function08:EngineTypeGetOver_PLC");
}
}
+
+ ///
+ /// 解析物料扫码内容
+ /// 格式:采购订单号|采购行号|物料代码|物料批次号|物料流水号|图号
+ /// 段数不足时,剩余字段保持为空字符串。
+ ///
+ /// 实际拆分得到的段数
+ private static int ParseMaterialsCode(string code,
+ out string purchaseOrderNo, out string purchaseLineNo, out string materialCode,
+ out string materialBatchNo, out string materialSerialNo, out string drawingNo)
+ {
+ purchaseOrderNo = "";
+ purchaseLineNo = "";
+ materialCode = "";
+ materialBatchNo = "";
+ materialSerialNo = "";
+ drawingNo = "";
+
+ if (string.IsNullOrEmpty(code)) return 0;
+
+ string[] parts = code.Split('|');
+ if (parts.Length > 0) purchaseOrderNo = parts[0].Trim();
+ if (parts.Length > 1) purchaseLineNo = parts[1].Trim();
+ if (parts.Length > 2) materialCode = parts[2].Trim();
+ if (parts.Length > 3) materialBatchNo = parts[3].Trim();
+ if (parts.Length > 4) materialSerialNo = parts[4].Trim();
+ if (parts.Length > 5) drawingNo = parts[5].Trim();
+ return parts.Length;
+ }
}
}