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; + } } }