| LB_SmartVision/CSV/CsvRecordProductData.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/Forms/CreateProductForm.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/LB_SmartVision.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/LB_SqlCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/SQL/DatabaseRecordProductDataHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/SQL/LB_Collections.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/SQL/LB_SqlCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/SQL/RecordProductData.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVision/SQL/RecordProductDataRepository.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_SmartVisionCommon/UserData.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
LB_SmartVision/CSV/CsvRecordProductData.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ using LB_SmartVisionCommon; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LB_SmartVision.CSV { /// <summary> /// ç¨äºCSVæ å°çç±» /// </summary> public class CsvRecordProductData { /// <summary> /// SKU ç©æå·æäº§ååç§° /// </summary> public string ProductName { get; set; } /// <summary> /// 产åSNå· /// </summary> public string ProductSN { get; set; } /// <summary> /// æ£æµä½ä¸å /// </summary> public string InspectionOperator { get; set; } /// <summary> /// NGç±»å /// </summary> public string NGType { get; set; } /// <summary> /// NGå¤§å° /// </summary> public string NGSize { get; set; } /// <summary> /// æ£æµæ¶é´ /// </summary> public string DetectionTime { get; set; } /// <summary> /// æ£æµç¸æº /// </summary> public string CameraInspection { get; set; } } } LB_SmartVision/Forms/CreateProductForm.cs
@@ -1,4 +1,5 @@  using LB_SmartVision.SQL; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using ReaLTaiizor.Forms; LB_SmartVision/LB_SmartVision.csproj
@@ -14,6 +14,7 @@ </ItemGroup> <ItemGroup> <ProjectReference Include="..\LB_SmartVisionCommon\LB_SmartVisionCommon.csproj" /> <ProjectReference Include="..\LB_SmartVisionLoginUI\LB_SmartVisionLoginUI.csproj" /> <ProjectReference Include="..\LB_VisionControl\LB_VisionControl.csproj" /> <ProjectReference Include="..\LB_VisionFlowNode\LB_VisionFlowNode.csproj" /> LB_SmartVision/LB_SqlCommand.cs
ÎļþÒÑɾ³ý LB_SmartVision/SQL/DatabaseRecordProductDataHelper.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,72 @@ using LB_SmartVisionCommon; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LB_SmartVision.SQL { public class DatabaseRecordProductDataHelper { private static string connectionString = "Server=localhost;Database=product_db;Uid=root;Pwd=root;"; private static object databaseRecordProductDataHelperObject = new object(); public static MySqlConnection GetConnection() { return new MySqlConnection(connectionString); } // åå»ºæ°æ®åºå表 public static void InitializeDatabase() { lock (databaseRecordProductDataHelperObject) { try { using (var connection = GetConnection()) { connection.Open(); // åå»ºæ°æ®åº string createDbSql = @"CREATE DATABASE IF NOT EXISTS product_db;"; using (var cmd = new MySqlCommand(createDbSql, connection)) { cmd.ExecuteNonQuery(); } // ä½¿ç¨æ°æ®åº string useDbSql = @"USE product_db;"; using (var cmd = new MySqlCommand(useDbSql, connection)) { cmd.ExecuteNonQuery(); } // å建表ï¼å¢å ç´¢å¼ä»¥æé«æ¥è¯¢æ§è½ï¼ string createTableSql = @" CREATE TABLE IF NOT EXISTS RecordProductData ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(255) NOT NULL, ProductSN VARCHAR(255) NOT NULL, InspectionOperator VARCHAR(255), NGType VARCHAR(255), NGSize VARCHAR(255), DetectionTime VARCHAR(255)), CameraInspection VARCHAR(255), CreatedDate DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_created_date (CreatedDate), INDEX idx_product_number (ProductSN), INDEX idx_operator (InspectionOperator) );"; using (var cmd = new MySqlCommand(createTableSql, connection)) { cmd.ExecuteNonQuery(); AsyncLogHelper.Info("æ°æ®åºå表å建æåï¼"); } } } catch (Exception ex) { AsyncLogHelper.Error($"æ°æ®åºåå§å失败: {ex.Message}"); throw; } } } } } LB_SmartVision/SQL/LB_Collections.cs
ÎļþÃû´Ó LB_SmartVision/LB_Collections.cs ÐÞ¸Ä @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; namespace LB_SmartVision namespace LB_SmartVision.SQL { [Serializable] public class LB_Collections<T> : ICollection<CollectionItem<T>> LB_SmartVision/SQL/LB_SqlCommand.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,552 @@ using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LB_SmartVision.SQL { public class LB_SqlCommand { /// <summary> /// è¿æ¥åç¬¦ä¸²ï¼æå® MySQL å®ä¾åæ°æ®åº(å®é ä¼è¯»ådll.configä¸ç弿¥æ´æ°è¿æ¥å符串) /// </summary> public static string ConnectionString = "Server=localhost;Database=product_mes;Uid=root;Pwd=root;"; /// <summary> /// 夿æå®åæ¯å¦åå¨æå¼ /// </summary> /// <param name="tableName">表å</param> /// <param name="columnName">æå®åå</param> /// <param name="value">æå®å¼</param> /// <param name="connectionString"></param> /// <returns>å¼åå¨True</returns> public static bool IsExist(string tableName, string columnName, string value, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL æ¥è¯¢è¯å¥ï¼æ£æ¥æå®åæ¯å¦å卿å®çå¼ string sqlQuery = string.Format("SELECT CASE WHEN EXISTS (SELECT 1 FROM `{0}` " + "WHERE `{1}` = @Value) THEN 1 ELSE 0 END", tableName, columnName); // å建 MySQL è¿æ¥ using (MySqlConnection connection = new MySqlConnection(connectionString)) { // å建 MySQL å½ä»¤ using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // æ·»å åæ°ï¼é²æ¢ SQL æ³¨å ¥ command.Parameters.AddWithValue("@Value", value); // æå¼è¿æ¥ connection.Open(); // æ§è¡æ¥è¯¢å¹¶è·åç»æ int result = Convert.ToInt32(command.ExecuteScalar()); // 妿 result == 1ï¼è¡¨ç¤ºåå¨è¯¥å¼ï¼å¦åä¸åå¨ return result == 1; } } } /// <summary> /// 夿æå®è¡¨æ¯å¦åå¨ /// </summary> /// <param name="tableName">表å</param> /// <param name="connectionString"></param> /// <returns>å¼åå¨True</returns> public static bool IsExistTable(string tableName, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL æ¥è¯¢è¯å¥ï¼æ£æ¥è¡¨æ¯å¦åå¨ string sqlQuery = $@" SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = @TableName"; // å建 MySQL è¿æ¥ using (MySqlConnection connection = new MySqlConnection(connectionString)) { // å建 MySQL å½ä»¤ using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // æ·»å 表ååæ° command.Parameters.AddWithValue("@TableName", tableName); // æå¼è¿æ¥ connection.Open(); // æ§è¡æ¥è¯¢å¹¶è·åç»æ int result = Convert.ToInt32(command.ExecuteScalar()); // 妿 result > 0ï¼è¡¨ç¤ºåå¨è¯¥è¡¨ï¼å¦åä¸åå¨ return result > 0; } } } /// <summary> /// éå½å表 /// </summary> /// <param name="oldTableName"></param> /// <param name="newTableName"></param> /// <param name="connectionString"></param> /// <returns></returns> public static bool RenameTable(string oldTableName, string newTableName, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; if (!IsExistTable(oldTableName)) return false; // MySQL éå½åè¡¨è¯æ³ string sqlQuery = $"ALTER TABLE `{oldTableName}` RENAME TO `{newTableName}`"; // å建 MySQL è¿æ¥ using (MySqlConnection connection = new MySqlConnection(connectionString)) { // å建 MySQL å½ä»¤ using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // æå¼è¿æ¥ connection.Open(); try { // æ§è¡æ¥è¯¢å¹¶è·åç»æ command.ExecuteNonQuery(); return true; } catch { return false; } } } } /// <summary> /// å 餿å®è¡¨ /// </summary> /// <param name="tableName">表å</param> /// <param name="connectionString"></param> /// <returns>å 餿åTrue</returns> public static bool DeleteTable(string tableName, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL å é¤è¡¨è¯å¥ string sqlQuery = $"DROP TABLE IF EXISTS `{tableName}`"; // å建 MySQL è¿æ¥ using (MySqlConnection connection = new MySqlConnection(connectionString)) { // å建 MySQL å½ä»¤ using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // æå¼è¿æ¥ connection.Open(); try { // æ§è¡å é¤æä½ command.ExecuteNonQuery(); return true; } catch { return false; } } } } /// <summary> /// è·åæéçå¼éè¿ç´¢å¼æå®åçæå®å¼å®ä½å°æå¨è¡çæå®å /// </summary> /// <param name="tableName">表å</param> /// <param name="indexName">æå®åå</param> /// <param name="indexValue">æå®åå¼</param> /// <param name="columnName">æéå¼çåå</param> /// <param name="connectionString"></param> /// <returns>æéåå¼</returns> public static string FindValueFromIndexName(string tableName, string indexName, string indexValue, string columnName, string connectionString = "") { try { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL æ¥è¯¢è¯å¥ string sqlQuery = $"SELECT `{columnName}` FROM `{tableName}` WHERE `{indexName}` = @IndexValue"; string resultValue = string.Empty; // è¿æ¥æ°æ®åºå¹¶æ§è¡æ¥è¯¢ using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // æ·»å 忰以鲿¢ SQL æ³¨å ¥ command.Parameters.AddWithValue("@IndexValue", indexValue); // æå¼è¿æ¥ connection.Open(); // æ§è¡æ¥è¯¢å¹¶è·åç»æ var result = command.ExecuteScalar(); if (result != null) { resultValue = result.ToString(); } } } return resultValue; } catch { return string.Empty; } } /// <summary> /// å 餿å®è¡éè¿ç´¢å¼æå®åçæå®å¼ /// </summary> /// <param name="tableName">表å</param> /// <param name="indexName">æå®åå</param> /// <param name="indexValue">æå®åå¼</param> /// <param name="connectionString"></param> /// <returns>å 餿åTrue</returns> public static bool DeleteRowFromIndexName(string tableName, string indexName, string indexValue, string connectionString = "") { try { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); // å 餿å®è¡ string deleteQuery = string.Format("DELETE FROM `{0}` WHERE `{1}` = @indexValue", tableName, indexName); using (MySqlCommand cmd = new MySqlCommand(deleteQuery, conn)) { cmd.Parameters.AddWithValue("@indexValue", indexValue); cmd.ExecuteNonQuery(); } // MySQL 䏿´æ°è¡å·çåæ³ï¼å设indexNameæ¯èªå¢åï¼ string updateQuery = string.Format(@" SET @row_number = 0; UPDATE `{0}` SET `{1}` = @row_number := @row_number + 1 ORDER BY `{1}`;", tableName, indexName); using (MySqlCommand cmd = new MySqlCommand(updateQuery, conn)) { cmd.ExecuteNonQuery(); } return true; } } catch { return false; } } /// <summary> /// äº¤æ¢æå®è¡çææå¼éè¿ç´¢å¼æå®åçæå®å¼ /// </summary> /// <param name="tableName">表å</param> /// <param name="swapName">åå</param> /// <param name="swapValue1">交æ¢çåå¼</param> /// <param name="swapValue2">被交æ¢çåå¼</param> /// <param name="connectionString"></param> /// <returns>äº¤æ¢æåTrue</returns> public static bool SwapRowFromIndexName(string tableName, string swapName, string swapValue1, string swapValue2, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); // å¼å§äºå¡ MySqlTransaction transaction = conn.BeginTransaction(); try { // MySQL 交æ¢è¡å¼çåæ³ string swapQuery = string.Format(@" UPDATE `{0}` SET `{1}` = CASE WHEN `{1}` = @SwapValue1 THEN @SwapTempValue WHEN `{1}` = @SwapValue2 THEN @SwapValue1 WHEN `{1}` = @SwapTempValue THEN @SwapValue2 END WHERE `{1}` IN (@SwapValue1, @SwapValue2, @SwapTempValue);", tableName, swapName); using (MySqlCommand cmd = new MySqlCommand(swapQuery, conn, transaction)) { // æ·»å åæ° cmd.Parameters.AddWithValue("@SwapValue1", swapValue1); cmd.Parameters.AddWithValue("@SwapValue2", swapValue2); cmd.Parameters.AddWithValue("@SwapTempValue", Guid.NewGuid().ToString()); // æ§è¡æ¥è¯¢ cmd.ExecuteNonQuery(); } // æäº¤äºå¡ transaction.Commit(); return true; } catch (Exception ex) { Debug.WriteLine("交æ¢å¤±è´¥,åå æ¯:" + ex.Message.ToString()); // åºç°å¼å¸¸æ¶åæ»äºå¡ transaction.Rollback(); return false; } } } /// <summary> /// æ´æ°æå®åçå¼éè¿ç´¢å¼æå®åçæå®å¼ /// </summary> /// <param name="tableName"></param> /// <param name="oriValue"></param> /// <param name="newValue"></param> /// <param name="columnName"></param> /// <param name="connectionString"></param> /// <returns></returns> public static bool UpdateValueFromIndexName(string tableName, string oriValue, string newValue, string columnName, string connectionString = "") { // ä¿®æ£åæ¹æ³åæ¼åé误 Updata -> Update if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL æ´æ°è¯å¥ string sqlQuery = string.Format("UPDATE `{0}` SET `{1}` = @NewValue WHERE `{1}` = @OriValue", tableName, columnName); // è¿æ¥æ°æ®åºå¹¶æ§è¡æ¥è¯¢ using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // åæ°åæ¥è¯¢ï¼é²æ¢ SQL æ³¨å ¥ command.Parameters.AddWithValue("@OriValue", oriValue); // è¦æ¿æ¢çåå§å¼ command.Parameters.AddWithValue("@NewValue", newValue); // æ¿æ¢åçæ°å¼ // æå¼è¿æ¥ connection.Open(); // æ§è¡æ´æ°æä½ int rowsAffected = command.ExecuteNonQuery(); return rowsAffected > 0; } } } /// <summary> /// æ£æ¥æ°æ®åºæ¯å¦åå¨ /// </summary> /// <param name="connectionString"></param> /// <param name="databaseName"></param> /// <returns></returns> public static bool DatabaseExists(string connectionString, string databaseName) { string query = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = @databaseName"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { connection.Open(); using (MySqlCommand command = new MySqlCommand(query, connection)) { command.Parameters.AddWithValue("@databaseName", databaseName); var result = command.ExecuteScalar(); return result != null; } } } /// <summary> /// åå»ºæ°æ®åº /// </summary> /// <param name="connectionString"></param> /// <param name="databaseName"></param> /// <returns></returns> public static bool CreateDatabase(string connectionString, string databaseName) { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; try { string createQuery = $"CREATE DATABASE IF NOT EXISTS `{databaseName}` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { connection.Open(); using (MySqlCommand command = new MySqlCommand(createQuery, connection)) { command.ExecuteNonQuery(); } } return true; } catch { return false; } } /// <summary> /// å 餿°æ®åº /// </summary> /// <param name="databaseName"></param> /// <param name="connectionString"></param> /// <returns></returns> public static bool DeleteDatabase(string databaseName, string connectionString) { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL å 餿°æ®åºè¯å¥ string dropDatabaseQuery = $"DROP DATABASE IF EXISTS `{databaseName}`"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { // æå¼æ°æ®åºè¿æ¥ connection.Open(); // å建 MySqlCommand 对象 using (MySqlCommand cmd = new MySqlCommand(dropDatabaseQuery, connection)) { // æ§è¡å 餿°æ®åºæä½ cmd.ExecuteNonQuery(); Debug.WriteLine("Database dropped successfully."); return true; } } catch (Exception ex) { Debug.WriteLine("Error: " + ex.Message); return false; } } } /// <summary> /// å¤å¶è¡¨ç»æåæ°æ® /// </summary> /// <param name="connectionString"></param> /// <param name="sourceDatabase"></param> /// <param name="targetDatabase"></param> /// <returns></returns> public static bool CopyDatabaseData(string connectionString, string sourceDatabase, string targetDatabase) { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; try { // å åå»ºç®æ æ°æ®åºï¼å¦æä¸åå¨ï¼ CreateDatabase(connectionString, targetDatabase); using (var connection = new MySqlConnection(connectionString)) { connection.Open(); // è·åæºæ°æ®åºä¸ææè¡¨çå表 string getTablesQuery = $"SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = @sourceDb"; using (var cmd = new MySqlCommand(getTablesQuery, connection)) { cmd.Parameters.AddWithValue("@sourceDb", sourceDatabase); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { string tableName = reader.GetString(0); Debug.WriteLine($"å¤å¶è¡¨: {tableName}"); // å ³éreaderæè½æ§è¡åç»æä½ reader.Close(); // å¤å¶è¡¨ç»æåæ°æ®ï¼MySQL ç®ååæ³ï¼ string copyTableQuery = $"CREATE TABLE `{targetDatabase}`.`{tableName}` LIKE `{sourceDatabase}`.`{tableName}`; " + $"INSERT INTO `{targetDatabase}`.`{tableName}` SELECT * FROM `{sourceDatabase}`.`{tableName}`;"; using (var cmdCopy = new MySqlCommand(copyTableQuery, connection)) { cmdCopy.ExecuteNonQuery(); } // éæ°æå¼readerç»§ç»è¯»åä¸ä¸ä¸ªè¡¨ reader.NextResult(); } } } } return true; } catch (Exception ex) { Debug.WriteLine($"å¤å¶å¤±è´¥: {ex.Message}"); return false; } } /// <summary> /// è·åç¨æ·æ°æ®åºå表 /// </summary> /// <returns></returns> public static List<string> GetUserDatabases() { List<string> databases = new List<string>(); string connectionString = "Server=localhost;Database=user_pt;Uid=root;Pwd=root;"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); string query = @" SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')"; using (MySqlCommand command = new MySqlCommand(query, connection)) using (MySqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { databases.Add(reader["SCHEMA_NAME"]?.ToString()); } } } catch (MySqlException ex) { Debug.WriteLine($"æ°æ®åºæ¥è¯¢å¤±è´¥: {ex.Message}"); } } return databases; } } } LB_SmartVision/SQL/RecordProductData.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,75 @@ using LB_SmartVisionCommon; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LB_SmartVision.SQL { /// <summary> /// è®°å½çäº§æ°æ® /// </summary> [JsonObject(MemberSerialization.OptOut)] [TypeConverter(typeof(PropertySorter))] public class RecordProductData { /// <summary> /// SKU ç©æå·æäº§ååç§° /// </summary> [Category("RecordProductData"), PropertyOrder(0)] [DisplayName("SKU")] [Browsable(true)] public string ProductName { get; set; } /// <summary> /// 产åSNå· /// </summary> [Category("RecordProductData"), PropertyOrder(1)] [DisplayName("SN")] [Browsable(true)] public string ProductSN { get; set; } /// <summary> /// æ£æµä½ä¸å /// </summary> [Category("RecordProductData"), PropertyOrder(2)] [DisplayName("æ£æµä½ä¸å")] [Browsable(true)] public string InspectionOperator { get; set; } /// <summary> /// NGç±»å /// </summary> [Category("RecordProductData"), PropertyOrder(3)] [DisplayName("NGç±»å")] [Browsable(true)] public string NGType { get; set; } /// <summary> /// NGå¤§å° /// </summary> [Category("RecordProductData"), PropertyOrder(4)] [DisplayName("NG大å°")] [Browsable(true)] public string NGSize { get; set; } /// <summary> /// æ£æµæ¶é´ /// </summary> [Category("RecordProductData"), PropertyOrder(5)] [DisplayName("æ£æµæ¶é´")] [Browsable(true)] public string DetectionTime { get; set; } /// <summary> /// æ£æµç¸æº /// </summary> [Category("RecordProductData"), PropertyOrder(6)] [DisplayName("æ£æµç¸æº")] [Browsable(true)] public string CameraInspection { get; set; } } } LB_SmartVision/SQL/RecordProductDataRepository.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,419 @@ using LB_SmartVisionCommon; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LB_SmartVision.SQL { /// <summary> /// æ°æ®è®¿é®å± /// </summary> public class RecordProductDataRepository { private static object recordProductDataRepositoryObject = new object(); /// <summary> /// æ·»å æ°æ® /// </summary> /// <param name="record">çäº§æ°æ®è®°å½</param> /// <returns>æ¯å¦æ·»å æå</returns> public static bool AddRecord(RecordProductData record) { Stopwatch stopwatch = Stopwatch.StartNew(); lock (recordProductDataRepositoryObject) { stopwatch.Start(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = @" INSERT INTO RecordProductData (ProductName, ProductSN, InspectionOperator, NGType, NGSize,DetectionTime,CameraInspection) VALUES (@ProductName, @ProductSN, @InspectionOperator, @NGType, @NGSize, @DetectionTime, @CameraInspection)"; using (var cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@ProductName", record.ProductName); cmd.Parameters.AddWithValue("@ProductSN", record.ProductSN); cmd.Parameters.AddWithValue("@InspectionOperator", record.InspectionOperator); cmd.Parameters.AddWithValue("@NGType", record.NGType); cmd.Parameters.AddWithValue("@NGSize", record.NGSize); cmd.Parameters.AddWithValue("@DetectionTime", record.DetectionTime); cmd.Parameters.AddWithValue("@CameraInspection", record.CameraInspection); int rowsAffected = cmd.ExecuteNonQuery(); stopwatch.Stop(); Task.Factory.StartNew(() => { LogHelper.Info($"æ·»å ä¿¡æ¯èæ¶: {stopwatch.ElapsedMilliseconds}ms"); }); return rowsAffected > 0; } } } catch (Exception ex) { AsyncLogHelper.Error($"æ·»å è®°å½å¤±è´¥: {ex.Message}"); return false; } } } /// <summary> /// æ¥è¯¢æææ°æ® /// </summary> /// <returns>List<RecordProductData></returns> public static List<RecordProductData> GetAllRecords() { lock (recordProductDataRepositoryObject) { var records = new List<RecordProductData>(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = "SELECT * FROM RecordProductData ORDER BY CreatedDate DESC"; using (var cmd = new MySqlCommand(sql, connection)) using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { records.Add(MapReaderToRecord(reader)); } } } } catch (Exception ex) { AsyncLogHelper.Error($"æ¥è¯¢è®°å½å¤±è´¥: {ex.Message}"); } return records; } } /// <summary> /// æ ¹æ®äº§åç¼å·æ¥è¯¢ /// </summary> /// <param name="productSN">产åç¼å·</param> /// <returns>List<RecordProductData></returns> public static List<RecordProductData> GetRecordsByProductNumber(string productSN) { lock (recordProductDataRepositoryObject) { var records = new List<RecordProductData>(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = "SELECT * FROM RecordProductData WHERE productSN = @productSN ORDER BY CreatedDate DESC"; using (var cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@productSN", productSN); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { records.Add(MapReaderToRecord(reader)); } } } } } catch (Exception ex) { AsyncLogHelper.Error($"æ ¹æ®äº§åç¼å·æ¥è¯¢å¤±è´¥: {ex.Message}"); } return records; } } /// <summary> /// æ ¹æ®æä½è æ¥è¯¢ /// </summary> /// <param name="inspectionOperator">æä½è </param> /// <returns>List<RecordProductData></returns> public static List<RecordProductData> GetRecordsByOperator(string inspectionOperator) { lock (recordProductDataRepositoryObject) { var records = new List<RecordProductData>(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = "SELECT * FROM RecordProductData WHERE InspectionOperator = @InspectionOperator ORDER BY CreatedDate DESC"; using (var cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@InspectionOperator", inspectionOperator); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { records.Add(MapReaderToRecord(reader)); } } } } } catch (Exception ex) { AsyncLogHelper.Error($"æ ¹æ®æä½è æ¥è¯¢å¤±è´¥: {ex.Message}"); } return records; } } /// <summary> /// æ ¹æ®æ¶é´æ®µæ¥è¯¢ - 使ç¨CreatedDate /// </summary> /// <param name="startTime">èµ·å§æ¶é´</param> /// <param name="endTime">ç»ææ¶é´</param> /// <returns>List<RecordProductData></returns> public static List<RecordProductData> GetRecordsByTimeRange(DateTime startTime, DateTime endTime) { lock (recordProductDataRepositoryObject) { var records = new List<RecordProductData>(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = @" SELECT * FROM RecordProductData WHERE CreatedDate BETWEEN @StartTime AND @EndTime ORDER BY CreatedDate DESC"; using (var cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@StartTime", startTime); cmd.Parameters.AddWithValue("@EndTime", endTime.AddDays(1).AddSeconds(-1)); // å å«ç»ææ¥æçå ¨å¤© using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { records.Add(MapReaderToRecord(reader)); } } } } } catch (Exception ex) { AsyncLogHelper.Error($"æ ¹æ®æ¶é´æ®µæ¥è¯¢å¤±è´¥: {ex.Message}"); } return records; } } /// <summary> /// ç»åæ¥è¯¢ï¼äº§åç¼å· + æ¶é´æ®µ /// </summary> /// <param name="productSN">产åç¼å·</param> /// <param name="startTime">èµ·å§æ¶é´</param> /// <param name="endTime">ç»ææ¶é´</param> /// <returns>List<RecordProductData></returns> public static List<RecordProductData> GetRecordsByProductAndTimeRange(string productSN, DateTime startTime, DateTime endTime) { lock (recordProductDataRepositoryObject) { var records = new List<RecordProductData>(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = @" SELECT * FROM RecordProductData WHERE productSN = @productSN AND CreatedDate BETWEEN @StartTime AND @EndTime ORDER BY CreatedDate DESC"; using (var cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@productSN", productSN); cmd.Parameters.AddWithValue("@StartTime", startTime); cmd.Parameters.AddWithValue("@EndTime", endTime.AddDays(1).AddSeconds(-1)); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { records.Add(MapReaderToRecord(reader)); } } } } } catch (Exception ex) { AsyncLogHelper.Error($"ç»åæ¥è¯¢å¤±è´¥: {ex.Message}"); } return records; } } /// <summary> /// ç»åæ¥è¯¢ï¼æä½è + æ¶é´æ®µ /// </summary> /// <param name="inspectionOperator">æä½è </param> /// <param name="startTime">èµ·å§æ¶é´</param> /// <param name="endTime">ç»ææ¶é´</param> /// <returns>List<RecordProductData></returns> public static List<RecordProductData> GetRecordsByOperatorAndTimeRange(string inspectionOperator, DateTime startTime, DateTime endTime) { lock (recordProductDataRepositoryObject) { var records = new List<RecordProductData>(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = @" SELECT * FROM RecordProductData WHERE InspectionOperator = @InspectionOperator AND CreatedDate BETWEEN @StartTime AND @EndTime ORDER BY CreatedDate DESC"; using (var cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@InspectionOperator", inspectionOperator); cmd.Parameters.AddWithValue("@StartTime", startTime); cmd.Parameters.AddWithValue("@EndTime", endTime.AddDays(1).AddSeconds(-1)); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { records.Add(MapReaderToRecord(reader)); } } } } } catch (Exception ex) { AsyncLogHelper.Error($"ç»åæ¥è¯¢å¤±è´¥: {ex.Message}"); } return records; } } /// <summary> /// é«çº§ç»åæ¥è¯¢ï¼æ¯æå¤ä¸ªæ¡ä»¶ /// </summary> /// <param name="productSN">产åç¼å·</param> /// <param name="operatorName">æä½è </param> /// <param name="startTime">èµ·å§æ¶é´</param> /// <param name="endTime">ç»ææ¶é´</param> /// <returns>List<RecordProductData></returns> public static List<RecordProductData> GetRecordsByMultipleConditions( string productSN = null, string operatorName = null, DateTime? startTime = null, DateTime? endTime = null) { lock (recordProductDataRepositoryObject) { var records = new List<RecordProductData>(); try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); var sql = "SELECT * FROM RecordProductData WHERE 1=1"; var parameters = new List<MySqlParameter>(); if (!string.IsNullOrEmpty(productSN)) { sql += " AND ProductSN = @ProductSN"; parameters.Add(new MySqlParameter("@ProductSN", productSN)); } if (!string.IsNullOrEmpty(operatorName)) { sql += " AND MeasurementOperator = @InspectionOperator"; parameters.Add(new MySqlParameter("@InspectionOperator", operatorName)); } if (startTime.HasValue) { sql += " AND CreatedDate >= @StartTime"; parameters.Add(new MySqlParameter("@StartTime", startTime.Value)); } if (endTime.HasValue) { sql += " AND CreatedDate <= @EndTime"; parameters.Add(new MySqlParameter("@EndTime", endTime.Value.AddDays(1).AddSeconds(-1))); } sql += " ORDER BY CreatedDate DESC"; using (var cmd = new MySqlCommand(sql, connection)) { foreach (var param in parameters) { cmd.Parameters.Add(param); } using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { records.Add(MapReaderToRecord(reader)); } } } } } catch (Exception ex) { AsyncLogHelper.Error($"é«çº§ç»åæ¥è¯¢å¤±è´¥: {ex.Message}"); } return records; } } /// <summary> /// ç»è®¡æ¥è¯¢ï¼è·åæä¸ªæ¶é´æ®µå çè®°å½æ°é /// </summary> /// <param name="startTime">èµ·å§æ¶é´</param> /// <param name="endTime">ç»ææ¶é´</param> /// <returns>è®°å½æ°é</returns> public static int GetRecordCountByTimeRange(DateTime startTime, DateTime endTime) { lock (recordProductDataRepositoryObject) { try { using (var connection = DatabaseRecordProductDataHelper.GetConnection()) { connection.Open(); string sql = @" SELECT COUNT(*) FROM RecordProductData WHERE CreatedDate BETWEEN @StartTime AND @EndTime"; using (var cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@StartTime", startTime); cmd.Parameters.AddWithValue("@EndTime", endTime.AddDays(1).AddSeconds(-1)); return Convert.ToInt32(cmd.ExecuteScalar()); } } } catch (Exception ex) { AsyncLogHelper.Error($"ç»è®¡æ¥è¯¢å¤±è´¥: {ex.Message}"); return 0; } } } /// <summary> /// è¾ å©æ¹æ³ï¼å°æ°æ®è¯»å卿 å°å°RecordProductData对象 /// </summary> /// <param name="reader">MySqlDataReader reader</param> /// <returns>RecordProductData</returns> private static RecordProductData MapReaderToRecord(MySqlDataReader reader) { return new RecordProductData { ProductName = reader["ProductName"]?.ToString() ?? string.Empty, ProductSN = reader["ProductSN"]?.ToString() ?? string.Empty, InspectionOperator = reader["InspectionOperator"]?.ToString() ?? string.Empty, NGType = reader["NGType"]?.ToString() ?? string.Empty, NGSize = reader["NGSize"]?.ToString() ?? string.Empty, DetectionTime = reader["DetectionTime"]?.ToString() ?? string.Empty, CameraInspection = reader["CameraInspection"]?.ToString() ?? string.Empty, }; } } } LB_SmartVisionCommon/UserData.cs
@@ -33,12 +33,14 @@ /// åå·¥è´¦å· /// </summary> [Category("RecordUserData"), PropertyOrder(3)] [DisplayName("è´¦å·")] [DisplayName("å工账å·")] [Browsable(true)] public string EmployeeAccount { get; set; } /// <summary> /// åå·¥å¯ç /// </summary> [Category("RecordUserData"), PropertyOrder(4)] [DisplayName("åå·¥å¯ç ")] [Browsable(false)] public string EmployeePassword { get; set; } /// <summary> LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs
@@ -32,6 +32,7 @@ short slot; short.TryParse(CommunicatorConnections["端å£"].ToString(), out slot); S7.Net.CpuType cpuType = (CpuType)CommunicatorConnections["åå·"]; variable = CommunicatorConnections["åéå°å"].ToString(); plc = new Plc(cpuType, IP, 0, slot); plc.Open(); return true; @@ -60,8 +61,19 @@ { try { plc.Write(variable, message); return true; if (plc!=null) { if (string.IsNullOrEmpty(variable)) { variable = CommunicatorConnections["åéå°å"].ToString(); } plc.Write(variable, message); return true; } else { return false; } } catch {