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
{
///
/// 数据访问层
///
public class RecordProductDataRepository
{
private static object recordProductDataRepositoryObject = new object();
///
/// 添加数据
///
/// 生产数据记录
/// 是否添加成功
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;
}
}
}
///
/// 查询所有数据
///
/// List
public static List GetAllRecords()
{
lock (recordProductDataRepositoryObject)
{
var records = new List();
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;
}
}
///
/// 根据产品编号查询
///
/// 产品编号
/// List
public static List GetRecordsByProductNumber(string productSN)
{
lock (recordProductDataRepositoryObject)
{
var records = new List();
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;
}
}
///
/// 根据操作者查询
///
/// 操作者
/// List
public static List GetRecordsByOperator(string inspectionOperator)
{
lock (recordProductDataRepositoryObject)
{
var records = new List();
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;
}
}
///
/// 根据时间段查询 - 使用CreatedDate
///
/// 起始时间
/// 结束时间
/// List
public static List GetRecordsByTimeRange(DateTime startTime, DateTime endTime)
{
lock (recordProductDataRepositoryObject)
{
var records = new List();
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;
}
}
///
/// 组合查询:产品编号 + 时间段
///
/// 产品编号
/// 起始时间
/// 结束时间
/// List
public static List GetRecordsByProductAndTimeRange(string productSN, DateTime startTime, DateTime endTime)
{
lock (recordProductDataRepositoryObject)
{
var records = new List();
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;
}
}
///
/// 组合查询:操作者 + 时间段
///
/// 操作者
/// 起始时间
/// 结束时间
/// List
public static List GetRecordsByOperatorAndTimeRange(string inspectionOperator, DateTime startTime, DateTime endTime)
{
lock (recordProductDataRepositoryObject)
{
var records = new List();
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;
}
}
///
/// 高级组合查询:支持多个条件
///
/// 产品编号
/// 操作者
/// 起始时间
/// 结束时间
/// List
public static List GetRecordsByMultipleConditions(
string productSN = null,
string operatorName = null,
DateTime? startTime = null,
DateTime? endTime = null)
{
lock (recordProductDataRepositoryObject)
{
var records = new List();
try
{
using (var connection = DatabaseRecordProductDataHelper.GetConnection())
{
connection.Open();
var sql = "SELECT * FROM RecordProductData WHERE 1=1";
var parameters = new List();
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;
}
}
///
/// 统计查询:获取某个时间段内的记录数量
///
/// 起始时间
/// 结束时间
/// 记录数量
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;
}
}
}
///
/// 辅助方法:将数据读取器映射到RecordProductData对象
///
/// MySqlDataReader reader
/// RecordProductData
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,
};
}
}
}